C语言习题:顺序、选择、循环
2.3顺序结构程序设计
2.3.1 要点导读
1.printf() 与scanf()语句。
printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。
2.字符数据的输入输出。
最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。
2.3.2 经典例题分析
1.下列程序运行后输出的结果是。
#include
void main()
{
int a=0,b=0;
a=10;
b=20;
printf(“a+b=%d”,a+b);
}
分析:printf( )是输出函数,它的括号内由两部分组成:
1)控制字符串,是用双引号括起来的字符串,它包括两种信息:
(1) 格式说明。由”%”和格式字符组成,如:%d、%f、%c等。它的作用是将输出
的数据转换成指定的格式输出。
(2) 普通字符。需要原样输出的字符。
2)”输出表列”是需要输出的一些数据,可以是表达式。
题目中a的值是10,b的值是20,在
printf(“a+b=%d”,a+b);
格式说明输出表列
中,”a+b= “是普通字符,需原样输出。输出表列是一个表达式,它的结果以整型输出。
答案:a+b=30。
2.下列程序运行后输出的结果是。
#include
void main()
{
int a=732;
printf(“%d\n”,a);
printf(“%2d\n”,a);
printf(“%10d\n”,a);
printf(“%-10d\n”,a);
}
分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。
答案:732
732
□□□□□□□732 /*□表示空格*/
732□□□□□□□
3.已知char a=…\103?;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格)
A)□67B)?c?C)67□D)103
分析:?\103?是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把?\103?转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。
答案:C。
4.下列程序运行后结果是。
#include
#define a 3345.67
void main()
{ printf(“%f\n”,a);
printf(“%e\n”,a);
printf(“%4.2f\n”,a);
printf(“%3.1f\n”,a);
printf(“%10.3f\n”,a);
printf(“%-10.3f\n”,a);
}
分析:f格式符,用来输出实数,以小数形式输出,小数点后输出6位。所以printf(“%f\n”,a);输出结果为3345.670000。
%m.nf是指,要输出的数占m列,同时小数点保留n位(四舍五入),如果输出的数大于m,则原样输出,同时小数点保留n位(四舍五入)。如果小于m,则左补空格,同时小数点保留n位(四舍五入)。printf(“%4.2f\n”,a);输出结果为3345.67。
printf(“%3.1f\n”,a);输出结果为3345.7。
e格式符,以规范化指数的形式输出,所以printf(“%e\n”,a);3.345670e+03。
答案:3345.670000
3.345670e+03
3345.67
3345.7
□□3345.670 /*(□表示空格)*/
3345.670□□
5.下列程序运行后结果是。
#include
void main()
{
char x=0x227f;
printf(“%d\n”,x);
}
A) 22 B) 127 C) 255 D)8831
分析:变量x被定义成字符型,字符型占1个字节,而x被赋值为一个4位16进制的值22ff,占16位。所以227f高8位被舍去,x的值为7fH。执行printf(“%d\n”,x);即把x以有符号的十进制整数输出。
答案:B。
6.设int b=0;下列语句的输出结果是。
printf(“%d,%d”,++b,b--);
A) 1,1 B) 1,0 C) 0,0 D) 0,-1
分析:printf函数的执行顺序是由右到左,输出顺序是由左向右。
答案:C。
7.下列程序运行时,若从键盘输入:123<回车>45678<回车>后结果是。
#include
void main()
{
char c1,c2,c3,c4,c5,c6;
scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);
c5=getchar( );
c6=getchar( );
putchar(c1);
putchar(c2);
printf(“%c%c\n”,c5,c6);
}
分析:scanf(格式控制,地址表列)的功能是:从键盘读取输入的信息。其中”格式控制”的含义同printf函数;”地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。其scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4)的作用是:按照c1,c2,c3,c4在内存的地址将c1,c2,c3,c4的值存进去。由于”%c”表示按字符形式输入数据,所以”回车符”作为一个字符,输入有效。getchar( )函数的作用从终端输入一个字符。putchar( )函数的作用是向终端输出一个字符。所以c1=1、c2=2、c3=3、c4=回车,c5=4、c6=5。
答案:1245。
8.设有定义int a;float b;执行scanf(“%2d%f”,&a,&b);语句时,若从键盘输入876 543.0<回车>,
a和b的值分别是。
分析:scanf()可以指定输入数据所占的列数,系统自动按它截取所需数据。%2d说明了a占两列,即为87,剩下的数字应该赋给b,但是6和5之间有一个空格,为输入终止符,所以543.0被舍弃,即b的值为6。
答案:87 6。
9.已知a,b,c为int类型,执行scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);后,若要使得a为1,b 为2,c为3,则以下选项中正确的输入形式是( )。
A) 1,2,3 B) a=1,b=2,c=3 C) 1 2 3 D) a=1 b=2 c=3
分析:scanf中如果在字符控制串中除了格式说明符以外还有其他字符,则在输入数据时应输入与这些相同的字符。
答案:B。
10.设有int x,y;scanf(“%d%*d%d”,&x,&y);从键盘输入数据10□20□30<回车>后,y的值
是。
分析:%*d表示跳过。所以y的值是30。
答案:30。
2.3.3 习题
一、选择题
1.设a、b、c为整型变量,若从键盘给a、b、c输入数据,则正确的输入语句是。
A)scanf(“%f%f%f”,&a,&b,&c) ; B) scanf(“%d%d%d”,&a,&b,&c);
C) scanf(“%d%d%d”,a,b,c); D) scanf(“%d%d%d”,&a;&b;&c);
2.下列程序执行后输出的结果是。
#include
void main()
{
int x=…d?;
printf(“%c”,?A?+(x-?a?+1));
}
A) G B) H C) E D) J
3.设整型变量a,b的值均为8。printf(“%d,%d”,(a++,++b),b--);的输出值是。
A)8,8 B)8,7 C)9,9 D)8,9
4.若有以下程序段,执行后输出的结果是。
int m=100,n=0100;
printf(“%d,%o\n”,m,n);
A) 100,100 B) 100,0100 C) 100,4 D) 100,04
5.有以下程序,其输出结果是。
#include
void main()
{
float x=1;
int y;
x++;
y=x+1;
printf(“x=%d,y=%f”,x,y);
}
A) x=2,y=3 B) x=2,y=3.0 C) x=2.0,y=3 D) x=0,y=0.000000
6.有以下程序,其输出结果是。
#include
void main()
{
int a;
char c=10;
float f=100.0;
double x;
a=f/=c*=(x=6.5);
printf(“%d,%d,%3.1f,%3.1f”,a,c,f,x);
}
A) 1,65,1,6.5 B) 1,65,1.5,6.5 C) 1,65,1.0,6.5 D) 2,65,1.5,6.5
二、填空题
1.下列程序输出的结果是。
#include
void main()
{
int x=7,y=5;
printf(“y=%d\n”, x%y);
}
2.下列程序输出的结果是。
#include
void main()
{
float d,f;
long k;
int i;
i=f=k=d=20/3;
printf(“%3d%3ld%5.2f%5.2f\n”,i,k,f,d);
}
3.下列程序输出的结果是:。
#include
void main()
{
int k=11;
printf(“k=%d,k8=%o,k16=%x\n”,k,k,k);
}
4.下列程序输出结果是:。
#include
#define BL “https://www.360docs.net/doc/636482194.html,!”
void main()
{
printf(“%2s\n”,BL);
printf(“%15s\n”,BL);
printf(“%15.4s\n”,BL);
printf(“%-15.4s\n”,BL);
}
5.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据形式应该是。
int b,c;float a;
scanf(“%f,%d,c=%d”,&a,&b,&c);
6.当输入为56789 012345a72时,执行下列程序段后,变量i、j、x、y、c的值各是什么?
int i,j;
float x,y;
char c;
scanf(“%2d%f%f%c%d”,&i,&x,&y,&c,&j);
三、编程题
1.已知x=3.2,y=7,z=2,计算y/3*x-2的值。
2.输入一个华氏温度,要求输出摄氏温度(结果保留2位)。公式为c=5/9*(f-32)。
3.从键盘输入一个小写字母,用大写形式输出该字母。
4.把16进制数12a以10进制形式输出。
5.输入两个整数,将其值交换。
2.3.4 本节易错知识点
本节阐述了printf()、scanf()、putchar()和getchar()的具体用法。
对于scanf()的用法应注意以下几点:
1) 如果在字符控制串中除了格式说明符以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。例如:scaf(“%d,%d”,&a,&b);输入时用如下形式:
5,6
此处5后面是逗号,它与scanf()函数字符控制串中的逗号对应。输入时只能输入逗号,不可用”空格”替代。
2)用%c格式输入字符时,空格、回车及转义字符均作为有效字符输入。例如:scanf(“%c%c%c”,&a,&b,&c);
若要使变量a,b,c的值分别为?A?、?B?、?C?,就只能输入ABC<回车>。当使用多个scanf()
函数连续给多个字符型变量赋值时,注意输入的方法。例如:
scanf(“%c”,&c1);
scanf(“%c”,&c2);
如果要使得c1的值为?a?,c2的值为?b?,则正确输入方法为:ab<回车>,而不是a<回车>b<回车>。
3) 遇到满足最大字段宽度或非法输入时认为结束,如:”%2d”,只取两位数。如:scanf(“%d%c%f”,&a,&b,&c);若输入:1234a56p.78则a的值1234,b的值a,c的值56。
2.3.5 实验指导
实验名称顺序结构程序设计
一、实验目的
1.掌握数据的输入输出的方法,能正确使用有关格式转换符;
2.熟悉顺序结构程序中语句的执行过程;
3.掌握顺序结构程序的设计方法
二、实验内容与要求
1.下列程序作用是依次输入2个整数,计算并输出这2个整数之差。
#include
void main()
{
float a,b,c;
printf(“input a,b”\n”);
scanf(“%d,%d”,&a,&b);
c=a-b;
printf(“c=%d\n”,c);
}
①分析程序,若运行时输入:100,60 <回车>后预期结果是多少?
②上机运行该程序,查看程序运行结果是否符合题目要求。如果不符合分析原因并修改程序,直至符合要求为止。
2.按下列公式计算并输出s的值,s=3/(a+b)2。有下列程序:
#include
void main()
{
int a,b;
float s;
scanf(“%d,%d”,&a,&b);
s=3 /(a+b)*(a+b); /*有两个错误*/
printf(“s=%f\n”,s);
}
①根据题意修改上述程序,并进行调试,直到正确为止。
②在①的基础上,将scanf(“%d,%d”,&a,&b);改为scanf(“%d%d”,&a,&b);后再编译、链接、
运行。
3.分析下列程序,写出预期结果,然后输入调试,查看运行结果与预期结果是否一致并分析其原因。
#include "stdio.h"
void main()
{
int a=-1;
unsigned b=65534;
printf("%d,%o,%x,%u\n",a,a,a,a);
printf("b=%d",b) ;
}
4.编程并上机调试运行
1) 设圆半径为r=1.5,求圆周长和面积。要求用scanf函数输入数据,输出时取小数点
后两位。
2) 输入一个3位十进制整数,分别输出百位、十位以及个位上的数。
3) 从键盘输入一个带2位的实数,将其整数部分和小数部分分离后输出。例如:输入
321.54,输出321.54=321+0.54。
4) 用getchar函数读入两个字符,然后分别用putchar和printf函数输出这两字符。
2.4 选择结构程序设计
2.4.1 要点导读
1.关系运算符与关系表达式
关系运算是逻辑运算中比较简单的一种。它的实质是两个值之间的”比较运算”,其结果只有两种:”真”、”假”。因此关系表达式的运算结果也只有两种:”真”、”假”。
C语言提供6种关系运算符:>、<、>=、==和!=。在这里>、<、>=、优先级相同,==和!=优先级相同。前4种的优先级高于后两者。
2.逻辑运算符与逻辑表达式
逻辑运算符可以将多个关系表达式或逻辑量连接起来,构成逻辑表达式。C语言里提供了3种逻辑运算符:!、&&、||。不同逻辑运算符进行运算所得的结果如下表:
a b !a !b a&&b a|b
真(非0) 真(非0) 假(0) 假(0) 真(1) 真(1)
真(非0) 假(0) 假(0) 真(1) 假(0) 真(1)
假(0) 真(非0) 真(1) 假(0) 假(0) 真(1)
假(0) 假(0) 真(1) 真(1) 假(0) 假(0) 在C语言中,关系表达式与逻辑表达式的结果用数据值“1”表示真、“0”表示假。判断一个表达式时,非“0”即为真、“0”为假。
3.if语句的三种基本形式
用if语句可以构成选择结构。它判断给定的条件是否满足,以决定执行某个分支程序段。C语言的if语句有三种基本的实现形式:if、if-else和if-else if形式。
4.switch语句
C语言提供了另一种用于多分支选择的switch语句,其一般形式为:
switch (表达式)
{ case 常量表达式1:语句1
case常量表达式2:语句2
……
case常量表达式n:语句n
default: 语句n+1 }
其表达式应为整型、字符型、枚举型表达式。它的语意是:计算表达式的值,并依次与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句。如果表达式与所有的case后的常量表达式均不相同时,则执行default后的语句。
2.4.2 经典例题分析
1.若有int i;则执行语句i=4>3>2;后,i的值为。
分析:这是一个关系表达式,在这个表达式中有?>…和?=…,可知?>…的优先级高于?=…,且?>…的结合性是→,所以,先判断4>3,显然是为真的,即表达式的值为1。再判断1是否大于2,显然不成立为假,即为0,然后把0赋给i,所以i的值为0。
答案:0。
2.若变量c为char类型,下列选项中能正确判断出c为数字字符的表达式是。
A )?0?<=c<=…9?B) c>=…0?&&c<=…9?C) c>=0&&c<=9?D) c>=…0?&c<=…9?
分析:在C语言中要表达a>b>c应该这样写a>b&&b>c,因为c为数字字符,应在?0?~?9?之间,所以应为:c>=…0?&&c<=…9?。
答案:D。
3.已知int x=1,y=2,z=3;则逻辑表达式x 分析:C语言在计算逻辑表达式时,如果在某一步已得到了整个表达式的结果,则后面的部分将不再计算。对于&&表达式,若已得到一个操作数为0,则后面的操作数不再计算。对于||表达式,若已得到一个操作数为1,则后面的操作数不再计算。本题中,1<2显然为真即为1,所以++z不需要再运算了,z的值没改变,还是为3。 答案:3。 4.下列程序运行的结果是:。 #include void main() { char c=…d?; if(…m? else printf(“NO”); } 分析:这是if-else形式,格式为:if(表达式) 语句1 else 语句2 其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。本题中,表达式?m? 答案:YES。 5.if(表达式)语句,其中”表达式”。 A) 必须是逻辑表达式B) 必须是关系表达式 C) 必须是逻辑表达式和关系表达式D) 可以是任意合法的表达式 分析:表达式一般是关系表达式或逻辑表达式,用于描述选择结构的条件,但也可以是其它类型的表达式,只要其合法,在其值非0时都视为真,所以其它表达式也可以做if语句的判断条件。 答案:D。 6.下列程序运行结果是:。 #include void main() { int a=1; if(a) printf(“YES”); else printf(“NO”); } 分析:if(表达式)中的”表达式”可以是任意合法的,其实质是判断表达式是真还是假。本题a的值为1,if(a) printf(“YES”); else printf(“NO”);的含义是判断a是否为真(非0),如果为真则输出”YES”,否则输出”NO”。 答案:YES。 7.C语言对于嵌套的if语句规定else 总是匹配。 A)与最外层的if B)与之前最近的且未配对的if C)与之前最近的不带else的if D)与最近的{ }之前的if 分析:在C语言中,为了避免语句造成二义性,规定,else总是与它前面最近的未配对的if配对。 答案:B。 8.下列程序运行结果是:。 #include void main() { int x=1,y=2,z=3; if(x if(y else printf(“%d”,++y); printf(“%d\n”,x++); } 分析:由if-else匹配规则可知,else与if(y 答案:41。 9.若有定义:float x=1.5;int a=1,b=3,c=2;则正确的switch语句是。 A) switch(x) B) switch((int)x); { { case 1.0:printf(“*\n”); case 1:printf(“*\n”); case 2.0:printf(“**\n”); case 2:printf(“**\n”); } } C) switch(a+b) D) switch(a+b) { { case 1:printf(“*\n”); case 1:printf(“*\n”); case 2+1:printf(“**\n”); case c:printf(“**\n”); } } 分析:C语言提供了另一种用于多分支选择的switch语句,其一般形式为: switch (表达式) { case常量表达式1:语句1 case常量表达式2:语句2 …… case常量表达式n:语句n default: 语句n+1 } 表达式一般应为整型、字符型、枚举型表达式。A选项中case后是浮点型,应为一个整型、字符型或枚举型常量表达式;B选项switch((int)x);中多了分号,D选项case c:printf(“**\n”);中c是一个变量,应为一个常量表达式。 答案:C。 10.下列程序执行后结果是。 #include void main() { int a=16,b=21,m=0; switch(a%3) { case 0: m++; break; case 1: m++; switch(b%2) { default: m++; case 0: m++;break; } } printf(“%d”,m); } 分析:switch语句的意思为:计算表达式的值,并依次与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句。如果表达式与所有的case 后的常量表达式均不相同时,则执行default后的语句。break语句用于跳出switch语句。本题a%3值为1,执行case 1:m++;以及后面的语句。b%2值为1,执行default: m++;以及后面的语句。 答案:3。 2.4.3 习题 一、选择题 1.下列程序段运行后结果是。 int a,b,c; a=1;b=2;c=3; if(a>b) c=a;b=c; printf(“a=%d,b=%d,c=%d”,a,b,c); A) a=1,b=3,c=3 B) a=1,b=3,c=2 C) a=1,b=2,c=3 D) a=2,b=1,c=1 2.下列程序运行后的结果是。 #include void main() { int a=1,b=2,c=3; if(a++==1&&(++b==3&&c++==3)) printf(“%d,%d,%d\n”,a,b,c); } A) 1,2,3 B) 2,3,5 C) 2,2,3 D) 2,3,4 3.与y=(x>0?1:x<0?-1:0)的功能相同的if语句是。 A) if(x>0) y=1; B) if(x) else if(x<0) y=-1; if(x>0) y=1; else y=0; else if(x<0) y=-1; C) y=-1; D) y=0; if(x) if(x>=0) if(x>0) y=1; if(x>0) y=-1; else if(x==0) y=0; else y=-1; else y=-1; 4.有以下程序,执行后结果是。 #include void main() { int a=5,b=4,c=3,d=2; if(a>b>c) printf(“%d\n”,d); else if((c-1)>=d)==1) printf(“%d\n”,d+1); else printf(“%d\n”,d+2); } A) 2 B) 3 C) 4 D) 5 5.若有定义:float w; int a,b;char c;则合法的switch语句是。 A) switch(b) B) switch(a); { { case 1.0:printf(“*\n”); case 1 printf(“*\n”); case 2.0:printf(“**\n”); case 2 printf(“**\n”); } } C) switch(b) D) switch(w) { { case 1:printf(“*\n”); case 1:printf(“*\n”); case 1+2:printf(“**\n”); case c:printf(“**\n”); } } 6.下列程序运行后的结果是。 #include void main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf(“%d,%d\n”,a,b); } A) 2,1 B) 1,1 C) 1,0 D) 2,2 二、填空题 1.能正确表述逻辑关系20 2.设int a=0,b=0,c=0;c=a++&&b++;则a,b,c的值分别是。 3.若从键盘输入58,则以下程序输出结果是。 #include void main() { int a; scanf(“%d”,&a); if(a>50) printf(“%d”,a); if(a<=58) printf(“%d”,a); if(a>=58) printf(“%d”,a); } 4.下列程序运行后的结果是。 #include void main() { int x=10,y=20,t=0; if(x==y) t=x;x=y;y=t; printf(“%d,%d\n”,x,y); } 5. 当int a=1,b=3,c=5,d=4;时,执行下列一段程序后,x的值:。 if(a if(c else if(a if(b else x=3; else x=6; else x=7; 6.下列程序运行后的结果是。 #include void main() { int x=1,y=0,a=1,b=0; switch(x) { case 1:switch(y) { case 0:a++; case 1:b++;break; } case 2:a++;b++;break; } printf(“a=%d,b=%d\n”,a,b); } 三、编程题 1.要求输入三个数,输出其中最大值。 2.由键盘输入3个数,若输入的这3个数可以构成三角形,则计算以这3个数为边长的三角形周长;如果不能,则输出提示错误信息。 3.从键盘上输入一个整数判断其奇偶以及正负。 4.判断方程ax2+bx+c=0的根的个数。 5.从键盘输入表示年份的整数,判断是否为闰年。判断闰年的方法是:能被400整除的年是闰年;或者凡是能被4整除但不能被100整除的年是闰年。 2.4.4 本节易错知识点 本节阐述了逻辑表达式、if、if-else、if-else和switch语句的具体用法。 1.在逻辑表达式运算中应注意,如果在某一步已得到了整个表达式结果,则后面的部分将不再计算。例如:c=b&&++a;如果这里b为0,那么++a将不再执行,仍为原值。 2.在if语句中,应该注意if语句中的表达式可以为所有的合法的表达式。例如: int a=1; if(a=0) printf(“Yes”); else printf(“No”); 3.在if语句3种形式中,如果要想在满足条件是执行一组语句,必须使用{}括起来一个复合语句,但在{}后面不能加分号。 4.在使用switch()语句时应注意:在case后的各个常量表达式值都不能相同;case后允许有多个语句,可以不用{ }括起来;若每个分支后,都有break语句,则各case和default 子句先后顺序可以变动而不影响程序结果;default子句可以省略不用。 2.4.5 实验指导 实验名称选择结构程序设计 一、实验目的 1.学会正确使用关系运算符和关系表达式; 2.学会正确使用逻辑运算符和逻辑表达式以及关系表达式等; 3.熟练掌握if语句和switch语句; 4.熟悉选择结构程序中的语句执行过程,掌握选择结构程序设计的方法。 二、实验内容与要求 1.编写程序,判断从键盘上输入的一个字符,并按下列要求输出。 1) 若该字符是数字,输出字符串”0-9”; 2) 若该字符是大写或者小写字母,输出字符串”A-z”; 3) 若该字符是其他字母,输出”!,@,……”。 #include void main() { char c; scanf(“%c”,&c); if( ) printf(“0-9\n”); else if( ) printf(“A-z”); printf(“!,@,……\n”);} 2. 编程并上机调试运行 1)给出一个不多于4位的正整数,求它是几位数? 2)给出一个百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分及以上为’A’,80~89为?B?,70~79为?C?,60~69为?D?,60以下为?E?。用switch语句来实现。 3)输入4个整数,要求按从大到小顺序输出。 4) 输入3个整数,将最大数与最小数交换。 5) 输入一个字符,如果是数字字符,把它转换成相对应的数字并输出;如果不是,则 以带符号的十进制整数形式输出。 2.5 循环结构程序设计 2.5.1 要点导读 1.while语句 while语句一般形式为:while(表达式) 语句。它的执行过程为:计算表达式的值,当值为真,执行循环体语句。其特点是:先判断,后执行。 2. do-while语句 do-while语句一般形式为:do 循环体语句while(表达式);它的执行过程:先执行循环体一次,再判断表达式的值,若为真则继续循环,否则终止循环。 3.for语句 for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。 for语句的一般形式是:for(表达式1;表达式2;表达式3) 其中表达式1一般是赋值表达式,用来给循环变量赋初值。表达式2一般为关系表达式或逻辑表达式,表示循环条件,当表达式2为真时,则继续循环,否则循环结束。表达式3一般是赋值语句或自增(自减)语句,用来修改循环变量的值,表示循环变量的变化方式。 4.转移语句 程序中的语句通常总是按顺序方向或按语句功能定义的方向执行的。如果需要改变程序的正常流向,可以使用转移语句。在C语言中提供了4种转移语句: break,continue,return,goto 5.循环嵌套 一个循环语句的循环体内包含另一个完整的循环语句,称为循环的嵌套。循环的嵌套可以组成多重嵌套。 2.5.2 经典例题分析 1.下列程序段中,while循环执行的次数是。 int k=0; while(k=1) --k; A)无限次B)不能执行C)一次也不执行D)执行1次 分析:while语句一般形式为while(表达式) 语句,执行过程为:计算表达式的值,当值为真(非0)时,执行循环体语句。其特点是先判断,后执行。本题k初始值为0,当进入循环的判断表达式后k的值为1,为真。因为判断表达式是一个赋值表达式,每次循环执行完之后,k的值总是被赋值为1,判断表达式一直为真,所以执行无限次。 答案:A。 2.下列两个程序输入11后结果分别是。 #include void main() void main() { { int sum=0,i; int sum=0,i; scanf(“%d”,&i); scanf(“%d”,&i); while(i<=10) do { { sum=sum+i; sum=sum+i; i++; i++; } } while(i<=10); printf(“sum=%d\n”,sum); printf(“sum=%d\n”,sum); } } 分析:while(表达式) 语句。计算表达式的值,当值为真时,执行循环体语句。 do 循环体语句while(表达式);先执行循环体一次,在判断表达式的值,若为真则继续循环,否则终止循环。 答案:0,11。 3.for(表达式1;;表达式3)可理解为。 A) for(表达式1;0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3) 分析:for语句的一般形式是for(表达式1;表达式2;表达式3)。其中表达式2一般为关系表达式或逻辑表达式,表示循环条件,当表达式2为真时,则继续循环,否则循环结束。题目中表达式2为空,也就是说本循环没有设立条件,那么循环为无限循环,所以表达式2一直为真(非0)。 答案为B。 4.下列程序的运行结果是。 #include void main( ) { int c=0,k; for(k=1;k<3;k++) switch(k) { default: c+=k; case 2: c++;break; case 4:c+=2;break; } 循环习题集锦 一.选择题 1.for(i=0;i<10;i++);结束后,i的值是;(10) A 9 B 10 C 11 D 12 2.下面程序的循环次数是:(D) int k=0; while(k<10) {if(k<1) continue; if(k==5) break; k++; } A. 5 B 6 C 4 D 死循环,不能确定循环次数3.下面程序的输出结果是(10) main() { int s,k; for(s=1,k=2;k<5;k++) s+=k; printf(“%d\n”,s); } A 1 B 9 C 10 D 15 4.要使下面程序输出10个整数,则在下画线处填入正确的数是:(c) for(i=0;i<= ;) printf(“%d\n”,i+=2); A 9 B 10 C 18 D 20 5.运行下面程序:(B) main() { int i=10,j=0; do { j=j+i; i--; }while(i>5); printf(“%d\n”,j); } 输出结果是: A 45 B 40 C 34 D 55 6.运行下面程序 #include “stdio.h” main() { int k=0,a=1; while(k<10) { for( ; ;) { if((k%10)==0) break; else k--; } k+=11; a+=k; } printf(“%d %d\n”,k,a); } 则输出的结果是(C) A 21 32 B 21 33 C 11 12 D 10 11 7.以下叙述正确的是:(D) A.do---while语句构成的循环不能用其他语句构成的循环来代替。B.do---while语句构成的循环只能用break语句退出。 C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。 D.用do---while语句构成的循环,在while后的表达式为零时结束循环。 8.有如下程序: main() { int x=3; do{ C语言(分支和循环结构) 一、选择题 1.以下程序输出结果是( ) main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--);} A)7 B)6 C)5 D)4 2以下程序的输出结果为( ) # include 4若i为int型,且有程序如下,则输出结果是( ) i=111; if(i%3==0) printf("####"); printf("****"); A) #### B) **** C) ####**** D) 无输出结果 5若运行时x=12,则运行结果为( ) {int x, y; scanf("%d", &x); y=x>12 ? x+10:x-12; printf("%d\n", y);} A) 0 B) 22 C) 12 D) 10 6以下程序的输出结果是( ) main() { int i=0, j=0, k=6; if ((++i>0)||(++j>0)) k++; printf("%d, %d, %d\n", i, j, k); } A) 0, 0, 6 B) 1, 0, 7 C) 1, 1, 7 D) 0, 1, 7 7若变量都已正确说明,则以下程序段输出为( ) int a=1,b=2,c=3; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c); for循环结构程序设计教案 课程名称:C语言程序设计 本课内容:循环结构程序设计——for 语句 一、教学目标 1、领会程序设计中构成循环的方法 2 、掌握for 语句的用法 二、教学重点 1、for 语句的一般格式 2、for语句的执行过程 三、教学难点 for 语句的综合利用 四、教学方法 1、课堂讲授,给出主要内容。 2、讲解其基本格式。 3、应用示例,结合相应的知识讲解。 4、执行过程用流程图和例题用(演示法和讲解法)进行详细说明。 五、教学过程 (一)导入 1、复习前两节课我们学习的两种循环语句——while语句和do~while 语句的基本格式和执行过程和特征。 2、给出例子如下: main( ) {int x=1; (表达式1) s=0; while(x<=100) (表达式2) {s=s+x; x=x+1; (表达式3) } printf(“%d”,s); } 分析用while语句来完成的程序,主要完成1到100的累加和,对一个循环程序来说最关键的三个部分:循环变量的赋初值、控制循环条件、循环控制变量的更新。 (二)教学过程 1、写出本节课要介绍的for语句的一般格式 for(表达式1;表达式2;表达式3) 循环体; 2、掌握:基本格式和各个表达式的功能和特征 强调:for语句中的所有表达式和while语句中的表达式所完成的功能是相同的。 表达式1:循环变量的初始化(初始值) 表达式2:循环条件(终止值) 表达式3:循环变量自增 3、for语句的执行过程 for ( int i = 0 ; i < 10 ; i++) { printf("我最棒"); } 1. //输出a和b之间的所有素数, 10个素数为一行输出 #include while(a<2||b<2) { printf("重新输入n和m:"); scanf("%d%d",&a,&b); } if(a>b) { t=a;a=b;b=t; } printf("%d和%d之间共有%d个素数",a,b,shuChuSuShu(a,b)); printf("\n\n"); return 0; } 2. //用户输入2个数,输出这2个数之间所有的超素数 //超素数(质数)的概念:7193是素数,719是素数,71是素数,7是素数,则7193是素数#include c语言循环结构上机习 题 标准化工作室编码[XX968T-XX89628-XJ668-XT689N] 1、计算n的阶乘(n!),n的取值在1~10之间。分别使用while、do…while和for语句实现。(三个程序) 给循环变量赋初值 循环条件 循环体 循环变量的增值 2、输入一行字符,分别统计输入了多少个字母、数字、空格和其他字符。 3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函数值。 4、有分数序列2/1,3/2,5/3,8/5,13/8,21/13…求这个数列的前20项和。 (分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分子) 5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。要求每一行显示5个数,并且统计一共有多少个整数能被n整除。 6、下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while( ① ) { if(x>amax) amax=x; if( ② ) amin=x; scanf("%f",&x); } printf("\namax=%f\namin=%f\n",amax,amin);} 7、使用循环语句输出以下图形 8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。 8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。 分析: 第5章循环结构程序设计 练习题 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 第5章循环结构程序设计35 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 #include C语言循环结构练习题 带答案 Company Document number:WTUT-WT88Y-W8BBGB- 第5章循环结构程序设计 基本知识点 while语句的使用格式和注意事项 do-while语句的使用格式和注意事项 for语句的使用格式和注意事项 break和continue语句在循环语句中的应用 循环结构的嵌套 使用goto语句实现循环结构 穷举法程序设计方法 迭代程序设计方法 练习题5 1.单项选择题 (1)语句while(!e);中的条件!e等价于A。 ==0 !=1 !=0 D.~e (2)下面有关for循环的正确描述是D。 循环只能用于循环次数已经确定的情况 循环是先执行循环体语句,后判定表达式 C.在for循环中,不能用break语句跳出循环体 循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中D。 A.不能使用do-while语句构成的循环 语句构成的循环必须用break语句才能退出 语句构成的循环,当while语句中的表达式值为非零时结束循环语句构成的循环,当while语句中的表达式值为零时结束循环(4)C语言中while和do-while循环的主要区别是A。 的循环体至少无条件执行一次 的循环控制条件比do-while的循环控制条件严格 允许从外部转到循环体内 的循环体不能是复合语句 (5)以下程序段C。 intx=-1; do { x=x*x; } while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误(6)下列语句段中不是死循环的是__C__。 =100; while(1) { i=i%100+1; if(i==20)break; } (i=1;;i++) sum=sum+1; =0; do { ++k; }while(k<=0); =3379; while(s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while(a) { if(b)continue; c; } (a) (c) {if(!b)c;} {if(!b)break;c;} (c) (a) {if(b)c;} {if(b)break;c;} (8)以下程序的输出结果是_B___。 #include<> main() { inti; for(i=4;i<=10;i++) { if(i%3==0)continue; COUT< 《C语言循环程序设计—for语句》教学案例漠河县职业技术学校尘威威 《C语言循环程序设计—for语句》教学案例 漠河县职业技术学校尘威威 C语言基础是中职计算机专业的一门必修课,也是要求计算机专业学生学习、掌握的一门重点课程,这门课程核心内容就是要让学生掌握一门编程的语言,学会编写简单的程序,能读懂C语言源程序。 案例背景: 在计算机应用专业教学中,C语言是一门理论与实践结合得比较紧的课程。要掌握和使用好这门语言,既要求学生有比较扎实的理论基础,又要具备较强的应用实践能力。如果只是按照传统的知识体系照本宣科,让学生理解这些枯燥的概念都难,更不要说达到良好的教学效果,而且易挫伤学生学习编程的积极性。因此,在教学中可以改为从案例入手,通过给学生演示、让学生模仿,在实际应用中去探究和领悟这些概念,并适时地加以归纳总结和进行概念的延伸,让学生在轻松愉快的气氛中学习新知识。所以从课程内容而言,案例教学是适用的,是切合学生的。 循环结构是程序设计三种基本结构的重中之重,而循环中的for 循环是程序中运用最多的,也是较灵活的语句之一,它既是前面知识的延续,又是后面知识的基础,在知识构架中起着重要的衔接作用,如果不采用一些恰当有效的方法,学生在学习过程中会难以掌握。在教学过程中教师应结合一些有趣的程序,提高学生的学习兴趣,引导 学生全身心地投入课堂。本文针对学生的实际情况,具体阐述for循环语句在具体编程时的灵活应用。 教学目标确定 (一)知识与技能 1、领会程序设计中构成循环的方法 2、能使用for循环语句编写C语言语句,并能运用for循环语句编写出正确的程序。 (二)过程与方法 C语言程序设计中for循环语句教学以行动导向教学为主线,通过“提出问题―分析问题―解决问题―问题扩展―讨论―总结归纳―实践”的程序,过渡到知识应用和练习。 本课采用多媒体课件进行教学,通过课件把文字和图片有机的结合,使学生在学习过程中更加容易理解,学习效率高。在课堂讨论和实践过程中,教师适当引导,学生主动探究、归纳总结学习内容,既有利于领会掌握新知识点,又能充分发挥学生的主体作用。在重点的突破上,采用范例比较教学法,给出具体的案例,让学生通过典型的例子掌握知识,同时通过用while、do while语句的所编写的程序进行比较,加深学生印象,让学生快速的掌握for循环语句的基本结构及使用方法。 (三)情感与价值观 1.让学生在自主解决问题的过程中培养成就感,为今后自主学习打下良好的基础。 第 5 章循环结构程序 设计 练习题 1.单项选择题 ( 1)语句 while (!e);中的条件!e等价于A。 A. e==0 B. e!=1 C. e!=0 D. ~e ( 2)下面有关for循环的正确描述是D。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在 for循环中,不能用break 语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中D。 A.不能使用do-while语句构成的循环 B. do-while 语句构成的循环必须用break 语句才能退出 C. do-while 语句构成的循环,当while 语句中的表达式值为非零时结束循环 D. do-while 语句构成的循环,当while 语句中的表达式值为零时结束循环 ( 4) C 语言中 while 和 do-while 循环的主要区别是A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 ( 5)以下程序段C。 int x=-1; do { x=x*x; } while (!x); A.是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误( 6)下列语句段中不是死循环的是__C__。 A.i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; for循环使用详解(c语言版) 说明:c语言的很多语法部分都和JAVA,AS等相同特别是for的用法. c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句. for(表达式 1;表达式 2;表达式 3)语句 它的执行过程如下: (1)先求表达式 1. (2)求表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第三步做若为 假(值为0),则结束循环,转到第5步. (3)求解表达式3 (4)转回上面第(2)步骤继续执行; (5)结束循环,执行for语句下面的一个语句; for(循环变量赋初值;循环条件;循环变量增值)语句 如 for(i=1;i =100;i++)sum=sum+i; 它的执行相当于 i=1; while(i =100){ sum=sum+i; i++; } 显然,用for语句更简单、方便。 说明: (1)for语句的一般形式中的”表达式1”可以省略,此时应在for语句之前给循环变量赋初值.注意省略表达式1时,其后的分号不能省略.如for(;i =100;i++){....}; (2)如果表达式2省略即不判断循环条件,循环无终止地循环下去,也就是认为表达式2始终为真. 例如:for(i=1;;i++){.....}; 相当于 i=1; while(1) {sum=sum+1; i++; } (3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束.如: for(i=1;i =100;) {sum=sum+1; i++; (1)有以下程序段 int n,t=1,s=0; scanf("%d",&n); do{ s=s+t; t=t-2; }while (t!=n); t==n t=-1,-3,-5 为使此程序段不陷入死循环,从键盘输入的数据应该是 A)任意正奇数B)任意负偶数C)任意正偶数D)任意负奇数 (2)设变量已正确定义,则以下能正确计算f = n!的程序段是 A) f=0; B) f=1; for(i=1;i<=n;i++) f*=i; for(i=1;i 2015-2016(2)循环结构练习题 一、单选题(共40题,共100分) 1. 以下正确的描述是()(2分) 语句的作用是结束整个循环的执行 B.只能在循环体内和switch语句体内使用break语句 C.在循环体内使用break语句或continue语句的作用相同 D.从多层循环嵌套中退出时,只能使用goto语句 标准答案:B 考生答案: 2. 下面的关键字中,不能够从循环体中跳出循环体外的是()(2分) 标准答案:D 考生答案: 3. 以下叙述中错误的是()(2分) A.语句标号是由合法的标识符后面加一个冒号构成 语句的作用是把程序的执行转向语句标号所在的位置 语句必须与语句标号在同一个函数内 D.结构化程序设计主张使用goto语句,使用goto语句的程序可读性强标准答案:D 考生答案: 4. 有以下程序段,while 循环执行的次数是() int k=0; while(k=1)k++; (2分) A.无限次 B.有语法错,不能执行 C.一次也不执行 D.执行1次 标准答案:A 考生答案: 5. 运行以下程序的结果为() main() { int num=0; while (num<=2) {num++; printf("%d",num); } } (2分) 标准答案:B 考生答案: 6. 下述程序的输出结果是()。 #include<> main() { int Y=100; while(Y--); printf("y=%d",Y); (2分) =0 =1 =随机值 =-1 标准答案:D 考生答案: 7. 执行下面的程序后的输出结果为() int x,y,z; x=20,y=40,z=15; while(y>x) x+=4,y-=4; z/=2; printf("%d,%d,%d",x,y,z); (2分) ,36,30 ,8,7 ,28,7 ,28, 标准答案:C 考生答案: 8. 以下程序段的输出结果是() int x=0,y=5,z=3; while(z-->0&&++x<5) y=y-1; printf("%d,%d,%d\n",x,y,z); (2分) ,2,0 ,2,-1 ,3,-1 ,-2,-5 标准答案:B 考生答案: 9. 下述语句执行后,变量k的值是() int k=1; while(k++<10); (2分) D.此为无限循环,值不定 标准答案:B 考生答案: 10. 下面程序的运行结果是()。 main() { int c1=2, c2=0; while(!c2--) printf("%d,%d", c1--, c2); } (2分) ,-1 B.不输出任何内容 ,-1 ,0 标准答案:C 考生答案: 11. 运行以下程序后,如果从键盘上输入china#main( ) { int v1=0,v2=0; char ch ; while((ch=getchar())!='#') switch(ch) { case 'a': case 'h': default: v1++; case '0': v2++; 5.2 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是____。 A. i=100; while (1) { i=i%100+1; if (i==20) break; 第5章循环结构程序设计35 } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是____。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是____。 #include 第5章循环结构程序设计 5.1基本知识点 ?while语句的使用格式和注意事项 ?do-while语句的使用格式和注意事项 ?for语句的使用格式和注意事项 ? ? ? ? ? 1. ( ( C. ( A. (A。 A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 (5)以下程序段C。 intx=-1; do { x=x*x; } while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误 (6)下列语句段中不是死循环的是__C__。 A.i=100; while(1) { i=i%100+1; if(i==20)break; } B.for(i=1;;i++) sum=sum+1; C. { D. ( { } A. C. ( { { COUT< main() { intnum=0; while(num<=2) { num++; cout< 第5章循环结构程序设计 5.1 基本知识点 while语句的使用格式和注意事项 do-while语句的使用格式和注意事项 for语句的使用格式和注意事项 break和continue语句在循环语句中的应用 循环结构的嵌套 使用goto语句实现循环结构 穷举法程序设计方法 迭代程序设计方法 5.2 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 第5章循环结构程序设计35 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 1、计算n的阶乘(n!),n的取值在1~10之间。分别使用while、do…while和for 语句实现。(三个程序) 给循环变量赋初值 循环条件 循环体 循环变量的增值 2、输入一行字符,分别统计输入了多少个 字母、数字、空格和其他字符。 3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函 数值。 4、有分数序列2/1,3/2,5/3,8/5,13/8, 21/13…求这个数列的前20项和。 (分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分 子) 5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。要求每一行显示5个数,并且统计一共有多少个整数能 被n整除。 6、下面程序的功能是从键盘上输入若干学 生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while( ①) { if(x>amax) amax=x; if( ②) amin=x; scanf("%f",&x); } printf("\namax=%f\namin=%f\n",amax,a min); } 7、使用循环语句输出以下图形 8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。 8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问 一百只鸡中公鸡、母鸡、小鸡各多少)。 分析: 这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为 三元一次方程组: 100=x*5+y*3+z/3 100=x+y+z 这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围: 1) x的取值范围为1~20 2) y的取值范围为1~33 3) z的取值范围为3~99,步长为3 对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。 本来说好讲讲除了scanf和printf以外例如gets、puts,petchar、putchar等输入输出函数。但准备了半天东西发现牵扯的知识太多,并且很多东西我自己也没有弄清楚。所以啦,我就打算先讲讲程序中最常见的两种循环语句,分别是while 循环语句和for循环语句。 这个while啊,我们都学过英语都知道有“当....的时候”的意思。对,学c语言时就当这个意思就行。 这个例题也没找到什么好的,就搬来了《c程序设计语言》上的例子,如果看过来就当是复习吧。 请看题: 使用公式℃=(5/9)(℉-32),打印下列华氏温度与摄氏温度的对照表。 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140 60 160 71 180 82 200 93 220 104 240 115 260 126 280 137 300 148 我们的答案如下 #include } 值得高兴的是,我们又遇到了很多没有见过的东西,总是能见到新东西总是让人感到高兴的。 先是fahr、celsius等几个没见过的单词。这个其实不用说也都知道是啥东西,也就是几个可能原来不认识的变量名,并不是函数。 接下来是/**/格式的几个句子 /*当fahr=0,20,40,...,300时,打印华氏温度与摄氏温度对照表*/ /*华氏温度下限*/ /*华氏温度上限*/ /*步长*/ 这种在/*和*/之间加东西的东西叫做注释。和它的名字一样,仅作为注释,在程序运行过程就会被编译器忽略,因为编译器只对文章正文感兴趣。 这东西存在的主要价值基本上就是帮助看你程序的人或在你检查自己程序时可以快速理解你写的这一部分是干啥用的。因此注释在每个语句的句尾都可以加,在任何可以跳格也就是可以打空格或制表符的地方也都可以加。 剩下我们可能看不懂的大概也就剩while的循环语句了:while(fahr<=upper) { celsius=5*(fahr-32)/9; 2.3顺序结构程序设计 2.3.1 要点导读 1.printf() 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include { int a=732; printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m 为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 答案: 732 732 □□□□□□□732 /*□表示空格*/ 732□□□□□□□ 3.已知char a=‘\103’;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格) 。 A)□67 B)’c’C)67□D)103 分析:’\103’是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把’\103’转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。 答案:C。 4.下列程序运行后结果是。 #include C语言循环习题答案
C语言练习2(选择和循环结构)
C语言for循环语句教案
C语言循环例题
c语言循环结构上机习题
(完整版)C语言循环结构练习题带答案
C语言循环结构练习题带答案
C语言循环程序设计for语句教学案例
C语言循环结构练习题带答案.doc
for循环使用详解(c语言版)
二级C语言5练习(循环含答案)
c语言循环结构练习
C语言循环结构练习题
C语言循环结构练习测试题带参考答案
C语言循环结构练习题带答案
c语言循环结构上机习题
c语言之whlie循环语句
C语言习题:顺序、选择、循环