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