C语言程序设计基础第4,5章课后习题答案
第4章 选择结构程序设计
一、选择题
1. 已有定义:char c;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是( B )。
A. isupper(c) B.'A'
C. 'A'
A.k++ B.k+=1 D.c
C.++k D.k+1 2. 设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( A )。 3. 当变量c的值不为2、4、6时,值也为“真”的表达式是( )。 A. (c==2)||(c==4)||(c==6) C. (c>=2&&c=2&&c=2&&c
5. 若变量已正确定义,在if (W)printf(
A. ab+c B.ch=getchar() C. a==b+c D.a++
6. 设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是( C )。
A.if(x++);
else y++; B.if(x>y&&y!=0); D.if(yy) x--
7. 在嵌套使用 if语句时,C 语言规定 else总是( A )。
A.和之前与其具有相同缩进位置的 if配对 B.和之前与其最近的 if配对
C.和之前与其最近的且不带 else的 if配对 D.和之前的第一个if配对
8. 有以下程序段
int a,b,c;
a=10;b=50;c=30;
if (a>b) a=b,b=c;c=a;
printf(
程序的输出结果是( A )。
A. a=10 b=50 c=10
C. a=10 b=30 c=10
9. 有下列程序:
main( )
{ int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf(
程序输出( D )。
A. 0,1,2,0 B. 0,0,0,3 C. 1,1,2,0 D.编译有错
10. 若有说明语句:
int w=1,x=2,y=3,z=4;
则表达试w>x?w:z>y?z:x的值是( A )。
A.4 B.3 C.2 D.1 B. a=10 b=50 c=30 D. a=50 b=30 c=50
11. 若有定义:float x=1.5;int a=1,b=3,c=2;则正确的 switch 语句是( C )。
A.switch(x) B.switch((int)x);
{ case 1.0:printf(
case 2.0:printf(
C.switch(a+b) D.switch(a+b)
{ case 1:printf(
case 2+1:printf(
12. 以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是( B )。
A. switch(a) B.switch(a==1)
{case:a=b;break; {case 0:a=b;break;
default:a++; } case 1:a++;}
C.switch(a) D.switch(a==1)
{default:a++;break; {case 1:a=b;break;
case 1:a=b;} case 0:a++;}
13. 有以下程序
#include
void main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0: a++;break;
case 1: b++;break;
}
case 2: a++;b++;break;
case 3: a++;b++;
}
printf(
}
程序的运行结果是( D )。
A.a=1,b=0 B.a=2,b=2 C.z=1,b=1
二、填空题
1. 下列程序运行后的输出结果是 1 。
main( )
{ int x,a=1,b=2,c=3,d=4;
x=(ax)?x:d;
printf(
2. 以下程序的运行结果是 #& 。
void main()
{int a=2,b=7,c=5;
switch(a>0)
{case 1:switch(b
{ case 1:printf(
case 2: printf(
}
case 0: switch(c==5)
{ case 0: printf(
case 1: printf(
case 2: printf(
}
default : printf(
}
printf(
}
三、编程题
1. 编程判断一个整数是奇数还是偶数。
#include
void main()
{
}
2. 编程判断两个数据之间的逻辑关系,即判断两数据是大于、小于还是等于关系。
#include
void main()
{
}
3. 输入年份,判断它是否是闰年(如果年号能被400整除,或能被4整除,而不能被100整除,则是闰年,否则不是)。
void main()
{
int year; int first,second; printf(
}
4. 设计一个简单的计算器程序,能输入整型运算数和基本运算符(+,-,*,/),输出计算结果。例如:输入2+6,输出2+6=8。
#include
main()
{
float a,b,result; char op; scanf(
printf(
default: printf(
}
5. 输入某年某月某日,判断这一天是这一年的第多少天?
#include
void main()
{
int year,month,day,sum=0;
printf(
scanf(
switch(month)
{
case 12:sum+=30;
case 11:sum+=31;
case 10:sum+=30;
case 9:sum+=31;
case 8:sum+=31;
case 7:sum+=30;
case 6:sum+=31;
case 5:sum+=30;
case 4:sum+=31; }
case 3:sum+=28;
case 2:sum+=31;
case 1:sum+=day;
}
if (((year%400==0)||((year%4==0)&&(year%100!=0)))&&month>2)
printf(
} sum+=1;
第5章 循环结构程序设计
一、选择题
1. 要求通过 while 循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程
序段是( A )。
A.while( (ch=getchar( ))! ='N') printf(
B.while(ch=getchar( )! ='N') printf(
C.while(ch=getchar( )= ='N') printf(
D.while((ch=getchar( ))= ='N') printf(
2. 若变量已正确定义,有以下程序段
i=0;
do printf(
printf(
其输出结果是( B )。
A.0,0
x=-1;
do
{
x=x*x;
}while(!x);
A. 循环体执行一次 B. 循环体将执行两次
C. 循环体将执行无限次 D. 系统将提示有语法错误
4. 有以下程序
#include
main()
{int y=9;
for( ;y>0;y--)
if(y%3= =0) printf(
}
程序的运行结果是( C )。
A.741 B.963 C.852 D.875421
5. 执行语句:for(i=1;i++
A 3 B 4 C 5 D 不定
6. 以下不构成无限循环的语句或语句组是 ( A )。
A.n=0;
B.n=0; while(1) {n++;} D.for(n=0,i=1; ;i++) n+=i; do{++n;} while(n
while(n); {n--;}
7. 以下程序段中的变量已正确定义
for(i=0;i
for(k=1;k
程序段的输出结果是( D )。
A. ******** B. **** C. ** D. *
8. 有以下程序
#include
main()
{int i,j,m=55;
for(i=1;i
for(j=3;j
printf(
}
程序的运行结果是( B )。
A.0
main()
{int i,j;
for(i=1;i
{for(j=i;j
printf(
}
}
程序运行后的输出结果是( B )。
A.1*1=1 1*2=2 1*3=3
2*1=2 2*2=4
3*1=3
C.1*1=1
B.1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 D.1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 B.1 C.2 D.3 9. 有以下程序 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9
main()
{ int i=0;
while(i
{ if (i
if (i==5) break;
i++;
}
}
A 1 B 10 C 6 D死循环,不能确定次数
11.有以下程序
#include
void main()
{ int x=8;
for(;x>0;x--)
{ if (x%3) {printf(
printf(
}
}
程序的运行结果是( D )。
A. 7,4,2 B. 8,7,5,2, C.9,7,6,4, D.8,5,4,2,
二、填空题
1. 当执行以下程序时,输入1234567890,则其中while循环体将执行 0 次。 #include
main()
{char ch;
while((ch=getchar())==’0’) printf(
}
2. 以下程序的输出结果是 54321 。
#include
main()
{ int n=12345,d;
while(n!=0){ d=n%10; printf(
}
3. 以下程序运行后的输出结果是 5 。
#include
main()
{ int a=1,b=7;
do{ b=b/2;a+=b;}while(b>1);
printf(
4.
5. 若有定义:int k;,以下程序段的输出结果是 ##2##4 。 以下程序的输出结果是_ ACE _____。 for(k=2;k
#include
main()
{ int i;
for(i='a';i
printf(
}
6. 以下程序的输出结果是 1 。
#include
main()
{ int i,j,sum;
for(i=3;i>=1;i--)
{ sum=0;
for(j=1;j
}
printf(
}
三、编程题
1. 编写程序,显示100~200之间能被7除余2的所有整数。
#include
main()
{ int i;
for(i=100;i
{ if(i%7==2)
}
2. 输入n个整数,求这n个整数中的最大数、最小数和偶数平均数。
#include
void main()
{
int i,n,data,max=0,min=0,even=0,evennumber=0;
printf(
scanf(
printf(
scanf(
max=data;
min=data;
if (data%2==0)
{
}
for(i=1;i
{
}
printf(
}
3. 输入一串字符,以回车作为结束标志。统计并输出这串字符中大写字母、小写字母和数字字符的个数。
#include max is %d\nThe min is %d\n The average of even is %5.2f\n
void main()
{
int upper=0,lower=0,number=0;
char letter;
while((letter=getchar())!='\n')
{
}
printf(
printf(
printf(
}
4. 编程求Fibonacci数列的前40个数。该数列的生成方法是:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3)(即从第三个
数起,每个数等于前2个数之和)。
#include
void main()
{
int f[40],n;
f[0]=1;
f[1]=1;
printf(
{
}
}
5. 编写程序,输出如下结果。
1*8+1=9
12*8+2=98
123*8+3=987
1234*8+4=9876
12345*8+5=98765
123456*8+6=987654
1234567*8+7=9876543
12345678*8+8=98765432
123456789*8+9=987654321
#include
void main()
{
int i,num; f[n]=f[n-1]+f[n-2]; printf(
}
6. 一个穷人找到一个百万富翁,给他商讨一个换钱计划如下:我每天给你十万元,而你第一天只需给我
一元钱,第二天给我二元钱,第三天给我四元钱,„„,即我每天都给你十万元,你每天给我的钱都是前一天的两倍,直到满一个月(30天)。百万富翁很高兴地接受了这个换钱计划。请编写程序计算满一个月时,穷人给了富翁多少钱,而富翁又给了穷人多少钱。
#include
void main()
{
}
7. 猴子吃桃问题。猴子第一天摘下若干桃子,立即吃了一半,不过瘾又多吃了一个。第二天早上又将剩
下的桃子吃了一半,又多吃了一个。以后的每天早上都是吃了前一天剩下的一半加一个。到第10天早上时只剩下一个桃子了。编写程序,求猴子第一天共摘了多少桃子。
#include
main()
{
int i,j,k; /*j是最后的桃子数,k是中间变量,也是桃子总数*/
j = 1;
for(i=9;i>0;i--)
{
k = (j + 1) * 2;
j = k;
}
printf(
}
8. 把50元钱分成一元、二元和五元的纸币且纸币数共为20张的分法有多少种?(注:在兑换中一元、
二元和五元的纸币数可以为0)。
#include
void main() printf(
int five,two,one;
printf(
for(two=0;two
}
9. 编程打印指定行数的数字金字塔。
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
#include
void main()
{
} int rows,i,j,number; printf(