C语言习题(详细解答)

for(i=1;i<3;i++) { for(j=3;j>0;j--) {if(i*j>3)break; m*=i*j; } }

printf(\}

程序运行后的输出结果是

A)m=6 B)m=2 C)m=4 D)m=5

【解析】第一次循环i=1,j=3和j=2时都能执行m*=i*j,此时得到m的值为6;然后进行第二次循环i=2,j=3时会执行break语句,内部循环直接结束,此时i再加1,也会导致退出外部循环,所以最终结果m的值为6。 10.有以下程序

#include main() { int s;

scanf(\,&s); while(s>0) { switch(s)

{ case 1:printf(\,s+5);

case 2:printf(\,s+4);break; case 3:printf(\,s+3); default:printf(\,s+1);break; }

scanf(\,&s); } }

运行时,若输入123450<回车>,则输出结果是 A)6566456

B)66656

C)66666

D)6666656

【解析】switch语句执行完一个case后面的语句后,流程控制转移到下一个case语句继续执行,遇到break会跳出本次循环。本题中输入1时会输出65,输入2时会输出6,输入3时会输出64,输入4时会输出5,输入5时会输出6,在输入0时不满足循环条件,程序执行结束。 11.有以下程序段

int i,n; for(i=0;i<8;i++) { n=rand()%5;

switch(n) { case 1:

case 3:printf(\,n);break; case 2:

case 4:printf(\,n);continue; case 0: exit(0); }

printf(\,n);

11

}

以下关于程序段执行情况的叙述,正确的是 A)for循环语句固定执行8次

B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行

【解析】当产生的随机数n为1或2时,由于没有遇到break,因此程序将分别顺序执行case 3与case 4;当n为3时,程序输出n的值后跳出switch语句;当n为4时,程序输出n的值后将继续执行下一次循环;当n为0时,程序执行exit函数结束运行。 二.填空题 1.有以下程序

#include main() { int m,n;

scanf(\ while(m!=n)

{ while(m>n)m=m-n; while(m

printf(\}

程序运行后,当输入14<空格>7<回车>时,输出结果是_____。 参考答案:7

【解析】执行while(mn)的循环,得到m=7,n=7。此时所有循环结束,m=7。 2.以下程序运行后的输出结果是____。

#include main()

{ int a=1,b=7; do{

b=b/2; a+=b; } while(b>1); printf(\,a);} 参考答案:5

【解析】 第一次循环执行后,b=3,a=4,满足条件b>1,循环继续;第二次循环执行后,b=1,a=5,不满足条件b>1,结束循环。所以输出的a值为5。 3.有以下程序:

#include main()

{ int f,fl,f2,i; f1=0;f2=1;

printf(\%d \,f1,f2); for (i=3;i<=5;i++) { f=f1+f2;printf(\,f); f1=f2;f2=f; }

12

printf(\; }

程序运行后的输出结果是____。 参考答案:0 1 123

【解析】 第一个printf语句输出结果为0 1。循环体总共循环三次,第一次循环结果为,f=1,f1=1,f2=1;第二次循环结果为f=2,f1=1,f2=2;第三次循环结果为f=3,f1=2,f2=3。 4.若有定义:int k;,以下程序段的输出结果是____。

for(k=2;k<6;k++,k++) printf(\,k); 参考答案:##2##4

【解析】在for循环语句中,自变量k的自增表达式为k++,k++。这是一个逗号表达式,所以输出结果为##2##4。 5.以下程序运行后的输出结果是____。

#include main()

{ int k=1,s=0; do{

if((k%2)!=0)continue; s+=k; k++; }while(k>10); printf(\=%d\\n\,s); } 参考答案:s=0

【解析】continue语句用于跳出本次循环,直接进行下一次循环。进行if判断时k的值为1不能够被2整除,因此执行continue退出本次循环,不对s进行任何操作,直接进行循环条件判断,此时k的值为1不满足循环条件,退出while循环,输出s的值为0。 第06章 一.选择题

1.下列选项中,能正确定义数组的语句是 A)int num[0..2008]; B)int num[]; C)int N=2008; D)#define N 2008 int num[N]; int num[N];

【解析】选项A不符合C语言的语法要求;选项B中没有指定数组的大小;选项C中数组大小不能用变量来指定。 2.下列定义数组的语句中,正确的是。

A)int N=10; B)#define N 10 C)int x[0..10]; D)int x[]; int x[N]; int x[N];

【解析】A)中的N是一个变量,不可以用变量来定义数组,所以选项A)错误。C)中把所有的下标均列出不正确,此处只需指明数组长度即可。D)中在定义时没有指明数组长度不正确,如果不指明长度就应在定义时对数组元素进行赋值,而此选项没有,所以错误。故本题答案为B)。

3.若要定义一个具有5个元素的整型数组,以下错误的定义语句是 A)int a[5]={0}; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i];

【解析】在进行数组的定义时,不能使用变量对数组的长度进行定义。其他选项均符合数组定义标准。 4.以下错误的定义语句是。

A)int x[][3]={{0},{1},{1,2,3}};

B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

数组

13

D)int x[][3]={1,2,3,4};

【解析】本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组的第一维的长度,但是不能省略第二维的长度。故选项C)错误。

5.若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是。 A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1]

【解析】C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示的是数组元素a[0][0]。所以正确答案为D)。 6.有以下程序:

#include #include main()

{ char a[10]=\;

printf(\,%d\\n\,strlen(a),sizeof(a)); }

程序运行后的输出结果是________。 A)7,4 B)4,10 C)8,8 D)10,10

【解析】 strlen()用来返回字符串的长度,而sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。 二.填空题

1.以下程序运行后的输出结果是 。

#include main()

{ int i,n[5]={0};

for(i=1;i<=4;i++)

{ n[i]=n[i-1]*2+1;printf(\,n[i]);} printf(\; } 参考答案:13715

【解析】本题中已知n[0]为0,根据循环的执行可以得到n[1]为1,n[2]为3,n[3]为7,n[4]为15,因此输出结果是13715。 2.有以下程序

#include main()

{ int i,n[]={0,0,0,0,0}; for(i=l;i<=4;i++)

{n[i]=n[i-1]*3+1;printf(\,n[i]);} }

程序运行后的输出结果是 。 参考答案:1 4 13 40

【解析】第一次循环结果为:n[1]=0*3+1,即n[1]的值为1,打印输出1 ;第二次循环结果为:n[2]=1*3+1,即n[2]的值为4,打印输出4 ;第三次循环结果为:n[3]=4*3+1,即n[3]的值为13,打印输出13 ;第四次循环结果为:n[4]=13*3+1,即n[4]的值为40,打印输出40。 3.有以下程序

14

#include main()

{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3]={0},i;

for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i]; for(i=0;i<3;i++) printf(\ printf(\}

程序运行后的输出结果是____。 参考答案:101418

【解析】当i=0时,b[0]=a[0][2]+a[2][0]=3+7=10;当i=1时,b[1]=a[1][2]+a[2][1]=6+8=14;当i=2时,b[2]=a[2][2]+a[2][2]=9+9=18,则打印结果为101418。 4.有以下程序

#include main()

{ int n[2],i,j;

for(i=0;i<2;i++)n[i]=0; for(i=0;i<2;i++)

for(j=0;j<2;j++)n[j]=n[i]+1; printf(\,n[1]); }

结果为:__________参考答案:3

【解析】通过第一次 for(i=0;i<2;i++) n[i]=0;的循环语句可知,已经将数组n 中的两个元素都赋初值为0。接下来的循环中,第一次循环,外循环 i=0 的前提下:内循环j=0时,运行完n[0]=n[0]+1后n[0]为1;j=1时,运行完n[1]=n[0]+1后,n[1]为2。第二次循环,外循环i=1的前提下,内循环j=0时,运行完n[0]=n[1]+1后n[0]为3;j=1时,运行完n[1]=n[1]+1后,n[1]为3。

5.以下fun函数的功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。(设M,N已定义)

int fun(int a[N][M])

{ int i,j,row=0,col=0; for(i=0; i

if(a[i][j]>a[row][co1]){row=i;col=j;} return( ____ ); }参考答案:a[row][col]

【解析】通过程序可以看出,外循环是行,内循环是列。先在行不变的情况下找一行内最大的数据进行记录。通过语句 if(a[i][j]>a[row][col]) { row=i; col=j;}可知,如果变量a[i][j]大于a[row][col],将i赋给了row,将j赋给了col,所以a[row][col]是记录当前最大值的变量。 6.有以下程序

#include main()

{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)

for(j=i;j<3;j++)printf(\ printf(\

15

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4