当前位置:文档之家› C语言程序设计基础第4,5章 课后习题答案

C语言程序设计基础第4,5章 课后习题答案

C语言程序设计基础第4,5章 课后习题答案
C语言程序设计基础第4,5章 课后习题答案

第4章选择结构程序设计

一、选择题

1.已有定义:char c;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是( B )。

A. isupper(c)

B.'A'<=c<='Z'

C. 'A'<=c&&c<='Z'

D.c<=('z'-32)&&( 'a'-32)<=c

2.设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( A )。

A.k++

B.k+=1

C.++k

D.k+1

3.当变量c的值不为2、4、6时,值也为“真”的表达式是( )。

A. (c==2)||(c==4)||(c==6)

B. (c>=2&&c<=6)||(c!=3)||(c!=5)

C. (c>=2&&c<=6)&&!(c%2)

D. (c>=2&&c<=6)&&(c%2!=1)

4.以下选项中,当x为大于1的奇数时,值为0的表达式( D )。

A.x%2==1

B.x/2

C.x%2!=0

D.x%2==0

5.若变量已正确定义,在if (W)printf(" %d\n",k);中,以下不可替代W的是( A )。

A. a<>b+c

B.ch=getchar()

C. a==b+c

D.a++

6.设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是( C )。

A.if(x++);

B.if(x>y&&y!=0);

C.if(x>y) x--

D.if(y<0) {;}

else y++; else 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=%d b=%d c=%d\n",a,b,c);

程序的输出结果是( A )。

A. a=10 b=50 c=10

B. a=10 b=50 c=30

C. a=10 b=30 c=10

D. a=50 b=30 c=50

9.有下列程序:

main( )

{ int a=0,b=0,c=0,d=0;

if(a=1) b=1;c=2;

else d=3;

printf("%d,%d,%d,%d\n",a,b,c,d); }

程序输出( 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

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("*\ 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");}

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("a=%d,b=%d\n",a,b);

}

程序的运行结果是( D )。

A.a=1,b=0

B.a=2,b=2

C.z=1,b=1

D.a=2,b=1

二、填空题

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

main( )

{ int x,a=1,b=2,c=3,d=4;

x=(ax)?x:d;

printf("%d\n",x); }

2.以下程序的运行结果是 #& 。

void 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;

case 2: printf("$"); break;

}

default : printf("&");

}

printf("\n");

}

三、编程题

1.编程判断一个整数是奇数还是偶数。

#include

void main()

{

int number;

printf("Input an integer:");

scanf("%d",&number);

if (number%2==0)

printf("%d is an even number\n",number);

else

printf("%d is an odd number\n",number);

}

2.编程判断两个数据之间的逻辑关系,即判断两数据是大于、小于还是等于关系。

#include

void main()

{

int first,second;

printf("Input two integers:");

scanf("%d%d",&first,&second);

if (first==second)

printf("%d is equal to %d\n",first,second);

else

if (first>second)

printf("%d is greater than %d\n",first,second);

else

printf("%d is less than %d\n",first,second);

}

3.输入年份,判断它是否是闰年(如果年号能被400整除,或能被4整除,而不能被100整除,则是闰年,否则不是)。

void main()

{

int year;

scanf("%d",&year);

if (year%400==0||(year%4==0&&year%100==0))

printf("%d是闰年\n",year);

else

printf("%d不是闰年\n",year);

}

4.设计一个简单的计算器程序,能输入整型运算数和基本运算符(+,-,*,/),输出计算结果。例如:输入2+6,输出2+6=8。

#include

main()

{

float a,b,result;

char op;

scanf("%f%c%f",&a,&op,&b);

switch(op)

{

case'+': result=a+b; printf("=%f",result); break;

case'-': result=a-b; printf("=%f",result); break;

case'*': result=a*b; printf("%f",result); break;

case'/': if(b==0.0) printf("error!\n");

result=a/b;

printf("=%f",result);

default: printf("error due to the illegal input!\n");

}

}

5.输入某年某月某日,判断这一天是这一年的第多少天?

#include

void main()

{

int year,month,day,sum=0;

printf("Input year-month-day:\n");

scanf("%d-%d-%d",&year,&month,&day);

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) sum+=1;

printf("Total days are %d\n",sum);

}

第5章循环结构程序设计

一、选择题

1.要求通过 while 循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程序段是( A )。

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);

2.若变量已正确定义,有以下程序段

i=0;

do printf("%d,",i);while(i++);

printf("%d\n",i);

其输出结果是( B )。

A.0,0

B.0,1

C.1,1

D.程序进入无限循环

3.当执行以下程序段时( A )。

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("%d",--y);

}

程序的运行结果是( C )。

A.741

B.963

C.852

D.875421

5.执行语句:for(i=1;i++<4; );后,变量i的值是( C )

A 3

B 4

C 5

D 不定

6.以下不构成无限循环的语句或语句组是 ( A )。

A.n=0;

B.n=0;

do{++n;} while(n<=0); while(1) {n++;}

C.n=10;

D.for(n=0,i=1; ;i++) n+=i;

while(n); {n--;}

7.以下程序段中的变量已正确定义

for(i=0;i<4;i++,i++)

for(k=1;k<3;k++); printf("*");

程序段的输出结果是( D )。

A. ********

B. ****

C. **

D. *

8.有以下程序

#include

main()

{int i,j,m=55;

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

for(j=3;j<=i;j++) m=m%j;

printf("%d\n",m);

}

程序的运行结果是( B )。

A.0

B.1

C.2

D.3 9.有以下程序

main()

{int i,j;

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

{for(j=i;j<4;j++) printf("%d*%d=%d",i,j,i*j);

printf("\n");

}

}

程序运行后的输出结果是( B )。

A.1*1=1 1*2=2 1*3=3

B.1*1=1 1*2=2 1*3=3

2*1=2 2*2=4 2*2=4 2*3=6

3*1=3 3*3=9

C.1*1=1

D.1*1=1

1*2=2 2*2=4 2*1=2 2*2=4

1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9 10.以下程序中,while循环的循环次数是( D )

main()

{ int i=0;

while(i<10)

{ if (i<1) continue;

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("%d,",x--); continue;}

printf("%d,",--x);

}

}

程序的运行结果是( 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("%d",d); n/=10;}

}

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

#include

main()

{ int a=1,b=7;

do{ b=b/2;a+=b;}while(b>1);

printf("%d\n",a);}

4.若有定义:int k;,以下程序段的输出结果是 ##2##4 。

for(k=2;k<6;k++,k++) printf("##%d",k);

5.以下程序的输出结果是_ ACE _____。

#include

main()

{ int i;

for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');

printf("\n");

}

6.以下程序的输出结果是 1 。

#include

main()

{ int i,j,sum;

for(i=3;i>=1;i--)

{ sum=0;

for(j=1;j<=i;j++) sum+=i*j;

}

printf("%d\n",sum);

}

三、编程题

1.编写程序,显示100~200之间能被7除余2的所有整数。

#include "stdio.h"

main()

{ int i;

for(i=100;i<=200;i++)

{ if(i%7==2)

printf("\t%d\t",i);

}

}

2.输入n个整数,求这n个整数中的最大数、最小数和偶数平均数。

#include

void main()

{

int i,n,data,max=0,min=0,even=0,evennumber=0;

printf("Please input the number of data:");

scanf("%d",&n);

printf("Please input the data:\n");

scanf("%d",&data);

max=data;

min=data;

if (data%2==0)

{

even=even+data;

evennumber++;

}

for(i=1;i

{

scanf("%d",&data);

if (data>max)

max=data;

else

if (data

min=data;

if (data%2==0)

{

even=even+data;

evennumber++;

}

}

printf("The max is %d\nThe min is %d\n The average of even is %5.2f\n",max,min,(float)(even)/evennumber);

}

3.输入一串字符,以回车作为结束标志。统计并输出这串字符中大写字母、小写字母和数字字符的个数。

#include

void main()

{

int upper=0,lower=0,number=0;

char letter;

while((letter=getchar())!='\n')

{

if (letter>='a'&&letter<='z') lower++;

else if (letter>='A'&&letter<='Z') upper++;

else if (letter>='0'&&letter<='9') number++;

}

printf("the number of uppercase is:%d\n",upper);

printf("the number of lowercase is:%d\n",lower);

printf("the number of number is:%d\n",number);

}

4.编程求Fibonacci数列的前40个数。该数列的生成方法是:F1=1,F2=1,F n=F n-1+F n-2(n>=3)(即从第三个数起,每个数等于前2个数之和)。

#include "stdio.h"

void main()

{

int f[40],n;

f[0]=1;

f[1]=1;

printf("Fibonacci数列的前40个数是:%d\t%d\t",f[0],f[1]);

for(n=2;n<40;n++)

{

f[n]=f[n-1]+f[n-2];

printf("%d\t",f[n]);

}

}

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;

num=0;

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

{

num=num*10+i;

printf("%9d*8+%d=%d\n",num,i,num*8+i);

}

}

6.一个穷人找到一个百万富翁,给他商讨一个换钱计划如下:我每天给你十万元,而你第一天只需给我一元钱,第二天给我二元钱,第三天给我四元钱,……,即我每天都给你十万元,你每天给我的钱都是前一天的两倍,直到满一个月(30天)。百万富翁很高兴地接受了这个换钱计划。请编写程序计算满一个月时,穷人给了富翁多少钱,而富翁又给了穷人多少钱。

#include

void main()

{

long poor=100000,rich=1,i;

for(i=2;i<=30;i++)

{

poor=poor+100000;

rich=rich*2;

}

printf("Money of poor giving rich is %ld\nMoney of rich giving poor is %ld\n",poor,rich); }

7.猴子吃桃问题。猴子第一天摘下若干桃子,立即吃了一半,不过瘾又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后的每天早上都是吃了前一天剩下的一半加一个。到第10天早上时只剩下一个桃子了。编写程序,求猴子第一天共摘了多少桃子。

#include "stdio.h"

main()

{

int i,j,k; /*j是最后的桃子数,k是中间变量,也是桃子总数*/

j = 1;

for(i=9;i>0;i--)

{

k = (j + 1) * 2;

j = k;

}

printf("%total=%d\n",k);

}

8.把50元钱分成一元、二元和五元的纸币且纸币数共为20张的分法有多少种?(注:在兑换中一元、二元和五元的纸币数可以为0)。

#include

void main()

int five,two,one;

printf("five yuan | two yuan | one yuan\n");

for(five=0;five<=10;five++)

for(two=0;two<=20;two++)

{

one=20-five-two;

if ((five*5+two*2+one==50)&&one>=0)

printf("%6d |%6d |%6d\n",five,two,one);

}

}

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("Input the rows:");

scanf("%d",&rows);

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

{

for(j=rows-i+1;j>=1;j--)

printf(" ");//打印两个空格,因为后面的数字是%2d for(number=1;number

printf("%2d",number);

for(;number>=1;number--)

printf("%2d",number);

printf("\n");

}

}

相关主题
文本预览
相关文档 最新文档