第三章程序控制结构
通过本章实验作业应达目标
1.熟练掌握格式输入与格式输出函数与各种格式符的使用,掌握各类数据输入/输出的实现方法;
2.学会正确使用关系与逻辑运算,熟练构建关系与逻辑表达式;
3.练习并熟练掌握if、switch语句使用,实现二路与多路选择结构;
4.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构;
5.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。
6.进行算法设计训练,能综合所学控制结构语句解决一般问题。
本章必须上交作业
第一部分输入/输出作业要求
程序3_3.c上传至http://121.251.227.27:8080/c。源程序可以.cpp命名。
第二部分分支结构作业要求
程序3_5.c、3_6.c、3_8.c上传至http://121.251.227.27:8080/c。
第三部分循环控制结构作业要求
程序3_9.c、3_11.c、3_13.c、3_14.c、3_15.c、3_16.c、3_19.c上传至http://121.251.227.27:8080/c。
第一部分顺序结构与输入/输出程序设计
实验一一个三位数逆序输出
【实验目的】
了解顺序程序结构,学习调试程序。
【实验内容】
下面程序功能:键盘输入一个三位数,输出逆序后的数。例如,输入236,输出632。程序中有多处错误,改正后在机器上调试通过。程序以3_1.c命名。
#include
void main()
{int x,int y;
int a,b,c;
a=x/100;
b=x/10%10;
c=x%10;
printf("Please input a num:");
scanf("%d",&x);
y=100c+10b+a;
printf("y=%d\n",y);
}
【思考】如果输入的数据可以是任意大小的数,并不限制一定是一个三位数,怎样才能将该数逆序并输出?
实验二字符数据输入/输出
【实验目的】
学习字符数据的输入与输出,学习getchar()/putchar()函数使用。
【实验内容】
用getchar()函数输入两个字符给c1、c2,然后分别用putchar()分别输出这两个字符,再输出它们的ASCII。程序以3_2.c命名。
【思考】
能否将输入的两个字符转换大小写后再一次输出?即输入是大写字符则输出对应小写字符,输出小写字符则输出对应的大写字符。
实验三复数乘法
【实验目的】
学习格式化输入/输出操作。
【实验内容】
编写程序读入两个复数并输出这两个复数的乘积。输入输出如下图。程序以3_3.c命名并上交。
程序运行时用户只须输入两个复数的实部与虚部。
两个复数的乘积仍然是一个复数,复数的乘法按照以下法则进行:
设z1=a+bi,z2=c+di(a、b、c、d∈R)是两个任意复数,则它们的积为:
(a+bi)(c+di)=(ac-bd)+(ad+bc)i。
【提示】
程序运行时屏幕首先显示:
输入5,回车后屏幕再次给出输入提示 virtualpart:
输入3,回车后屏幕显示该复数,并给出输入第二个复数的提示。
输入第二个复数的实部与虚部,最后输出这两个复数相乘得到的第三个复数。
注意,数学概念中的复数a+bi是一个非实型数据,在C语言中是没有复数类型的,因此没有办法定义一个变量来保存一个数学概念中的复数。为描述并记录复数,我们在此用两个float类型的变量分别记录一个复数的实部与虚部,用这两个变量描述一个数学概念中的复数。显示时以×× + ×× i的方式展示数据。具体说,计算机内是没有复数类型的,程序中用两个实型数据描述一个复数。复数的计算实质是对实部与虚部的计算,结果放在相应表示复数实部与虚部的变量里。
第二部分分支结构程序设计
实验一大小写转换
【实验目的】
熟悉关系与逻辑运算,了解if-else的顺序与嵌套层次关系。
【实验内容】
下面程序希望完成大小写字母转换功能。若输入一个大写字母,则转化为小写输出;若输入小写字母则转化为大写输出;对其他字母则原样不变输出。程序以3_4.c命名,运行程序,分别输入一次大写、一次小写字母、一次‘#’进行验证。如果程序有错,请改正。
#include
void main()
{char ch;
ch=getchar();
if('a'<=ch<='z') ch-=32;
if('A'<=ch<='Z') ch+=32;
putchar(ch);putchar('\n');
}
实验二算术运算
【实验目的】
学习if~else、switch语句的使用。
【实验内容】
键盘输入一个算术的运算式子,输出运算结果。这里我们规定可以接收五个算术运算的符号:+、-、*、/、^(乘方)。程序以3_5.c命名并上交。
下图是输入输出的示意图:
输入一个加法的算术式:
输入一个除法的算术式:
输入一个乘方的算术式:
求3的平方根:
【实验提示】
本程序需要从键盘接收一个表达式,根据表达式中的运算符号实现相应的运算并将结果保存下来并输出。
C语言本身是没有乘方运算符的,可以调用数学函数pow(x,y)求x的y次方。注意一定要包含
输入的表达式实质是按多个不同类型的数据来获取数据的。程序中需要定义多个变量来接收表达式中包含的数据与运算符,并设计相应的输入/输出函数实现。
实验三金额计算
【实验目的】
学习分析与解决实际问题的能力,综合嵌套使用if~else或switch语句。
【实验内容】
某服装店经营套服。以50套为限,若购买数量不少于50套,每套80元;不足50套时每套90元;单买上衣每件60元,单买裤子每条45元。若购买金额大于10000元,则超过10000元部分可以打九折。
编写金额计算程序,实现:键盘读入所买上衣c和裤子t的数量,计算应付款总额。程序以3_6.c命名并上交。
实验四利息计算
【实验目的】
综合使用选择结构语句,解决实际问题。
【实验内容】
RMB
编写程序,要求输入存款总额(以元为单位)与存款期限(以月为单位),计算并输出到期时的利息总额、利息税(20%)与实得利息。
两档期限之间以活期计算,如存款期限为50个月,则36个月按3.96%计算利息,14个月按0.72%计算利息。程序以3_7.c命名。
实验五判断天数
【实验目的】
熟练使用switch语句,并设计精巧程序。
【实验内容】
按yyyy-mm-dd格式输入一个日期,如2004-10-31,判断这是这一年的第几天。程序以3_8.c命名并上交。
【实验提示】
以2004-10-31为例,先把前九个月的天数加起来,然后再加上31天。需要考虑的是,当年是闰年,2月为29天,否则2月为28天。也可以2月固定按28天计算,当年是闰年且月份大于2时,多加一天。
第三部分循环程序设计
1.循环设计
循环是在循环条件为真时重复执行一组循环体语句的控制结构,是计算机解题的一个基本结构。循环控制有两种基本方法:计数法和标志法。
(1)计数器控制的循环
事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循
环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。
(2)标志控制的循环
事先不知道准确的循环次数,由某一目标值标记循环的结束。如,例3-23中以变量sum的值达到标记值1000作为循环的结束,例3-24中就是以键盘输入一个负数为标记结束循环。
2.基本算法
程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。
循环主要用来解决程序设计中两类基本的算法:穷举和迭代。
1. 穷举算法
穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。
例3- 1 输入两个正整数x和y,求其最大公约数。
#include
void main()
{
int x,y,i,flag;
flag=1; /*flag是标志变量,当其值为0时表示已找到公约数*/
printf("Please input two numbers:");
scanf("%d%d",&x,&y);
for(i=x if(x%i==0&&y%i==0) flag=0; /*条件满足,就改变标志变量的值*/ else i--; printf("greatest common divisor=%d\n",i); } 两个数中的小者到1之间任何一个数都有可能是公约数,因此用变量i从大到小一一穷举,直到找到为止。若两数互质,当i==1时也能使条件满足。 2. 迭代算法 按照特定规律和方法,重复地由旧值递推出新值,并由新值代替旧值,直至问题解决为止,这种解决问题的方法为迭代。迭代的关键因素是:迭代初值、迭代公式和迭代次数(精度要求)。 例3- 2 使用辗转相除法求两数的最大公约数。 辗转相除法:如果x除以y的余数为0,则除数y就是最大公约数,或余数不为0,则被除数x被除数y取代,除数y被余数取代,再用新的x除以新的y,判断余数是否为0,如果不为0,则重复此迭代过程,直至余数为0,此时的除数y即为最大公约数。 #include void main() { int x,y,temp; printf("Please input two numbers:"); scanf("%d%d",&x,&y); temp=x%y; while(temp!=0) { x=y; /*迭代*/ y=temp; /*迭代*/ temp=x%y; } printf("greatest common divisor=%d\n",y); } 运行时输入:66 121 输出:greatest common divisor=11 各值的变化如下: x y temp=x%y 66 121 66 121 66 11 66 11 0 实验一 简单的循环设计 【实验目的】 学习设计一个循环,能进行循环变量的初始化,循环条件的设计与循环变量值的修正。 【实验内容】 编写程序,输入一个整数x ,按下式输出对应的y 值。程序以3_9.c 命名并上交。 ???++++++++=为偶数为奇数x x x x y 642531 【指导】 简单循环结构,通常方法是设计一个循环变量i ,让其在初值与终值之间变化控制控制循环实现,循环条件通常是:i ≤终值。如: for(i=初值;i ≤终值;i=i+步长) 循环体语句; 实验二 整数按位折分求和 【实验目的】 学习设计与控制循环,并熟练%(求余)运算。 【实验内容】 输入一个不大于2×109(用long 型数据)的正整数x ,求这个数每位数字之和。例如,若输入33456781, 输出37。程序以3_10.c 命名。 【提示】 设计循环,每次求出x 的个位数(使用求余运算)并累加到和值变量中,再迭代操作,改变x 的值,使原来的十位变个位。 【讨论与思考】 long 型数据的最大值是2147483647,受变量类型限制,本程序只能接收不大于2×109的正整数。如果进行扩充,要求能接收并计算一个30位整数的各位之和,那么数据类型应如何设置,程序应该如何编写? 实验三 最值求解 【实验目的】 学习在多个数据中求取最大最小值,并设计用控制的循环。 【实验内容】 键盘输入一组学生成绩,输入以-1作为输入的结束。统计这批数据的最大值,最小值,平均值。程序以3_11.c 命名并上交。 【提示】 这里的循环并不由循环变量的值来进行控制了,需要根据输入的数据来控制循环,并需要设计变量来 统计循环执行的次数。 实验四打印数字塔图形 【实验目的】 学习使用循环语句构成的多重循环嵌套。 【实验内容】 编写程序,使用循环输出如下图所示的数字塔图形。程序以3_12.c命名。 【提示】 此图形上下对称,可将程序分为上下两部分实现。上半部输出9行,下半部输出8行。每一行包含三部分内容:开始的空格、中间的数字及最后的换行符。需要考虑的是字符个数与行号的关系。 下面程序用于输出如下*字符塔,供本题参考。 #include void main() {int i,j; clrscr(); /* 清屏 */ for(i=1;i<=9;i++) /* 行循环 */ {for(j=1;j<=9-i;j++) /* 输出行左空格*/ printf(" "); for(j=1;j<=2*i-1;j++) /* 输出若干* 字符 */ printf("%c",'*'); printf("\n"); /* 换行 */ } } 实验五寻找素数 【实验目的】 领会并牢固掌握素数算法,深入循环结构设计。 【实验内容】 从键盘输入一个大于3的正整数,输出距离该数最近的素数。根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),也可能需要输出两个值(一个比输入的数大,一个比输入 的数小,两个距离输入的数一样近)。程序以3_13.c命名并上交。 实验六不等式求解 【实验目的】 学习在循环中使用break控制语句。 【实验内容】 键盘输入一个数给m,计算并返回满足表达式:1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。例如,当m=10000时,程序输出:n=38。程序以3_14.c命名并上交。 【提示】 参考解法: for(i=1;1;i++) /* 循环条件为恒真 */ {计算(1+2+3+……+i) s; 将计算结果s累加到变量sum中; 判断sum的值是否大于m 是,则终止循环 否,则继续进入下一次循环 } 输出与对应结果,其值会与i相关。 实验七最佳方案寻找 【实验目的】 穷举算法与最佳方案算法设计与训练。 【实验内容】 一根长度为235m的材料,需要截成长度为19m和23m的短料,编程设计最佳截取方案,即求两种短料各截成多少根时,剩余的材料最少?程序以3_15.c命名并上交。 实验八礼炮响声统计 【实验目的】 学习循环中条件的设计与数据统计。 【实验内容】 活动中有三门礼炮,各装有十枚炮弹。第一门礼炮每隔3秒发一枚炮弹,第二门每隔5秒、第三门每隔7秒发一枚炮。问观礼群众一共听到几声炮响。三门炮的第一发炮弹是同时发出的,同一时间发出炮声算一响。程序以3_16.c命名并上交。 【实验提示】 程序中可分别设置计时器变量与计数器变量。计时器以秒为单位递增,测试此时有无炮发出。只要有一枚炮发出,则计数器增1。注意不要重复统计。 实验九验证哥德巴赫猜想 【实验目的】 综合运用多重循环结构、标志法、穷举法解决问题。 【问题描述】 1742年6月,德国数学家哥德巴赫在给大数学家欧拉的信中提出一个问题:任何大于4的偶数均可以表示为两个素数之和吗?欧拉复信道:任何大于4的偶数均可以表示为两个素数之和,这一猜想我还不能证明,但我确信无疑地认为这是完全正确的定理。 哥德巴赫猜想是世界著名的数学难题,至今未能在理论上得到证明,自从计算机出现后,人们就开始 用计算机去尝试解各种各样的数学难题,包括费马大定理、四色问题、哥德巴赫猜想等,虽然计算机无法从理论上严密地证明它们,只能在有限的范围内对其进行检验,但也不失其意义。 【实验内容】 程序要求:输入一个int 型数据范围内的偶数x(x>4),找到两个素数a 、b ,满足 x=a+b 。最后输出此等式。如输入98,输出98=19+79。程序以3_17.c 命名。 【实验提示】 读入偶数x ,找出一对数a 、b 满足x=a+b ,测试a 、b 是否都为素数,若不满足,则找下一对a 、b 继续测试,直到a 、b 均为素数为止。算法描述如下: 读入x; a=3; while(a {b=x-a; 测素数循环,测试a 是否为素数; 测素数循环,测试b 是否为素数; if(a 、b 同为素数) 退出while 循环; a+=2; /* a 在奇数上穷举 */ } if(a 验证成功,输出x=a+b; else 验证失败,输出失败信息; 为了判断a 、b 是否是素数,可以设置两个二元标志变量flag_a 和flag_b ,其值为1时表示对应变量是素数,其值为0时表示变量是非素数。令flag_a 和flag_b 的初始值为0,代表开始时假设a 、b 都不是素数,然后进入测试循环。若测素数循环检测a 是素数,则改变flag_a=1;若b 是素数,则令flag_b=1。 则 if(a 、b 同为素数)可以表示为 if(flag_a*flag_b!=0)。 实验十 计算立方根 【实验目的】 练习迭代算法,学习几种解一元高次方程的方法。 【实验内容】 键盘输入一个实数a ,输出它的立方根。请自行设计算法编写程序,不允许调用pow 函数。程序用3_18.c 命名。 【提示】 假设a 的立方根为x ,则a x =3,问题转化为求一元高次方程03 =-a x 的解。应用教材介绍的牛顿迭代法解一元高次方程可以比较快捷的得到近似解。 实验十一 斐波那契(Fibonacci )数列 【实验目的】 练习迭代算法,了解斐波那契(Fibonacci )数列。 【实验内容】 输出[m,n]范围内的所有斐波那契(Fibonacci )数,m,n 这两个数由键盘输入。程序用3_19.c 命名并上交。 【提示】 1,1,2,3,5,8,13,21,34,……这是斐波那契(Fibonacci )数列的前几项。斐波那契数列的特点:前两项均为1,后面任意一项都是其前面两项之和。 本实验虽然只要求输出在[m,n]范围内的斐波那契数,但是依然需要从第1个Fibonacci数开始依次得到下一个,并判断是否是需要输出的那个。 习题三 第一部分:输入与输出 1.已有如下定义和输入语句,若要求a,b,c1,c2的值分别为5、6、A和B,当从第一列开始输入数据时,正确的数据输入方式是 ______ ( int a,b; char c1,c2; scanf("%d%c%d%c",&a,&c1,&b,&c2); A) 5 A 6 B 2.以下说法正确的是_______。 A)输入项可以为一个实型常量,如scanf(“%f”,3.5); B)只有格式控制,没有输入项,也能正确输入,如scanf(“a=%d,b=%d”); C)当输入实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f); D)当输入数据时,必须指明地址,如scanf(“%f”,&f); E)可以采用不同的格式符,实现对一个实型数据以八进制或十六进制形式输入/输出。 F)整型数据不能使用%f或%lf格式符。 3.若a是int型变量,则表达式(a=5*6,a*3),a+8的值是 _________ 。 4.若有定义:int b=7; float a=2.5,c=4.7; 则表达式 a+(int)(b/3*(int)(a+c)/2)%4的值为_____。5.输出长整型数据使用格式符_______,输出无符号的整数用格式符_____ ,以指数形式输出单精实数用格式符______。 6.下面程序运行时输入:10 11<回车>,输出__________。 #include void main() {int a,b; scanf("%o%x",&a,&b); printf("a=%d,b=%d\n",a,b); } 7.下面程序段执行时,怎样输入才能让a=10,b=20 ?__________________ int a,b; scanf("a=%d,b=%d",&a,&b); 8.若a和b均为int变量,以下语句的功能是_____________。 a+=b;b=a-b;a-=b; 9.在scanf函数调用中,可以在格式字符和%之间加一星号*,它的作用是________。 10.a++、++a、a=a+1都能实现使变量a的值增1,与之等效的表达式还有__________ 第二部分:分支结构 1.若执行下面的程序时从键盘上输入5,则输出结果是______ main() {int x; scanf("%d",&x); if(x++>5)printf("%d\n",x); else printf("%d\n",x--); } A) 7 B) 6 C) 5 D) 4 2.已知a,b,m,n,c,d变量的定义如下,则执行完下列表达式后m,n的值为______ int a=3,b=4,m=0,n=0,c=3,d=4; (m=a A) m=1 n=1 B) m=1 n=0 C) m=0 n=0 D) m=0 n=1 3.表达式(!7<5+1>0+4<5)的值是______ A) 3 B) 2 C) 1 D) 0 4.假设在程序中,x,y,z均被定义成整型,且已赋大于1的值,则下列能正确表示1/(xyz)的表达式是______ A) 1/x*y*z B)1/(x*y*z)C) 1/x/y/(float)z D) 1.0/x/y/z 5.已知字母a的ASCII十进制代码为97,则执行以下语句后的输出为______ char a='a';a--; printf("%d,%c\n",a+'2'-'0',a+'3'-'0'); A) b,c B) a--运算不合法,故有语法错C) 98,c D) 格式描述和输出项不匹配,输出无定值 6.为了避免嵌套的条件语句if-else的二义性,C语言规定:else与_____配对。 A) 缩排位置相同的if B) 其之前最近的if C) 其之后最近的if D) 同一行上的if 7.若给定条件表达式(M)?(a++): (a--),则其中表达式M______ A) 和(M==0)等价B) 和(M==1)等价 C) 和(M!=0)等价D) 和(M!=1)等价 8.若有说明语句char s='\092'; 则该语句______ A) 使s的值包含1个字符B) 说明不合法,s的值不确定 C) 使s的值包含4个字符D) 使s的值包含3个字符 9.设a=1,b=2,c=3,d=4,则表达式:a A) 4 B) 3 C) 2 D) 1 10.有如下的变量定义: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是______ A) a+=a-=(b=4)*(a=3)B) x%(-3) C)a=a*3=2 D) y=float(i) 11.有以下变量定义: int k=7,x=12; 则下列值为3的表达式是______ A) x%=(k%=5) B) x%=(k-k%5) C) x%=k-k%5 D) (x%=k)-(k%=5) 12.设 int a=3 ; 则表达式 a<1&& - - a>1 的运算结果和a的值分别是______ A) 0和2 B) 0和3 C) 1和2 D) 1和3 13.假定所有变量均已正确定义,下列程序段运行后x的值是______ ok1=1;ok2=2;ok3=3;x=15; if(!ok1) x--; else if(ok2) if(ok3) x=3; else x=4; A) 14 B) 4 C) 15 D) 3 14.下面程序的输出结果是______ void main() {int x=1,a=0,b=0; switch(x) { case 0 :b++; case 1 :a++; case 2 :a++;b++; } printf(“a=%d,b=%d\n”,a,b); } A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2 15.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果分别是_____ void main( ) { int x; scanf("%d",&x); if(x++>5)printf("%d",x); else printf("%d\n",x--); } A) 7和5 B) 6和3 C) 7和4 D) 6和4 16.有定义:int a=1,b=3,c=5,d=4,x;则执行完下面一段程序后x的值是 ______。 if(a if(c else if(a if( b else x=3; else x=6; else x=7; A) 1 B) 2 C) 3 D) 6 17.能正确表示a和b同时为正或同时为负的表达式是________。 A) (a>=0||b>=0)&&(a<0||b<0)B) (a>=0&&b>=0)&&(a<0&&b<0) C) (a+b>0)&&(a+b<=0)D) a*b>0 18.当a=3,b=2,c=1时,表达式f=a>b>c的值是 ______ 。 19.当c的值不为0 时,在下列选项中能正确将c的值赋给变量a、b的是________。A) c=b=a B) (a=c)||(b=c) C) (a=c)&&(b=c) D) a=c=b 20.下面程序程序后输出结果是_____。 void main() {int a=3,b=2,c=1,t; if(a>b>c) t=1; else if(a else t=-1; printf("%d\n",t); } A) 1 B) 0 C) -1 D) 不确定的数 21.以下程序运行后的输出结果是________。 void main() {int a=3,b=4,c=5,t=99; if(a if(a>c,c>b) t=b;b=a;a=t; printf("%d %d %d\n",a,b,c); } 22.以下程序运行后的输出结果是__________。 void main() {int x=1,y=0,a=0,b=0; switch(x) {case 1:switch(y) {case 0:a++;break; case 1:b++;break; } case 2:a++;b++;break; } printf("%d %d\n",a,b); } 23.有以下程序 void main( ) { int i=1,j=1,k=2; if((j++||k++)&&i++) printf( "%d,%d,%d\n",i,j,k ); } 执行后输出结果是_____。 A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3 24.以下程序执行后输出结果是_____。 void main( ) { int a=3,b=4,c=5,d=2; if(a>b) if(b>c) printf("%d",d+++1); else printf("%d",++d+1); printf("%d\n",d); } A) 2 B) 3 C) 43 D) 44 25.以下程序执行后输的结果是________ 。 main( ) { int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf("%d\n",x); } 第三部分:循环控制 1.对下面程序段描述正确的是__________。 int k=10; while(k=0) k=k-1; A) while循环执行10次 B) 循环是无限循环 C) 循环体语句一次也不执行D) 循环体语句执行一次 2.语句while(!E);中的表达式!E等价于________. A) E==0 B) E!=1 C) E!=0 D) E==1 3.下面程序段的运行结果是__________. int n=0; while(n++<=2); printf("%d",n); A) 2 B) 3 C) 4 D) 有语法错 4.下面程序的运行结果是___________. #include main() {int num=0; while(num<=2) {num++; printf("%d\n",num); } } A)1 B)1 C) 1 D) 1 2 2 2 3 3 4 5.以下程序段________. x=-1; do{ x=x*x; }while(!x); A) 是死循环 B) 循环执行二次 C) 循环执行一次 D) 有语法错误6.如下程序段 _________. int x=3; do{printf("%d\n",x-=2); }while(!(--x)); A) 输出的是1 B) 输出的是1和-2 C) 输出的是3和0 D) 是死循环 7.下面程序的运行结果是______. #include main() {int y=10; do{y--;}while(--y); printf("%d\n",y--); } A) -1 B) 1 C) 8 D) 0 8.若i为整型变量,则以下循环执行次数是_____. for(i=2;i==0;)printf("%d",i--); A) 无限次 B) 0次 C) 1次 D) 2次 9.执行语句for(i=1;i++<4; );后变量i的值是______. A) 3 B) 4 C) 5 D) 不定 10.以下正确的描述是_______. A) continue语句的作用是结束整个循环的执行 B) 只能在循环体内和switch语句体内使用break语句 C) 在循环体内使用break语句或continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用goto语句 11.运行下面程序时,从键盘输入20357 #include main( ) {int c; while((c=getchar())!='\n') switch(c-'2') {case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3); default: putchar(c+2); break; } putchar('\n'); } 12.下面程序段是从键盘输入的字符串中统计数字字符的个数,用换行符结束循环。请填空。 int n=0,c; c=getchar(); while(_______) {if(________)n++; c=getchar(); } 13.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。请填空。 #include main() {int r,m,n; scanf("%d%d",&m,&n); if(m r=m%n; while(r) {m=n;n=r;r=______; } printf("%d\n",n); } 14.下面程序的运行结果是_________. #include main() {int a,s,n,count; a=2;s=0;n=1;count=1; while(count<=7){n=n*a;s=s+n;++count;} printf("s=%d",s); } 15.下面程序段的运行结果是_________. i=1;a=0;s=1; do{a=a+s*i;s=-s;i++; }while(i<=10); printf("a=%d",a); 16.下面程序段的运行结果是_______. i=1;s=3; do{s+=i++; if(s%7==0)continue; else ++i; }while(s<15); printf("%d",i); 17.下面程序用于打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。完成程序。 main( ) {int i,a,b,c; for(i=100;i<1000;i++ ) {a = i/100; b =___________; c = i%10; if(___________) printf( "%d ", i); } } 第三章测验 一、判断 1. 文档不属于软件,所以不重要。() 2. 软件学是专门研究软件开发的学科。() 3. 通常把计算机软件分为系统软件和应用软件。() 4. 所谓系统软件就是购置计算机时,计算机供应厂商所提供的软件。() 5. 当前流行的操作系统是Windows系列及Office系列。() 6. Word属于系统软件,因为它在多个行业、部门中得到广泛的使用。() 7. Oracle是一数据库软件,属于系统软件。() 8. “软件工程”的概念出现在计算机软件发展的第三阶段。() 》 9. 一般只有硬件、没有软件的计算机被称为“裸机”。() 10. 计算机操作系统自举完成后,操作系统的所有程序常驻内存。() 11. Windows操作系统可以在任意的计算机上安装。() 12. Linux操作系统是Unix简化后的新版本。() 13. 机器语言程序是直接运行在裸机上的最基本的系统软件。() 14. 汇编语言是面向机器指令系统的机器语言。() 15. 计算机硬件就是组成计算机的各种物理设备的总称。() 16. 同一个程序在解释方式下的运行效率比在编译方式下的运行效率低。() 17. 编译程序仅是指从高级语言到机器语言的翻译程序。() 18. 在设计程序时一定要选择一个时间代价和空间代价都是最小的算法,而不用考虑其它问题。() 、 19. 离散数学的主要研究对象是连续的数据结构。() 20. 数据结构的内容包括数据的逻辑结构、存储结构以及在这些数据上定义的运算的集合。() 21.链接表是以指针方式表示的“线性表结构”。() 22. 程序与算法不同,程序是问题求解规则的一种过程描述。() 23. 软件产品的设计报告、维护手册和用户使用指南等不属于计算机软件。() 24. 支持多用户、多任务处理和图形用户界面是Windows的特点。() 25. 程序设计语言按其级别可以分为硬件描述语言、汇编语言和高级语言三大类。() 26.源程序通过编译处理可以一次性地产生高效运行的目标程序,并把它保存在外存储器上,可供多次执行。() 27. 程序语言中的条件选择结构可以直接描述重复的计算过程。() 基本的控制结构 一、选择题 1.VB 提供了结构化程序设计的三种基本结构,这三种基本结构是 。 (A ) 递归结构、选择结构、循环结构 (B )选择结构、过程结构、顺序结构 (C )过程结构、输入输出结构、转向结构 (D )顺序结构、选择结构、循环结构 2.下面程序段运行后,显示的结果是 。 Dim x If x then print x else print x+1 (A) 1 (B)0 (C)-1 (D)显示出错信息 3.对于语句If x=1 then y=1,下列说法正确的是 。 (A) x=1和 y=1均为赋值语句 (B )x=1和y=1均为关系表达式 (C) x=1为关系表达式,y=1为赋值语句 (D )x=1为赋值语句,y=1为关系表达式 4.用if 语句表示分段函数f(x)= 1,31 ,12<+≥+x x x x ,下列不正确的程序段是 (A) f=x*x+3 (B) if x>=1 Then f=Sqr(x+1) If x>=1 Then f=Sqr(x+1) if x<1 Then f=x*x+3 (C)if x>=1 Then f=Sqr(x+1) (D)if x<1 Then f=x*x+3 Else f=x*x+3 Else f=Sqr(x+1) 5.下面程序段,运行后显示的结果是 Dim x X=Int(Rnd)+5 Select Case x Case 5 Print “优秀” Case 4 Print “良好” Case 3 Print “通过” Case Else Print “不通过” End Select (A)优秀 (B)良好 (C)通过 (D)不通过 6.下面语句执行后,变量w 中的值是 W=Choose(Weekday(“2007,5,1”),“Red”, “Green ” “Blue ” “Yellow ”) (A)Null (B) “Red” (C) “Blue ” (D) “Yellow ” 7. 以下______是正确的For … Next 结构。 (A )For x=1 To Step 10 (B )For x = 3 To 3 Step 3 … … Next x Next x 第三章程序控制结构 通过本章实验作业应达目标 1.熟练掌握格式输入与格式输出函数与各种格式符的使用,掌握各类数据输入/输出的实现方法; 2.学会正确使用关系与逻辑运算,熟练构建关系与逻辑表达式; 3.练习并熟练掌握if、switch语句使用,实现二路与多路选择结构; 4.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构; 5.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。 6.进行算法设计训练,能综合所学控制结构语句解决一般问题。 本章必须上交作业 第一部分输入/输出作业要求 程序3_3.c上传至http://121.251.227.27:8080/c。源程序可以.cpp命名。 第二部分分支结构作业要求 程序3_5.c、3_6.c、3_8.c上传至http://121.251.227.27:8080/c。 第三部分循环控制结构作业要求 程序3_9.c、3_11.c、3_13.c、3_14.c、3_15.c、3_16.c、3_19.c上传至http://121.251.227.27:8080/c。 第一部分顺序结构与输入/输出程序设计 实验一一个三位数逆序输出 【实验目的】 了解顺序程序结构,学习调试程序。 【实验内容】 下面程序功能:键盘输入一个三位数,输出逆序后的数。例如,输入236,输出632。程序中有多处错误,改正后在机器上调试通过。程序以3_1.c命名。 #include 第七章 Visual Basic控制结构 教学要求: 熟练掌握选择结构条件语句(包括单行结构条件语句、块结构条件语句)、IIf函数的特点和使用,熟练掌握多分支结构的特点和使用,熟练掌握For循环控制结构、DO循环控制结构的特点和使用,掌握多重循环控制结构,了解GOTO型控制(GOTO和ON-GOTO语句)的特点,正确使用选择结构、循环结构的嵌套。 知识点: 单行结构条件语句、块结构条件语句;IIf函数;多分支结构;For循环结构、DO循环结构、多重循环控制结构,循环控制语句的比较;选择结构、循环结构的嵌套。 熟练连续累加、累乘的算法,数列运算算法、‖遍历‖算法的程序设计;常用数值运算算法:平方根迭代公式、牛顿迭代法和二分法求方程的根、求f(x)的数值积分、泰勒公式。 内容导航: 一、选择控制结构 (一)单行结构条件语句 格式:If条件Then then部分[Else else部分] 功能:如果―条件‖为True,则执行―then部分‖,否则执行―else部分‖。 (二)块结构条件语句 格式: If条件1 Then 语句块1 [ElseIf 条件2 Then 语句块2] [ElseIf 条件3 Then 语句块3] …… [Else 语句块n] End If 功能:如果―条件1‖为True,则执行―语句块1‖;否则如果―条件2‖为True,则执行―语句块2‖……否则执行―语句块n‖,若无Else及其后面语句,则执行End If后面的语句。(三)IIf函数 IIf函数的格式:result=IIf(条件,True部分,False部分) 功能:当―条件‖为真时,IIf函数返回―True部分‖,而当―条件‖为假时返回―False部分‖。 二、多分支控制结构 格式: Select Case 测试表达式 Case 表达式表列1 语句块1 [Case表达式表列2 [语句块2]] 第四章VB程序的控制结构 4.1算法概论 1.算法的概念 算法:指用计算机解决某一问题的方法和步骤。 数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。 非数值算法:用于对非数值信息进行查找、排序等。 2.算法的特征 (1)确定性:指算法的每个步骤都应确切无误,没有歧义。 (2)可行性:指算法的每个步骤必须是计算机能够有效执行、可以实现的,并可得到确定的结果。 (3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的。 (4)输入性:指一个算法可以有0或多个输入数据。 (5)输出性:指一个算法必须有一个或多个输出结果。 3.算法的评价 主要评价指标是:算法是否正确、运行的效率、占用系统资源的多少。 4.算法的描述 一般常用流程框图来描述算法。 5.基本算法结构 “结构化程序设计方法”规定算法有三种基本结构:顺序结构、选择结构和循环结构 6.算 法示 例 (1) 欧几里德算法——求两个自然数的最大公约数 (2)顺序查找算法——在N个字符串集合中,查找有无特定的字符串存在 4.2顺序结构 1.赋值语句 赋值语句是任何程序设计中最基本的语句,赋值语句都时顺序执行的。赋值语句的形式为: 变量名= 表达式 它的作用是计算右边表达式的值,然后赋给左边的变量,表达式的类型应该与变量名的类型一致。 2. 使用说明 (1)当表达式为数值型而与变量精度不同时,强制转换成左边变量的精度; (2)当表达式是数字字符串,左边变量是数值类型,自动转换成数值类型再赋值,但当表达式中有非数字字符或空串,则出错。 (3)任何非字符类型赋值给字符类型,自动转换为字符类型; (4)当逻辑型赋值给数值型时,True转换为-1,False转换为0;反之,非0转换为True,0转换为False; (5)赋值号左边的变量只能是变量,不能是常量、常数符号、表达式,否则报错; (6)不能在一句赋值语句中,同时给各变量赋值; (7)在条件表达式中出现的= 是等号,系统会根据= 号的位置,自动判断是否为赋值号; (8)注意N=N+1 是累加中常见的赋值语句,表示将N变量中的值加1后再赋值给N。 5 4.3选择结构(或称分支结构) 1.1. IF条件语句 (1)If……Then语句(单分支结构F) 语句形式: 1)If<表达式> Then 语句块 End If 2)If <表达式> Then <语句> 《C语言程序设计》课程教案表 授课题目 第三章程序的控制结构(3)——选择结构if 课时安排 1 授课时间 教学目的和要求 1.掌握:条件表达式、if语句 2.熟悉:关系运算符和关系表达式、逻辑运算符和逻辑表达式 教学内容 1.基本内容:(1)关系运算符和关系表达式(2)逻辑运算符和逻辑表达式(3)条件语句2.重点:条件语句 讲课进程和时间分配 引子(15分钟) 关系运算就是比较运算,即将两个数据进行比较,判定两个数据是否符合给定的关系。 a > b a = = b a != b 1、关系运算符和关系表达式 (1)关系运算符及其优先次序 1)关系运算符 C语言中关系运算符为二目运算符,共有6种: < 小于关系运算符 <= 小于等于 > 大于 >= 大于等于 = = 等于) != 不等于 关系操作数可以是数值类型数据和字符型数据。 2)关系运算符的优先级 ①<、<=、> 和>= 为同一级,== 和!= 为同一级。且前4个高于后2个;结合方向 均为自左至右。 ②关系运算符的优先级低于算术运算符,但高于赋值运算符。 例如: a+b > b+c 等效于(a+b)>(b+c)。 (2+a)==(b-a) 等效于2+a == b-a。 (2)关系表达式 1)关系表达式的概念 是指用关系运算符将两个表达式连接起来进行关系运算的式子。 例如: a + b > b + c 比较两个算术表达式的值 a <= 2 * b 比较变量和算术表达式的值 'a' < 'b' 比较两个字符的ASCII码值 2)关系表达式的值—逻辑值(“真”或“假”) 由于C语言没有逻辑型数据,所以,用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。 例如,假设a=3,b=4,c=5则: a>b的值为0(假)。 (a>b)!=c的值为1(真)。 (a 教学提示:前面几章介绍的Java程序只能按照语句的书写顺序依次执行,还不具备选择功能和循环功能。本章将介绍Java语言的三种程序结构:顺序结构、选择结构和循环结构。在三种结构中,顺序结构比较简单,而选择结构和循环结构是由Java语言的控制语句实现的。Java语言的控制语句分为选择语句、循环语句和跳转语句。 教学目标:掌握Java语言三种程序控制结构,能灵活运用控制语句编写程序。 3.1顺序结构 顺序结构是一种按照从上到下逐步执行程序的结构,中间没有判断和跳转语句,是最简单的程序结构,为了加深对顺序结构程序的认识,下面我们演示一个程序。 【例3-1】输入一个数,求其平方根。 设计思路:完成这个任务需要以下3个操作步骤:输入数据;计算其平方根;显示结果。 代码:j301.java import java.io.*; public class j301 { public static void main(String arg[]) throws IOException { int x; double y; String str; //声明字符串类 BufferedReader buf; //声明缓冲数据流类 System.out.print("请输入一个数:"); buf=new BufferedReader(new InputStreamReader(System.in)); str=buf.readLine(); x=Integer.parseInt(str); y=Math.sqrt(x); //求平方根 System.out.println(x+"的平方根为:"+y); //显示计算结果 } } 运行结果如图3-1所示: 29第三章测验及答案
第四章基本的控制结构答案
第三章作业 程序控制结构
第三章控制结构练习题
第四章 VB程序的控制结构
c语言程序设计教案程序的控制结构—选择结构
第三章 Java程序控制结构