第3章 结构化程序设计
第3章 结构化程序设计
![第3章 结构化程序设计](https://img.taocdn.com/s3/m/06a500d0240c844769eaeec1.png)
循环体
是 P2 否
图3.7直到型循环结构示意图 直到型循环结构示意图
3.3 表述算法
• 通常用自然语言、计算机语言(代码)、伪代码[1]、传统流程图、 通常用自然语言、计算机语言(代码)、伪代码 、传统流程图、 )、伪代码 N-S流程图、PAD图等不同的方法来描述算法。 流程图、 图等不同的方法来描述算法。 流程图 图等不同的方法来描述算法 • 在例 中,采用了自然语言来表示算法。自然语言就是人们日常使 在例3.1中 采用了自然语言来表示算法。 用的语言,可以是汉语、英语,或其他语言。 用的语言,可以是汉语、英语,或其他语言。用自然语言表示算法通 俗易懂,但文字冗长,容易出现歧义性。自然语言表示的含义往往不 俗易懂,但文字冗长,容易出现歧义性。 太严格,要根据上下文才能判断其正确含义。此外, 太严格,要根据上下文才能判断其正确含义。此外,用自然语言来描 述包含分支和循环的算法,很不方便。因此, 述包含分支和循环的算法,很不方便。因此,除了那些很简单的问题 以外,一般不用自然语言描述算法。 以外,一般不用自然语言描述算法。 • [1] 伪代码是介于自然语言与计算机语言之间的文字符号。一般借助 伪代码是介于自然语言与计算机语言之间的文字符号。 一种高级语言的控制结构,而中间的操作用自然语言描述。 一种高级语言的控制结构,而中间的操作用自然语言描述。
P1 是 循环体
否
• 图3.6当型循环结构示意图 当型循环结构示意图
(2)直到型循环的执行过程为: )直到型循环的执行过程为: • 先执行循环体一次,然后判断控制循环的条件。 先执行循环体一次,然后判断控制循环的条件。 • 条件 成立,则继续上述循环体,直到条件不成立时,结束循环。 条件P2成立,则继续上述循环体,直到条件不成立时,结束循环。 成立
第3章顺序和选择结构程序设计
![第3章顺序和选择结构程序设计](https://img.taocdn.com/s3/m/8a72b2d3d15abe23482f4df8.png)
3.3 C语句
1.表达式语句
任何一个表达式加上一个分号就可以组成一条
语句。
例如: 表达式 a=b+c*(d+3) a+b+c i++
表达式语句 a=b+c*(d+3); a+b+c; i++;
函数调用也是表达式,在其后加一个分 号,就变成了函数调用语句。
eg:printf函数调用语句和scanf函数调 用语句
-1.0 (x<0) y= 0 (x=0) 1.0 (x>0)
运行结果: -88 y=-1.000000
3.4.4
if语句的嵌套
条件语句的嵌套就是在if语句中包含另一 个if语句。 从语法上讲,if语句中所包含的语句是一 个语句或一个复合语句,这个语句当然也 可以是另一个if语句,即内嵌if语句。
3.1 程序设计概述
程序设计的最终目的是能在计算机上计算出正确的 结果来。 1969年,Dijkstra首先提出了结构程序设计的概念, 强调从程序的结构和风格上来研究和设计程序。 首先应从全局上把握系统所具备的功能是什么,并 将系统划分成几个相对独立的子系统,而每个子系 统只涉及局部的环境和条件。 然后,进入第二步的实现阶段,即进行编码。在第 一阶段,只要知道“做什么”,而在实现阶段,才 考虑“如何做”。
用交换变量值的方法按顺序输出这两个数
交换变量值的思想: 不改变变量名,但变量值可改变的性质。 若a的值大于b的值,则a与b的值不交换;若a的值 小于b的值,则两者互相交换值。从而使得无论何 时,变量a的值始终大于变量b的值。最后,按先a 后b的顺序输出,即可实现按由大到小的顺序输出 的功能。 实现方法: 为了能够进行相互交换,必须引进一个临时变量 t。用以下三个赋值语句可实现交换。 t=a; a=b;b=t; /*t=a,a=b,b=t;*/
C++第三章课后答案
![C++第三章课后答案](https://img.taocdn.com/s3/m/ede9d57176232f60ddccda38376baf1ffc4fe3f0.png)
C++第三章课后答案C++第三章习题及答案1、什么是结构化程序设计?它有什么优缺点?所谓结构化程序设计,是一种自顶而下、逐步求精的模块化程序设计方法。
2、什么是对象?什么是类?简述对象与类之间的关系!对象是系统中用来描述客观事物的一个实体,它是用于构成系统的一个基本单位,而系统可以看作是由一系列相互作用的对象组成。
类定义了同类对象的公共属性和行为,属性用数据结构表示,行为用函数表示!《类=数据结构+对数据进行操作的函数》。
对象和类的关系相当于元素和集合的关系、变量和变量的“数据类型”的关系。
从程序设计的角度来说,类是一种复杂的自定义数据类型,对象是属于这种数据类型的变量。
3、什么是面向对象程序设计?面向对象程序设计方法具有哪些基本特征?请比较面向对象程序设计和面向对象过程程序设计有何异同?4、何谓成员变量?何谓成员函数?C++将对象的属性抽象为数据成员,将对象的行为抽象为成员函数。
5、C++中结构和类之间有何异同?结构在默认情况下的成员是公共的,而类在默认情况下的成员是私有的。
在C++中,结构是特殊的类。
6、在C++中如何定义类?如何实现定义的类?如何利用类申明对象?7、类的成员的访问权限有哪几种?请说明它们分别有什么作用?三种,privte:类的私有成员,只能被本类的成员函数访问或调用。
Public:公有成员,可以被本类的成员或其他类的成员函数(通过对象)访问或调用。
Protected:保护成员,可以被本类的成员函数或派生类的成员函数访问或调用。
8、何谓构造函数?何谓析构函数?请说明它们分别有什么作用?构造函数:不需要用户程序调用,就能在创建对象时由系统自动调用,其作用是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动完成对象的初始化。
析构函数:在对象的生存周期即将结束时由系统自动调用的,其作用是用来在对象被删除前做一些清理工作和数据保存工作。
9、如何定义一个内联成员函数?内联函:内联函数必须是和函数体申明在一起,才有效。
第3章 顺序结构程序设计
![第3章 顺序结构程序设计](https://img.taocdn.com/s3/m/2cb32cbac77da26925c5b07f.png)
3.2 实现顺序结构程序设计的基本语 句
• 赋值语句 语句
赋值语句由赋值表达式加上一个分号构成,一般形式为: 变量=表达式; 变量=表达式; 例如: radius=14.5; i++; x+=2; 赋值语句是将右边表达式的值赋给左边的变量中去。赋值 语句要先对表达式加以计算求得其值,而后再将求得的值赋给 左边的变量中去,因此可以说赋值语句兼有计算功能。
例3.1
例3.2
例3.3
• 输出项表 输出项表中可以有多个输出项,各项之间用逗号分隔。 • 注意事项: ①格式控制中的格式说明符必须按从左到右的顺序,与输出 项表中的每个数据一一对应。 ②除x,e,g外,其他类型转换字符必须用小写字母。 ③类型转换字符紧跟在“%”后面时作为类型转换字符,否则 上一页 将 作为普通字符处理。
• 标准输入输出
C语言本身并不提供输入输出语句,其输入输出操作是由标 准库函数来实现的,在使用标准库函数时,要用预编译命令: 首页 上一页 #include将“stdio.h”文件包括到用户源文件中。
– 格式输出函数—printf()
形式: printf(“格式控制”[,输出项表]); printf( 格式控制” 输出项表] • 格式控制 ①普通字符:即需要原样输出的的字符信息。 ②格式说明符:即用%开头后面跟有一个字母,它规定了输 出项的输出形式。常用格式说明符见表3.1和表3.2。 ③转义字符:以“\”开头的字符序列。常用转义字符见表3.3。
上一页
–单个字符的输入—getchar()函数
形式: c=getchar(); c=getchar(); 执行上面的调用时,变量c将得到用户从键盘输入的一 个字符值,这里的c可以是字符型或整型变量。
第3章 结构化程序设计语句
![第3章 结构化程序设计语句](https://img.taocdn.com/s3/m/345ac92a453610661ed9f478.png)
图3-16 程序运行界面
3.3.2 上机练习二:捉拿肇事司机 上机练习二:
【练习题目】 练习题目】 题目 一辆卡车违反交通规则,撞死行人, 一辆卡车违反交通规则,撞死行人,司机畏罪驾车逃 当时有三个人目击这一车祸的发生, 跑。当时有三个人目击这一车祸的发生,但都没有看清卡 车的牌照号码,只记住牌照号码的部分特征, 车的牌照号码,只记住牌照号码的部分特征,甲记住牌照 号码的前两位数字是相同的, 号码的前两位数字是相同的,乙记住牌照号码的后两位数 字是相同的,丙是一位数学家,他说“ 字是相同的,丙是一位数学家,他说“车牌号码肯定是四 位数,而且恰好是一个整数的平方。 位数,而且恰好是一个整数的平方。”,并且丙已推导出 符合该条件的号码只可能有一个。 符合该条件的号码只可能有一个。根据这些信息来判定车 牌号并捉拿肇事司机。要求编写控制台应用程序。 牌号并捉拿肇事司机。要求编写控制台应用程序。
3.1 循序渐进学理论
3.1.1 if语句 语句
1.用if语句实现单分支选择结构 . 语句实现单分支选择结构 [格式 :(表达式 语句 格式]: 表达式 语句; 表达式) 格式
图3-1 单分支选择结构执行流 程图
编写一个程序实现如下功能: 【 例 3-1】 编写一个程序实现如下功能 : 输入一个成绩, 如果成绩大于等于60 60则输出 输入一个成绩 , 如果成绩大于等于 60 则输出 恭喜您,您通过了这次考试! “恭喜您,您通过了这次考试!”,否则不输 出任何信息。要求编写成控制台应用程序。 出任何信息。要求编写成控制台应用程序。
[格式2]:randomObj.Next(N) 格式2]: 2] 例如,有下列语句: 例如,有下列语句: Random randomObj=new Random() i=randomObj.Next(10 10) i=randomObj.Next(10); 其作用是产生一个0~9之间的随机整数并赋值给变量i 0~9之间的随机整数并赋值给变量 其作用是产生一个0~9之间的随机整数并赋值给变量i。 格式3] 3]: [格式3]:randomObj.Next(N,M) 例如,有下列语句: 例如,有下列语句: Random randomObj=new Random() i=randomObj.Next(5 10) i=randomObj.Next(5,10); 其作用是产生一个5~9之间的随机整数并赋值给变量i 5~9之间的随机整数并赋值给变量 其作用是产生一个5~9之间的随机整数并赋值给变量i。
结构化程序设计的三种基本结构
![结构化程序设计的三种基本结构](https://img.taocdn.com/s3/m/cdd30ec1e53a580217fcfe0a.png)
结构化程序设计共有以下3种基本结构: 顺序结构 分支结构 (选择结构 )
循环结构,
(1)顺序结构,如图3.1(a)所示,该结构先执行A,再 执行B,两者是顺序执行的关系
A B 流程图
A B
N-S结构图
(2)分支结构,也叫选择结构,如图3.1(b)所示, 该结构先判断条件是否成立,当条件成立时执 行A,否则执行B。该结构只能执行A或B其中之 一
例如: m和n是整形变量,则: scanf (“%d%d”,m,n );是错误的, 应将“m,n”改为“&m,&n” 。
②如果在“格式控制串”中除了格式标识符、修饰符和格式 说明符以外还有其他字符,则应在输入数据时输入与这些字 符相同的字符。例如: scanf ("%d,%d",&m,&n );
输入时两个整数之间应加入“,”: 234,123↙ 因为,在scanf函数中的“格式控制串”中使用了逗号分 隔,所以必须在234后面加一个逗号。
表3.2 scanf函数常用的格式说明符
格式说明符 d o x c s f
功能说明 表示输入带符号的十进制整数 表示输入无符号八进制整数 表示输入十六进制无符号整数 表示输入单个字符 表示输入多个字符,即一个字符串 表示输入实数,可以用小数形式输入
表3.2 scanf函数常用③从键盘输入的数据类型和个数必须与参数表中的数 据类型和个数相匹配。例如:
scanf (“%d,%d”,&m,&n ); 输入数据时的形式:
234,10.5↙ (错误,因为数据类型不匹配) 234,105,123↙ (错误,因为数据个数不匹配) 234,123↙ (正确) ④可以指定输入数据所占的列数,系统自动按指定列 数截取数据。例如:
第三讲 结构化程序设计
![第三讲 结构化程序设计](https://img.taocdn.com/s3/m/579f52274b73f242336c5ff4.png)
rnd:[0,1)的随机小数
产生[a,b]间的随机整数
a+int(rnd*(b-a+1))
排序方法
选择法 冒泡法
选择排序法
每次选出待排序数列 (长度为n)中的最 大(小)值和队列中 的第一个数进行交换。 将首位数排除在外, 继续对剩余队列(长 度为n-1)进行以上操 作。
多分支结构 用法说明
测试表达式:为数值表达式或字符串表达式。 表达式列表:多个表达式用逗号间隔即为表达式列表。表达式可 以是单个表达式(单值)或“表达式 To 表达式”(多个整数 值)。 如:1 1,3,5,7 To15,20 都是合法的表达式列表。 如果比较测试表达式与其他表达式的关系,则用符号“Is”表示测 试表达式的值。 执行流程: 自上而下顺序地判断测试表达式的值与表达式列表中的哪一个匹 配,如有匹配则执行相应语句块,然后转到End Select的下一语 句。 若所有的值都不匹配,执行Case Else所对应的语句块,如省略 Case Else,则直接转移到End Select的下一语句。
Do/Loop语句
格式1:Do [{While|Until}<条件>] ' 先判断条件、后执行循环体 循环体 Loop 格式2:Do ' 先执行循环体、后判断条件 循环体 Loop [{While|Until}<条件>] (1) 选项“While”当条件为真时执行循环体,选项“Until”当条件 为假时执行循环体。 (2) 循环体中可以出现语句“Exit Do”,将控制转移到DO/LOOP结 构后一语句。
结构化程序设计习题答案
![结构化程序设计习题答案](https://img.taocdn.com/s3/m/40cb2483d0f34693daef5ef7ba0d4a7302766c1f.png)
结构化程序设计习题答案第三章结构化程序设计部分习题一、选择题1、设有程序段int k=10;while(k=0) k=k-1;则下面叙述中正确的是( )(A) while循环执行10次(B) 循环是无限循环(C) 循环体语句一次也不执行(D) 循环体语句执行一次2、设有以下程序段int x=0,s=0;while(!x!=0) s+=++x;cout<<s;< p="">则( )(A) 运行程序段后输出0(B) 运行程序段后输出1(C) 程序段中的控制表达式是非法的(D) 程序段执行无限次3、语句while(!E); 中的表达式!E等价于( )(A) E==0(B) E!=1(C) E!=0(D) E==14、下面程序段的运行结果是( )a=1; b=2; c=2;while(a<b<="" p="" {t="a;">cout<<a<<’,’<<b<<’,’<<c;< p="">(A) 1,2,0(B) 2,1,0(C) 1,2,1(D) 2,1,15、下面程序段的运行结果是( )x=y=0;while(x<15) y++,x+=++y;cout<<y<<’\t’<<x;< p="">(A) 20,7(B) 6,12(C) 20,8(D) 8,206、下面程序段的运行结果是( )int n=0;while(n++<=2); cout<<n;< p="">(A) 2(B) 3(C) 4(D) 有语法错7、设有程序段t=0;while(1){t++;if(t<3) break;}cout<<t;< p="">程序运行结果是( )(A) 0(B) 1(C) 2(D) 38、下面程序的功能是将从键盘输入的一对数,由小到大排序输出。
第3章结构化程序设计的三种基本结构
![第3章结构化程序设计的三种基本结构](https://img.taocdn.com/s3/m/9874916a0b4c2e3f572763c2.png)
表3.4 printf函数常用格式说明符
格式 说明符
功能说明
d
表示输出带符号的十进制整数(正数不输出符号)
c
表示输出单个字符
s
表示输出多个字符,即一个字符串
f
表示以小数形式输出实数,默认输出6位小数
⑤修饰符作为附加格式说明符,在printf函数中常用的 修饰符如表3.6所示。
表3.5 printf函数常用修饰符
A
假 条件 真
流程图
A 直到条件为真
N-S 结构图
3.1顺序结构程序设计
3.1.1赋值语句 赋值是把一个运算表达式的值赋给变量。
1.格式 简单赋值是把一个运算表达式的值赋给一个变量,一
般的形式为: 变量=<运算表达式>
2.功能 赋值语句的功能是将运算表达式的值赋给左边的变量。
3.说明: (1)以上形式也被称为赋值表达式,“=” 是运算符,称为赋值号; (2)赋值号与数学中的等于号“=”完全不一样,并非相等的意思。 故可以有如下的赋值语句:
3.1.2标准输入/输出语句及使用
1.标准格式输入函数scanf ( ) (1)一般格式:
scanf ("<格式控制串>",参数表); 其中,函数的参数分为格式控制串和参数表两部分,中间 用逗号分隔 ①格式控制串部分是加上双引号的一个字符串,可以用一 般字符作为匹配符,也可以用格式说明符。 ②格式控制串由下列形式组成: % <修饰符><格式说明符> 其中,“%”是格式标识符,格式说明符用来表示输入的格 式,scanf函数常用的格式说明符如表3.2所示。
修饰符
功能说明
字母l
表示输入长整型整数,可加在格式说明符d、o、x 前面
第3章 结构化程序设计
![第3章 结构化程序设计](https://img.taocdn.com/s3/m/5986255a3169a4517623a34f.png)
2019年12月10日星期二第Fra bibliotek章 结构化程序设计
第4页
上海师范大学 计算机系
3.2.1 C语言语句概述
1、表达式语句 表达式能构成语句是C语言的重要特色,故有人称C语言是 “表达式语言”,其一般形式为:表达式; 执行表达式语句就是计算表达式的值。例如:x=y+z;
2019年12月10日星期二
第3章 结构化程序设计
第12页
上海师范大学 计算机系
3.2.2 常用的输入和输出函数
注意:要求格式控制字符串中的格式说明项与变量在数量和 类型上应该一一对应。例如:
int a,b,c; printf("Input a、b、c:"); scanf("%d%d%d", &a,&b,&c); 输入为:7 8 9↙ /* ↙表示回车 */ 或 7↙
(2)“*”符:表示该输入项读入后不赋予相应的变量,即跳过该 输入值。例如:
scanf("%d%*d%d", &a,&b); 当输入为:7 8 9↙时,则把7被赋予a,8被跳过,9被赋予 b。 (3)宽度:用十进制整数指定输入的宽度(即字符数)。例如:
scanf("%4d%d", &a,&b); 当输入为:1234789↙时,则把1234被赋予a,789被赋予b。 (4)长度:长度格式符为l和h,l表示输入长整型数据(如:%ld) 和双精度浮点数(如:%lf),h表示输入短整型数据。
b=5944568,26532370,5ab4f8,5AB4F8
C语言第3章_
![C语言第3章_](https://img.taocdn.com/s3/m/e0063c1259eef8c75fbfb376.png)
o,x
f
e g c
计算机基础教学部
17
二、printf格式符说明
■ 另外,还有其他格式符如:
■m
■l ■ 将在需要的时候用实例讲解。
计算机基础教学部
18
二、printf一般格式
■
%[标志][输出最小宽度][.精度][长度]格式字符
#include <stdio.h> #include <stdio.h> main() main() { { 输出结果:10,3.4 int a=10; 10 3.4 int a=10; 输出结果:103.4 float b=3.4; float b=3.4; printf(“%d%f\n”,a,b);/*a是int类型,用%d格 printf(“%d ,%f\n”,a,b); 式, b是float类型,用 %f格式*/ } printf(“%d%6.2f\n”,a,b) }
}
计算机基础教学部
23
四、格式输入函数scanf
输入数据赋给变量:
#include <stdio.h> #include <stdio.h> #include <stdio.h> #include <stdio.h> main() main() main() #include <stdio.h> main() { { { main() { int a,b; float h,w; int a;{ float b; scanf(“%d%d”,&a,&b); printf(“请输入身高(米):”); scanf(“%d”,&a); double c; scanf(“%f”,&b); scanf(“%f”,&h); } scanf(“%lf”,&c); } } printf(“请输入体重(千克):”); } scanf(“%f”,&w); printf(“肥胖指数为:%.2f\n”,w/h/h);
第3章_结构化程序设计
![第3章_结构化程序设计](https://img.taocdn.com/s3/m/ee81408a84868762caaed5fe.png)
• 2. if-else语句
• 语法形式:
if (<条件>) <语句1> else <语句2>
如果“条件”为 “真”,则执行 “语句1”;否则 执行“语句2”
条件
假(0)
真(非0)
语句1 语句2
如图3-2所示
图3-2 if-else语句的执行过程
例如:
if(a+b>c && b+c >a && a+c>b)//判定合法性 { //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); } else Console.WriteLine(“三角形的三边数据有 错!”);
//在条件表达式中实现改变循环控制变量之值
int digit=0;
while(digit++<=9) { Console.WriteLine(“{0}”,digit); } //在Console.WriteLine()语句中实现改变循环控制变量之值 int digit=0;
while(digit<=9)
• switch表达式必须是sbyte、byte、ushort、uint、 long、ulong、char和sting(或基于这些类型之一的 一个enum)类型(或隐式地转移到这些类型) • 必须对每个case语句提供一个跳转语句(break语句) ,包括最后的case语句 • 对每个switch语句来说,只能有一个default语句。 而当所有的case语句都不执行,且又没有default语 句时,则控制转移到switch语句的闭花括号之后的 第一行代码,即switch整个语句都不执行
第3章 顺序结构程序设计教案
![第3章 顺序结构程序设计教案](https://img.taocdn.com/s3/m/d94a5ea0ccbff121dc368374.png)
第3章顺序结构程序设计本章要点✧结构化程序设计及三种基本控制结构✧语句的概念✧数据的输入/输出本章学习目标✧掌握顺序结构程序设计方法✧掌握Visual Basic数据的输入/输出方法第3章顺序结构程序设计473.1 结构化程序设计概述Visual Basic是面向对象的程序设计语言,但面向对象的程序设计并不是要抛弃结构化程序设计方法,而是站在比结构化程序设计更高、更抽象的层次上去解决问题。
当它被分解为低级代码模块时,仍需要结构化编程的方法和技巧,只是它分解一个大问题为小问题时采取的思路与结构化方法是不同的。
结构化的分解突出过程,强调的是如何做(How to do?),代码的功能如何完成;面向对象的分解突出现实世界和抽象的对象,强调的是做什么(What to do?),它将大量的工作由相应的对象来完成,程序员在应用程序中只需说明要求对象完成的任务。
3.1.1 结构化程序设计20世纪60年代末,著名学者E.W.Dijkstra首先提出了“结构化程序设计”的思想。
这种方法要求程序设计者按照一定的结构形式来设计和编写程序,使程序易阅读、易理解、易修改和易维护。
这个结构形式主要包括两方面的内容:(1)在程序设计中,采用自顶向下、逐步细化的原则。
按照这个原则,整个程序设计过程应分成若干层次,逐步加以解决。
每一步是在前一步的基础上,对前一步设计的细化。
这样,一个较复杂的大问题,就被层层分解成为多个相对独立的、易于解决的小模块,有利于程序设计工作的分工和组织,也使调试工作比较容易进行。
(2)在程序设计中,编写程序的控制结构仅由三种基本的控制结构(顺序结构、选择结构和循环结构)组成,避免使用可能造成程序结构混乱的GoTo语句。
所谓程序的控制结构是指用于规定程序流程的方法和手段。
它是一种逻辑结构,描述程序执行的顺序,也是一种形式结构,描述程序的编写规则。
按照结构化程序设计方法,使设计编写的程序的控制结构由上述三种结构组成,这样的程序就是结构化程序。
第三章 顺序结构程序设计
![第三章 顺序结构程序设计](https://img.taocdn.com/s3/m/f1813214f18583d0496459b9.png)
步骤1:0 => s; 步骤2:1 => I; 步骤3:s+i => s; 步骤4:i+1 => I; 步骤5:如果i≤1000,转到步骤3,否则结束。 在上面的算法中,符号s、i表示变量,符号“=>” 表示给变量赋值。步骤1和步骤2表示给变量s和i 赋初始值为0和1;步骤3将变量i的当前值累加到 变量s中;步骤4使变量i在原值的基础上增加1; 步骤5判断i的值如果小于等于1000,重复做步骤 3和步骤4,构成一个循环,而当i的值不小于等于 1000时,循环结束,这时,变量s的值就是要求 的计算结果。
2.函数调用语句 函数调用语句由一次函数调用加一个分号(语句结 束标志)构成。例如: printf("This is a C Program."); 3.表达式语句 表达式语句由表达式后加一个分号构成。 表达式能构成语句是C语言的一大特色。最典型的 表达式语句是在赋值表达式后加一个分号构成的赋值 语 句 。 例 如 , “ num=5” 是 一 个 赋 值 表 达 式 , 而 “num=5;”却是一个赋值语句。
3.3 格式化输出函数printf()
程序运行中,有时候需要从外部设备(例如键盘)上得 到一些原始数据,程序计算结束后,通常要把计算结果发 送到外部设备(例如显示器)上,以便人们对结果进行分析。 我们把程序从外部设备上获得数据的操作称为“输入”, 而把程序发送数据到外部设备的操作称为“输出”。 不像其他的高级语言,C语言没有专门的输入/输出语 句,输入/输出的操作是通过调用C语言的库函数来实现的。 printf()函数是最常用的输出函数,它的作用是向计算机系 统默认的输出设备(一般指显示器)输出一个或多个任意指 定类型的数据。
3.1.2 算法的特征 通常,一个算法必须具备以下五个基本特征: (1) 有穷性。一个算法必须在它所涉及的每一种情 形下,都能在执行有限次的操作之后结束。 (2) 确定性。算法的每一步,其顺序和内容都必须 严格定义,而不能有任何的歧义。 (3) 有零个或多个输入。输入是算法实施前需要从 外界取得的信息,有些算法需要有多个输入,而有些 算法不需要输入,即零个输入。 (4) 有一个或多个输出。输出就是算法实施后得到 的结果,显然,没有输出的算法是没有意义的。 (5) 可行性。算法的每一步都必须是可行的,也就 是说,是能够由计算机执行的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例3-7】用for语句计算1+2+…+100。
static void Main(string[] args) { int Sum,i; Sum = 0; for(i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); Console.Read(); }
for循环的一些变化特点:
(1)for循环语句的“初始表达式”和“变量增值表达式”可 引入逗号运算符“,”,这样可以对若干个变量赋初值或 增值。 static void Main(string[] args) { int Sum,i; for(Sum=0,i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); for(Sum=0,i=1;i<=100;Sum+=i,i++) ; //循环体是一个空语句 Console.WriteLine("Sum is " + Sum); }
程序运行结果:
3.4 跳转语句
3.4.1 continue语句
continue语句只能用于循环语句之中,它的作用是结束本轮循环,不再 执行余下的循环体语句 。 语法形式: continue; 【例3-13】将1~100之间能被7整除的数输出。 static void Main(string[] args) { for(int i=1;i<=100;i++) { if(i%7 != 0)continue;//如果I不能被7整除,则直接进入下一轮循环 Console.WriteLine(i);//只有能被7整除的数,才会执行到此 } }
3种循环语句的执行流程图
Sum=0, i=1
Sum=0,i=1
假 i<=100 假 表达式 真 真 循环体语句 输出Sum 表 达 式 假 真 Sum+=i; i++ 循环体语句 真
初始表达式
Sum+=i, i++
假 条件 真
i<=100 假 输出Sum
循环语句体
变量增值表达式
(a)
(a)
(b)
(b)
3.2.2 switch语句
语法形式: switch (<表达式>) { case <常量表达式1>:<语句序列1> case <常量表达式2>:<语句序列2> …… case <常量表达式n>:<语句序列n> default:<语句序列n+1> }
【例3-4】 用switch语句编写程序,根据输入的成绩输出 相应的A、B、C、D和E等级,其中A:90100;B:80-89;C:70-79;D:60-69;E :0-59。
图3 – 6 for语句的执行过程
3.3.4 foreach 语句
语法形式:
C#中新增的循环语句,它对于处理数组及集合等数据类型特 别简便 。 foreach(类型 标识符 { <循环体语句> } in 表达式)
【例3-11】使用foreach语句输出数组中的所 有数 static void Main(string[] args) { int[] list={ 10,22,34,56,87,11}; foreach(int i in list) Console.Write("{0,-5}",i); } 程序运行结果为: 10 22 34 56 87 11
3. 嵌套的if语句
语法形式: if ( <条件1> ) <语句1> else if ( <条件2> )< 语句2> else if ( <条件3> )< 语句3> ┇ else <语句n>
真 条件1 假 真 条件2 假 语句2 语句1
真
条件n-1
语句n-1
假 语句n
图3-3 if语句嵌套的执行过程
static void Main(string[] args) { int score,temp=-1; Console.Writeline("请输入一个学生成绩:"); string str=Console.Readline(); score = int.Parse(str); if(score<0 || score>100) { Console.Writeline ("成绩输入有误");return;} temp=score/10; switch(temp) { case 10: case 9: Console.Writeline ("A");break; case 8: Console.Writeline ("B");break; case 7: Console.Writeline ("C");break; case 6: Console.Writeline ("D");break; default: Console.Writeline ("E");break; } }
第3章 结构化程序设计
本章要点
理解三种基本结构的概念 明确选择结构和循环结构的条件构成 掌握跳转语句的执行流程和使用方法 较熟练地使用C#的三种基本结构,进行程 序设计
3.1 赋值语句
3.1.1 简单赋值语句
<变量名> = <表达式>;
3.1.2 复合赋值语句
<变量> <双目运算符> = <表达式>; 等价于 <变量> = <变量> <双目运算符> <表达式>;
方法 2: 嵌套在if子句中。 static void Main(string[] args) { int x, y; Console.WriteLine(“please input x:”); string s = Console.ReadLine(); x = int.Parse(s); if(x !=0 ) 内 嵌 if (x<0) y = -1; if…else else y = 1; else y=0; Console.WriteLine(“x={0}, y={1}”,x,y); }
• 2. if-else语句
• 语法形式:
if (<条件>) <语句1> else <语句2>
如果“条件”为 “真”,则执行 “语句1”;否则 执行“语句2”
条件
假(0)
真(非0)
语句1 语句2
如图3-2所示
图3-2 if-else语句的执行过程
例如:
if(a+b>c && b+c >a && a+c>b)//判定合法性 { //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); } else Console.WriteLine(“三角形的三边数据有 错!”);
3.3 循环语句
3.3.1 while语句 语法形式:
while(<表达式>) { <循环体语句> }
如果表达式为真(true), 则执行循环体语句。然 后重新计算表达式的值, 并再次判断;如果表达 式的值为假(false), 则退出循环结构。
【例3-5】 利用while语句求,计算 1+2+…+100的值,并打印计算结果。
3.3.3 for 语句
语法形式:
初始表达式是设置循环 C#的for循环是循环语句中最具特色的。它功能较强、灵活 控制变量的初值;条件 多变和使用广泛。 是bool类型,作为循环 控制条件;变量增值表 达式是设置循环控制变 量的增值(正负均可)。
for(<初始表达式>;<条件>;<变量增值表达式>) { <循环体语句> }
3.2 选择语句
3.2.1 if语句
1.if语句 语法形式: 如果“条件” 为“真”,则 执行“语句”
if (<条件> ) <语句>
假(0) 条件 真(非0) 语句
其执行过程如图3-1所示
图3-1 if语句的执行过程
例如: if(x<0) x = -x;
//判定合法性
//取x的绝对值
if(a+b>c && b+c >a && a+c>b) { //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); }
(2) for循环的三个表达式可以任意缺省,如果“条件”缺省就约定它 的值是true。但不管哪个表达式缺省,其相应的分号“;”不能缺省 。 static void Main(string[] args)
{
int Sum,i; for(Sum=0,i=1;i<=100;i++) Sum += i; Console.WriteLine("Sum is " + Sum); for(Sum=0,i=1;i<=100;Sum+=i,i++) ; //循环体是一个空语句 Console.WriteLine("Sum is " + Sum); }