C程序设计与项目实战-全套课件_第1页
C程序设计与项目实战-全套课件_第2页
C程序设计与项目实战-全套课件_第3页
C程序设计与项目实战-全套课件_第4页
C程序设计与项目实战-全套课件_第5页
已阅读5页,还剩682页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章

认知.NET与C#1.了解.NET和C#.NET发展历史1998年12月,微软公司提出.NET计划后,开始开发.NET平台上的面向对象程序的设计语言。2000年2月,微软公司正式将这种语言命名为“C#”,读成“C

Sharp”。一种说法是:音乐中“#”字符是升调记号,表达了微软公司希望C#在C的基础上更上一层楼的美好愿望。2002年2月,微软公司发布了.NET平台“Visual

Studio.NET

2002”和

C#语言的第1个正式版本——C#1.0。.NET与C#的发展历史Visual

Studio版本.NET

Framework版本Visual

Studio

2002.NET

Framework

1.0Visual

Studio

2003.NET

Framework

1.1Visual

Studio

2005.NET

Framework

2.0Visual

Studio

2008.NET

Framework

3.5Visual

Studio

2010.NET

Framework

4.0Visual

Studio

2012.NET

Framework

4.5.NET平台VC++.NetC#VB.NetVJ#….Net

Framework类库(FCL)公共语言运行时(CLR)操作系统硬件C#如果抛开一切非技术方面的因素,C#无疑是这个星球上有史以来最好的编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果:简单面向对象与Web紧密结合基于.NET

Framework.NET支持的语言C#VB.NETVC++ADAEiffelCOBOLSmallTalk支持当前二十多种主流编程语言PythonJScript.NETVisual

Studio允许用户使用一种语言(如C#)开发一部分应用程序,然后使用另一种语言(如VB.NET)开发应用程序的其他部分。Q:.Net怎样实现这种机制?A:秘密在于.NET

Framework

(.NET框架)..NET

Framework

(.NET框架)简介.NET

Framework是用于代码编译和执行的集成托管环境。它管理着应用程序运行的方方面面。所有的.NET应用程序都在.NETFramework上执行,受.NET

Framework的管理。因此,.NET应用程序并不直接和操作系统打交道,而是通过集成托管环境进行操作。.NET

Framework也提供了丰富的类库,供.NET应用程序进行调用。.NET应用程序中所调用的类库来自于.NET

Framework,编译后的程序运行在.NET

Framework之上。.NET

Framework两个主要组件:公共语言运行时(CLR)统一的类库集.NET

Framework架构图Web

FormsWin

FormsADO.NET和XML类基本框架类.Net

Framework.Net

Framework类库Web

ServicesASP.NETCLS(通用语言规范)CLRCTS(公共类型系统)公共语言运行时(

C

o

m

m

o

n

L

a

n

g

u

a

g

e

R

u

n

tim

e

C

L

R

)是所有.NET应用程序运行时环境,是所有.NET应用程序都使用的编程基础。CLR也可以看作一个在执行时管理代码的代理,管理代码是CLR的基本原则,能够被管理的代码成为托管代码,反之称为非托管代码。CLR包含CLS、CTS两个部分CLS(公共语言规范):用于解决不同语言的数据类型不同的问题如C#中的整型是int,而VB.NET中是Integer,通过CTS,把它们两个编译成通用的类型Int

32。所有的.NET语言共享这一类型系统,在它们之间实现无缝互操作。CTS(通用类型系统)CLS是一种最低的语言的标准,制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。凡是遵守这个标准的语言在.NET框架下都可以实现互相调用。例如,在C#中命名是区分大小写的,而VB.NET不区分大小写,这样CLS就规定,编译后的中间代码必须除了大小写之外有其他的不同之处。.NET的编译技术MSIL+元数据机器代码代码被执行CLR第一次编译第二次编译语言编译器.NET源代码特定的语言编译器将程序代码编译成MS中间语言(MS

IntermediateLanguage,MSIL).NET程序被编译两次,第一次编译很慢,而第二次编译较快!JIT(Just-In-Time)编译器将代码编译成机器语言公共语言运行时CLR.NET源代码MSIL+元数据机器代码代码被执行管理内存易于设计组件和应用程序,其对象可以跨语言互动跨语言集成(特别是跨语言继承)一次编译,就可运行在支持运行库的任何CPU和操作系统上语言编译器名词Microsoft中间语言(MSIL):MS为.NET专门开发的所有语言的中间语言,由一组特定的指令组成,这些指令指明如何执行代码。JIT(Just-In-Time)编译器:主要工作是将普通MSIL代码转换为可以直接由CPU执行的计算机代码2.欢迎使用V

is

u

a

l

S

tu

d

io步骤2.1准备安工作装Visual

Studio安装Visual

Studio准备工作在安装前需要准备:硬件1Visual

Studio安装程序3运行环境(操作系统)2准备工作(续)(1)硬件:处理器:1.6

GHz或更快的处理器系统内存:推荐1GB或更大内存硬盘:10

GB

(NTFS)可用硬盘显示器:分辨率大于或等于1024

x

768准备工作(续)(2)运行环境(操作系统)Windows

7

SP1

(x86和x64)Windows

8

(x86和x64)Windows

Server

2008

R2(x64)Windows

Server

2012

(x64)准备工作(续)(3)Visual

Studio安装程序Visual

Studio

2012

Professional

Edition多媒体演示:安装Visual

Studio2.2

V

is

u

a

l

S

tu

d

io的开发环境使用起始页打开起始页:设置起始页:“工具”-“选项”-启动-“显示空环境”主窗口标题栏菜单栏工具栏代码编辑窗口解决方案资源管理器窗口智能感知在代码编写过程中,Visual

Studio提供了智能感知(IntelliSense)功能,它是由集成开发环境提供的一种即时自动提示功能。使用帮助查看帮助添加和移除帮助内容3.创建控制台(命令行)的应用程序任务:任务描述:在命令窗口中输出一行文字“Hello

World”。解决方案:使用输出字符串的方法,从命令窗口输出制定字符串。Console.

Write

Line()“

Hello

World”创建C#控制台应用程序多媒体演示:创建C#控制台应用程序程序代码执行程序

“调试”“开始执行(不调试)”命名空间Main()方法程序的入口从下面的代码开始:static

void

Main(

string

args[]

)名字为Main()的静态方法就是程序的入口。当程序执行时,就直接调用这个方法。方法的执行从左括号“{”开始,到右括号“}”结束。在C#程序中,程序的执行总是从Main()方法开始的。一个C#程序中不允许出现两个或两个以上的Main()方法,而且C#中Main()方法必须包含在一个类中。注意:C#语言对大小写是敏感的。控制台输入输出输出:S

y

s

te

m.C

o

n

s

o

le.W

rite

L

in

e(字符串);S

y

s

te

m.C

o

n

s

o

le.W

rite(字符串);us

in

g

S

y

s

te

m

;Console.Write

Line(字符串);输入:S

y

s

te

m.C

o

n

s

o

le.R

e

a

d

L

in

e();//读取一行字符S

y

s

te

m.C

o

n

s

o

le.R

e

a

d();//读取一个字符us

in

g

S

y

s

te

m

;Console.

Read

Line();输入输出示例u

s

i

n

g

S

y

s

t

e

m

;u

s

i

n

g

S

y

s

t

e

m

.

C

o

l

l

e

c

t

i

o

n

s

.

G

e

n

e

r

i

c

;u

s

i

n

g

S

y

s

t

e

m

.

L

i

n

q

;u

s

i

n

g

S

y

s

t

e

m

.

T

e

x

t

;u

s

i

n

g

S

y

s

t

e

m

.

T

h

r

e

a

d

i

n

g

.

T

a

s

k

s

;n

a

m

e

s

p

a

c

e

C

o

n

s

o

l

e

I

O{c

l

a

s

s

P

r

o

g

r

a

m{s

t

a

t

i

c

v

o

i

d

M

a

i

n

(

s

t

r

i

n

g

[

]

a

r

g

s

){C

o

n

s

o

l

e.W

r

i

t

e("请输入:");s

t

r

i

n

g

s

=

C

o

n

s

o

l

e

.

R

e

a

d

L

i

n

e

(

)

;C

o

n

s

o

l

e.W

r

i

t

e

L

i

n

e("你输入的内容为:"+s);}}}C#推荐的代码格式缩进缩进可以用来指示语句所处的代码块区分大小写编译器区分大写字符和小写字符空白区一般情况下,编译器将忽略空白区注释通过在应用程序中插入双斜杠(//),可以在双斜杠之后书写不跨行的注释Warning!养成良好的程序设计风格!4.创建Windows窗体应用程序如何用Visual

Studio来进行一些简单的开发,比如下面的界面:可视化开发的初步认识编程步骤创建窗体应用程序的4个基本步骤:步骤一:创建用户界面。步骤二:设置属性。步骤三:编写代码。

步骤四:编译、运行。创建Windows窗体应用程序多媒体演示:创建W

in

d

o

w

s窗体应用程序习题(4)填空题C#的每行语句以

结尾。

之后可以书写不跨行的注释。

C#程序的执行总是从

方法开始。类表示控制台应用程序的标准输入流、输出流和错误流。(4)通过拖动

中的控件,使程序员可以以可视化的方式添加控件而无需编写代码。习题(续)2.

程序调试using

System.Collections.Generic;using

System.Text;namespaceSample{class

Program{static

void

Main(string[]

args){console.writeline(“程序调试”)}}}课后任务自己安装一次Visual

Studio,了解Visual

Studio的编程环境在计算机上实现“Hello

World”的程序,能完成从“新建项目”到“查看程序运行结果”的全过程。第2章

数据运算本章工作任务:1:标识符与关键字2:使用变量和常量3:认知基本数据类型4:数据计算5:类型转换本章学习目标:声明并使用变量了解C#的主要数据类型理解值类型使用表达式进行数学运算掌握不同数据类型的转换方法1:标识符与关键字Q.计算机如何存放数据与程序程序的基本要素(IPO)输入

Input输出

Output处理

Process内存(Memory)2154“Hello”‘A’0x33F800020x33F800010X33f80000内存空间:寄存箱内存地址:寄存箱号码存放内容:寄存的东西Q.计算机如何存放数据与程序……代码区常量区变量区……存放程序的二进制代码存放程序中的所有常量,程序结束后由OS释放存放程序中的变量,程序结束后由OS释放内存(Memory)为你存在内存中的“东西”取个名字——标识符标识符用来识别程序中的元素(变量、常量、方法、数组、类、属性…)的名称在编辑器中通过颜色(黑色)

识别标识符的命名规则必须以字母或下划线(

_)开头。只能由字母、数字和下划线组成。不能与C#中的关键字名称相同。关键字C#自己使用了一些单词、符号,作为专有名词,因此关键字不能再赋予其他意义。在编辑器中通过颜色(蓝色)

识别练习以下标识符中,合法的名称是

。&adwstudent-name_listjx@sumClassIDC#编程●风一格致地—使—用一—种命对名约命定,名能给的那些约阅读定代码的人留下极有价值的直观线索。使用有意义的名称为你自己定义的“东西”取个好名字,用描述性的方式对变量:首字母小写,后面每个单词的首字母大写,区分开名称中每个单词。如:studentName对常量、方法、结构、枚举、命名空间、类、属性:首字母大写,每个单词的首字母大写,区分名称中每个独立的单词。如:MarkAveragetyle推荐阅读——《C#编程风格》C#编程风格(英汉对照)作

者:

(美)鲍德温,韩磊译出版社:人民邮电出版社出版时间:2008-10-1作为你手边的工具书,时常翻一翻2:使用变量与常量变量与常量变量(Variable):内容会发生变化的60546常量RetirementAge变量yearsToRetirementage603228RetirementAgeyearsToRetirementage常量(Constant):内容是固定的计算退休年龄的例子变量变量声明变量使用变量标识符的使用原则:先声明(定义),后使用数据类型变量名;int

hen,

rabbit;int

age,

yearsToRetirement;自定义常量声明常量使用常量标识符的使用原则:先声明(定义),后使用constconstconst数据类型常量表达式;int

RetirementAge

=

60;int

RetirementAge

=

65;常量数值常量:60、1000字符串常量:“Hello”、“请输入姓名”关于:语句语句一条语句就是让计算机执行一个动作的命令每条语句必须以;结尾赋值运算符=含义:将赋值符号右边操作数(或表达式)的值赋给左边的操作数。赋值表达式head

=

20;head

=

head

+

10;系统初始值020

30变量head的数据变化将20赋值给head先计算head+10再将结果赋值给headint

head

;不要将赋值符读成“等号”,它与数学上的“等号”的意义不同了!!<变量>=<表达式>;关于:赋值语句赋值运算符=含义:将赋值符号右边操作数(或表达式)的值赋给左边的操作数。赋值表达式<变量>=<表达式>;head

=

20;head

=

head

+

10;系统初始值020

30变量head的数据变化将20赋值给head先计算head+10再将结果赋值给headint

head

;不要将赋值符读成“等号”,它与数学上的“等号”的意义不同了!!3:认知基本数据类型、运算符、表达式C#数据类型引用类型在内存中不直接存储引用类型的数据,而是存储该数据的地址。引用类型包括:类(class)接口(interface)数组(array)字符串(string

)值类型种类描述值类型简单类型(Simple

types)有符号整数:sbyte,short,int,long无符号整数:byte,ushort,uint,ulongUnicode字符:charIEEE浮点数:float,double十进制数:decimal布尔值:bool枚举类型(Enum

type)enum

E

{...}结构类型(Struct

type)struct

S

{...}整数类型整数类型在计算机中的取值范围描述位数数据类型取值范围有符号整数8sbyte–128

~

12716short–32

768

~

3276732int–2

147

483

648

~

2

147

483

64764long–9

223

372

036

854

775

808

~9

223

372

036

854

775

807无符号整数8byte0~25516ushort0~65

53532uint0~4

294

967

29564ulong0~18

446

744

073

709

551

615内存与二进制数001101001bit(位)内存1byte(字节)=8bit对64位的机器而言:1word(字)=8

byte对32位的机器而言:1word(字)=4

byte2154“Hello”‘A’0…01010132

bit(位)十进制数21对应的二进制数为:10101符号1111111描述位数数据类型取值范围有符号整数8sbyte–128~127无符号整数8byte0~25511111111sbytebyte浮点类型浮点类型在计算机中的取值范围描述位数数据类型取值范围单精度浮点型32float1.5

×

10−45

~3.4

×

10387位精度双精度浮点型64double5.0

×

10−324

~1.7

×1030815位精度布尔类型布尔类型表示现实中的“真”或“假”这两个概念,主要用来进行逻辑判断。在C#中,true表示“真”;false表示“假”。描述位数数据类型取值范围布尔类型8booltrue或

false十进制类型十进制类型在计算机中的取值范围描述位数数据类型取值范围十进制类型128decimal1.0

×

10−28

~

7.9

×102829位精度字符类型声明字符变量字符常量:用单引号括起来,且只有单个字符。ch

=

‘a’;字符在计算机内部用ASCII码值(十进制整数)表示。char<变量名>;char

ch

;数据类型后缀类型类别后缀示例/允许的值bool布尔无true或falseint整数无int

x

=

100uint,ulong整数u或Uuint

x

=

1000ulong,ulong长整型l或Llong

x

=

100000Lulong无符号长整型ul,uL,Ul,UL,lu,Lu,lU或LUulong

x

=

4324ulfloat单精度浮点数类型F或ffloat

x

=

34.76Fdouble双精度浮点数类型D或ddouble

x

=

763.7245Ddecimal精确十进制类型M或mdecimal

x

=

1.544Mchar字符无char

x

=

‘a’string字符串无string

=”abc”枚举类型比如,声明一个代表季节的枚举类型的变量:enum

Season{Spring,Summer,Autumn,Winter};Season

currentSeason;枚举类型为一组在逻辑上密不可分的整数提供便于记忆的符号结构类型把一系列相关的变量组织成单一实体的过程,在C#中称为生成结构的过程。这个单一实体的类型就叫做结构类型,每一个变量称为结构的成员。结构类型的变量采用struct来声明,比如可以如下定义通讯录的记录结构:struct

Emploee

{public

string

name;public

string

phone;public

string

address;}Emploee

person;4.C#的运算符和表达式赋值运算符与赋值表达式算术运算符与算术表达式关系运算符与关系表达式逻辑运算符与逻辑表达式位操作符与位操作表达式条件运算符与条件表达式运算符类型运算符分为三类:一元运算符:只使用一个操作数二元运算符:使用两个操作数三元运算符:使用三个操作数算术运算符与算术表达式运算符描

述语句计算结果+加x=5+2;-减x=5-2;*乘x=5*2;/除x=9/2;%取模(求余数)x=9%2;++自增1x=10;x++;-

-自减1x=10;X -

-;运算符描

述语句计算结果+加x=5+2;7-减x=5-2;3*乘x=5*2;10/除x=9/2;4%取模(求余数)x=9%2;1++自增1x=10;x++;11-

-自减1x=10;X -

-;9int

x;//声明变量x为int整型算术运算符与算术表达式float

y;//声明变量y为float类型运算符描

述语句计算结果+加y=5+2;7.0-减y=5-2;3.0*乘y=5*2;10.0/除y=9f/2f;4.5%取模(求余数)y=9f%2f;1.0++自增1y=10;y++;11.0-

-自减1y=10;y -

-;9.0关系运算符与关系表达式运算符描

述运算符描

述=

=等于>大于!

=不等于<

=小于或等于<小于>

=大于或等于逻辑运算符与逻辑表达式运算符描述含义!NOT非取反&&AND与(短路)并且&AND与(非短路)||OR或(短路)或者|OR或(非短路)^XOR异或逻辑运算符与逻辑表达式运算符格式含义!!<表达式><表达式>的值取反&&<表达式1>&&<表达式2>两个条件均为真,整个表达式的值为真,否则为假||<表达式1>||<表达式2>两个条件有一个为真,整个表达式的值为真,否则为假^<表达式1>&&<表达式2>两个条件有一个为真、一个为假时,整个表达式的值为真,否则为假逻辑运算符和布尔型操作数一起组成了逻辑表达式。关于:短路(short-circuit)计算操作x

&&

y:不同的是,如果x为false,则不计算y(因为不论y为何值,与操作的结果都为

false)。这被称作为“短路”计算。操作x

&

y:则x、y两个条件都要先计算,再求“与”同理,x

||

y

(

短路)

x

|

y

(

非短路)int

x=5;int

y

=10;if

(x>y

&++x

<7)Console.WriteLine("非短路&");Console.WriteLine("x

=

{0}",

x);运算符的优先级运算符类型运算符初级运算符x.y,

f(x),

a[x],

x++,

x--,

new,

typeof,

checked,unchecked一元运算符!,

~,

++,

--,

(T)x乘法、除法、取模运算符*,

/,

%增量运算符+,

-移位运算符<<

,

>>关系运算符<

,

>

,

<=

,

>=

,

is,

as等式运算符==

,

!=逻辑“与”运算符&逻辑“异或”运算符^逻辑“或”运算符|条件“与”运算符&&条件“或”运算符||条件运算符?:高低隐式类型转换5.类型显型式转类型换转换Q:为什么需要进行类型转换?A:赋值“=”要求类型匹配,即同类型的数据之间才能进行赋值。如果两个数据的类型不相同,就必须进行类型转换。隐式类型转换(系统自动完成)显式类型转换(程序员编码完成)隐式数值转换从到sbyteshort、int、long、float、double或decimalbyteshort、ushort、int、uint、long、ulong、float、double或decimalshortint、long、float、double或decimalushortint、uint、long、ulong、float、double或decimalintlong、float、double或decimaluintlong、ulong、float、double或decimallongfloat、double或decimalulongfloat、double或decimalcharushort、int、uint、long、ulong、float、double或

decimalflo从at短到长double从字符到数值多媒体演示:隐式数值转换显式数值转换当不存在相应的隐式数值转换时,人为地将一种数值类型转换成另一种数值类型。(类型标识符)表达式代码示例:double

d=3.14;int

i=(int)d;//将双精度类型显式转换为整型计算,i的值是3,不是3.14System.Convert类System.Convert类:string

s

=

123

”;int

i

=

Convert.

To

Int

32

(

s);方法转换可以在值类型和引用类型数据间转换To

String:值类型

字符串int

i=

22

;string

s=

i.

To

String()

;Parse:字符串

值类型 string

s

=

“123

”;int

i

=

Int

32

.

Parse(

s);第3章程序流程控制问题hen

+

rabbit =

head2hen

+ 4rabbit

=

leg解决方案rabbit

=(leg

-

2

×

head)/2按以下条件检查数据有效性,如果数据未通过检查,则提示用户重新输入;如果数据正确,则进行计算。计算:hen

=

head

-

rabbit输出:

输出已知条件和计算结果输入:

提示用户输入已知条件:head、leg的值处理:①

head

≥0;②leg≥0并且leg应为偶数③

4

×head

≥leg

2

×head顺序结构分支结构3.1程循序环结的构三种结构顺序结构顺序结构:指按程序的书写顺序依次执行A段程序、B段程序。AB顺序结构分支结构根据给定的条件进行判断,由判断结果来确定执行哪个分支。C#中控制条件结构的语句包括:if…else…语句switch语句PAB成立不成立选择结构循环结构在条件P成立时,重复执行某程序段。C#中控制循环结构的语句包括:while语句do…while…语句for语句foreach语句PPA成立不成立循环结构成立A不成立3.2如何表示条件举例head>=

0leg>=

0leg

%

2

==

0leg<=

4

*

headleg>=

2

*

head①

head

≥0;②leg≥0并且leg应为偶数③

4

×head

≥leg

2

×head举例①

head

≥0;②leg≥0并且leg应为偶数③

4

×head

≥leg

2

×headhead

>=

0leg

>=

0

&&

leg

%

2

==

0(

leg

<=

4

*

head

)

&&

(

leg

>=

2

*

head)关于运算优先级算术运算关系运算逻辑运算最后

赋值运算先+、-、*、/、%〉、>=、<、<=、==、!=!、&&、||=3.3.1

if语句3.33.条3.2件sw语itc句h语句if语句是最有用的控制结构之一。if…else…语句的语法:if(布尔表达式){执行操作的语句}if语句条件真条件一的语句继续后面的语句前面的语句假if(布尔表达式){执行操作的语句}else{执行操作的语句}if语句条件条件二的语句条件一的语句if语句是最有用的控制结构之一。if…else…语句的语法:前面的语句继续后面的语句真假if语句(续)一个if语句的执行过程是这样的:首先判断布尔表达式。如果布尔表达式的结果在逻辑上是正确的,那么就顺序执行if语句块。如果布尔表达式的结果在逻辑上是错误的,那么就跨过if语句块,此时如果有else关键字,就立刻进入else语句块开始执行。否则就执行if语句块外的下一行代码。示例

完善“

鸡兔同笼”

问题/2hen

=

head

-

rabbit按以下条件检查数据有效性,如果数据未通过检查,则提示用户输入错误;如果数据正确,则进行计算。计算:输入:

提示用户输入已知条件:head、leg的值处理:输出:

输出已知条件和计算结果①

head

≥0;②leg≥0并且leg应为偶数③

4

×head

≥leg

2

×headrabbit

=(leg

-

2

×

head)if

head

<

0)console.WriteLine(“头的个数应大于等于0”);if

leg<

0

)console.WriteLine(“腿的个数应大于等于0”);if

leg%2

!=0

)console.WriteLine(“腿的个数应为偶数”);示例 完善“鸡兔同笼”问题head

>=

0leg

>=

0

&&

leg

%

2

==

0leg

<=

4*head

&&

leg

>=

2*head如果数据未通过检查,则提示用户输入错误;3

-3

-1

更深入地探索

if布尔类型1)关关系于运算条符件与件关系表达式逻辑运算符与逻辑表达式布尔类型布尔类型表示现实中的“真”或“假”这两个概念,主要用来进行逻辑判断。在C#中,true表示“真”;false表示“假”。描述位数数据类型取值范围布尔类型8booltrue或

false关系运算符与关系表达式运算符描

述运算符描

述=

=等于>大于!

=不等于<

=小于或等于<小于>

=大于或等于关系运算符用于创建一个表达式,该表达式用来比较两个对象并返回布尔值。逻辑运算符与逻辑表达式运算符格式含义!!<表达式>取反<表达式>的值取反&&<表达式1>&&<表达式2>并且两个条件均为真,整个表达式的值为真,否则为假||<表达式1>||<表达式2>或者两个条件有一个为真,整个表达式的值为真,否则为假^<表达式1>&&<表达式2>异或两个条件有一个为真、一个为假时,整个表达式的值为真,否则为假运算优先级(

P

37

)算术运算关系运算逻辑运算最后

赋值运算先*、/、%+、—〉、>=、<、<===、!=!&&||=举例①

head

≥0;②leg≥0并且leg应为偶数③

4

×head

≥leg

2

×headhead

>=

0leg

>=

0

&&

leg

%

2

==

0(

leg

<=

4

*

head

)

&&

(

leg

>=

2

*

head)关于If语句的一点变化if语句if(布尔表达式){语句1;…语句n;}else{语句1;…语句n;}if分支、else分支后面均可以有多条语句,但是必须用{}把它们括起来;否则会出现问题。条件语句1前面的语句继续后面的语句真true假false语句n语句2…语句1语句2语句n…if分支后面的语句else分支后面的语句if语句的嵌套if(布尔表达式){语句1;…语句n;else{语句1;…语句n;}因此,建议:用{}if分支、else分支}if分支、else分支后面的语句中也可以是if-else语句,但是需要注意:系统规定else与最近的if配对;的语句括起来,明确它们的关系,避免出现问题。小结i

f

分支、e

l

s

e分支后面均可以有多条语句,称语句组;语句块中的语句也可以是i

f-e

l

s

e语句,称i

f语句嵌套;建议:用{}把语句块括起来;避免出现问题。if语句的嵌套不要超过3层;否则应改写程序。如果if的<条件>包含关系运算、逻辑运算等,用(

)将各表达式括起来。tyle3.3.1

if语句3.33.条3.2件sw语itc句h语句问题的引入根据成绩,输出相应评语.良好优秀不合格合格分数0-5960-6970-8990-100评语不合格合格score良好60优秀score70score90switch语句switch语句用于多分支条件判断,语法格式:switch(控制表达式){casecase常量表达式1:语句组1;[break];常量表达式2:语句组2;[break];......case

常量表达式n:语句组n;[break];[default:语句组n+1;break;]}switch语句的说明控制表达式的数据类型可以是整数类型、字符类型或枚举类型。每个case标签中的常量表达式必须能隐式转换成控制表达式的数据类型。每个case标签的常量表达式的值应各不相等,否则将发生编译错误。

break语句的作用就是中断当前的匹配过程,跳出switch语句。如果一个

case标签后,没有[break],将继续执行下一个case标签后的语句组,直到碰上break或者switch语句结束。

一个switch语句中最多只能有一个default标签。default标签是可选的,总是出现在switch语句块的最后。[]:表示可选项,根据需要来定;switch语句的流程控制示意表达式语句组1常量1语句组2语句组i语句组n常量2常量i常量n……语句组n+1后面的语句defaultbreak;break;break;break;break;switch语句的执行过程程序先计算控制表达式的值,然后在各个case标签中顺序查找。

如果控制表达式的值和某一case标签中的常量表达式的值相等,程序就执行该case标签后的语句组,直到碰上break或者switch语句结束。

如果每个case标签中的常量表达式都不等于switch控制表达式的值,这时:如果存在default标签,则执行default后的语句组;如果不存在

default标签,将转到switch语句的结束点。多媒体演示:switch语句说明:如果几个case标签后的语句组是相同的,可以写成:switch(控制表达式){case常量表达式1:case常量表达式2:case常量表达式3:语句组1;break;......case常量表达式n:语句组n;break;default:语句组n+1;break;}建议:每条case标签后的语句组后加上break,保障执行一条分支。给所有switch语句的结尾添加default标记,并解释默认情况如何或如何不能运行到。switch

(

score/

10

){case

10

:case

9

://..break;…default:Console.Write

Line(分数应在0-100之间,{0}超出范围",score)}tyle

3.4.2

流程跳转

3.43.4循.3环do…语…语wh句ile语句3.4.4

for语句3.4.1

while语句w

h

ile循环while循环的语法格式:while(条件){需要循环执行的语句;}while循环的流程图:条件假真每次循环执行的语句继续后面的语句前面的语句多媒体演示:while循环多重循环——while循环的嵌套多重循环的流程图:条件1继续后面的语句假真前面的语句每次循环执行的语句继续后面的语句假条件2真前面的语句while(条件1){语句1;语句2;while(条件2){语句a;语句b;}}3.4.2

流程跳转3.43.4循.3环do…语…语wh句ile语句3.4.4

for语句3.4.1

while语句c

o

n

tin

u

e和b

re

a

k在循环中的应用continue:开始下一轮循环break:退出循环,不再执行任何循环语句小结:循环的要素用什么来控制重复循环控制变量循环控制变量的初始值循环控制变量的变化方式进入循环、退出循环的条件需要重复执行的部分1

*2

**3

***4

****5

*****6

******行数line=6第i行行号

每行*的个数有j个*j:

1..ii

:1..line解决方案:用户读入line;当(i<=line){//输出每行的*当(j<=i){输出一个*;j++;}i++;输出一个换行;}输出一个换行:console.Write(“

\n

”)从问题分析到解决方案程序:static

void

Main(string[]

args){int

i,

j;Console.WriteLine("请输入行数:");int

line=Convert.ToInt32(Console.ReadLine());i

=

1;while

(

i

<=

line){ j

=

1;while

(

j

<=

i

){Console.Write("*");j++;}Console.WriteLine("");i++;}从解决方案到程序细化解决方案:用户读入行数line;i=1;当(i<=line){//输出每行的*j=1;当(j<=i){输出一个*;j++;}i++;输出一个换行;}3.4.2

流程跳转3.43.4循.3环do…语…语wh句ile语句3.4.4

for语句3.4.1

while语句do…while语句do…while循环的语法结构:do…while循环的流程图do{需要循环执行的语句;}while(条件);后面的语句前面的语句条件每次循环执行的语句假真static

void

Main

(

){int

x

=

0;do{Console.WriteLine(x);x++;}while

(x

<

5);}do…while循环与while循环的区别static

void

Main

(){int

x

=

0;while

(x

<

5){Console.WriteLine(x);x++;}}static

void

Main

(

){int

x

=

5;doConsole.WriteLine(x);do…while循环与while循环的区别static

void

Main

(){int

x

=

5;while

(x

<

5)Console.WriteLine(x);}

x++;}do…{while语句的循环体至少执行{行一次,而且与布尔表达式x+的+;值无关。whiwlhei语le句(x的<5循);环体需要布尔表达}达式的值为true时才会}执行。关于whilesdo…whilesforif

循环控制是有规律的递增(递减),能用表达式实现自动变化建议用for循环,程序结构会较简洁;当然也可以用whiles

do…while。if

循环控制受其他因素影响(比如由用户输入,其他处理结果)建议用while循环;不适合用for循环。if

希望循环体至少执行一次建议用do…while循环;3.4.2

流程跳转3.43.4循.3环do…语…语wh句ile语句3.4.4

for语句3.4.1

while语句for语句for语句的基本格式for(条件初始化;循环条件;条件改变){循环体语句;}for语句的流程图前面的语句条件初始化假循环条件真循环体语句条件改变继续后面的语句多重循环——for循环的嵌套i循环控制继续后面的语句假真前面的语句每次循环执行的语句继续后面的语句假j循环控制真前面的语句for(i循环控制){语句1;语句2;for(j循环控制){语句a;语句b;}}用for语句实现循环static

void

Main(string[]

args){int

i,j;int

line;Console.WriteLine(“请输入行数:”);line

=

Convert.ToInt32(Console.ReadLine());for

(

i

=

1;

i

<=

line;

i++

){for

(

j

=

1;

j

<=

i;

j++

){Console.Write(“*”);}Console.WriteLine(“”);}}3

***4

****5

*****6

******实训3-7,用“*”输出三角形图案 行数line=6行号每行*的个数1

*2

**第i行有j个*j:1..ii

:1..line行数line=6第i行行号

每行*-

的个数4

--*-*-*-*

j:

1..i5

-*-*-*-*-*6

*

*

*

*

*

*i

:1..line

1

-----*2

----*-*3

---*-*-*有k个空格

k:1..line-i解决方案:用户读入line;当(i<=line){输出每行的空格;输出每行的”*”;

i++;输出一个换行;}console.Write(“

\n

”)有j个“*”从问题分析到解决方案static

void

Main(string[]

args){Console.WriteLine("请输入行数:");int

line

=

Convert.ToInt32(Console.ReadLine());for

(int

i

=

1;

i

<=

line;

i++){for

(int

k

=

1;

k

<=

line

-

i;

k++)Console.Write("

");for

(int

j=

1;

j

<=

i;

j++)Console.Write("*

");Console.WriteLine("");}}从解决方案

到程序任务3.5

:输出九九乘法口诀表用for语句实现循环解决方案i

:

1..9第i行有j个算式,j:1..i每个算式需要计算num=i*j输出格式:i*j=num输出换行程序static

void

Main(

string[]

args){int

num;for

(

int

i

=

1

;

i

<=

9

;

i++){for

(

int

j

=

1

;

j

<=

i;

j++){num=i

*

j;

//计算两数相乘后的值

Console.Write("{0}x{1}={2}",i,j,num);}Console.

Write

Line();//换行}for循环循环控制变量一般需要进行初始化操作有效的循环需要能够在适当的时候结束在循环体中要能够改变循环条件的成立因素多媒体演示:con

tin

u

e在fo

r循环中的应用关于循环的执行次数循环次数=内循环次数*外循环次数循环次数=n

*

m语句b;for

(

i=1;i<=n;

i++){语句a;}for

(

i=1;i<=n;

i++

){for

(

j=1;j<=m;

j++){}}执行每一条语句都要耗费时间避免太多重的循环循环次数由i决定循环次数=n关于程序流程控制的建议分析问题,根据需要选择合适的结构(顺序、分支、循环)、合适的语句去编写程序。读、写程序的时候一定要清楚程序的流程可以通过画图、代入数据手工执行程序一切由你掌控。心中装着你的用户。第4章

收集同一类型数据4-1创建和使用数组问题的引入某公司一年各月的营业额如表,求:总营业额;月平均营业额营业额最大、最小的月份月份营业额(万元)1521236……1117124C#提供数组存放一组有相关性的数据序列1.数组的概念多维数组通过一个或多个值进行索引。只包含单个序列的数组称为一维数组[0]

[1]

[2]

[3]

……[N-1][0][0][0][1][0][2][0][3]……[0][N-1][1][0][1][1][1][2][1][3]……[1][N-1][2][0][2][1][2][2][2][3]……[2][N-1][3][0][3][1][3][2][3][3]……[3][N-1]………………………………[M-1][0][M-1][1][M-1][2][M-1][3]……[M-1][N-1]数组的维度一维数组二维数组三维数组yzxa0a1a2…an2.声明数组声明数组变量:一维数组:方括号在中间非数组类型[维度分割符]数组名;int

[

]

array;二维数组:int

[

,

]

table

;三维数组:int

[

,

,]

cube

;2.初始化数组把数组元素初始化,关键字newint[]

array

=

new

int[4]{

9,

3,

7,

2

};数据类型[]数组名称=new数据类型[数组大小]{初始化数值序列};数据类型[]数组名称=new数据类型[]{初始化数值序列};数据类型[]数组名称={初始化数值序列};数组大小必须与初始数值序列的个数一致把数组元素初始化为特定值声明并初始化int[

]

array

1

=

new

int[

5

]

{

1

,

3

,

5

,

7

,

9

};string[

]

week

Days

=

new

string[]

{

"

Sun",

"

Mon",

"

Tue",

"

Wed",

"

Thu",

"

Fri","

Sat"

};int[

]

array

2

=

{

1

,

3

,

5

,

7

,

9

};string[

]

week

Days

2

=

{

"

Sun",

"

Mon",

"

Tue",

"

Wed",

"

Thu",

"

Fri",

"

Sat"

};声明一个数组变量但不将其初始化

in

t[]a

rra

y

3;a

rra

y

3

=

n

e

w

in

t[]

{

1

,

3

,

5

,

7

,

9

};a

rra

y

3

=

{

1

,

3

,

5

,

7

,

9

};/

/

O

K/

/

E

rro

r初始化数组变量根据数组实例中所有元素的类型,编译器把这些元素初始化为一个默认值:内置数值型(例如int)元素初始化为0,枚举型元素也初始化为0(即使它们的枚举值都不是0

)bool型元素初始化为false引用型元素初始化为null3.访问单个数组元素array[2]//访问array数组的第三个元素可以在读取或写入时使用这个表达式。例如:array[2]=6;//赋值

Console.WriteLine(array[2]);//输出a0a1a2a3a4…an数组名[下标]array4.遍历数组元素for语句可以用来遍历所有的数组元素。int[]

array

=

{

9,

3,

7,

2

};for

(int

i

=

0;

i

<

array.Length;

i++){Console.WriteLine(array[i]);}使用foreach语句来遍历数组元素可以使用foreach语句来遍历数组元素,避免数组索引越界。int[]

array

=

{

9,

3,

7,

2

};foreach

(int

a

in

array){Console.WriteLine(a);}必须使用for语句的情况foreach语句总是遍历整个数组。如果只需要遍历数组的特定部分(例如前半部分),或者需要绕过特定元素(例如,只遍历索引为偶数的元素),那么最好是使用for语句foreach语句总是从索引0遍历到索引Length-1。如果需要反向遍历,那么最好是使用for语句如果循环体需要知道元素索引,而不仅仅是元素值,那么必须使用for语句

如果需要修改数组元素,那么必须使用for语句。这是因为foreach语句的循环变量是一个只读变量2.数组类System.Array数组类

System.

ArraySystem.Array类提供了创建、操作、搜索和排序数组的方法,是所有数组的基类。属性描述Length获得一个32位整数,表示Array的所有维数中元素的总数Rank获取Array的秩(维数)Array类常用属性System.Array类方法描述Clear将一定范围内的元素设为0或nullCopy将一个Array的一部分元素复制到另一个Array中CopyTo将当前一维Array的所有元素复制到指定的一维Array中Find搜索与指定谓词定义的条件匹配的元素,然后返回整个

Array中的第一个匹配项。FindAll检索与指定谓词定义的条件匹配的所有元素。FindIndex搜索与指定谓词定义的条件匹配的元素,然后返回Array或其某个部分中第一个匹配项的从零开始的索引。GetLength返回指定维度的长度GetValue返回当前数组中指定元素的值IndexOf返回指定值第一次出现的索引值Reverse反转以为数组或部分数组中元素的顺序Sort对数组元素进行排序System.Array类方法使用ClearArray.Clear(数组名,下标起始位置,元素个数);CopyArray.Copy(源数组,目标数组,元素个数);GetLengthj=arrayA.GetLength(0);//维度下标从0开始GetValuei=(int)arrayA.GetValue(下标);IndexOfi=Array.IndexOf(数组,元素值);ReverseArray.Reverse(数组名);SortArray.Sort(数组名);匿名声明匿名数组:是隐藏数据类型的数组,语法是用var关键字替代具体的数据类型。例如:var

array

=

new[]

{

1

,

3

,

5

,

7

,

9

};匿名变量(P

28

)语法:

var

变量名称

=

变量值

;例如:var

i

=

10

;var

d

=

3

.

14

;•匿名声明必须进行初始化项目4

收集同一类型数据任务1:创建和使用数组任务2:集合处理任务3:字符串处理C#规则:不能改变数组的大小引入:数组(

Array)的局限性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论