2022年湖北专升本C语言程序设计模拟题(2)
第四章 逻辑运算和判断选取控制
4.1 选择题
4.1逻辑运算符两则运算对象的数据类型 。
A)只能是0或1 B)只能是0或非0正数
C)只能是整型或字符型数据 D)可以是任何类型的数据
参考答案:D
参考分析:c语言中没有专用的逻辑量,任何数值类型的数据都可以作为逻辑数据使用,判断时0为假,非零为真,计算时真置1,假置0。
4.2以下关于运算符优先顺序的描述中正确的是
A)关系运算符<算术运算符<赋值运算符<逻辑运算符
B)逻辑运算符<关系运算符<算术运算符<赋值运算符
C)赋值运算符<逻辑运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑运算符
参考答案:C
4.3 下列运算符中优先级最高的是 。
A)< B)+ C)&& D)!=
参考答案:B
4.4能正确表示“当x的取值在[1,10]和[200,210]范围内为真”的C语言表达式为 。
A) (x>=1)&&(x
B) (x>=1)&&(x
C) (x>=1)||(x
D) (x>=1)||(x
参考答案:B
参考分析:C语言中实际上与运算和或运算优先级相等,由于C采用短路算法,所以不会影响B的结果,即不需要改成((x>=1)&&(x
4.5 表示图中坐标轴上阴影部分正确的表达式是 。
| | |
a b c
A)(x
C)(x
参考答案:C
4.6判断char型变量ch是否为大写字母的正确表达式为 。
A)'A'<=ch
C) (ch>='A')&&(ch<='Z') D)('A'
参考答案:C
4.7 有int x=3,y=4,z=5;则下面表达式中值为0的是 。
A)'x'&&'y' B)x<=y C)x||y+z&&y-z D)!((x
参考答案:D
4.8 已知x=43,ch='A',y=0;则表达式(x>=y&&ch<'B'&&!y)的值是 。
A)0 B)语法错误 C)1 D)"假"
参考答案:C
4.9若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是 。
A)A%2= =1 B)!(A%2= =0) C)!(A%2) D)A%2
参考答案:C
4.10设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为 。
A)1 B)2 C)3 D)4
参考答案:B
参考分析:本题为标准的短路算法,由于第一个表达式m=a>b为真,故第二个表达式n=c>d被短路不再计算。因此,n值仍然保持原来的值2不变。
4.11判断char型变量ch是否为小写字母的正确表达式为 。
A)'a'<=ch
C) (ch>='a')||(ch
参考答案:D
4.12 以下程序的运行结果是 。
#include
main()
{int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d",a,b);
}
A)6,1 B)2,1 C)6,0 D)2,0
参考答案:B
参考分析:计算时,非零为真。
4.13 执行以下语句后a的值为 ,b的值为 。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A)0 B)1 C)2 D)错误
参考答案:C B
参考分析:c语言在计算表达式时采用短路算法。
4.13-改 执行以下语句后,a,b,c的值分别为 。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A)1,1,1 B)2,1,1 C)2,2,1 D)2,2,2
参考答案:B
4.14 执行以下语句后a的值为 ,b的值为 。
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
(1)A)5 B)0 C)2 D)1
(2)A)6 B)0 C)1 D)4
参考答案:B A
参考分析:短路算法。
4.15 以下不正确的if语句形式是 。
A)if (x>y&&x!=y);
B)if (x==y) x+=y;
C)if(x!=y) scanf("%d",&x) else scanf("%d",&y);
D)if(x
参考答案:C
4.16 下列运算符中优先级最低的是 ,优先级最高的是 。
A)? : B)&& C)+ D)!=
参考答案:A C
4.17 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 。
if(x>y)
z=x;x=y;y=z;
A)10,20,30 B)20,30,30 C)20,30,10 D)20,30,20
参考答案:C
4.18 以下if语句语法正确的是 。
A)if (x>0) printf("%f",x) else printf("%f",-x);
B)if(x>0){x=x+y;printf("%f",x);} else printf("%f",-x);
C)if(x>0){x=x+y;printf("%f",x);};else printf("%f",-x);
D)if(x>0){x=x+y;printf("%f",x)} else printf("%f",-x);
参考答案:B
4.19有程序:main()
{int a=5,b=1,c=0;
if (a=b+c) printf("\n");
else printf("$$$\n");}
该程序 。
A)有语法错误不能通过编译 B)可以通过编译,但不能通过连接
C)输出: D)输出:$$$
参考答案:C
参考分析:注意条件表达式不是a= =b+c。
4.20 以下程序的运行结果是 。
main()
{int m=5;
if(m++>5) printf("%d",--m);
else printf("%d",m++);
}
A)4 B)5 C)6 D)7
参考答案:C
参考分析:m先与5进行关系比较,然后进行增量运算,m值为6,因比较结果为假,执行else,输出为6,m为7。
4.21 当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=3;
A)1 B2 C)3 D)6
参考答案:B4.22有函数关系如下,能正确表示该关系的程序段是 。
xy
x<0x-1
x=0x
x>0x+1
A)y=x+1; B)y=x-1;
if(x>=0) if(x!=0)
if(x= =0) y=x; if (x>0) y=x+1;
else y=x-1; else y=x;
C)if (x<=0) D) y=x;
if (x<0) y=x-1; if(x<=0)
else y=x; if (x<0) y=x-1;
else y=x+1 else y=x+1;
参考答案:C
4.23 以下程序的输出结果是 。
main()
{int a=100,x=10,y=20,ok1=5,ok2=0;
if(x
if(y!=10)
if(!ok1)
a=1;
else
if(ok2) a=10;
a=-1;
printf("%d\n",a);
}
A)1 B)0 C)-1 D)值不确定
参考答案:C
参考分析:无论前面的分支如何执行,由于a=-1和上面的语句为顺序关系,因此不会影响到a的值。
4.24 以下程序的输出结果是 。
main()
{int x=2,y=-1,z=2;
if(x
if(y<0) z=0;
else z+=1;
printf("%d\n",z);
}
A)3 B)2 C)1 D)0
参考答案:B
4.25为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与 配对。
A)缩排位置相同的if B)其之前最近的没有else配对的if
C)其之后最近的if D)同一行上的if
参考答案:B
参考分析:本题表述不严谨。
4.26以下不正确的语句为 。
A)if (x>y);
B)if (x=y)&&(x!=0) x+=y;
C)if (x) z=z/x;
D)if (x>y) {x++;y++;}
参考答案:B
4.27 请阅读以下程序:
#include
main()
{float a,b;
scanf("%f",&a);
if(a<0.0) b=0.0;
else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0);
else if(a<10.0) b=1.0/a;
else b=10.0;
printf("%f\n",b);
}
若运行时输入2.0,则上面程序的输出结果是 。
A)0.000000 B)0.500000 C)1.000000 D)0.250000
参考答案:B
4.28 若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 。
A)exp==0 B)exp!=0 C)exp==1 D)exp!=1
参考答案:B
参考分析:在C语言中,当一个表达式不等于0时,可以将不等于部分省略,其效果完全一样。
4.29 若运行时给变量输入12,则以下程序的运行结果是 。
main()
{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
参考答案:A
参考分析:x>12为假,取x-12。
4.30 以下程序的运行结果是 。
main()
{int k=4,a=3,b=2,c=1;
printf("\n%d\n",k
}
A)4 B)3 C)2 D)1
参考答案:D
4.31执行下列程序段后,变量a,b,c的值分别是 。
int x=10,y=9;
int a,b,c;
a=(--x= =y++)?--x:++y;
b=x++;
c=y;
A)a=9,b=9,c=9 B)a=8,b=8,c=10
C)a=9,b=10,c=9 D)a=8,b=8,c=9
参考答案:B
参考分析:首先x进行--操作,x为9,然后与y进行等于比较,即9==9,然后y++为10。由于比较结果为真,故计算--x,为8,赋给a。
4.32 阅读以下程序,则执行下面语句后m的值是 。
int w=1,x=2,y=3,z=4,m;
m=w
m=m
m=m
A)1 B)2 C)3 D)4
参考答案:A
4.33 若有int w=1,x=2,y=3,z=4;则表达式w
A)4 B)3 C)2 D)1
参考答案:D
4.34 执行以下程序后的输出结果是 。
int w=3,z=7,x=10;
printf("%d",x>10?x+100:x-10);
printf("%d",w++||z++);
printf("%d",!w>z);
printf("%d",w&&z);
A)0111 B)1111 C)0101 D)0100
参考答案:C
4.2 填空题
4.35 若int a=3,b=2,c=1,f;表达式f=a>b>c的值是( )。
参考答案:0
参考分析:计算过程如下,a>b计算为真,然后计算 真(1)>c,结果为假
4.36 若int a=5,b=4,c=2;表达式a>b!=c的值是( )。
参考答案:1
4.37 以下程序的运行结果是( )。
#include
main()
{int x=1,y,z;
x=3+2;
printf("%d\t",x);
x=y=z=5;
printf("%d\t",x);
x=y==z;
printf("%d\n",x);
参考答案:5□□□□□□□25□□□□□□1(制表符为7个)
4.38 在C语言中,表示逻辑“真”值用( )。
参考答案:非0的数值。
4.39 设y为int型变量,请写出描述“y是奇数”的表达式( )。
参考答案:y%2==1 y%2!=0 y%2 (y-1)%2==0 !(y%2==0)
4.40 c语言提供的三种逻辑运算符是( )、( )和( )。
参考答案:&& || !
4.41 设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式( )。
参考答案:x
4.42设x,y,z均为int型变量,请写出描述“x,y,z中有两个为负数”的表达式( )。
参考答案:x*y*z>=0&&((x<0&&y<0)||(x<0&&z<0)||(y<0&&z<0))
参考分析:原书提供的答案是(x<0&&y<0)||(x<0&&z<0)||(y<0&&z
4.43 已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是( )。
参考答案:0
参考分析:在本表达式的计算过程中A
4.44 若int a=6,b=4,c=2;表达式!(a-b)+c-1&&b+c/2的值是( )。
参考答案:1
4.45 若a=2,b=4,则表达式!(x=a)||(y=b)&&0的值是( )。
参考答案:0
4.46 若a=1,b=4,c=3,则表达式!(a
参考答案:0
4.47 若a=6,b=4,c=3,则表达式a&&b+c||b-c的值是( )。
参考答案:1
4.48 若a=5,b=2,c=1,则表达式a-b
参考答案:0
4.49 若a=3,b=4,c=5,则表达式a||b+c&&b的值是( )。
参考答案:1
4.50 条件“2
参考答案:x>2&&x<3||x<-10
4.51 当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b)&&(n=b>c)后,n的值为( ),m的值为( )。
参考答案:0 1
4.52 以下程序的运行结果是 。
main()
{int x,y,z;
x=1;y=2;z=3;
x=y--<=x||x+y!=z;
printf("%d,%d",x,y);
}
参考答案:1,1
参考分析:这是两个表达式的或运算,第一个表达式y--<=x相当于2<=1为假,y变量增为1,第二表达式x+y!=z相当于1+1!=3为真,故x的值为1。
4.53 以下程序的运行结果是 。
main()
{int a1,a2,b1,b2;
int i=5,j=7,k=0;
a1=!k;
a2=i!=j;
printf("a1=%d\ta2=%d\n",a1,a2);
b1=k&&j;
b2=k||j;
printf("b1=%d\tb2=%d\n",b1,b2);
}
参考答案:a1=1 a2=1
b1=0 b2=1
4.54 以下程序的运行结果是 。
main()
{int x,y,z;
x=1;y=1;z=0;
x=x||y&&z;
printf("%d,%d",x,x&&!y||z);
}
参考答案:1,0
参考分析:本题采用短路算法,由于x为真,后面的或和与运算均被短路。
4.55 有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为( )。
参考答案:1
4.56 有int x,y,z;且x=3,y=-4,z=5,则表达式!(x>y)+y!=z)||(x+y)&&(y-z)的值为( )。
参考答案:1
4.57有int x,y,z;且x=3,y=-4,z=5,则表达式x++-y+(++z)的值为( )。
参考答案:13
4.58 有int a=3,b=4,c=5;则表达式a||b+c&&b==c的值为( )。
参考答案:1
4.59 有int a=3,b=4,c=5,x,y;则表达式!(x=a)&&(y=b)&&0的值为( )。
参考答案:0
4.60 有int a=3,b=4,c=5;则表达式!(a+b)+c-1&&b+c/2的值为( )。
参考答案:1
4.61 若运行时输入:16,则以下程序的运行结果是 。
#include
void main(void)
{int year;
printf("Input your year:");
scanf("%d",&year);
if (year>=18)
printf("your $4.5 yuan/xiaoshi");
else
printf("your $3.0 yuan/xiaoshi");
}
参考答案:your $3.0 yuan/xiaoshi
4.62 若运行时输入:2,则以下程序的运行结果是 。
#include
void main(void)
{char class;
printf("Enter 1 for 1st class post or 2 for 2nd post");
scanf("%c",&class);
if (class=='1')
printf("1st class postage is 19p");
else
printf("2nd class postage is 14p");
}
参考答案:2nd class postage is 14p
4.63 若运行时输入:4.4,则以下程序的运行结果是 。
#include
void main(void)
{float costprice,sellingprice;
printf("Enter Cost Price $:");
scanf("%f",&costprice);
if(costprice>=5)
{sellingprice=costprice+costprice*0.25;
printf("Selling Price(0.25)$%6.2f",sellingprice);
}
else
{sellingprice=costprice+costprice*0.30;
printf("Selling Price(0.30)$%6.2f",sellingprice);
}
}
参考答案:Selling Price(0.30)$ 5.72
4.64 以下程序的运行结果是 。
main()
{if (2*2==5<2*2==4)
printf("T");
else
printf("F");
}
参考答案:F
4.65 请阅读以下程序,若运行时输入:1605时,程序的运行结果是 。
main()
{int t,h,m;
scanf("%d",&t);
h=t/100%12;
if(h==0) h=12;
printf("%d:",h);
m=t%100;
if(m<10) printf("0");
printf("%d",m);
if (t<1200||t==2400)
printf("AM");
else
printf("PM");
}
参考答案:4:05PM
4.66 以下程序实现:输入园的半径r和运算标志m,按照运算标志进行指定计算,请填空。
标志 运算
a 面积
c 周长
b 二者均计算
#define pi=3.14159
main()
{char m;
float r,c,a;
printf("Input mark a c or b && r\n");
scanf("%c %f",&m,&r);
if (【1】)
{a=pi*r*r;printf("area is %f",a);}
if (【2】)
{c=2*pi*r;printf("circle is %f",c);}
if (【3】)
{a=pi*r*r;c=2*pi*r;
printf("area && circle are %f %f",a,c);
}
}
参考答案:【1】m=='a' 【2】m=='c' 【3】m=='b'
4.67 若运行时输入:5999,则以下程序的运行结果是 。
main()
{int x;
float y;
scanf("%d",&x);
if(x>=0&&xx<=2999) y=18+0.12*x;
if(x>=3000&&x<=5999) y=36+0.6*x;
if(x>=6000&&x<=10000)y=54+0.3*x;
printf("%6.1f",y);
}
参考答案:3635.4
4.68 以下程序实现输出x,y,z三个数中的最大者。请分析程序填空。
main()
{int x=4,y=6,z=7;;
int 【1】;
if(【2】) u=x;
else u=y;
if (【3】) v=u;
else v=z;
printf("v=%d",v);
}
参考答案:【1】u,v 【2】x>y【3】u>z
4.69 以下程序将输入的三个整数按从大到小顺序输出,请分析程序填空。
main()
{int x,y,z,c;
scanf("%d%d%d",&x,&y,&z);
if(【1】)
{c=y;y=z;z=c;}
if(【2】)
{c=x;x=z;z=c;}
if(【3】)
{c=x;x=y;y=c;}
printf("%d,%d,%d",x,y,z);
}
参考答案:【1】y
4.70 以下程序对输入的两个整数,按从大到小顺序输出,请分析程序填空。
main()
{int x,y,z;
scanf("%d,%d",&x,&y);
if(【1】)
{z=x;【2】}
printf("%d,%d",x,y);
}
参考答案:【1】x
4.71 以下程序对输入的一个小写字母进行循环后移5个位置后输出。如'a'变成'f','w'变成'b'。请分析程序填空。
#include
main()
{char c;
c=getchar();
if (c>='a'&&c<='u') 【1】;
else if (c>='v'&&c<='z') 【2】;
putchar(c);
}
参考答案:【1】c=c+5【2】c=c+6-26
4.72 输入一个字符,如果它是大写字母,则把它变成小写字母,如果它是一个小写字母,则把它变成大写字母,其它字符不变。请分析程序填空。
main()
{char ch;
scanf("%c",&ch);
if(【1】) ch=ch+32;
else if(ch>='a'&&ch<='z') 【2】;
printf("%c",ch);
}
参考答案:【1】ch>='A'&&ch<='Z'【2】ch=ch-32
4.73 以下程序的运行结果是 。
main()
{int a,b,c;
int s,w,t;
s=w=t=0;
a=-1;b=3;c=3;
if(c>0) s=a+b;
if(a<=0)
{if(b>0)
if(c<=0) w=a-b;
}
else if(c>0) w=a-b;
else t=c;
printf("%d %d %d",s,w,t);
}
参考答案:2 0 0
4.74以下程序的运行结果是 。
main()
{int a,b,c,d;
a=c=0;
b=1;
d=20;
if(a) d=d-10;
else if(!b)
if(!c) d=15;
else d=25;
printf("%d\n",d);
}
参考答案:20
4.75 以下程序的运行结果是 。
#include
main()
{int x,y=1,z;
if(y!=0) x=5;
printf("\t%d\n",x);
if(y==0) x=4;
else x=5;
printf("\t%d\n",x);
x=1;
if(y<0)
if(y>0) x=4;
else x=5;
printf("\t%d\n",x);
}
参考答案:
□□□□□□□□5
□□□□□□□□5
□□□□□□□□1
*4.76以下程序的运行结果是 。
#include
main()
{int x,y=-2,z=0;
if((z=y)<0) x=4;
else if(y==0) x=5;
else x=6;
printf("\t%d\t%d\n",x,z);
if(z=(y==0))
x=5;
x=4;
printf("\t%d\t%d\n",x,z);
if(x=z=y) x=4;
printf("\t%d\t%d\n",x,z);
}
参考答案:
□□□□□□□□4□□□□□□□-2
□□□□□□□□4□□□□□□□0
□□□□□□□□4□□□□□□□-2
*4.77 请阅读以下程序,为使输出时t值为4,输入量a和b应满足的条件是 。
main()
{int s,t,a,b;
scanf("%d,%d",&a,&b);
s=1;t=1;
if(a>0) s=s+1;
if(a>b) t=s+t;
else if(a==b) t=5;
else t=2*s;
printf("s=%d,t=%d",s,t);
}
参考答案:00&&a
4.78 请阅读下面的程序,为使输出s=1,t=5的结果,输入量a和b应满足的条件是 a=b<=0 。
main()
{int s,t,a,b;
scanf("%d,%d",&a,&b);
s=1;t=1;
if(a>0) s=s+1;
if(a>b) t=s+t;
else if(a==b) t=5;
else t=2*s;
printf("s=%d,t=%d",s,t);
4.79 下面程序根据以下函数关系,对输入的每个x值,计算出y值。请分析程序填空。
xy
2
-1
x≤-1x-1
main()
{int x,y;
scanf("%d",&x);
if(【1】) y=x*(x+2);
else if(【2】) y=x-1;
else 【3】;
if(y!=-1) printf("%d",y);
else printf("error");
}
参考答案:【1】2
4.80下面程序根据以下函数关系,对输入的每个x值,计算出y值。请分析程序填空。
xy
x=a或x=-a0
-a
x
#include
main()
{int x,a;
float y;
scanf("%d %d",&x,&a);
if(【1】) y=0;
else if(【2】) y=sqrt(a*a-x*x);
else y=x;
printf("%f",y);
}
参考答案:【1】x==-a||x==a【2】x>-a&&x
*4.81 以下程序的功能是计算一元二次方程ax2+bx+c=0的根,请分析程序填空。
#include
main()
{float a,b,c,t,disc,twoa,term1,term2;
printf("Enter a,b,c:");
scanf("%f %f %f",&a,&b,&c);
if(【1】)
if(【2】) printf("no answer due to input error.\n");
else printf("the single root is %f\n",-c/b);
else
{disc=b*b-4*a*c;
twoa=2*a;
term1=-b/twoa;
t=abs(disc);
term2=sqrt(t)/twoa;
if(【3】)
printf("complex root\nreal part=%f imag part=%f\n",term1,term2);
else
printf("real roots\nroot1=%froot2=%f\n",term1+term2,term1-term2);
}
}
参考答案:【1】a==0 fabs(a)<1e-4【2】b==0【3】disc<0
4.82 以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。请分析程序填空。
#include "math.h"
main()
{float a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
if(【1】)
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%f",area);
if(【2】)
printf("等边三角形");
else if(【3】)
printf("等腰三角形");
else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c=a*a))
printf("直角三角形");
else printf("一般三角形");
}
else printf("不能组成三角形");
}
参考答案:【1】a+b>c&&b+c>a&&c+a>b【2】a==b&&b==c
【3】a==b||b==c||a==c
4.83 某邮局对邮寄包裹有如下规定:若包裹的长宽高任一尺寸超过1米或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收取手续费0.2元,在加上根据下表按重量wei计算的邮资。请分析程序填空。
重量(千克)收费标准
wei<100.80
10
20
main()
{float len,wei,hei,wid,mon,r;
scanf("%f %f %f %f",&len,&wid,&hei,&wei);
if(len>1||wid>1||hei>1||wei>30) 【1】;
else if(wei<10) r=0.8;
else if(wei<=20) r=0.75;
else if(wei<=30) 【2】;
if(r==-1) printf("error\n");
else
{【3】;printf("%f",mon);}
}
参考答案:【1】r=-1【2】r=0.70【3】m=0.2+r*wei
**4.84 某服装店经营套服,也单件出售。若买的不少于50套每套80元;不足50套的每套90元;只买上衣每件60元;只买裤子每条45元。以下程序的功能是读入所买上衣c和裤子t的件数,计算应付款m。请分析程序填空。
main()
{int c,t,m;
printf("input the number of coat and trousers your want buy:\n");
scanf("%d %d",&c,&t);
if(【1】)
if(c>=50) m=c*80;
else m=c*90;
else
if(【2】)
if(t>=50) m=t*80+(c-t)*60;
else m=t*90+(c-t)*60;
else
if(【3】) m=c*80+(t-c)*45;
else m=c*90+(t-c)*45;
printf("cost=%d\n",m);
}
参考答案:【1】t==c 【2】c>t 【3】c>=50
4.85 以下程序的功能是判断输入的年份是否是闰年。请分析程序填空。
main()
{int y,f;
scanf("%d",&y);
if(y%400==0) f=1;
else if(【1】) f=1;
else 【2】;
if (f) printf("%d is",y);
else printf("%d is not",y);
printf(" a leap year.\n");
}
参考答案:【1】year%4== 0&&year%100!=0【2】f=0
*4.86 以下程序段针对输入的截止日期(年:yend,月:mend,日:dend)和出生日期(yman,mman,dman),计算出实际年龄。请分析程序填空。
设有:int yend,mend,dend,yman,mman,dman;
age=yend-yman;
if(mend【1】)mman) age--;
else if(mend【2】mman&&dend【3】dman)
age--;
参考答案:【1】<【2】==【3】<
4.87 有四个数a,b,c,d,要求从大到小的顺序输出。请分析程序填空。
main()
{int a,b,c,d,t;
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a
if(【1】){t=c;c=d;d=t;}
if(a
if(【2】){t=b;b=c;c=t;}
if(b
if(c
printf("%d %d %d %d",a,b,c,d);
}
参考答案:【1】c
4.88 以下程序的运行结果是 。
main()
{int a=2,b=3,c;
c=a;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1
printf("%d\n",c);
}
参考答案:-1
4.89 若a=1,b=2,则表达式a>b?a:b+1的值是 。
参考答案:3
4.90 若a=1,b=2,c=3,d=4,则表达式a>b?a:c>d?c:d的值是 。
参考答案:4
*4.91 设有变量定义:int a=10,c=9;则表达式(--a!=c++)?--a:++c的值是 。
参考答案:11
4.92 若有说明语句:int x=1,y=0;则表达式x>(y+x)?10:12.5>y++?'a':'A'的值是 。
参考答案:'a'
*4.93 若有说明语句:int a=1,b=0;则表达式++a*--a==b?12%5:'x'的值是 。
参考答案:'x'
4.94 若有x=1,y=2,z=3,则表达式(x
参考答案:0
**4.95 若有说明语句:int x=1,y=0;则表达式x-->(y+x)?5:25>y++?'1':'2'的值是 。
参考答案:5
参考分析:增量运算在条件运算的第一个表达式中时,关系运算符两侧各为一个处理单元。x--中的值是1,然后增为0,故y+x为0+0,因此整个表达式计算结果为真。
4.96 以下程序的运行结果是 。
#include
main()
{int a=-10,b=-3;
printf("%d,",-a%b);
printf("%d,",(a-b,a+b));
printf("%d\n",a-b?a-b:a+b);
}
参考答案:1,-13,-7
4.97以下程序的运行结果是 。
main()
{int x=1,y=1,z=1;
y=y+z;
x=x+y;
printf("%d,",x
printf("%d,",x
printf("%d,%d",x,y);
}
参考答案:3,2,3,3
4.98 以下程序的运行结果是 。
main()
{int x,y,z;
x=3;
y=z=4;
printf("%d,",(x>=y>=x)?1:0);
printf("%d\n",z>=y&&y>=x);
}
参考答案:0,1
4.99 若运行时输入:-2,则以下程序的输出结果是 。
main()
{int a,b;
scanf("%d",&a);
b=(a>=0)?a:-a;
printf("b=%d",b);
}
参考答案:b=2
4.100 若运行时输入:100,下面程序的运行结果是 。
main()
{int a;
scanf("%d",&a);
printf("%s",(a%2!=0)?"no":"yes");
}
参考答案:yes
4.101 如果运行时输入字符'Q',则以下程序的运行结果是 。
main()
{char ch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
ch=(ch>='a'&&ch<='z')?(ch-32):ch;
printf("%c",ch);
}
参考答案:Q
4.102 当运行时输入:1992,则以下程序的运行结果是 。
main()
{int y,t;
scanf("%d",&y);
t=((y%4==0)&&(y%100!=0)||y%400==0)?1:0;
if(t) printf("%d is",y);
else printf("%d is not",y);
printf("a leap year");
}
参考答案:1992 is a leap year
4.103 以下程序是计算x,y,z三个数中最小的。请分析程序填空。
main()
{int x=4,y=5,z=8;
int u,v;
u=x
v=u
printf("%d",v);
}
参考答案:【1】x:y【2】u:z
4.104 设有变量定义:int a=5,c=4;则(--a==++c)?--a:c++的值是【1】,此时c的存储单元的值为【2】。
参考答案:【1】5【2】6
4.105 执行以下程序后,a=【1】,b=【2】,c=【3】。
int x=10,y=9;
int a,b,c;
a=(x-- == y++) ? x-- : y++;
b=x++;
c=y;
参考答案:【1】10【2】9【3】11
*4.106 设有int x=1,y=0;则以下表达式的值为 。
x-->(y+x)?10:12.5>y++?'A':'Z'
参考答案:10
参考分析:在本题中x-->(y+x)的实际比较运算是1>0+0为真。
*4.107 设有int x=0,y=1;则以下表达式的值为 。
x++*x--!='y'?8-4:y
参考答案:4
参考分析:此处x++*x—实际计算为0*0。
4.108 若运行时输入:3 5/,则以下程序的运行结果是 。
main()
{float x,y;
char o;
double r;
scanf("%f %f %c",&x,&y,&o);
switch(o)
{case '+':r=x+y;break;
case '-':r=x-y;break;
case '*':r=x*y;break;
case '/':r=x/y;break;
}
printf("%f",r);
}
参考答案:0.600000
4.109 根据以下嵌套的if语句所给条件,填写switch语句,使它完成相同的功能。
(假设mark的取值在1-100之间)
if语句:
if(mark<60) k=1;
else if(mark<70) k=2;
else if(mark<80) k=3;
else if(mark<90) k=4;
else k=5;
switch语句:
switch(【1】)
{【2】k=1;break;
case 6 :k=2;break;
case 7 :k=3;break;
case 8 :k=4;break;
【3】k=5;
}
参考答案:【1】mark/10 【2】default: 【3】case 9:case 10:
4.110 设有如下程序段,若grade的值为'C',则输出结果是 。
switch(grade)
{case 'A':printf("85-100\n");
case 'B':printf("70-84\n");
case 'C':printf("60-69\n");
case 'D':printf("<60\n");
default:printf("error!\n");
}
参考答案:
60-69
<60
error!
4.111 以下程序段的运行结果是 。
int x=1,y=0;
switch(x)
{case 1:
switch(y)
{case 0:printf("**1**\n");break;
case 1:printf("**2**\n");break;
}
case 2:printf("**3**\n");
}
参考答案:
**1**
**3**
4.112 根据以下函数关系,对输入的每个x值,计算出相应的y值。请分析程序填空。
xy
x<00
0≤x<10x
10≤x<2010
20≤x<40-0.5x+20
main()
{int x,c;
float y;
scanf("%d",&x);
if(【1】) c=-1;
else c=【2】;
switch(c)
{case –1:y=0;break;
case 0:y=x;break;
case 1:y=10;reak;
case 2:case 3:y=-0.5*x+20;break;
default:y=-2;
}
if(【3】) printf("y=%f",y);
else printf("error\n");
}
参考答案:【1】x<0 【2】x/10 【3】y!=-2
4.113 以下程序的运行结果是 。
main()
{int a=2,b=7,c=5;
switch(a>0)
{case 1:switch(b<0)
{case 1:printf("@");break;
case 2:printf("!");break;
}
case 0:switch(c==5)
{case 0:printf("*");break;
case 1:printf("#");break;
default:printf("#");break;
}
default:printf("&");
}
printf("\n");
}
参考答案:#&
4.114 下面程序的运行结果是 。
#include
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("a=%d,b=%d",a,b);
}
参考答案:a=2,b=1
4.115 假设奖金税率如下(a代表奖金,r代表税率)
a<500 r=0%
500≤a<1000 r=5%
1000≤a<2000 r=8%
2000≤a<3000 r=10%
3000≤a r=15%
以下程序对输入的一个奖金数,求税率和应交税款以及实得奖金数(扣除奖金税后)。请分析程序填空。
main()
{float a,r,t,b;
int c;
scanf("%f",&a);
if(a>=3000) c=6;
else c=【1】;
switch(c)
{case 0:r=0;break;
case 1:r=0.05;break;
case 2:case 3:【2】;break;
case 4:case 5:r=0.1;break;
case 6:r=0.15;break;
}
t=a*r;
b=a-t;
printf("r=%f,t=%f,b=%f",r,t,b);
}
参考答案:【1】a/500 【2】r=0.08
4.116 某个自动加油站有'a','b','c'三种汽油,单价分别为1.50,1.35,1.18(元/千克),也提供了“自己加”和“协助加”两个服务等级。这样用户可以得到5%或10%的优惠。本程序针对用户输入加油量a,汽油品种b和服务类型c('f'--自动,'m'--自己,'e'--协助),输出应付款m。请分析程序填空。
main()
{float a,r1,r2,m;
char b,c;
scanf("%f %c %c",&a,&b,&c);
swith(b)
{case 'a':r1=1.5;break;
case 'b': 【1】 ;break;
case 'c':r1=1.18;break;
}
switch(c)
{case 'f':r2=0;break;
case 'm':r2=0.05;break;
case【2】:r2=0.1;break;
}
m=【3】;
printf("%f",m);
}
参考答案:【1】r1=1.35【2】'e'【3】a*r1*(1-r2)
4.117 以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请分析程序填空。
main()
{int yy,mm,len;
printf("year,month=");
scanf("%d %d",&yy,&mm);
switch(mm)
{case 1: case 3: case 5: case 7:case 8:
case 10:case 12:【1】;break;
case 4: case 6: case 9: case 11:len=30;break;
case 2:if(yy%4==0&&yy%100!=0||yy%400==0)【2】;
else【3】;
break;
default:printf("input error");break;
}
printf("the length of %d %d is %d\n",yy,mm,len);
}
参考答案:【1】len=31【2】len=29【3】len=28
*4.118 以下程序用以计算y年m1月d1日与同年的m2月d2日之间的天数(m2>=m1),并打印计算结果。若m1=m2且d1=d2则算一天。请分析程序填空。
main()
{int y,m1,d1,m2,d2;
int i,d;
scanf("%d,%d,%d,%d,%d",&y,&m1,&d1,&m2,&d2);
y=(y%4==0【1】y%100!=0【2】y%400==0)?1:0;
d=0-d1;
for(i=m1;i
switch(i)
{case 1:case 3:case 5: case 7:case 8:
case 10:case 12:d+=31;break;
case 2:d=d+28+y; break;
case 4:case 6:case 9:case 11:【3】;
}
printf("%d",d+d2+1);
}
参考答案:【1】&&【2】||【3】d=d+30
4.3 编程题
4.119 编制程序,要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
参考程序:
main()
{int a,b;
printf("Input a & b:");
scanf("%d%d",&a,&b);
if (a*a+b*b>100) printf("%d\n",(a*a+b*b)/100);
else printf("%d\n",a+b);
}
4.120 试编程判断输入的正整数是否既是5又是7的整数倍,若是输出yes,否则输出no。
参考程序:
main()
{int a;
printf("Input a:");
scanf("%d",&a);
if (a%5==0&&a%7==0) printf("yes\n");
else printf("no\n");
}
4.121 请编程序,根据以下函数关系,对输入的每个x值,计算出相应的y值。
xy
x≤00
0
10
20
参考程序:
main()
{float x,y;
printf("Input x:");
scanf("%f",&x);
y=-1;
if(x<0) y=0;
else if(x<=10) y=x;
else if(x<=20) y=10;
else if(x<40) y=0.5*x+20
else y=-1;
if (y==-1) printf("error");
else printf("y=%f\n",y);
}
4.122 输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:
(1)能同时被3,5,7整除
(2)能被其中两数整除(要指出哪两个)。
(3)能被其中一个数整除(要指出哪一个)。
(4)不能被任何一个整除。
参考程序:
main()
{int m;
printf("Input a number:");
scanf("%d",&m);
if(m%3==0&&m%5==0&&m%7==0)
printf("能同时被3,5,7整除");
else if((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0))
{printf("能被其中两数整除");
if(m%3==0&&m%5==0) printf("(3,5)");
else if(m%3==0&&m%7==0) printf("(3,7)");
else printf("(5,7)");
}
else if(m%3==0||m%5==0||m%7==0)
{printf("能被其中一个数整除");
if(m%3==0) printf("(3)");
else if(m%5==0) printf("(5)");
else printf("(7)");
}
else printf("不能被任何一个整除");
}
4.123 将以下程序段改用非嵌套的if语句实现。
int s,t,m;
t=(int)(s/10);
switch(t)
{case 10:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default: m=0;
}
参考程序:
m=0;
if(s>=100&&s<110) m=5;
if(s>=90&&s<100) m=4;
if(s>=80&&s<90) m=3;
if(s>=70&&s<80) m=2;
if(s>=60&&s<70) m=1;
4.124 用switch编程实现:
-1 (x<0)
y={0 (x=0)
1 (x>0)
参考程序:
void main()
{float x;
int y;
printf("Input a x:");
scanf("%f",&x);
switch(x<0)
{case 1:y=-1;break;
case 0:switch(x==0)
{case 1:y=0;break;
case 0:y=1;
}
}
printf("y=%d\n",y);
}
4.125 将以下程序段改用嵌套的if语句实现。
int s,t,m;
t=(int)(s/10);
switch(t)
{case:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default: m=0;
}
参考程序:
if(s>=110&&s<60) m=0
else if(s<110) m=5;
else if(s<100) m=4;
else if(s<90) m=3;
else if(s<80) m=2;
else m=1;
4.126 请将以下语句改写成为switch语句。
if(s>0&&s<=10)
if(s>=3&&s<=6) x=2;
else if(s>1||s>8) x=3;
else x=1;
else x=0;
参考程序:
switch(s>0&&s<=10)
{case 0:x=0;break;
case 1:switch(s>=3&&s<=6)
{case 1:x=2;break;
case 0:switch(s>1||s>8)
{case 1:x=3;break;
case 0:x=1;break;
}
}
}
4.127编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,-,*,/(用switch语句实现)。
参考程序:
#include
#include
main()
{float data1,data2,result;
char op;
printf("Type in your expression:");
scanf("%f %c %f",&data1,&op,&data2);
switch(op)
{case '+':result=data1+data2;break;
case '-':result=data1-data2;break;
case '*':result=data1*data2;break;
case '/':if(data2==0){printf("\nDivision by zero!");exit(1);}
result=data1/data2;break;
}
printf("This is %6.2f %c %6.2f=%6.2f\n",data1,op,data2,result);
}
4.128 编一程序,对于给定的一个百分制成绩,输出相应的五分值成绩。设90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'(用switch语句实现)。
参考程序:
main()
{int score=-1,temp;
char grade;
while(score>=0&&score<=100)
{ printf("Enter score:");
scanf("%d",&score);
}
temp=score/10;
switch(temp)
{case 0:case 1:case 2:case 3:case 4:case 5:grade='E';break;
case 6:grade='D';break;
case 7:grade='C';break;
case 8:grade='B';break;
case 9:case 10:grade='A';
}
printf("score=%d,grade=%c\n",score,grade);
}
第五章 循环控制
5.1 选择题
5.1 设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是 。
A)while循环执行10次 B)循环是无限循环
C)循环体语句一次也不执行 D)循环体语句执行一次
参考答案:C
5.2设有以下程序段
int x=0,s=0;
while(!x!=0) s+=++x;
printf("%d",s);
则 。
A)运行程序段后输出0 B)运行程序段后输出1
C)循环的控制表达式不正确 D)程序段执行无限次
参考答案:B
5.3语句while(!E);中的!E等价于 。
A)E= =0 B)E!=1 C)E!=0 D)E= =1
参考答案:A
5.4下面程序段的运行结果是 。
a=1;b=2;c=2;
while(a
printf("%d,%d,%d",a,b,c);
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1
参考答案:A
5.5 下面程序段的运行结果是 。
x=y=0;
while(x<15)
y++,x+=++y;
printf("%d,%d",y,x);
A)20,7 B)6,12 C)20,8 D)8,20
参考答案:D
5.6下面程序段的运行结果是 。
int n=0;
while(n++<=2);
printf("%d",n);
A)2 B)3 C)4 D)语法错误
参考答案:C
5.7 设有程序段
t=0;
while(printf("*"))
{t++;
if(t<3) break;
}
下面描述正确的是 。
A)其中循环控制表达式与0等价 B)其中循环控制表达式与'0'等价
C)其中循环控制表达式是不合法的 D)以上说法都不对
参考答案:B
参考分析:printf的返回值为数值1,恒真,故与B等价。
5.8 下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。
#include
main()
{int a,b,t;
scanf("%d%d",&a,&b);
while( )
{if (a>b)
{t=a;a=b;b=t;}
printf("%d,%d\n",a,b);
scanf("%d%d",&a,&b);
}
}
A)!a=b B)a!=b C)a==b D)a=b
参考答案:B
5.9下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m,n中的较大者
#include "stdio.h"
main()
{int m=0,n=0;
char c;
while ((【1】)!='\n')
{ if(c>='A'&&c<='Z') m++;
if (c>='a'&&c<='z') n++;
}
printf("%d",m
【1】A)c=getchar() B)getchar() C)c=gets() D)scanf("%c",c)
【2】A)m:n B)m:m C)n:n D)n:m
参考答案:【1】A【2】D
5.10下面程序的功能是将小写字母变成对应大写字母后的第二个字母,其中y变成A,z变成B。请选择填空。
#include "stdio.h"
main()
{ char c;
while ((c=getchar())!='\n')
{if (c>='a'&&c<='z')
{【1】;
if (c>'Z')
【2】;
}
printf("%c",c);
}
}
【1】A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30
【2】A)c='B' B)c='A' C)c-=26 D)c=c+26
参考答案:【1】D【2】 C
5.11下面程序的功能是在输入一批正整数中求出最大者,输入0结束循环,请选择填空 。
#include "stdio.h"
main()
{int a,max=0;
scanf("%d",&a);
while ( )
{if (max
scanf("%d",&a);
}
printf("%d",max);}
A)a= =0 B)a C)a= =1 D)!a
参考答案:B
5.12 下面程序的运行结果是 。
#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
参考答案:C
5.13若运行以下程序时,从键盘输入2473(表示回车),则下面程序的运行结果是 。
#include "stdio.h"
{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;
}
printf("\n");}
A)668977 B)668966 C)66778777 D)6688766
参考答案:A
5.14 C语言中while和do while循环的主要区别是 。
A)do-while的循环至少无条件执行一次。
B)while循环控制条件比do-while的循环控制条件严格。
C)do-while允许从外部转入到循环体内。
D)do-while的循环体不能是复合语句。
参考答案:A
5.15 以下能正确计算10!的程序段是 。
A)do {i=1;s=1; B)do{i=1;s=0;
s=s*i; s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
C)i=1;s=1; D)i=1;s=0;
do{s=s*i; do{s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
5.16 以下程序段 。
x=-1;
do x=x*x;
while(!x);
A)是死循环 B)循环执行两次
C)循环执行一次 D)有语法错误
参考答案:C
5.17 以下描述中正确的是 。
A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。
B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。
C)在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作。
D)do-while循环中,根据情况可以省略while。
参考答案:C
5.18 若有语句如下,则程序段的输出是 。
int x=3;
do {printf("%d",x-=2);}while(!(--x));
A)1 B)1和-2 C)3和0 D)死循环
*5.19下面程序的功能是计算正整数2345的各位数字平方和。
#include "stdio.h"
main()
{int n,sum=0;
n=2345;
do {sum=sum+【1】;
n=【2】;
} while(n);
printf("sum=%d",sum);}
【1】A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)
【2】A)n/1000 B)b/100 C)n/10 D)n%10
参考答案:【1】B 【2】C
5.20 下面程序是从键盘输入学号,然后输出学号中百位数是3的学号,输入0时结束循环。请选择填空。
#include
main()
{long int num;
scanf("%ld",&num);
do
{if(【1】) printf("%ld",num);
scanf("%ld",&num);
}while(【2】);
}
【1】A)num%100/10==3 B)num/100%10==3
C)num%10/10==3 D)num/10%10==3
【2】A)!num B)num>0==0 C)!num==0 D)!num!=0
参考答案:【1】B 【2】C
5.21 等比数列的第一项a=1,公比q=2,下面程序的功能是求满足前n项和小于100的最大n,请选择填空。
#include
main()
{int a,q,n,sum;
a=1;q=2;n=sum=0;
do
{【1】;
++n;a*=q;
}while(sum<100);
【2】;
printf("%d\n",n);
}
【1】A)sum++ B)sum+=a C)sum*=a D)a+=sum
【2】A)n=n-2 B)n=n C)n++ D)n-=1
参考答案:【1】B 【2】D
5.22 下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。请选择填空。
#include
main()
{int i=0,j,k;
do
{i++;k=316-13*i;}while( );
j=k/11;
printf("316=13*%d+11*%d",i,j);
}
A)k/11 B)k%11 C)k/11==0 D)k%11==0
参考答案:B
5.23 下面程序的运行结果是 。
#include
main()
{int y=10;
do {y--;}while(--y);
printf("%d\n",y--);
}
A)-1 B)1 C)8 D)0
参考答案:D
5.24若运行以下程序时,从键盘输入Adescriptor(表示回车),则下面程序的运行结果是 。
#include
main()
{ char c;
int v0=0,v1=0,v2=0;
do {
switch(c=getchar())
{case 'a':case'A':
case 'e':case'E':
case 'i':case 'I':
case 'o':case 'O':
case 'u':case 'U':v1+=1;
default:v2+=1;
}
v0+=1;
} while(c!='\n');
printf("v0-%d,v1=%d,v2=%d\n",v0,v1,v2);
}
A)v0=7,v1=4,v2=7 B)v0=11,v1=4,v2=11
C)v0=12,v1=4,v2=11 D)v0=12,v1=4,v2=12
参考答案:D
5.25 下面程序的运行结果是 。
#include
main()
{int a=1,b=10;
do
{b-=a;a++;}while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9
参考答案:B
5.26下面有关for循环的正确描述是 。
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体可以包括多条语句,但必须用花括号括起来
参考答案:D
5.27对for(表达式1; ;表达式3)可理解为 。
A) for (表达式1;0;表达式3) B) for (表达式1;1;表达式3)
C) for (表达式1;null;表达式3) D)缺少一个表达式
参考答案:B
5.28 若i为整型变量,则以下循环执行次数是 。
for (i=2;i==0;)printf("%d",i--);
A)无限次 B)0次 C)1次 D)2次
参考答案:B
5.29 以下for循环的执行次数是 。
for(x=0,y=0;(y=123)&&(x<4);x++);
A)是无限循环 B)循环次数不定 C)4次 D)3次
参考答案:C
5.30 以下不是无限循环的语句为 。
A)for(y=0,x=1;x>++y;x=i++) i=x;
B)for(;;x++=i);
C)while(1){x++;}
D)for(i=10;;i--) sum+=i;
参考答案:A
5.31下面程序段的运行结果是 。
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
A)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27
参考答案:C
5.32下面程序段的运行结果是 。
for(x=3;x<6;x++) printf((x%2)?("**%d"):("##%d\n")),x);
A)**3 B)##3 C)##3 D)**3##4
##4 **4 **4##5 **5
**5 ##5
参考答案:D
*5.33以下不是无限循环的语句为 。
A)int i=100;
while(1)
{i=i%100+1;
if(i>100)break;
}
B)for(;;);
C)int k=0;
do{++k;}while(k>=0);
D)int s=36;
while(s);--s;
参考答案:C
5.34 执行语句for(i=1;i++<4;);后变量的值为 。
A)3 B)4 C)5 D)不定
参考答案:C
5.35 有一堆零件(100到200之间),如果分成4个零件一组则多出2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多出5个零件。下面程序是求这堆零件总数,请选择填空。
#include
main()
{int i;
for(i=100;i<200;i++)
if((i-2)%4==0)
if(!((i-3)%7))
if( )
printf("%d",i);
}
A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9==5
参考答案:D
5.36 下面程序的功能是计算1至50中是7的倍数的数值之和,请选择填空。
#include
main()
{int i,sum=0;
for(i=1;i<=50;i++)
if( 【1】 )sum+=i;
printf("%d",sum);
}
A)(int)(i/7)==i/7 B)(int)i/7==i/7 C)i%7!=0 D)i%7==0
参考答案:D
5.37 下面程序的功能是计算1至10之间的奇数之和和偶数之和。请选择填空。
#include
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{a+=i;
【1】;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n", 【2】 );
}
【1】A)b=i-- B)b=i+1 C)b=i++ D)b=i-1
【2】A)c-10 B)c C)c-11 D)c-b
参考答案:【1】B 【2】CD
参考分析:奇数累加和根据题目的要求多计算了11,需要从累加和中去除,但退出循环后b变量的值也是11,故【2】中的D也正确。
5.38 下面程序的运行结果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
switch(i%5)
{case 0:printf("*");break;
case 1:printf("#");break;
default:printf("\n");break;
case 2:printf("&");
}
}
A)#&&* B)#& C)# D)#&
& &
&* & *
&*
参考答案:B
5.39 下面程序的运行结果是 。
#include
main()
{int x,i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%3d",x);
}
}
A) 39 81 B)42 84 C)26 68 D)28 70
参考答案:D
5.40 下面程序段的功能是计算1000!的末尾含有多少个零。请选择填空。(提示:只要计算出1000!中含有因子5的个数即可)
for(k=0,i=5;i<=1000;i+=5)
{m=i;
while( ){k++;m=m/5;}
A)m%5=0 B)m=m%5==0 C)m%5==0 D)m%!=0
5.41 下面程序的功能是求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表示一个三位数),请选择填空。
#include
main()
{int x,y,z,i,result=532;
for(x=1;x<10;x++)
for(y=1;y<10;y++)
for(【1】;z<10;z++)
{i=100*x+10*y+z+100*y+10*z+z;
if(【2】)printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
【1】A)z=x B)z=1 C)z=0 D)z=y
【2】A)i/result==1 B)i=result C)i!=result D)i==result
参考答案:【1】CB 【2】D
参考分析:【1】由于z不需要作为百位数,因此可以为0。若更进一步考虑到z为两个数的末尾,2倍的z不可能为0,故z也不可能为0,所以B也应当正确。
**5.42 下面程序是对输出一个正整数等差数列的前十项,此数列前四项之和及积分别是26和880,请选择填空。
#include
main()
{int a,d,i,s,f,x;
for (a=1;a<=6;a++)
for(d=1;【1】;d++)
{s=0;f=1;x=a;
for(i=1;i<=4;i++)
{s=s+x;
f=f*x;
x=x+d;
}
if(s==26&&f==880)
for(i=0;i<10;i++)
printf("%3d", 【2】 ;
}
}
【1】A)d<=a B)空 C)d<=5 D)d
【2】a+i*d B)i*d C)a+(i+1)*d D)a+d
参考答案:【1】C【2】A
5.43 下面程序的运行结果是 。
#include
main()
{int i,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0) k++;
}
printf("%d,%d",k,b);
}
A)3,-1 B)8,-1 C)3,0 D)8,-2
参考答案:D
5.44 以下正确的描述是 。
A)continue语句的作用是结束整个循环的执行。
B)只能在循环体内和switch语句体内使用break语句。
C)在循环体内使用break语句或continue语句的作用相同。
D)从多层循环嵌套中退出时,只能使用goto语句。
参考答案:B
5.45 下面程序段 。
for(t=1;t<=100;t++)
{scanf("%d",&x);
if(x<0)continue;
printf("%3d",t);
}
A)当x
C)printf函数永远也不执行 D)最多允许输出100个非负整数
参考答案:D
5.46下面程序段 。
x=3;
do{y=x--;
if(!y) {printf("*"); continue;}
printf("#");
}while(1<=x<=2);
A)将输出## B)将输出###*
C)是死循环 D)含有不合法的控制表达式
参考答案:C
5.47 以下是死循环的程序段是 。
A)for(i=1; ; )
if(++i%2==0) continue;
if(++i%3==0) break;
}
B)i=32767;
do{if(i<0) break;}while(++i);
C)for(i=1; ; ) if(++i<10) continue;
D)i=1;
while(i--);
参考答案:C
5.48 以下描述正确的是 。
A)goto语句只能用于退出多层循环。
B)switch语句中不能出现continue语句。
C)只能用continue语句来中止本次循环。
D)在循环中break语句不能独立出现。
参考答案:C
5.49 与下面程序段等价的是 。
for(n=100;n<=200;n++)
{if(n%3==0) continue;
printf("%4d",n);
}
A)for(n=100;(n%3)&&n<=200;n++) printf("%4d",n);
B)for(n=100;(n%3)||n<=200;n++) printf("%4d",n);
C)for(n=100;n<=200;n++) if(n%3!=0) printf("%4d",n);
D) for(n=100;n<=200;n++)
{if(n%3) printf("%4d",n);
else continue;
break;
}
参考答案:C
**5.50 下面程序的功能是将从键盘输入的偶数写成两个素数之和。请选择填空。
#include
#include
main()
{int a,b,c,d;
scanf("%d",&a);
for(b=3,b<=a/2;b+=2)
{for(c=2;c<=sqrt(b);c++) if(b%c==0) break;
if(c>sqrt(b)) d= ;else continue;
for(c=2;c<=sqrt(d);c++) if(d%c==0) break;
if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d);
}
}
A)a+b B)a-b C)a*b D)a/b
参考答案:B
5.51下面程序的运行结果是 。
#include
main()
{int k=0;char c='A';
do
{switch(c++)
{case 'A':k++;break;
case 'B':k--;
case 'C':k+=2;break;
case 'D':k=k%2;break;
case 'E':k=k*10;break;
default:k=k/3;
}
k++;
}while(c<'G');
printf("k=%d\n",k);
}
A)k=3 B)k=4 C)k=2 D)k=0
参考答案:B
5.52 若运行以下程序时,从键盘输入3.6 2.4,则下面程序的运行结果是 。
#include
#include
main()
{float x,y,z;
scanf("%f%f",&x,&y);
z=x/y;
while(1)
{if(fabs(z)>1.0) {x=y;y=z;z=x/y;}
else break;
}
printf("%f\n",y);
}
A)1.500000 B)1.600000 C)2.000000 D)2.400000
参考答案:B
5.53下面程序的运行结果是 。
#include
main()
{int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20) break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf("%d\n",a);
}
A)7 B)8 C)9 D)10
参考答案:B
5.54下面程序的运行结果是 。
#include
main()
{int i,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2) continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
A)x=4 B)x=8 C)x=6 D)x=12
参考答案:B
5.55下面程序的运行结果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
{if(i%2) printf("*");
else continue;
printf("#");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
参考答案:A
5.56下面程序的运行结果是 。
main()
{int i,j,a=0;
for(i=0;i<2;i++)
{for(j=0;j<4;j++)
{if(j%2) break;
a++;
}
a++;
}
printf("%d\n",a);
}
A)4 B)5 C)6 D)7
参考答案:A
5.2 填空题
5.57 下面程序段是从键盘输入的字符中统计数字字符的个数,当输入换行符时结束循环。请分析程序填空。
int n=0,c;
c=gethar();
while(【1】)
{if(【2】) n++;
c=getchar();
}
参考答案:【1】c!='\n' 【2】c>='0'&&c<='9'
5.58 下面程序的功能是用公式π2/6≈1/12+1/22+1/32+...+1/n2求π的近似值,直到最后一项的值小于10-6为止,请分析程序填空。
#include
#include
main()
{long i=1;
【1】pi=0;
while(i*i>=1e6)
{pi=【2】;i++;}
pi=sqrt(6.0*pi);
printf("pi=%10.6f\n",pi);
}
参考答案:【1】double 【2】pi+1/i/i
5.59 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请分析程序填空。
#include
main()
{int day,x1,x2;
day=0;x1=1020;
while(【1】){x2=【2】;x1=x2;day++;}
printf("day=%d\n",day);
}
参考答案:【1】x1 【2】x1/2-2
5.60 下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请分析程序填空。
#include
main()
{int r,m,n;
scanf("%d%d",&m,&n);
if(m
r=m%n;
while(r){m=n;n=r;r=【2】;}
printf("%d\n",n);
}
参考答案:【1】r=m,m=n,n=r 【2】m%n
5.61 执行以下程序时输入right?,则下面程序的运行结果是 。
#include
main()
{char c;
while((c=getchar())!='?') putchar(++c);
}
参考答案:sjhiu
5.62下面程序的运行结果是 。
#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\n",s);
}
参考答案:s=254
参考分析:本题是计算21+22+...+27之和。
5.63当运行以下程序,用户输入China# 程序的运行结果是 。
#include "stdio.h"
main()
{int v1=0,v2=0;
char ch;
while ((ch=getchar())!='#')
switch(ch)
{case 'a':
case 'h':
default:v1++;
case 'o': v2++;
}
printf("%d,%d\n",v1,v2);}
参考答案:5,5
5.64 执行下面程序段后,k值是 。
k=1;n=263;
do{k*=n%10;n/=10;}while(n);
参考答案:36
5.65 下面程序段中循环体的执行次数是 。
a=10;b=0;
do{b+=2;a-=2+b;}while(a>=0);
参考答案:3次
5.66下面程序段的运行结果是 。
x=2;
do{printf("*");x--;}while(!x==0);
参考答案:**
5.67下面程序段的运行结果是 。
i=1;a=0;s=1;
do{a=a+s*i;s=-s;i++;}while(i<=10);
printf("a=%d",a);
参考答案:a=-5
5.68 下面的程序是用do while语句求1至1000之间满足“用3除余2;用5除余3;用7除余2"的数,且一行只打印五个数。请分析程序填空。
#include
main()
{int i=1,j=0;
do
{if(【1】)
{printf("%4d",i);
j=j+1;
if(【2】) printf("\n");
}
i=i+1;
}while(i<1000);
}
参考答案:【1】i%3==2&&i%5==3&&i%7==2 【2】j%5==0
5.69 下面程序的功能是统计正整数的各位数字中零的个数,并求各位数字中的最大者。请分析程序填空。
#include
main()
{int n,count,max,t;
count=max=0;
scanf("%d",&n);
do
{t=【1】;
if(t==0) ++count;
else if(max
n/=10;
}while(n);
printf("count=%d,max=%d",count,max);
}
参考答案:【1】n%10 【2】max=t
5.70 等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有数的和。请分析程序填空。
#include
main()
{int a,d,sum;
a=2;d=3;sum=0;
do
{sum+=a;
a+=d;
if( )printf("%4d\n",sum);
}while(sum<200);
}
参考答案:sum%4==0
*5.71 下面程序的功能是求1111的个、十、百位上的数字之和。请分析程序填空。
#include
main()
{int i,s=1,m=0;
for(i=1;i<=11;i++) s=s*11%1000;
do {m+=【1】;s=【2】;}while(s);
printf("m=%d\n",m);
}
参考答案:【1】s%10 【2】s/10
参考分析:本题各位数的分离,没有什么新意,一个十进制大数的人为“高位溢出”这种技巧,值得学习和模仿。
5.72 当运行以下程序时,从键盘输入1 2 3 4 5 -1,则下面程序的运行结果是 。
#include
main()
{int k=0,n;
do{scanf("%d",&n);k+=n;}while(n!=-1);
printf("k=%d n=%d\n",k,n);
}
参考答案:k=14 n=-1
5.73下面程序的运行结果是 。
#include
main()
{int i,x,y;
i=x=y=0;
do{++i;
if(i%2!=0){x=x+i;i++;}
y=y+i++;
}while(i<=7);
printf("x=%d,y=%d\n",x,y);
}
参考答案:x=1,y=20
5.74下面程序的运行结果是 。
#include
main()
{int a,b,i;
a=1;b=3;i=1;
do{printf("%d,%d,",a,b);
a=(b-a)*2+b;
b=(a-b)*2+a;
if(i++%2==0) printf("\n");
}while(b<100);
}
参考答案:1,3,7,15,
31,63,
5.75 当从键盘输入-1 0,则以下程序的运行结果是 。
#include
main()
{int a,b,m,n;
m=n=1;
scanf("%d%d",&a,&b);
do{if(a>0) {m=2*n;b++;}
else {n=m+n;a+=2;b++;}
}while(a==b);
printf("m=%d n=%d\n",m,n);
}
参考答案:m=4 n=2
5.76下面程序段是找出整数的所有因子,请分析程序填空。
scanf("%d",&x);
for (i=1; ; i++)
if (x%i==0) printf("%3d",i);
参考答案:i<=x
5.77 鸡兔同笼,头30,脚90,下面程序段计算鸡兔各有多少只。请分析程序填空。
for(x=1;x<=30;x++ )
{y=30-x;
if(【1】) printf("%d,%d",x,y);
}
参考答案:2*x+4*y==90
5.78 下面程序段的运行结果是 。
for(a=1,i=-1;-1<=i<1;i++)
{a++;printf("%d,",a);}
printf("%2d",i);
参考答案:-1
5.79 循环语句for(i=0;i<3;i++) printf("*");表达式i=0执行【1】次,表达式i++执行【2】次。
参考答案:【1】1 【2】3
5.80 下面程序的功能是计算1-3+5-7+...-99+101的值,请分析程序填空。
#include
main()
{int i,t=1,s=0;
for(i=1;i<=101;i+=2)
{【1】;s=s+t;【2】;}
printf("%d\n",s);
}
参考答案:【1】t=t*i 【2】t=-t/i
5.81 以下程序是用梯形法求sin(x)*cos(x)的定积分。求定积分的公式为:
s=h/2(f(a)+f(b))+h∑f(xi) (i=1~n-1)
其中xi=a+ih,h=(b-a)/n。设a=0,b=1.2为积分上下限,积分区间分隔数n=100,请分析程序填空。
#include
#include
main()
{int i,n;double h,s,a,b;
printf("Input a,b:");
scanf("%lf%lf",【1】);
n=100;h=【2】;
s=0.5*(sin(a)*cos(a)+sin(b)*cos(b));
for(i=1;i<=n-1;i++) s+=【3】;
s*=h;
printf("s=%10.4lf\n",s);
}
参考答案:【1】&a,&b 【2】(b-a)/n 【3】sin(a+i*h)*cos(a+i*h)
5.82 以下程序的功能是根据公式e=1+1/1!+1/2!+...1/n!求e的近似值,精度要求为10-6。请分析程序填空。
#include
main()
{int i;double e,new;
【1】;new=1.0;
for(i=1;【2】;i++)
{new/=(double)i; e+=new;}
printf("e=%lf\n",e);
}
参考答案:【1】e=1 【2】new>1e-6
*5.83 下面程序的运行结果是 。
#include
main()
{int i,t,sum=0;
for(t=i=1;i<=10;)
{sum+=t;++i;
if(i%3==0) t=-i;
else t=i;
}
printf("sum=%d",sum);
}
参考答案:sum=19
参考分析:此题为1+2-3+4+5-6+7+8-9+10之和。
*5.84下面程序的运行结果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
switch(i%2)
{case 0:i++;printf("#");break;
case 1:i+=2;printf("*");
default:printf("\n");
}
}
参考答案:*
#
参考分析:由于在程序中改变了循环变量的值,导致循环只能循环2次。
5.85下面程序的运行结果是 。
#include
main()
{int i,j=4;
for(i=j;i<=2*j;i++)
switch(i/j)
{case 0:case 1:printf("*");break;
case 2:printf("#");
}
}
参考答案:****#
5.86 下面程序的功能是求出用数字0至9可以组成多少个不重复的三位偶数。请分析程序填空。
#include
main()
{int n=0,i,j,k;
for(i=1;i<=9;i++)
for(k=0;k<=8;【1】)
if(k!=i)
for(j=0;j<=9;j++)
if(【2】) n++;
printf("n=%d\n",n);
}
参考答案:【1】k+=2 【2】i!=j&&k!=j
5.87 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请分析程序填空。
#include
main()
{int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{k=1;s=0;
【1】;
while(【2】)
{k*=m%10;
s+=m%10;
【3】;
}
if(k>s) printf("%3d",n);
}
}
参考答案:【1】m=n 【2】m 【3】m=m/10
*5.88 下面程序的功能是求1000以内的所有完全数。说明:一个数如果恰好等于它的因子之和(除自身外),则称该数为完全数。例如:6=1+2+3。
#include
main()
{int a,i,m;
for(a=1;a<=1000;a++)
{for(【1】;i<=a/2;i++)
if(!(a%i)) 【2】;
if(m==a) printf("%4d",a);
}
}
参考答案:【1】i=1,m=0 【2】m=m+i
5.89 下面程序的功能是完成用一元人民币兑换一分、两分、五分零币的所有兑换方案。请分析程序填空。
#include
main()
{int i,j,k,l=1;
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
{k=【1】;
if(【2】)
{printf(" %2d %2d %2d ",i,j,k);
l=l+1;
if(l%5==0) printf("\n");
}
}
}
参考答案:【1】100-5*i-2*j 【2】k>=0
5.90 下面程序的功能是从三个红球、五个白球、六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案。请分析程序填空。
#include
main()
{int i,j,k;
printf("\n hong bai hei\n");
for(i=0;i<=3;i++)
for(【1】;j<=5;j++)
{k=8-i-j;
if(【2】) printf(" %3d %3d %3d\n",i,j,k);
}
}
参考答案:【1】j=1 【2】k<7
*5.91 若从键盘输入65 14,则下面程序的运行结果是 。
#include
main()
{int m,n;
printf("Enter m,n:");
scanf("%d%d",&m,&n);
while(m!=n)
{while(m>n) m-=n;
while(n>m) n-=m;
}
printf("m=%d\n",m);
}
参考答案:m=1
参考分析:这是一种计算两个整型数最大公约数的一种算法。
5.92 下面程序的运行结果是 。
#include
main()
{int y=2,a=1;
while(y--!=-1)
{do {a*=y; a++;}while(y--);}
printf("%d,%d",a,y);
}
参考答案:1,-2
5.93 下面程序的运行结果是 。
#include
main()
{int i,j;
for(i=0;i<=3;i++)
{for(j=0;j<=5;j++)
if(i==0||j==0||i==3||j==5) printf("*");
else printf(" ");
printf("\n");
}
}
参考答案:
******
* *
* *
******
5.94下面程序的运行结果是 。
#include
main()
{int i,j;
for(i=4;i>=1;i--)
{for(j=1;j<=i;j++) putchar('#');
for(j=1;j<=4-i;j++) putchar('*');
putchar('\n');
}
}
参考答案:
####
###*
##**
#***
5.95下面程序的运行结果是 。
#include
main()
{int i,k=0;
for(i=1; ;i++)
{k++;
while(k
{k++;
if(k%3==0) goto loop;
}
}
loop:printf("%d,%d",i,k);
}
参考答案:2,3
5.96 下面程序段的运行结果是 。
i=1;s=3;
do{s+=i++;
if(s%7==0) continue;
else ++i;
}while(s<15);
printf("%d",i);
参考答案:8
5.97 若用0至9之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请分析程序填空。
#include
main()
{int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(【1】)continue;
else for(k=0;k<=9;k++)
if(【2】) count++;
printf("%d",count);
}
参考答案:【1】i==j 【2】k!=i&&k!=j
5.98 下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。请分析程序填空。
#include
main()
{int i,s,k,count=0;
for(i=100;i<=1000;i++)
{s=0;k=i;
while(【1】){s+=k%10;k=【2】;}
if(s!=5) 【3】;
else count++;
}
printf("%d",count);
}
参考答案:【1】k 【2】k/10 【3】continue
5.99 下面程序的功能是从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not exist”。请分析程序填空。
#include
main()
{int i,a;
for(i=1;i<=10;i++)
{scanf("%d",&a);
if(a%7==0) {printf("%d",a); 【1】;}
}
if(【2】) printf("not exist\n");
}
参考答案:【1】break 【2】i>10
5.100 下面程序的功能是输出100以内个位数为6且能被3整除的所有数。请分析程序填空。
#include
main()
{int i,j;
for(i=0;【1】;i++)
{j=i*10+6;
if(【2】) continue;
printf("%d",j);
}
}
参考答案:【1】i<=9 【2】j%3
5.101 下面程序的运行结果是 。
#include
main()
{int i=1;
while(i<=15)
if(++i%3!=2) continue;
else printf("%d ",i);
printf("\n");
}
参考答案:2 5 8 11 14
5.102下面程序的运行结果是 。
#include
main()
{int i,j,k=19;
while(i=k-1)
{k-=3;
if(k%5==0){i++;continue;}
else if(k<5) break;
i++;
}
printf("i=%d,k=%d\n",i,k);
}
参考答案:i=6,k=4
5.103下面程序的运行结果是 。
#include
main()
{int a=10,y=0;
do
{a+=2;y+=a;
if(y>50) break;
}while(a=14);
printf("a=%d y=%d\n",a,y);
}
参考答案:a=16 y=60
5.104下面程序的运行结果是 。
#include
main()
{int i=5;
do
{switch(i%2)
{case 4:i--;break;
case 6:i--;continue;
}
i--;i--;
printf(%d ",i);
}while(i>0);
}
参考答案:3 1 -1
5.3 编程题
5.105 每个苹果0.8元,第一天买2个苹果,第二天开始买前一天的2倍,直至购买的苹果个数达到不超过100的最大值。编写程序求每天平均花多少钱。
参考程序:
main()
{int day=0,buy=2;
float sum=0,ave;
do
{sum=sum+0.8*buy;
day++;buy=buy*2;
}while(buy<=100);
ave=sum/day;
printf("average=%f\n",ave);
}
5.106 编写程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如,5是25右边的数,25是625右边的数,5和25就是同构数。
参考程序:
main()
{int i;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i) printf("%3d",i);
}
5.107 编写程序,求一个整数任意次方的最后三位数。即求xy值的最后三位数,要求x,y从键盘输入。
参考程序:
main()
{int x,y,i,s=1;
printf("Input x and y:");
scanf("%d%d",&x,&y);
for(i=1;i<=y;i++)
s=s*x%1000;
printf("The last 3 digit of %d*%d is:%d\n",x,y,s);
}
5.108 编写程序,从键盘输入6名学生的五门成绩,分别统计出每个学生的平均成绩。
参考程序:
main()
{int i,j;
float s,sum,ave;
for(i=0;i<6;i++)
{sum=0;
for(j=1;j<=5;j++)
{scanf("%f",&s);
sum=sum+s;
}
ave=sum/5;
printf("No.%d ave=%6.2f\n",i+1,ave);
}
}
第六章 数组
6.1 选择题
6.1在c语言中,引用数组元素时,其数组下标的数据类型是 。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
参考答案:C
参考分析:严格的说法应当是常量表达式。
6.2以下对一维数组a的正确说明是 。
A) int n; scanf("%d",&n); int a[n]; B)int n=10,a[n];
C) int a(10); D)#define SIZE 10
int a[SIZE];
参考答案:D
6.3若有说明:int a[10];则对数组元素的正确引用是 。
A)a[10] B)a[3,5] C)a(5) D)a[10-10]
参考答案:D
6.4 在C语言中,一维数组的定义方式为:类型说明符 数组名 。
A)[常量表达式] B)[整型表达式]
C)[整型表达式]或[整型常量] D)[整型常量]
参考答案:A
6.5 以下能对一维数组a进行正确初始化的语句是 。
A)int a[10]=(0,0,0); B)int a[10]={};
C)int a[]={0}; D)int a[10]={10*1};
参考答案:CD
参考分析:本题题目设计有问题,D也是正确的。
6.6 以下对二维数组a的正确说明是 。
A)int a[3][]; B)float a(3,4);
C)double a[1][4]; D)float a(3)(4);
参考答案:C
6.7若有说明:int a[3][4];则对a数组元素的正确引用是 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
参考答案:C
参考分析:在实际应用中a[2][4]这种应用方式实质上访问的是a[3][0],这是越界访问。
6.8 若有说明:int a[3][4];则对a数组元素的非法引用是 。
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
参考答案:D
参考分析:a[0][4]实质上访问的是a[1][0],严格意义上并不非法。
6.9 以下能对二维数组a进行正确初始化的语句是 。
A)int a[2][]={{1,0,1},{5,2,3}};
B)int a[][3]={{1,2,3},{4,5,6}};
C)int a[2][4]={{1,2,3},{4,5},{6}};
D)int a[][3]={{1,0,1}{},{1,1}};
参考答案:B
6.10以下不能对二维数组a进行正确初始化的说明是 。
A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}};
C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};
参考答案:C
6.11 若有说明:int a[3][4]={0};则下面正确的叙述是 。
A)只有元素a[0][0]可以得到初值0
B)此说明语句不正确
C)数组中各元素都可以得到初值,但其值不一定为0
D)数组中每个元素均可得到初值0
参考答案:D
6.12若有说明:int a[][4]={0,0};则下面不正确的叙述是 。
A)数组a的每个元素都可得到初值0
B)二维数组a的第一维大小为1
C)因为二维数组a中第二维大小的值除初值个数的商为0,故数组a的行数为1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
参考答案:D
6.13 若有说明:static int a[3][4];则数组中各元素 。
A)可在程序的运行阶段得到初值0
B)可在程序的编译阶段得到初值0
C)不能得到确定的初值
D)可在程序的编译或运行阶段得到初值0
参考答案:B
6.14 以下各组选项中,均能正确定义二维实型数组a的选项是 。
A)float a[3][4]; B)float a(3,4);
float a[][4]; float a[3][4];
float a[3][]={{1},{0}}; float a[][]={{0},{0}};
C)float a[3][4]; D)float a[3][4];
static float a[][4]={{0},{0}}; float a[3][];
auto float a[][4]={{0},{0},{0}}; float a[][4];
参考答案:C
6.15 下面程序有错误的行是 (行前数字表示行号)。
1 main()
2 { int a[3]={3*0};
3 int i;
4 for(i=0;i<3;i++)
5 scanf("%d",&a[i]);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf("%d\n",a[0]);
8 }
A)第2行有错误 B)第6行有错误
C)第7行有错误 D)没有错误
参考答案:习题集中答案为A,实质上应当选择D
6.16下面程序有错误的行是 (行前数字表示行号)。
1 main()
2 {
3 float a[10]={0.0};
4 int i;
5 for(i=0;i<3;i++) scanf("%d",&a[i]);
6 for(i=1;i<10;i++) a[0]=a[0]+a[i];
7 printf("%f\n",a[0]);
8 }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第7行有错误
参考答案:C
6.17下面程序有错误的行是 (行前数字表示行号)。
1 main()
2 {
3 int a[3]={1};
4 int i;
5 scanf("%d",&a);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf("a[0]=%d\n",a[0]);
8 }
A)3 B)6 C)7 D)5
参考答案:D
6.18下面程序有错误的行是 (行前数字表示行号)。
1 main()
2 {
3 int a[3]={0};
4 int i;
5 for(i=0;i<3;i++) scanf("%d",&a[i]);
6 for(i=1;i<4;i++) a[0]=a[0]+a[i];
7 printf("%d\n",a[0]);
8 }
A)没有错误 B)3 C)5 D)6
参考答案:D
6.19 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为(假设a[0][0]位于数组的第一个位置上) 。
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
参考答案:D
6.20 对说明语句int a[10]={6,7,8,9,10};的正确理解是 。
A)将5个初值依次a[1]至a[5]
B)将5个初值依次a[0]至a[4]
C)将5个初值依次a[5]至a[9]
D)将5个初值依次a[6]至a[10]
参考答案:B
6.21 以下不正确的定义语句是 。
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={'1','2','3','4','5'};
D)char c2[]={'\x10','\xa','\x8'};
参考答案:B
6.22 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是 。
A)2 B)3 C)4 D)无法确定
参考答案:B
6.23 若二维数组a有m列,则在a[i][j]前的元素个数为 。
A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1
参考答案:B
6.24 定义如下变量和数组:int k,a[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是 。
for(k=0;k<3;k++) printf("%d ",a[k][2-k]);
A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7
参考答案:A
6.25以下程序段的作用是 。
int a[]={4,0,2,3,1},i,j,t;
for (i=1;i<5;i++)
{t=a[i];j=i-1;
while (j>=0&&t>a[j])
{a[j+1]=a[j];j- -;}
a[j+1]=t;
}
A)对数组a进行插入排序(升序)
B)对数组a进行插入排序(降序)
C)对数组a进行选择排序(升序)
D)对数组a进行选择排序(降序)
参考答案:B
6.26 以下正确的定义语句是 。
A)int a[1][4]={1,2,3,4,5}; B)float x[3][]={{1},{2},{3}};
C)long b[2][3]={{1},{2,3},{4,5,6}}; D)double y[][3]={0};
参考答案:D
6.27 下面程序的运行结果是 。
#include
main()
{int a[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
A) 1 1 1 1 1 B) 0 0 0 0 1 C) 1 0 0 0 0 D) 1 0 0 0 1
1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0
1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0
1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1
参考答案:C
6.28 下面程序的运行结果是 。
#include
main()
{int a[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf("%2d",a[i]);
}
}
A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0
参考答案:C
*6.29下面是对s的初始化,其中不正确的是 。
A)char s[5]={"abc"}; B)char s[5]={'a','b','c'};
C)char s[5]=""; D)char s[5]="abcde";
参考答案:D
*6.30下面程序段的运行结果是 。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);
A)'a''b' B)ab C)ab c D)ab▄(▄表示空格)
参考答案:B
*6.31对两个数组a和b进行如下初始化
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
则以下叙述正确的是 。
A)a与b数组完全相同 B)a与b数组长度相同
C)a和b中都存放字符串 D)a数组比b数组长度长
参考答案:D
6.32有两个字符数组a、b,则以下正确的输入语句是 。
A)gets(a,b); B)scanf("%s%s",a,b);
C)scanf("%s%s",&a,&b); D)gets("a");gets("b");
参考答案:B
6.33有字符数组a[80]和b[80],则正确的输出语句是 。
A)puts(a,b); B)printf("%s,%s",a[],b[]);
C)putchar(a,b); D)puts(a),puts(b);
参考答案:D
*6.34 下面程序段的运行结果是 。
char a[7]="abcdef",b[4]="ABC";
strcpy(a,b);
printf("%c",a[4]);
A)■ B)\0 C)e D)ef
参考答案:C
6.35有下面程序段,上机运行,将 。
char a[3],b[]="China";
a=b;
printf("%s",a);
A)输出China B)输出Chi C)输出Ch D)编译出错
参考答案:D
*6.36下面程序段的运行结果是 。
char c[]="\t\v\\\0will\n";
printf("%d",strlen(c));
A)3 B)6 C)9 D)14
参考答案:A
6.37 判断字符串a和b是否相等,应当使用 。
A)if(a==b) B)if(a=b) C)if(strcmp(a,b)) D)if(strcmp(a,b)==0)
参考答案:D
6.38判断字符串s1是否大于字符串s2,应当使用 。
A) if (s1>s2) B) if (strcmp(s1,s2)
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
参考答案:D
6.39下面程序段输出两个字符串中对应相等的字符。请分析程序填空。
char x[]="programming";
char y[]="Fortran";
ini i=0;
while (x[i]!='\0'&&y[i]!='\0')
if (x[i]= =y[i]) printf("%c", );
else i++;
A)x[i++] B)y[++i] C)x[i] D)y[i]
参考答案:A
6.40 下面描述正确的是 。
A)两个字符串包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符个数少的字符串大
C)字符串"STOP"与"STOP■"相等
D)字符串"That"小于字符串"The"
参考答案:D
6.41 下面对C语言字符数组的描述中错误的是 。
A)字符数组可以存放字符串
B)字符数组的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
参考答案:C
***6.42 有已排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请选择填空。
#include
main()
{char a[20]="cehiknqtw";
char s[]="fbla";
int i,k,j;
for(k=0;s[k]!='\0';k++)
{j=0;
while(s[k]>=a[j]&&a[j]!='\0') j++;
for(【1】) 【2】;
s[j]=s[k];
}
puts(a);
}
【1】A)i=strlen(a)+k;i>=j;i-- B)i=strlen(a);i>=j;i--
C)i=j;i<=strlen(a)+k;i++ D)i=j;i<=strlen(a);i++
【2】A)a[i]=a[i+1] B)a[i+1]=a[i]
C)a[i]=a[i-1] D)a[i-1]=a[i]
参考答案:【1】B 【2】B
参考分析:向有序数据中插入数据关键在于两点,一是查找插入位置——查找插入位置注意两个问题,插入的数据与有序数组中数据的大小关系和注意防止向右越界。再一个是有序数组元素后移时自后向前。
***6.43下面程序的功能是将已按升序排好序的两个字符串a和b中的字符,按升序归并到字符串c中。请分析程序填空。
#include "stdio.h"
main()
{char a[]="acegikm";
char b[]="bdfhjlnpq";
char c[80],*p;
int i=0,j=0,k=0;
while (a[i]!='\0'&&b[j]!='\0')
{if (a[i]
else {【2】};
k++;
}
c[k]='\0';
if (【3】) p=b+j;
else p=a+i;
strcat(c,p);
puts(c);
}
【1】【2】
A)c[k]=a[i];i++ B)c[k]=b[j];i++
C)c[k]=a[i];j++ D)c[k]=b[j];j++
【3】A)a[i]=='\0' B)a[i]!='\0' C)a[i-1]=='\0' D)a[i-1]!='\0'
参考答案:【1】A 【2】D 【3】A
参考分析:归并排序的要点是将两个数组a和b的下标逐次后移,存放的是那个数组的元素,就移动那个数组的下标,而目标数组c则每次循环都要移动,当a,b数组其中一个到达结束标志后,再将没到达结束标志的数组中剩余的数据全部写到目的数组中。
***6.44下面程序的功能是将字符串s中所有的字符'c'删除。
#include "stdio.h"
main()
{char s[80];
int i,j;
gets(s);
for (i=j=0;s[i]!='\0';i++)
if (s[i]!='c') ;
s[j]='\0';
puts(s);}
A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[i];j++ D)s[j]=s[i]
参考答案:A
参考分析:删除指定字符的程序要点在于采用双下标,一个下标对数组从头到尾进行逐个扫描,另外一个下标则只有当写入不删除字符时才向后移动。其关键思想就是:s[j++]=s[j]。
*6.45 下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请分析程序填空。
#include
main()
{char s[80],c1,c2=' ';
int i=0,num=0;
gets(s);
while(s[i]!='\0')
{c1=s[i];
if( ) num++;
i++;
c2=c1;
}
printf("There are %d words.\n",num);
}
A)c1==' '&&c2==' ' B)c1!=' '&&c2==' '
C)c1==' '&&c2!=' ' D)c1!=' '&&c2!=' '
参考答案:B
参考分析:判断是不是一个单词的要点就是当前字符不是空格而前一个字符是空格。
6.46 下面程序的运行结果是 。
#include
main()
{char ch[7]={"12ab56"};
int i,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);
}
A)1 B)1256 C)12ab56 D)1 2 5 6
参考答案:A
6.47 当运行以下程序时,从键盘输入:aa bbcc dd则下面程序的运行结果是 。
#include
main()
{char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);puts(a3);puts(a4);
}
A)aa B)aa C)aa D)aa bb
bb bb bb cc
cc cc dd dd
cc dd dd ee
参考答案:A
6.48 当运行以下程序时,从键盘输入abcdef,则下面程序的运行结果是 。
#include
#define N 6
main()
{char c[N];int i=0;
for(;i
for(i=0;i } A)abcdef B)ab C)a D)ab c c c def d d 参考答案:D 6.49 当运行以下程序时,从键盘输入:AhaMA Aha,则下面程序的运行结果是 。 #include main() {char s[80],c='a'; int i=0; scanf("%s",s); while(s[i]!='\0') {if(s[i]==c) s[i]=s[i]-32; else if(s[i]==c-32) s[i]=s[i]+32; i++; } puts(s); } A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA 参考答案:A 6.50 下面程序的运行结果是 。 #include #include main() {char a[20]="AB",b[20]="LMNP"; int i=0;strcat(a,b); while(a[i++]!='\0') b[i]=a[i]; puts(b); } A)LB B)ABLMNP C)AB D)LBLMNP 参考答案:D 6.51下面程序的运行结果是 。 #include main() {char str[]="SSSWLIA",c; int k; for(k=2;(c=str[k])!='\0';k++) {switch(c) {case 'I':++k;break; case 'L':continue; default:putchar(c);continue; } putchar('*'); } } A)SSW* B)SW* C)SW*A D)SW 参考答案:B 6.52下面程序的运行结果是 。 #include main() {char a[]="morning",t; int i,j=0; for(i=1;i<7;i++) if(a[j] t=a[j];a[j]=a[7];a[7]=t; puts(a); } A)mogninr B)mo C)morning D)mornin 参考答案:B 6.2 填空题 6.53 在c语言中,二维数组的定义方式为:类型说明符 数组名[【1】][【2】]; 参考答案:【1】【2】常量表达式 6.54 在c语言中,二维数组在内存中的存放顺序是【 】。 参考答案:按行主顺序存放 6.55 若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。 参考答案:【1】0 【2】4 6.56 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为【 】。(假设a[0][0]位于数组的第一个位置上) 参考答案:i*m+j+1 6.57 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。 参考答案:【1】0【2】6 6.58 若有以下输入(数之间有空格),则下面程序的运行结果是 。 7 16 5 4 6 7 9 8 3 2 4 6 12 2 -1 main() {int b[51],x,i,j=0,n=0; scanf("%d",&x); while(x>-1){b[++n]=x;scanf("%d",&x);} for(i=1;i<=n;i++) if(b[i]%2==0) b[++j]=b[i]; for(i=1;i<=j;i++) printf("%3d ",b[i]); } 参考答案:16 4 6 8 2 4 6 12 2 参考分析:本程序是删除用户所输入的所有奇数。 6.59 下面程序以每行4个数的形式输出a数组,请分析程序填空。 #define N 20 main() {int a[N],i; for(i=0;i for(i=0;i {if(【2】) 【3】; printf("%3d",a[i]); } } 参考答案:【1】&a[i] 【2】i%4==0 【3】printf("\n"); 6.60 下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请分析程序填空。 main() {int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j; printf("array a:\n"); for(i=0;i<=1;i++) {for(j=0;【1】;j++) {printf("%5d",a[i][j]); 【2】; } printf("\n"); } printf("array b:\n"); for(i=0;【3】;i++) {for(j=0;j<=1;j++) printf("%5d",b[i][j]); printf("\n"); } } 参考答案:【1】j<=2 【2】b[j][i]=a[i][j] 【3】i<=2 6.61 下面程序的运行结果是 。 main() {int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j; printf("array a:\n"); for(i=0;i<=1;i++) {for(j=0;j<=2;j++) {printf("%5d",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for(i=0;i<=2;i++) {for(j=0;j<=1;j++) printf("%5d",b[i][j]); printf("\n"); } } 参考答案: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6 6.62 下面程序可求出矩阵两条对角线上的元素之和。请分析程序填空。 main() {int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) sum1+=a[i][j]; for(i=0;i<3;i++) for(【1】;【2】;j--) if(i+j==2) sum2+=a[i][j]; printf("sum1=%d,sum2=%d\n",sum1,sum2); } 参考答案:【1】j=2 【2】j>=0 6.63 下面程序的运行结果是 。 main() {int a[5][5],i,j,n=1; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=n++; printf("The result is:\n"); for(i=0;i<5;i++) {for(j=0;j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } } 参考答案:1 6 7 11 12 13 16 17 18 19 21 22 23 24 25 6.64 下面程序可求出矩阵a的主对角线上的元素之和。请分析程序填空。 main() {int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(【1】) sum+=【2】; printf("sum=%d\n",sum); } 参考答案:【1】i==j 【2】a[i][j] 6.65 以下程序可求出所有的水仙花数。(水仙花数是三位正数,其各位数字的立方和等于该正数,如:407=4*4*4+0*0*0+7*7*7) main() {int x,y,z,a[8],m,i=0; printf("The special numbers are :\n"); for (【1】;m++) {x=m/100; y=【2】; z=m%10; if (m= =x*x*x+y*y*y+z*z*z) {【3】;i++;} } for (x=0;x printf(%6d",a[x]); } 参考答案:【1】m=100;m<1000 【2】m/10%10或m%100/10 【3】a[i]=m 6.66下面程序的功能是生成并打印某数列的前20项,该数列第1,2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号的项是前两项差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。 main() { int x[21],i,j; x[0]=0;x[2]=1; i=3; do {x[i]=【1】; x[i+1]=【2】; i=【3】; } while (i<=20); for (i=1;i<=20;i++) {printf("%5d",x[i]); if (i%4= =0) printf("\n"); } } 参考答案:【1】x[i-2]+x[i-1] 【2】x[i]-x[i-1] 【3】i+2 6.67 若有以下输入,则下面程序的运行结果是 。 1 4 2 3 3 4 1 2 3 3 2 2 2 3 3 1 1 1 4 1 1 1 -1 #define M 50 main() {int a[M],c[4],i,n=0,x; printf("Enter 1 or 2 or 3 or 4,to end with -1\n"); scanf("%d",&x); while(x!=-1) {if(x>0&&x<=4) {a[n-1]=x;n++;} scanf("%d",&x); } for(i=0;i<4;i++) c[i]=0; for(i=0;i printf("The result is:\n"); for(i=1;i<=4;i++) printf("%d:%d\n",i,c[i-1]); printf("\n"); } 参考答案: The result is: 1:8 2:5 3:6 4:3 6.68 下面程序的运行结果是 。 main() {int i,j,a[2][3]={{2,4,6},{8,10,12}}; printf("The original array is:\n"); for(i=0;i<2;i++) {for(j=0;j<3;j++) printf("%4d",a[i][j]); printf("\n"); } printf("\nThe result is:\n"); for(i=0;i<3;i++) {for(j=0;j<2;j++) printf("%4d",a[j][i]); printf("\n"); } } 参考答案: The original array is: 2 4 6 8 10 12 The result is: 2 8 4 10 6 12 6.69 设数组a包括10个整型元素,下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请分析程序填空。 void main() {int a[10],b[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); for(【1】;i<10;i++) 【2】; for(i=1;i<10;i++) {printf("%3d",b[i]); if(【3】==0) printf("\n"); } } 参考答案:【1】i=1【2】b[i]=a[i-1]+a[i]【3】i%3 6.70 下面程序是将十进制数转换成不超过十六进制的n进制。请分析程序填空。 #include main() {int i=0,base,n,j,num[20]; printf("Enter data that will be converted:\n"); scanf("%d",&n); printf("Enter base:\n"); scanf("%d",&base); do {i++; num[i]=n【1】base; n=n【2】base; } while(n); printf("The data %d has been converted into the %d base data:\n",n,base); for(【3】) if(num[j]>9) putchar(num[j]+'A'-10); else putchar(num[j]+'0'); } 参考答案:【1】%【2】/【3】j=i;j>=1;j-- 6.71下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。 main() {int a[5],max,min,i,j,k; for (i=0;i<5;i++) scanf("%d:,&a[i]; min=a[0]; for (i=1;i<5;i++) if (a[i] max=a[0]; for (i=1;i<5;i++) if a[i]>max) {max=a[i]; 【2】;} 【3】 printf("\nThe position of min is:%3d\n",k); printf("\nThe position of max is:%3d\n",j); for (i=0;i<5;i++) printf("%5d",a[i]); } 参考答案:【1】j=i【2】k=i【3】a[j]=max;a[k]=min; 6.72 下面程序的运行结果是 。 main() {int i,f[10]; f[0]=f[1]=1; for(i=2;i<10;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<10;i++) {if(i%4==0) printf("\n"); printf("%3d",f[i]); } } 参考答案: 1 1 2 3 5 8 13 21 34 55 6.73 下面程序的运行结果是 。 main() {int a[10]={1,2,2,3,4,3,4,5,1,5}; int n=0,i,j,c,k; for(i=0;i<10-n;i++) {c=a[i]; for(j=i+1;j<10-n;j++) if(a[j]==c) {for(k=j;k<10-n;k++) a[k]=a[k+1]; n++; } } for(i=0;i<10-n;i++) printf("%3d",a[i]); } 参考答案: 1 2 3 4 5 **6.74 下面程序的功能是给一维数组a任意输入6个整数,假设为7 4 8 9 1 5,然后建立一个具有以下内容的方阵并打印。请分析程序填空。 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 7 4 8 9 1 5 main() {int a[6],i,j,k,m; for(i=0;i<6;i++) scanf("%d",&a[i]); for(i=5;i>=0;i--) {k=a[5]; for(【1】;j>=0;j--) a[j+1]=a[j]; 【2】; for(m=0;m<6;m++) printf("%d ",a[m]); printf("\n"); } } 参考答案:【1】j=4 【2】a[0]=k 参考分析:采用二维数组可以采用a[i][j]=a[i-1][(j-1+M)%M]的方式为0行以后的行进行赋值。 **6.75 下面程序的功能是输出以下n*n阶(最大为9阶)方阵。请分析程序填空。(以下例子是6阶方阵) 1 1 1 1 1 1 1 2 2 2 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 2 2 2 1 1 1 1 1 1 1 main() {int a[9][9],n,i,j,m; scanf("%d",&n); m=(n+1)/2; for(i=0;i for(j=0;j {a[i][j]=i+1; a[【1】][j]=i+1; a[j][i]=i+1; a[j][【2】]=i+1; } for(i=0;i {for(j=0;j printf("%3d",a[i][j]); printf("\n"); } } 参考答案:【1】【2】n-i-1 6.76 当从键盘输入18并回车后,下面程序的执行结果是 。 main() {int x,y,i,j,a[10]; scanf("%d",&x); y=x;i=0; do {a[i++]=y%2; y=y/2; }while(y); for(j=i-1;j>=0;j--) printf("%d",a[j]); } 参考答案:10010 6.77 下面程序的功能是将二维数组a中每个元素向右一列,最后一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。请分析程序填空。 例如:array a: array b: 4 5 6 6 4 5 1 2 3 3 1 2 main() {int i,j,a[2][3]={4,5,6,1,2,3},b[2][3]; printf("array a:\n"); for(i=0;i<2;i++) for(j=0;j<3;j++) {printf("%4d",a[i][j]; 【1】; } for(【2】;i++) b[i][0]=a[i][2]; printf("array b:\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) printf("%4d",b[i][j]); 【3】; } } 参考答案:【1】b[i][j+1]=a[i][j] 【2】i=0;i<2 【3】printf("\n") *6.78 下面程序的功能是统计年龄在16-31岁之间的学生人数。请分析程序填空。 main() {int a[16],n,age,i; for(i=0;i<16;i++) a[i]=0; printf("Enter the age of each student(to end with -1):\n"); scanf("%d",&age); while(age>-1) {【1】; scanf("%d",&age); } printf("The result is:\n"); for(【2】;i++) printf("%3d%6d\n",i,a[i-16]); } 参考答案:【1】a[age-16]++ 【2】i=16;i<=31 6.79 下面程序的功能是检查一个二维数组是否对称(即对所有i和j都有a[i][j]=a[j][i])。请分析程序填空。 main() {int i,j,found=0,a[4][4]; printf("Enter array(4*4):\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); for(j=0;j<4;j++) for(【1】;i<4;i++) if(a[j][i]!=a[i][j]) {【2】;break;} if(found) printf("No"); else printf("Yes"); } 参考答案:【1】i=j+1 【2】found=1 6.80 下面程序中的数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请分析程序填空。 main() {int a[10],b[10],i; for(i=0;【1】;i++) scanf("%d",&a[i]); for(i=1;【2】;i++) b[i]=a[i]-a[i-1]; for(i=1;i<10;i++) {printf("%3d",b[i]); if(【3】) printf("\n"); } } 参考答案:【1】i<10 【2】i<10 【3】i%3==0 6.81 下面程序的运行结果是 。 main() {int i=1,n=3,j,k=3, a[5]={1,4,5}; while(i for(j=n-1;j>=i;j--) a[j+1]=a[j]; a[i]=k; for(i=0;i<=n;i++) printf("%3d",a[i]); } 参考答案: 1 3 4 5 **6.82下面程序的运行结果是 。 #include "stdio.h" #define LEN 12 int num[]={3,4,5,6,7,8,9,10,11,12,13,14}; main() {int i,j,k,x,y; x=0;y=LEN-1; while(x<=y) {j=num[x];i=2;k=1; while (i<=j/2&&k) //判断j是否为素数 k=j%i++; if (k) printf(“%3d”,num[x++]; else //j不是素数首尾数据互换,尾指针前移 {num[x]=num[y]; num[y--]=j; } } for (i=0;i printf(“%5d”,num[i]); } 参考答案: 3 13 5 11 7 参考分析:该程序对数组设置了头尾两个下标,对数组自前向后检查各元素是否为素数,如果是则输出该元素,头下标后移,继续检查下一个元素;如果不是,则将数组后面的元素与正检查的数组元素互换,尾下标前移,继续检查,直到头下标大于尾下标。 6.83 设数组中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请分析程序填空。 main() {int a[10]={1,2,3,4,5,6,7,8,9,10},k,i; float ave,s=0; for(k=s=i=0;i<10;i++) {if(a[i]%2!=0) 【1】; s+=【2】; k++; } if(k!=0) {ave=s/k;printf("%d,%f\n",k,ave);} } 参考答案:【1】continue 【2】a[i] 6.84 以下程序是求矩阵a,b的和,结果存入矩阵c中,并按矩阵形式输出。请分析程序填空。 main() {int a[3][4]={{1,3,5,7},{4,7,2,5},{-8,2,5,6}}; int b[3][4]={{-2,6,7,3},{-1,5,4,7},{8,9,3,2}}; int i,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=【1】; for(i=0;i<3;i++) {for(j=0;j<4;j++) printf("%3d",c[i][j]); 【2】; } } 参考答案:【1】a[i][j]+b[i][j] 【2】printf("\n") 6.85 以下程序是求矩阵a,b的乘积,结果存入矩阵c中并按矩阵形式输出。请分析程序填空。 main() {int a[3][2]={2,3,4,6,3,1},b[2][2]={6,-1,8,3}; int i,j,k,s,c[3][2]; for(i=0;i<3;i++) for(j=0;j<2;j++) {for(【1】;k<2;k++) s+=【2】; c[i][j]=s; } for(i=0;i<3;i++) {for(j=0;j<2;j++) printf("%6d",c[i][j]); 【3】; } } 参考答案:【1】s=0,k=0 【2】a[i][k]*b[k][j] 【3】printf("\n") 6.86 已知以下矩阵: y1 1 -0.2 0 0 1 y2 -0.8 1 -0.2 -0.2 1 y3= 0 -0.8 1 -0.2 × 1 y4 0 -0.8 -0.8 1 1 下面程序的功能是求出y1,y2,y3,y4的值。请分析程序填空。 main() {float a[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},{0,-0.8,1,-0.2},{0,-0.8,-0.8,1}}; float x[4]={1,1,1,1},y[4]; int i,j,k; for(i=0;i<4;i++) {y[i]=0; for(j=0;j<4;j++) 【1】; } for(k=0;k<4;k++) printf("\ny[%d]=%-6.2f",k+1,【2】); } 参考答案:【1】y[i]+=a[i][j]*x[i] 【2】y[k] 6.87 以下程序的功能是求数组num中小于零的数据之和。请分析程序填空。 main() {int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8}; int sum=0,i; for(i=0;i<20;i++) {if(【1】) sum=【2】; } printf("sum=%d\n",sum); } 参考答案:【1】num[i]<0 【2】sum+num[i] 6.88 以下程序的功能是 。 main() {int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8}; int sum=0,i; for(i=0;i<20;i++) {if(num[i]>0) sum+=num[i]; } printf("sum=%d\n",sum); } 参考答案:求取num数组中大于0的所有数据之和。 6.89 下面程序的运行结果是 。 main() {int i,j,row,col,min; int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,7,-5}}; min=a[0][0];row=0;col=0; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j] {min=a[i][j];row=i;col=j;} printf("min=%d,row=%d,col=%d\n",min,row,col); } 参考答案:min=-5,row=2,col=3 参考分析:在二维数组中查找最小值及它的下标。 ***6.90 若输入52,则下面程序的运行结果是 。 main() {int a[8]={6,12,18,42,46,52,67,73}; int low=0,mid,high=7,x; printf("Input a x:"); scanf("%d",&x); while(low<=high) {mid=(low+high)/2; if(x>a[mid]) low=mid+1; else if(x else break; } if(low<=high) printf("Search Successful! The index is:%d\n",mid); else printf("Can't search!\n"); } 参考答案:Search Successful! The index is:5 参考分析:本题为典型的折半查找,要点有三:1.循环条件为low<=high;2.查找处理是一个三分支;3.总是把中点的前点作为后点或把中点的后点作为前点。 **6.91 下面程序的运行结果是 。 main() {int a[9]= {0,6,12,18,42,46,52,67,73}; int x=52;i,n=9,m; i=n/2+1;m=n/2; while(m!=0) i=i-m/2-1; else if(x>a[i]) i=i+m/2+1; else break; m=m/2; } if (m) printf("The index is:%d",i); else printf("Can't search."); } 参考答案:The index is:6 参考分析:这是折半查找的变形题目,本算法仅计算数组中间元素的下标。计算中点下标时巧妙地利用了数据元素个数的“折半”。 6.92 下面程序用“顺序查找法”查找数组a中是否存在某一关键字。请分析程序填空。 main() {int a[8]={25,57,48,37,12,92,86,33}; int i,x; scanf("%d",&x); for(i=0;i<8;i++) if(x==a[i]) {printf("Found! The index is:%d\n",i);【1】;} if(【2】) printf("Can't found!"); } 参考答案:【1】break 【2】i>=8 **6.93 下面程序用“快速顺序查找法”查找数组a中是否存在某一关键字。请分析程序填空。 main() {int a[9]={11,23,41,27,42,64,82,59}; int i=0,x; scanf("%d",&x); 【1】; while(a[i]!=x) i++; if(【2】) printf("Found! The index is:%d\n",i); else printf("Can't found!\n"); } 参考答案:【1】a[8]=x 【2】i<8 参考分析:如果数组中不存在需要查找的数据,循环条件设置为a[i]!=x无疑会使得对数组的访问产生右越界。将欲查找的数据放到数组的最后位置可以防止查找过程发生右越界。 ***6.94 下面程序用插入法对数组a进行降序排序。请分析程序填空。 main() {int a[5]={4,7,8,2,5}; int i,j,m; for(i=1;i<5;i++) {m=a[i]; j=【1】; while(j>=0&&m>a[j]) {【2】; j--; } 【3】=m; } for(i=0;i<5;i++) printf("%3d",a[i]); printf("\n"); } 参考答案:【1】i-1 【2】a[j+1]=a[j] 【3】a[j+1] 参考分析:插入排序是一种很重要的排序方法。它的排序思想及相应的技巧需要好好掌握。 6.95 下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请分析程序填空。 main() {int a[3]={5,9,19}; int b[5]={12,24,26,37,48}; int c[10],i=0,j=0,k=0; while(i<3&&j<5) if(【1】) {c[k]=b[j];k++;j++;} else {c[k]=a[i];k++;i++;} while(【2】) {c[k]=a[i];i++;k++;} while(【3】) {c[k]=b[j];k++;j++;} for(i=0;i printf("%3d",c[i]); } 参考答案:【1】a[i]>b[j] 【2】i<3 【3】j<5 6.96 下面程序的运行结果是 。 main() {int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) {for(j=1;j<6;j++) printf("%2d",a[i][j]); printf("\n"); } } 参考答案: 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 6.97 若输入32458,则下面程序的运行结果是 。 main() {int i=0,base,n,j,old,num[20]; printf("Enter data that will be converted:"); scanf("%d",&n); old=n; printf("Enter base:"); scanf("%d",&base); do {i++; num[i]=n%base; n=n/base; }while(n!=0); printf("The data %d has been converted into the %d-base data:\n",old,base); for(j=i;j>=1;j--) printf("%5d",num[j]); } 参考答案: Enter data that will be converted:3245 Enter base:8 The data 3245 has been converted into the 8-base data: 6 2 5 5 6.98 若输入7 4 8 9 1 5,则下面程序的运行结果是 。 main() {int a[6],i,j,k,m; for(i=0;i<6;i++) scanf("%d",&a[i]); for(i=5;i>=0;i--) {k=a[5]; for(j=4;j>=0;j--) a[j+1]=a[j]; a[0]=k; for(m=0;m<6;m++) printf("%3d",a[m]); printf("\n"); } } 参考答案: 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 7 4 8 9 1 5 6.99 下面程序的运行结果是 。 main() {int a[10]={1,2,3,4,5,6,7,8,9,10}, k,i; float ave,s=0; for(k=i=0;i<10;i++) {if(a[i]%2==0) continue; s+=a[i]; k++; } if(k!=0) {ave=s/k; printf("The number is:%d, The average is:%f\n",k,ave); } } 参考答案:The number is:5, The average is:5.000000 6.100 若有以下输入,则下面程序的运行结果是 。 3 1 2 3 2 2 2 1 1 3 0 main() {int a[4],x,i; for(i=1;i<=3;i++) a[i]=0; scanf("%d",&x); while(x>0) {a[x]+=1;scanf("%d",&x);} for(i=1;i<=3;i++) printf("a[%2d]=%4d\n",i,a[i]); } 参考答案: a[ 1]= 3 a[ 2]= 4 a[ 3]= 3 6.101 若有以下输入,则下面程序的运行结果是 。 5 9 7 5 3 1 5 main() {int a[10],x,i,n; printf("Enter n(n<10):"); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",a+i); printf("Enter x:");scanf("%d",&x); a[0]=x;i=n; while(x>a[i]) {a[i+1]=a[i];i--;} a[i+1]=x; n++; for(i=1;i<=n;i++) printf("%3d",a[i]); printf("\n"); } 参考答案: 9 7 5 5 3 1 6.102 下面程序的运行结果是 。 #define SIZE 30 main() {float a[SIZE],b[SIZE/5],sum; int i,k; for(k=2,i=0;i {a[i]=k;k+=2;} sum=0; for(k=0,i=0;i {sum+=a[i]; if((i+1)%5==0) {b[k]=sum/5; sum=0; k++; } } printf("The result is:\n"); for(i=0;i printf("\n"); } 参考答案:The result is : 6.00 16.00 26.00 36.00 46.00 56.00 6.103 下面程序的功能是求出矩阵x的上三角元素之积。其中矩阵x的行、列数和元素值均由键盘输入。请分析程序填空。 #define M 10 main() {int x[M][M]; int n,i,j; long s=1; printf("Enter a integer(<=10):\n"); scanf("%d",&n); printf("Enter %d data on each line for the array x\n",n); for(【1】) for(j=0;j scanf("%d",&x[i][j]); for(i=0;i for(【2】) 【3】; printf("%ld\n",s); } 参考答案:【1】i=0;i 6.104 若有以下输入,则下面程序的运行结果是 。 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 #define M 10 main() {int x[M][M]; int n,i,j; long s=1; printf("Enter a integer(<10):\n"); scanf("%d",&n); printf("Enter %d data on each line for the array x\n",n); for(i=0;i for(j=0;j scanf("%d",&x[i][j]); for(i=0;i for(j=i;j s=s*x[i][j]; printf("The result =%ld\n",s); } 参考答案:The result=27648 6.105 字符串"ab\n\\012\\\""的长度是 。 参考答案:9 6.106 下面程序段的运行结果是 。 char ch[]="600"; int a,s=0; for(a=0;ch[a]>='0'&&ch[a]<='9';a++) s=10*s+ch[a]-'0'; printf("%d",s); 参考答案:600 6.107 下面程序段将输出computer,请填空。 char c[]="It's a computer"; for(i=0;【1】;i++) {【2】;printf(%c",c[j]);} 参考答案:【1】i<8 【2】j=i+7 6.108 下面程序段的运行结果是 。 char x[]="the teacher"; i=0; while(x[++i]!='\0') if(x[i-1]=='t') printf("%c",x[i]); 参考答案:he 6.109 下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。请分析程序填空。 #include #include main() {char c='a',t[50]; int n,k,j; gets(t); n=【1】; for(k=0,j=-1;k if(【2】) {j=k;break;} printf("%d",j); } 参考答案:【1】strlen(t) 【2】t[k]==c 6.110 下面程序的功能是在三个字符串中找出最小的。请分析程序填空。 #include #include main() {char s[20],str[3][20]; int i; for(i=0;i<3;i++) gets(str[i]); strcpy(s,【1】); if(strcmp(str[2],s)<0) strcpy(s,str[2]); printf("%s\n",【2】); } 参考答案:【1】strcmp(str[0],str[1])<0?str[0]:str[1] 【2】s 6.111 下面程序的功能是从键盘输入一个大写英文字母,要求按字母的顺序打印出相邻的字母,指定的字母在中间。若指定的字母为'Z',则打印YZA;若为A则打印ZAB。请分析程序填空。 #include main() {char a[3],c; int i; c=getchar(); a[1]=c; if(c=='Z') {a[2]='A';【1】;} else if(c=='A'){a[0]='Z';【2】;} else {a[0]=c-1;a[2]=c+1;} for(i=0;i<3;i++) putchar(a[i]); } 参考答案:【1】a[0]=c-1 【2】a[2]=c+1 6.112 下面程序的功能是将字符数组a[6]={'a','b','c','d','e','f'}变为{'f','a','b','c','d','e'}。请分析程序填空。 #include main() {char t,a[6]={'a','b','c','d','e','f'}; int i; 【1】; for(i=5;i>0;i--) 【2】; a[0]=t; for(i=0;i<=5;i++) printf("%c",a[i]); } 参考答案:【1】t=a[5] 【2】a[i]=a[i-1] 6.113 下面程序的功能是将字符串a中下标值为偶数的元素由小到大排序,其他元素不变。请分析程序填空。 #include main() {char a[]="labchmfye",t; int i,j; for(i=0;i<7;i+=2) for(j=i+2;j<9;【1】) if(【2】) {t=a[i];a[i]=a[j];a[j]=t;} puts(a); } 参考答案:【1】j+=2 【2】a[i]>a[j] 6.114 下面程序的功能是在任意的字符串a中将与字符c相等的所有元素下标值分别存放在整型数组b中。请分析程序填空。 #include main() {char a[80]; int i,b[80],k=0; gets(a); for(i=0;a[i]!='\0';i++) if(【1】){b[k]=i;【2】;} for(i=0;i } 参考答案:【1】a[i]=='c' 【2】k++ 6.115 有十个字符串。下面程序的功能是在每个字符串中,找出最大字符按一一对应的顺序放入一维数组中,即第i个字符串中的最大字符放在a[i]中,输出每个字符串中的最大字符及其下标。 #include main() {char s[10][20],a[10]; int i,j; for (i=0;i<10;i++) gets(s[i]); for(i=0;i<10;i++) {【1】; for(j=1;s[i][j]!='\0';j++) if(a[i] } for(i=0;i<10;i++) printf("%d %c\n",i,a[i]); } 参考答案:【1】a[i]=s[i][0] 【2】a[i]=s[i][j] 6.116 下面程序的运行结果是 。 #include main() {int i; char a[]="Time",b[]="Tom"; for(i=0;a[i]!='\0'&&b[i]!='\0';i++) if(a[i]==b[i]) if(a[i]>='a'&&a[i]<='z') printf("%c",a[i]-32); else printf("%c",a[i]+32); else printf("*"); } 参考答案:t*M 6.117下面程序的运行结果是 。 #include main() {char a[2][6]={"Sun","Moon"}; int i,j,len[2]; for(i=0;i<2;i++) {for(j=0;j<6;j++) if(a[i][j]=='\0') {len[i]=j;break;} printf("%6s:%d\n",a[i],len[i]); } } 参考答案: Sun:3 Moon:4 6.118下面程序的运行结果是 。 #include main() {int i,r; char s1="bus",s2="book"; for(i=r=0;s1[i]!='\0'&&s2[i]!='\0';i++) if(s1[i]==s2[i]) i++; else {r=s1[i]-s2[i];break;} printf("%d",r); } 参考答案:4 *6.119下面程序的运行结果是 。 #include #define LEN 4 main() {int j,c; char n[2][LEN+1]={"8980","9198"}; for(j=LEN-1;j>=0;j--) {c=n[0][j]+n[1][j]-2*'0'; n[0][j]=c%10+'0'; } for(j=0;j<=1;j++) puts(n[j]); } 参考答案:7078 9198 *6.120下面程序的运行结果是 。 #include main() {int i=5; char c[6]="abcd"; do{c[i]=c[i-1];} while(--i>0); puts(c); } 参考答案:aabcd *6.121 当运行以下程序时,从键盘输入AabD,则运行结果是 。 #include main() {char s[80]; int i; gets(s); while(s[i]!='\0') {if(s[i] s[i]='z'+'a'-s[i]; i++; } puts(s); } 参考答案:AzyD 参考分析:本题是将串中小写字母逆序转换。 *6.122下面程序的运行结果是 。 #include main() {char s[]="ABCCDA",c; int k; for(k=1;(c=s[k])!='\0';k++) {switch(c) {case 'A':putchar('%');continue; case 'B':++k;break; default:putchar('*'); case 'C':putchar('&');continue; } putchar('#'); } } 参考答案:#&*&% 6.123下面程序的运行结果是 。 #include main() {int i=0; char a[]="abm",b[]=aqid",c[10]; while(a[i]!='\0'&&b[i]!='\0') {if(a[i]>=b[i]) c[i]=a[i]-32; else c[i]=b[i]-32; i++; } c[i]='\0'; puts(c); } 参考答案:AQM *6.124 当运行以下程序时,从键盘输入: BOOK CUT GAME PAGE 则下面程序的运行结果是 。 #include #include main() {int i; char str[10],temp[10]="Control"; for(i=0;i<4;i++) {gets(str); if(strcmp(temp,str)<0) strcpy(temp,str); } puts(temp); } 参考答案:PAGE 参考分析:本题是查找输入的最大字符串(含初始串)。 6.125 当运行以下程序时,从键盘输入: apple orange 则下面程序的运行结果是 。 #include #include main() {char a[2][80],t; int i,j,m=0,n=0,l,max; for(i=0;i<=1;i++) gets(a[i]); t=a[0][0]; for(i=0;i<=1;i++) {l=strlen(a[i]); for(j=0;j<=l;j++) if(a[i][j]>t) {max=a[i][j];m=i;n=j;} } printf("%c %d %d\n",max,m,n); } 参考答案:e 1 5 参考分析:本题是查找最后一个大于首字符的字符及其位置。 6.3 编程题 6.126 从键盘输入若干个整数,其值在0至4范围内,用-1作为输入结束的标志。统计每个整数的个数。 参考程序: void main() {int i,s[5],x printf("Input some numbers(between 0 to 4):"); scanf("%d",&x); while(x!=-1) {if (x>=0&&x<=4) s[x]++;} for(i=0;i<=4;i++) printf("%d: %d\n",i,s[i]); } 6.127 若有说明:int a[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。请编写程序并输出a和b数组中的元素。 参考程序: main() {int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j; printf("Array a:\n"); for(i=0;i<2;i++) {for(j=0;j<3;j++) {b[j][i]=a[i][j]; printf("%3d",a[i][j]); } printf("\n"); } printf("Array b:"); for(i=0;i<3;i++) {for(j=0;j<2;j++) printf("%3d",b[i][j]); printf("\n"); } } 6.128 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。 参考程序: #define SIZE 30 main() {float b[SIZE/5],sum; int a[SIZE],i,k; for(k=2,i=0;i a[i]=k; sum=0; for(k=0,i=0;i {sum=sum+a[i]; if((i+1)%5==0) {b[k++]=sum/5; sum=0; } } printf("The result is:\n"); for(i=0;i } 6.129 通过赋初值按行顺序为一个2×3的二维数组赋予2、4、6、...等偶数,然后按列的顺序输出该数组。试编程。 参考程序: main() {int i,j,a[2][3]={{2,4,6},{8,10,12}}; printf("\nThe result is:\n"); for(i=0;i<3;i++) {for(j=0;j<2;j++) printf("%4d",a[j][i]); printf("\n"); } } 6.130 通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。 参考程序: main() {int a[5][5],i,j,n=1; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=n++; printf("The result is:\n"); for(i=0;i<5;i++) {for(j=0;j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } } 6.131 试编程打印用户指定的n阶顺时针螺旋方阵(n<10)。 参考程序: main() {int a[10][10],i,j,k=0,m,n; printf("Enter n(n<10):\n"); scanf("%d",&n); if(n%2==0) m=n/2; else m=n/2+1; for(i=0;i {for(j=i;j {k++;a[i][j]=k;} for(j=i+1;j {k++;a[j][n-i-1]=k;} for(j=n-i-2;j>=i;j--) {k++;a[n-i-1][j]=k;} for(j=n-i-2;j>=i+1;j--) {k++;a[j][i]=k;} } for(i=0;i {for(j=0;j printf("%5d",a[i][j]); printf("\n"); } } 6.132 数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3个元素的格式输出数组b。试编程。 参考程序: #define N 10 main() {int a[N],b[N],i; printf("Enter %d data:",N); for(i=0;i scanf("%d",&a[i]); for(i=1;i b[i]=a[i]/a[i-1]; for(i=1;i {printf("%3d",b[i]); if(i%3==0) printf("\n"); } } 6.133 从键盘输入一个整数,,用折半查找法找出该数在10个有序整型数组a中的位置。若该数不在a中,则打印出相应信息。试编程。 参考程序: main() {int a[10]={1,3,5,7,9,11,13,15,17,19},top,bot,mid,m; printf("Enter a integer:"); scanf("%d",&m); top=0;bot=9; /*字符型bot=strlen(a)-1*/ while(top<=bot) {mid=(top+bot)/2; if(a[mid]==m) break; else if(a[mid]>m) top=mid+1; else bot=mid-1; } if(top<=bot) printf("Found! position is %d.\n",mid); else printf("Not found %d.\n",m); } 6.134 从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b的所有元素都连接到a中。试编程。 参考程序: #include main() {char a[80],b[80]; int i=0,j; printf("Input two strings:\n"); gets(a);gets(b); while(a[i]) i++; for(j=0;j<5&&b[j];j++) a[i++]=b[j]; a[i]='\0'; puts(a); } 6.135 从键盘输入一个字符串a,并在串中的最大元素后边插入另外输入的字符串b。试编程。 参考程序: #include main() {char a[80],b[]="ab",max; int i=1,j; printf("Input a string:\n"); gets(a); puts(a); max=a[0]; while(a[i]) {if(a[i]>max) {max=a[i];j=i;} i++; } for(i=strlen(a)+strlen(b)-1;i>j;i--) a[i]=a[i-strlen(b)]; j=0;i++; while(b[j]) {a[i]=b[j]; i++;j++; } puts(a); } 以上就是关于2022年湖北专升本C语言程序设计模拟题(2)的全部内容了,如果你还有专升本相关的疑惑(如专升本报名、考试动态、院校招生简章、统考动态、湖南专升本院校、历年真题、考试大纲、专升本等相关信息),可以在文章下方留下你的联系方式,老师会第一时间联系到你,为你答疑解惑哦! 部分内容来源于网络转载、学生投稿,如有侵权或对本站有任何意见、建议或者投诉,请联系邮箱(1296178999@qq.com)反馈。
未经本站授权,不得转载、摘编、复制或者建立镜像, 如有违反,本站将追究法律责任!