C语言课后习题部分答案.docx
《C语言课后习题部分答案.docx》由会员分享,可在线阅读,更多相关《C语言课后习题部分答案.docx(25页珍藏版)》请在冰点文库上搜索。
C语言课后习题部分答案
第二章 C程序设计的初步知识
一、选择题
(1) B
(2) D (3) B (4) A (5) C
(6) A (7) B (8) B (9) A (10) C
(11)B (12)B (13)A
二、填空题
(14)11,12
(15) 4.2,4.2
(16) { ,} 说明,执行
(17) 关键字,用户标识符
(18) int ,float ,double
(19) float a1=1,a2=1 ;
(20) 存储单元
(21) 3.5
(22) a*b/c a/c*b a*(b/c)
(23) 10赋给变量s
(24) 位,0或1
(25) 8 ,255 ,11111111,0,00000000
(26) 32767 ,-32768 ,10000000 00000000
(27)十,八,十六
三、上机改错题
——————————————————————————————————————
(28) 请指出以下C程序的错误所在
#include stdio.h ;
main( ); / * main function * /
float r, s; /* /*r is radius*/,/*s is area of circular*/*/
r = 5.0 ;
s=3.14159 * r * r ;
printf("%f\n",s);
※正确应为:
#include 或 #include"stdio.h"
main( ) /* main function */
{
float r,s; /*r is radius, s is area of circular*/
r = 5.0 ;
s = 3.14159 * r * r ;
printf("%f\n",s);
}
(29) 请指出以下C程序的错误所在
#include stdio.h
main /* main function */
{
float a,b,c,v; /*a,b,c are sides, v is volume of cube*/
a = 2.0 ; b = 3.0 ; c = 4.0
v = a * b * c;
printf("%f\n",v);
}
※正确应为:
#include"stdio.h"
main( ) /* main function */
{
float a,b,c,v; /*a,b,c are sides, v is volume of cube*/
a = 2.0 ; b = 3.0 ; c = 4.0;
v = a * b * c;
printf("%f\n",v);
}
第三章 顺序结构
一、选择题
(1) C
(2) C (3) D (4) C (5) D
(6) B (7) C (8) D (9) A (10)B
(11)C (12)D (13)D (14)A (15)C
(16)C (17)C (18)均不对,应为scanf( “%6f”,&c) (18) C (20) B
二、填空题
(21) ① -200,2500 ② i=-200, j=2500 ③ i = -200 , j = 2500
(22) 12 ,0 ,0
(23) 语句块,{ ;}
(24) ;
(25) 100<空格>25.81<空格>1.89234 /*可用一个或几个空格作为输入时的间隔符*/
10025.811.89234 /*Tab(制表符)也可以作为输入时的间隔符*/
10025.811.89234 /*CR(回车符)也可以作为输入时的间隔符*/
(26) x = 127, x =ццц127, x=ццц177, x=цццц7f, x=ццц127。
(27) x = 127, x =127ццц, x=177ццц, x=7fцццц, x=127ццц。
(28) a=513.789215, a=цц513.79, a=цц513.78921500, a=цц513.78921500
三、上机改错题
3.30 编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。
※程序如下※
main( )
{
int hour,minute;
hour=560/60;
minute=560%60;
printf("hour=%d,minute=%d",hour,minute);
}
3.31 编写程序,输入两个整数:
1500和350,求出它们的商数和余数并进行输出。
※程序如下※
#include
main( )
{
int num1,num2,i,j; /* 定义变量 i-商,j-余数 */
printf("input num1 and num2:
\n");
scanf("%d%d",&num1,&num2);
i=num1/num2;
j=num1%num2;
printf("商=%d\n 余数=%d",i,j);
}
——————————————————————————————————————
3.32 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,
对小数点后第二位数进行四舍五入,最后输出结果。
※程序如下※
main( )
{
double a,b,c,average=0;
printf("input a,b,c(double):
\n");
scanf("%lf%lf%lf",&a,&b,&c);
average=(a+b+c)/3;
average=average*10;
average=average+0.5;
average=(int)average;
average=average/10;
printf("average=%lf",average);
}
——————————————————————————————————————
3.33 编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,
把b中原来的值给c,把c中的值给a。
※程序如下※
main( )
{
int a,b,c,t=0;
printf("input a b c:
\n");
scanf("%d%d%d",&a,&b,&c);
t=c;c=b;b=a;a=t;
printf("a=%d b=%d c=%d",a,b,c);
}
第四章 选择结构
一、选择题
(1) A
(2) A (3) A (4) D (5) C
(6) A (7) B (8) 均错 (9)D (10)A
二、填空题
(11) 非零,零
(12) <或<=、>或>=、==、!
=
(13) 逻辑非、逻辑与、逻辑或
(14) !
、<或<=、>或>=、==、!
=、&&、||
(15) !
(16) a= =b || a 4 或 x > 4 || x< - 4
(17) 1
(18) x>0 ?
0 :
1 , 1
(19) a=3 , b=2 , c=2
(20) * #
三、编程题
——————————————————————————————————————
4.21 当a>0时,请将以下语句改写成switch语句。
if( a<30 ) m=1;
else if( a<40 ) m=2;
else if( a<50 ) m=3;
else if( a<60 ) m=4;
else m=5;
※程序如下※
main()
{
int a;
printf("Enter a:
\n");
scanf("%d",&a);
switch(a/10)
{
case 0:
case 1:
case 2:
printf("m=1"); break ;
case 3:
printf("m=2"); break ;
case 4:
printf("m=3"); break ;
case 5:
printf("m=4"); break ;
default:
printf("m=5");
}
}
4.22 编写程序,输入一位学生的生日(年:
y0、月:
m0、日:
d0);并输入当前的日
期(年:
y1、月:
m1、日:
d1);输出该生的实足年龄。
main( )
{
int y0,y1,m0,m1,d0,d1,age=0;
printf("Your Birthday(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&y0,&m0,&d0);
printf("Current Date(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&y1,&m1,&d1);
if(d1 if(m1 age=y1-y0;
printf("\nAge=%d",age);
}
——————————————————————————————————————
4.23 编写程序,输入一个整数,打印出它是奇数还是偶数。
※程序如下※
main( )
{
int i;
printf("input a integer:
\n");
scanf("%d",&i);
if(i%2==0) /*条件判断*/
printf("%d is a even",i);
else
printf("%d is a odd",i);
}
——————————————————————————————————————
4.24 编写程序,输入a、b、c三个数,打印出最大者。
※程序如下※
main( )
{
int a,b,c,max = 0;
printf("input (int)a b and c:
\n");
scanf("%d%d%d",&a,&b,&c);
max = a;
if(max
if(max printf("max=%d",max);
}
4.25 有一函数:
编写一程序,要求输入x的值,输出y的值。
分别
(1)不嵌套的if语句
(2)嵌套的if语句
(3)if_else语句 (4)switch语句
※程序如下※
源程序一:
(1)不嵌套的if语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<0)
printf("y=%f",x);
if(x==0)
printf("y=%f",x-1);
if(x>0&&x<10)
printf("y=%f",x+1);
if(x<=-5||x>=10)
printf("input error");
}
源程序二:
(2)嵌套的if语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<10)
{
if(x==0) printf("y=%f",x-1);
if(x<0) printf("y=%f",x);
if(x>0) printf("y=%f",x+1);
}
if(x<=-5||x>=10)
printf("input error");
}
源程序三:
(3)if_else语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<10)
if(x<0)
printf("y=%f",x-1);
else if(x==0)
printf("y=%f",x);
else
printf("y=%f",x+1);
else
printf("input error");
}
源程序四:
(4)switch语句
main()
{
int flag;
float x;
printf("Enter x:
\n");
scanf("%f",&x);
if(x>-5 &&x<0) flag=-1;
if(x==0) flag=0;
if(x>0 &&x<10) flag=1;
switch(flag)
{
case -1:
printf("y=%f",x); break;
case 0:
printf("y=%f",x-1); break;
case 1:
printf("y=%f",x+1); break;
}
}
第五章 循环结构
一、选择题
(1) D
(2) C (3) B (4) C (5) C
(6) B (7) D (8) A (9) D (10)D
二、填空题
(11) 5, 4, 6
(12) 有错
(13) -1
(14) 11
(15) d=1.0 , k++ , k<=n
(16)x>=0 , x三、编程题
5.17 编写程序,求1-3+5-7+...-99+101的值。
main()
{
int i,sum=0,s=1;
for(i=1; i<=101;i+=2)
{
sum=sum+i*s;
s=-s; /*控制符号交替变换*/
}
printf("sum=%d",sum);
}
——————————————————————————————————————
5.18 编写程序,求e的值,e=1+1/1!
+1/2!
+1/3!
+1/4!
+...+1/n!
(1)用for循环,计算前50项
(2)用while循环,要求直至最后一项的值小于1e-4。
※程序如下※
源程序一:
(1)用for循环实现
main( )
{
int i,n;
double sum=1,t=1;
printf("input n:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=t*i; /* 实现阶乘*/
sum=sum+1/t;
}
printf("e=%lf",sum);
}
源程序二:
(2)用while循环实现
#include
main( )
{
int i;
doubel sum=1,t=1;
while(fabs(1.0/t)>1e-4) /* fabs求浮点型数据的绝对值 */
{
t=t*i;
sum=sum+1/t;
i++;
}
printf("e=%lf",sum);
}
——————————————————————————————————————
5.19 编写程序,输出从公元1000年至2000年所有闰年的年号 每输出3个年号换一行。
判断公元年是否闰年的条件是:
(1)公元年数如能被4整除,而不能被100整除,则是闰年。
(2)公元年数能被400整除也是闰年。
※程序如下※
main( )
{
int i,j=0;
for(i=1000;i<=2000;i++)
{
if((i%4==0)&&(i%100!
=0)||(i%400==0)) /* 判断是否是闰年的条件 */
{
printf("&d ",i);
j++;
if(j%3==0) /* 控制换行 */
printf("\n");
}
}
}
——————————————————————————————————————
5.20 编写程序,打印以下图形:
*
***
*****
*******
*****
***
*
※程序如下※
#include
main( )
{
int i,j;
for(i=1;i<=7;i++) /*控制行数*/
{
for(j=1;j<=7;j++) /*控制星数*/
{
if((j<=fabs(4-i))||(j>7-fabs(4-i)))
printf(" ");
else
printf("*")
}
printf("\n");
}
}
——————————————————————————————————————
第六章 字符型数据
一、选择题
(1) B
(2) D (3) A (4) A (5) B
(6) D (7) D (8)B (9) A (10)A
(11)B ©
二、填空题
(12) -1
(13) 1
(14) ctype.h
(15) 0
(16) 10A20B30C40D
(17) 7.29 101.298 ↙ AB↙ (7.29↙101.298↙AB↙)
(18) A7.29B101.298↙
(19) AЦЦЦ↙ BЦЦЦ↙ C↙
三、编程题
6.21 请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII
代码值,每行输出三队.
※程序如下※
#include
main( )
{
int i=0;
char ch;
while((ch=getchar( ))!
='\n')
{
printf("%4c%4d",ch,ch);
i++;
if(i%3==0)
printf("\n");
}
}
——————————————————————————————————————
6.21 请编写程序,输入一行数字字符(用EOF结束),每个数字字符的前后都有空格。
请编程,把这一行中的数字转换成一个整数。
例如,若输入:
2 4 8 3 (代表Enter键)
则输出整数:
2483
※程序如下※
#include
main()
{
char ch;
while((ch=getchar())!
=EOF)
{
if(ch==' ')
continue;
else