判断题
1-1 循环体中执行了break语句后,会跳过后面的语句,继续下一次循环。F break作用是跳出循环
1-2 break和continue都可以用在循环体中和switch 语句中。F continue不可以用在switch中
1-3 在嵌套循环语句中,里层的循环语句里有break语句,那执行该语句时,是跳出全部循环。 F break作用是跳出本循环
单选题
2-1
对下列代码的描述:
#include "stdio.h"
int main(){
long num=1;
while(num++ > 0) for(long i=num; i >=0; i--)printf("i :=\n \t %ld \n" , i);
return 0;
}
正确的是:
A.程序有编译错误,不能执行
B.循环条件永为真,循环无限次,程序根本停不下来,打印输出无限行
C.循环有限次,程序正常结束,打印输出有限行
D.程序运行过程必定会出错(崩溃),结果打印输出有限行
选择C,011111.....1111111 是最大正数,再+1,等于100000.....0000000,是最小的负整数(补码)
2-2 C语言中while和do-while循环的主要区别是()。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
选择A
2-3
执行以下循环语句时,下列说法正确的是()。
x = -1;
do {
x = x * x;
} while (x == 0);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无限次
D.系统将提示有语法错误
选择A,while语句的条件看清楚,别和我一样看成了x!=0
2-4
运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为()。
int main(void)
{
int m, n;
printf("Enter m,n;");
scanf("%d%d", &m,&n);
while (m != n)
{ while (m > n) m = m - n;
while (n > m) n = n - m;
}
printf("m=%d\n",m);
return 0;
}
A.m=3 B.m=2 C.m=1 D.m=0
选择C,求m和n的最大公因数
2-5
下列程序段的输出结果是()。
int main(void)
{
for(int i = 1; i < 6; i ++) {
if( i % 2 != 0) {
printf("#");
continue;
}
printf("*");
}
printf("\n");
return 0;
}
A.#*#*# B.##### C.***** D.*#*#*
选择A,奇数为#偶数为*
2-6
下列程序段执行后s值为__。
int i=5, s=0;
while(--i!=0){
if (i%2==1)
continue;
s+=i;
}
A.15 B.9 C.6 D.4
选择C,s加上了4和2
2-7
要求通过 while 循环不断输出字符,当读入字母 N 时结束循环。若变量已正确定义,下列程序段正确的是( )。
A.
while ((ch = getchar()) == 'N')
printf("%c", ch);
B.
while (ch = getchar() == 'N')
printf("%c", ch);
C.
while ( (ch = getchar( )) != 'N')
printf("%c", ch);
D.
while (ch = getchar() != 'N')
printf("%c", ch);
选择C,熟记 while ( (ch = getchar( )) != '\n')
2-8
若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是?
for (i=5;i;i--)
for (j=0;j<4;j++)
{......} //内循环体
A.25 B.20 C.24 D.30
选择B,i->54321,j->0123
填空题
4-1
写出执行以下程序段后变量的值。
int i, s = 0;
for (i = 1; i <= 10; i = i + 3){
s = s + i;
}
i的值是 13
s的值是 22
4-5 写出以下程序段A和程序段B的运行结果。
/*程序段A*/
int num = 0;
while(num < 6){
num ++;
if(num == 3) break;
printf("%d#", num);
}
输出 1#2#
/*程序段B*/
int num = 0;
while(num < 6){
num ++;
if(num == 3) continue;
printf("%d#", num);
}
输出 1#2#4#5#6#
程序填空题
5-1 输出方阵[1]
输入一个正整数n(1≤n≤10),打印一个n行n列的方阵。当n=4时,打印如下方阵:
13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4
int i, j, n;
scanf("%d", &n);
for(i=n-1 ; i >= 0 ;i--) {
for ( j = 1; j <= n; j++ ){
printf("%4d",i*n+j);
}
printf("\n");
}
注意,别和我一样写了i=3,血的教训
5-3 顺序输出整数的各位数字[1]
输入一个非负整数,从高位开始逐位分割并输出它的各位数字。例如,输入9837,输出9 8 3 7
int digit, number, pow, t_number;
scanf ("%d", &number);
t_number = number;
pow = 1;
while (t_number>=10) {
pow =pow*10;
t_number = t_number / 10;
}
while ( pow >= 1 ) {
digit =num/pow;
number =number%pow;
pow =pow/10;
printf ("%d ", digit);
}
printf ("\n");
5-8 打印直角三角形图案[3]
输入一个正整数n(1≤n≤9),打印一个高度为n的、由“*”组成的直角三角形图案。当n=3时,输出如下直角三角形图案:
***
**
*
int i, j, n;
scanf("%d", &n);
for (i=n;i>0;i--){
for (j = i; j > 0; j--){
printf("*");
}
printf("\n");
}