完整版C教材习题答案18章.docx
《完整版C教材习题答案18章.docx》由会员分享,可在线阅读,更多相关《完整版C教材习题答案18章.docx(26页珍藏版)》请在冰豆网上搜索。
![完整版C教材习题答案18章.docx](https://file1.bdocx.com/fileroot1/2023-1/5/52189956-9428-417c-bd65-137a084b1a2e/52189956-9428-417c-bd65-137a084b1a2e1.gif)
完整版C教材习题答案18章
第一章C语言概述
二、运行程序写结果
1
2
3
x=50
m=100,n=50,p=5000
************************************
第二章数据类型、表达式及运算
一、简答题
1、2、3、4
5
6
7
略
0892
3.8e-3.14
1)charc1;inta1;
2)inta,b;floatx,y;
3)chara,b;
4)chari;(不能与关键字同)
5)inta,b;
6)inta,b,c;
7)inta;floatx,y;(变量不能同名)
1)56
2)910
3)1112
二、运行程序写结果
1
2
3
4
5
6
7
14,14
a=20,b=10
*p1=20,*p2=10
c=4
girl
x1=11
x2=1
x3=-8
0
49,1
58,:
72
三、改错题
1、
main()
{
inta=6,b=8;//变量间逗号分隔
intc;
c=a*b;
printf("%d",c);
}
2、
main()
{
floatf=7.12;
charc='c';//字符常量为字符变量赋值
printf("%d\n",(int)f%3);//强制转换f,是被除数为整数
printf("%c",c);
第三章顺序结构程序设计
一、选择题
1
2
3
4
5
6
7
8
9
10
D
A
B
A
D
C
二、运行程序写结果
1
2
3
4
5
6
7
109
2,03,0
4213,14
10
40
4
4
65Da
10
40
20
30
10
40
20
30
三、编程题
1.编写程序,实现输入任意一个小字符,输出对应的大写字母。
2.编写程序,从键盘上获取任意圆半径,输出该圆的面积和对应的球体体积,要求保留两位小数。
第四章选择结构程序设计
一、选择题
1
2
3
4
B
C
C
B
二、运行程序写结果
1
2
3
4
5
6
211
75
2
1,0,0
55
170
7
8
9
10
2,03,-1
2
OK!
NO!
ERROR!
31
三、编程题
1.输入圆的半径r和一个整型数k,当k=1时,计算圆的面积;但k=2时,计算圆的周长;当k=3时,既要求求圆面积也要求出圆的面积。
编程实现以上功能。
2.编写程序代码实现分段函数的计算。
3编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。
设:
90分以上为‘A’;80~89分为‘B’;70~79分为‘C’;60~69分为‘D’;60分以下为‘E’。
方法一:
采用if多分支语句实现
#include
main()
{
intscore;
charch;
printf("请输入一个百分制分数:
");
scanf("%d",&score);
if(score>100||score<0){
printf("非法输入!
\n");
return0;
}
if(score>=90)ch='A';
elseif(score>=80)
ch='B';
elseif(score>=70)
ch='C';
elseif(score>=60)
ch='D';
elsech='E';
printf("五分制成绩为%c。
\n",ch);
}
方法二:
采用switch语句实现
#include
main()
{
intscore;
charch;
printf("请输入一个百分制分数:
");
scanf("%d",&score);
if(score>100||score<0){
printf("非法输入!
\n");
return0;
}
switch(score/10){
case10:
case9:
ch='A';break;
case8:
ch='B';break;
case7:
ch='C';break;
case6:
ch='D';break;
default:
ch='E';break;
}
printf("五分制成绩为%c。
\n",ch);
}
4.输入三角形的三条边长度,判断是否能够构成合理的三角形,如果可以则输出三角形的面积,否则给出相应的提示。
#include
main(){
floata,b,c,l,s;
printf("请输入三角形三条边:
");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&b+c>a&&c+a>b){
l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-b)*(l-c));
printf("三角形面积为:
%.2f\n",s);
}
else
printf("您输入的三条边无法构成一个合法的三角形。
\n");
}
第五章循环结构程序设计
一、选择题
1
2
3
4
C
D
A
B
二、运行程序写结果
1
2
3
4
5
6
8
#*#*#MYM
1
31
3
8712
7
8
9
10
s=6
6
17
三、编程题
1.编写程序实现计算1+1/2!
+1/3!
+……+1/n!
。
#include
main(){
floats=0;
inti,j,n,t;
printf("请输入n的值:
");
scanf("%d",&n);
for(i=1;i<=n;i++){
t=1;
for(j=1;j<=i;j++)
t*=j;
s+=1.0/t;
}
printf("%.2f\n",s);
}
2.输出100以内所有能被13和17整除的数。
#include
main(){
inti;
for(i=1;i<=100;i++)
if(i%13==0||i%17==0)
printf("%4d",i);
}
3整元换零钱问题。
把5元兑换成1角,2角,5角的硬币,一共有多少种换法,编写求解此问题。
#include
main(){
inti,j,k,n=0;//i,j,k分别代表5角,2角,1角硬币的个数,n用于统计兑换硬币的种数
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
for(k=0;k<=100;k++)
if(i*5+j*2+k*1==50){
printf("5角:
%d个\t2角:
%d个\t1角:
%d个\n",i,j,k);
n++;
}
printf("5元换成1角,2角,5角硬币的方法共%d种。
\n",n);
}
4.计算
#include
main(){
intk;
floatrel1=0,rel2=0,rel3=0;
for(k=1;k<=50;k++)
rel1+=1.0/(k+3);
for(k=1;k<=20;k++)
rel2+=1.0/(k*k);
for(k=5;k<=10;k++)
rel3+=1.0/(k*k*k);
printf("计算结果是:
%.2f",rel1+rel2+rel3);
}
5.编写程序实现对输入的10个整数进行降序排序输出。
#include
#defineN10
main(){
inti,j,t,a[N];
printf("请输入%d个整数:
\n",N);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=i+1;jif(a[i]>a[j]){
t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;iprintf("%5d",a[i]);
}
6.编写程序实现功能:
从键盘上输入若干个学生的成绩,统计并输出最高成绩、最低成绩和平均成绩,当输入-1号是结束输入。
#include
main(){
inti=0;
floatscore,sum=0,max=0,min=0;
printf("请输入第%d个整数:
",i+1);
scanf("%d",&score);
if(score>0){
max=score;
min=score;
i++;
}
else
{
max=0;
min=0;
printf("最高成绩为:
%.2f,最低成绩为:
%.2f,平均成绩为:
%.2f\n",0,0,0);
return;
}
while(score>0)
{
sum+=score;
if(score>max)max=score;
if(scoreprintf("请输入第%d个整数:
",i+1);
scanf("%d",&score);
i++
}
printf("最高成绩为:
%.2f,最低成绩为:
%.2f,平均成绩为:
%.2f\n",max,min,sum/(i-1);
}19820926
第六章数组和指针
一、选择题
1
2
3
4
5
6
7
8
9
10
11
B
C
B
C
C
D
A
D(C?
)
B
C
B
二、运行程序写结果
1
2
3
4
5
k=2a=3b=2
19
8
71
6385
三、编写程序代码
1.编写程序,将输入的任意字符串中包含的所有数字字符删除,并输出。
#include
#defineN80
main()
{
chars1[N],s2[N],i=0,j=0;
printf("请输入一个字符串:
\n",s1);
scanf("%s",s1);
while(s1[i]!
='\0'){
if(s1[i]>='9'||s1[i]<='0')
{
s2[j]=s1[i];
j++;
}
i++;
}
s2[j]='\0';
printf("该字符串删除数字字符后结果值为:
%s\n",s2);
}
2.编写程序,对输入的字符串中字母,数字,及其它字符统计个数。
#include
#defineN80
main()
{
chars[N],i=0,k1=0,k2=0,k3=0;
//k1表示数字个数,k2表示字母个数,k3表示其他字符个数
printf("请输入一个字符串:
\n",s);
scanf("%s",s);
while(s[i]!
='\0'){
if(s[i]>='0'&&s[i]<='9')
k1++;
else
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
k2++;
elsek3++;
i++;
}
printf("数字字符个数:
%d,字母个数:
%d,其他字符个数:
%d\n",k1,k2,k3);
}
3.编写程序,实现矩阵的转置。
#include
#defineN3
#defineM4
main()
{
inta[N][M],b[M][N],i,j;
printf("请输入一个%d行%d列矩阵:
\n",N,M);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jb[j][i]=a[i][j];
printf("该矩阵转置后的结果为:
\n");
for(i=0;ifor(j=0;jprintf("%5d",b[i][j]);
printf("\n");
}
}
4.使用指针数组,编写一个程序实现输入的月份号,输出月份号对应的英文名。
借用数组存储月份的英文单词。
#include
main()
{
inti;
printf("请输入1~12之间的一个整数:
");
scanf("%d",&i);
switch(i){
case1:
printf("%d月对应的英文单词是:
%s\n",i,"January");break;
case2:
printf("%d月对应的英文单词是:
%s\n",i,"February");break;
case3:
printf("%d月对应的英文单词是:
%s\n",i,"March");break;
case4:
printf("%d月对应的英文单词是:
%s\n",i,"April");break;
case5:
printf("%d月对应的英文单词是:
%s\n",i,"May");break;
case6:
printf("%d月对应的英文单词是:
%s\n",i,"June");break;
case7:
printf("%d月对应的英文单词是:
%s\n",i,"July");break;
case8:
printf("%d月对应的英文单词是:
%s\n",i,"August");break;
case9:
printf("%d月对应的英文单词是:
%s\n",i,"September");break;
case10:
printf("%d月对应的英文单词是:
%s\n",i,"October");break;
case11:
printf("%d月对应的英文单词是:
%s\n",i,"November");break;
case12:
printf("%d月对应的英文单词是:
%s\n",i,"December");break;
default:
printf("输入错误!
\n");
}
}
5.请编写程序,将M行N列的二维数组中的数据,按先行后列的顺序依次存放到一维数组中并对一维数组中内容输出。
#include
#defineM2
#defineN3
main()
{
inta[M][N],b[M*N],i,j;
printf("请输入一个%d行%d列矩阵:
\n",M,N);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jb[i*N+j]=a[i][j];
printf("转为一维数组后的结果为:
\n");
for(i=0;iprintf("%5d",b[i]);
printf("\n");
}
6.假定输入的字符串中只包含字母和*号。
请编程序代码,实现以下功能:
删除字符串中前导和尾部的*号,串中字母之间的*号都不删除,再将结果串输出。
#include
#defineN80
main()
{
chars[N],s1[N],i=0,j=0,k=0;
printf("请输入一个字符串:
\n",s);
gets(s);
while(s[i]!
='\0')i++;
i--;
while(s[i]=='*')i--;
while(s[j]=='*')j++;
while(j<=i){
s1[k]=s[j];
k++;
j++;
}
s1[k]='\0';
printf("该字符串删除前导和后导字符后结果值为:
\n");
puts(s1);
}
第七章函数与指针
一、运行程序写结果
1
2
3
4
5
6
10,20,40,40
5,25
-735710
21
35
35
53
k=13
二、编程题
1.已知圆的半径为R,求它的面积。
#include
#definePI3.14
floatarea(floatr)
{
floats;
s=PI*r*r;
returns;
}
main()
{
floatr;
scanf("%f",&r);
printf("%.2f\n",area(r));
}
2.编写一个函数,输出三个数中的最大值。
#include
#defineN3
//该程序可以扩展,求三个数中最大值,则N定义为3,求5个数中最大值则N定义为5......以此类推,只把定义处的数更改即可
intmax(inta[])
{
inti,j,itmp;
for(i=0;ifor(j=i+1;jif(a[i]returnitmp;
}
main()
{
inta[N],i;
for(i=0;iscanf("%d",&a[i]);
printf("%d",max(a));
}
3.编写一个函数,将一个任意三位数n逆序输出,即若n=456,则输出654。
#include
voidinvert(intn2)
{
intn1;
while(n2!
=0)
{n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
main()
{
intn;
scanf("%d",&n);
invert(n);
}
4.编写比较两个字符串是否相等的函数。
#include
intcompare(chars1[],chars2[])
{
inti;
for(i=0;;)
{
if(s1[i]>s2[i])
return1;
elseif(s1[i]return-1;
else
{
if(s1[i]=='\0'||s2[i]=='\0')return0;
i++;
}
}
}
main()
{
charstr1[60],str2[60];
intn;
printf("第一个字符串长度:
");
scanf("%s",str1);
printf("第二个字符串长度:
");
scanf("%s",str2);
n=compare(str1,str2);
if(n==0)printf("字符串长度相等");
elseif(n>0)printf("第一个字符串长");
elseprintf("第二个字符串长");
}
5.编写求字符串长的函数。
#include
intstrlength(charstr[])
{
intlen=0;
char*p=str;
while('\0'!
=*p++)
{
len++;
}
returnlen;
}
main()
{
charstr[20];
gets(str);
printf("Thelengthis%d\n",strlength(str));
}
6.编写一个函数判定一个数是否是素数,在主函数中调用该函数,输入一个整数,输出是否是素数的信息。
#include
voidisprime(intm)
{
inti;
for(i=2;i<=m-1;i++)
if(m%i==0)break;
if(i>=m)printf("yes!
");
elseprintf("no!
");
}
main()
{
intn;
scanf("%d",&n);
isprime(n);
}
7.用指针写一个删除字符串中空格的函数。
#include
#include
voiddelspace(charstr[])
{
char*p;
for(p=str;*p;p++)//将testmac数组首地址附给p,当p所指字符为‘\0’时,停止循环
if(*p=='')//若字符变量是空格,则以p+1所指地址后面的字符串拷贝到p所指地址
strcpy(p,p+1);
}
main()
{charstr[20];
gets(str);//从键盘输入一个字符串
delspace(str);
puts(str);}
8.用指针写合并连个字符串的函数。
#include
voidfun(char*dest,char*s1,char*s2)
{
while(*dest++=*s1++);
dest--;
while(*dest++=*s2++);
}
main()
{
charstr1[80],str2[80],dest[255];
gets(str1);
gets(str2);
fun(dest,str1,str2);
printf("%s\n",dest);
}
9.输入15个正整数,放在a数组中,要求:
奇数放在a数组前部,偶数放在a数组后部。
再分别对奇数和偶数排序。
#include
voidsort(int*p,intn)
{intt;
inti,j,k;
for(i=0;i{k=i;
for(j=i+1;jif(*(p+k)>*(