《C语言程序设计》课后习题参考答案文档格式.docx
《《C语言程序设计》课后习题参考答案文档格式.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题参考答案文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
![《C语言程序设计》课后习题参考答案文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/23/7338570a-5d6e-4917-a0e3-390714cf71d8/7338570a-5d6e-4917-a0e3-390714cf71d81.gif)
m,&
n);
a=m;
b=n;
c=a%b;
while(c!
=0)
{
a=b;
b=c;
}
themaxis%d\n"
theminis%d\n"
m*n/b);
一、选择题
1.B2.D3.A4.A5.B6.C7.A8.C9.B10.B
二、填空题
1.inti;
i%3==0||i%5==0||i%8==0
2.b=0;
count++;
3.f1=1;
i=3;
i<
=30;
i=i+2
4.for(k=1;
k<
=35;
k++)
5.count=count+1;
或count++;
三、编程题
1、请编写代码求500以内的所有的素数之和。
math.h>
intsum=0,i,j,yes;
for(i=2;
i<
=500;
i++)
yes=1;
for(j=2;
j<
=sqrt(i);
j++)
if(i%j==0)
yes=0;
break;
if(yes)sum+=i;
%d\n"
sum);
运行结果:
21536
2.求四位的奇数中,每位数字之和是30的倍数的数的累加和。
intge,shi,bai,qian;
longintresult=0;
for(ge=0;
ge<
=9;
ge++)
for(shi=0;
shi<
shi++)
for(bai=0;
bai<
bai++)
for(qian=1;
qian<
qian++)
if((ge+shi+bai+qian)%30==0&
&
(qian*1000+bai*100+shi*10+ge)%2!
result+=(qian*1000+bai*100+shi*10+ge);
%ld\n"
result);
411090
3.用一元纸币兑换一分、两分和五分的硬币,要求兑换硬币的总数为50枚,问共有多少种换法?
(注:
在兑换中一分、两分或五分的硬币数可以为0枚)。
intone,two,five,cout=0;
for(five=0;
five<
=20;
five++)
for(two=0;
two<
=50;
two++)
for(one=0;
one<
=100;
one++)
if(five*5+two*2+one==100&
five+two+one==50)
cout++;
cout);
13
4.一球从100米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在第12次落地时,第12次反弹多高?
按四舍五入的方法精确到小数点后面四位。
#include"
stdio.h"
floathn,sn=100.0;
inti;
hn=sn/2;
=12;
hn/=2;
%.4f"
hn);
0.0244
5.所谓回文数是从左至右与从右至左读起来都是一样的数字,如:
121。
编一个程序,求出在300-900的范围内回文数的个数。
inti,count=0,low,high;
for(i=300;
=900;
i++)
low=i%10;
high=i/100;
if(low==high)
count++;
count);
60
6.已知S=2+(2+4)+(2+4+6)+(2+4+6+8)+…,求S<
=10000的最大值S。
inti,j,k,s=0,sum=0;
for(k=2;
;
k+=2)
s=s+k;
sum=sum+s;
if(sum>
10000)break;
sum=sum-s;
sum);
9920
第四章习题答案
(1)B
(2)C(3)C(4)A(5)C(6)C(7)B(8)B(9)D(10)B
(11)D(12)B(13)B(14)A(15)A(16)D(17)C(18)A(19)D(20)A
(1)main函数
(2)函数首部,函数体
(3)
I=7;
j=6;
x=7
I=2;
j=7;
x=5
(4)111
(5)maxis2
(6)1010
(7)
<
1.>
x=2y=3z=0
2.>
X=4y=9z=5
3>
X=2y=3z=0
第五章习题答案
(1)A
(2)A(3)D(4)A(5)C(6)C(7)C(8)B(9)B(10)B
(11)D(12)A(13)B(14)C(15)A(16)C(17)B(18)D(19)D(20)B
(1)4
(2)8
(3)6
(4)strcat
(5)putchar
(6)strcmp
(7)依次连接str2和str3构成一个新的字符串
(8)24
(9)20
(10)2
(11)5
(12)97
(13)n
(14)abcd
(15)4
(16)5
(1)已知5个整数3,-5,8,2,9,求出最大值,最小值和平均值并输出。
源代码
inta[5]={3,-5,8,2,9};
intsum=0;
floataverage=0;
intmax=a[0];
intmin=a[0];
inti;
for(i=0;
5;
i++)
sum+=a[i];
average=(float)sum/5;
for(i=1;
if(a[i]>
max)max=a[i];
if(a[i]<
min)min=a[i];
printf("
最大值为:
max);
最小值为:
min);
平均值为:
%f\n"
average);
(2)从键盘输入10个实数,按从小到大的顺序排列起来。
源代码
voidsort_bubble(inta[],intn)
inti,j,temp;
for(i=0;
n-1;
i++)
for(j=i+1;
j<
n;
j++)/*注意循环的上下限*/
if(a[i]>
a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
voidmain()
{
inti,a[10];
for(i=0;
10;
i++)
scanf("
%d"
a[i]);
sort_bubble(a,10);
{
printf("
%6d"
a[i]);
}
\n"
第六章习题答案
1.B2.B3.D4.D5.C6.D7.A8.A9.C
10.C11.A12.C13.D14.B15.A16.D17.C
18.B19.D20.A
1.整型变量的地址(指针)2.a[0](数组首地址),a[3]3.24.&
a[1][0]5.eXAMPLE6.2,27.58.s[m]!
='
\0'
(*(s+m)=='
&
*(t+m)=='
)9.3510.s+m-1t2--
编程题
1.编写一个函数,将字符串s转换为整型数返回并在主函数中调用该函数输出转换后的结果,注意负数处理方法。
解:
用指针处理字符串非常方便。
使用符号位来处理负数。
intatoi(chars[])
inttemp=0,f=1,i=0;
while(s[i]!
s[i]!
-'
(s[i]<
'
0'
||s[i]>
9'
))i++;
//去除串前部无效字符
if(s[i]=='
)//读负号
f=-1;
i++;
if(s[i]<
)cout<
error!
endl;
//串非法时,输出提示,返回0
while(s[i]>
s[i]<
)//转换数字串
temp=temp*10+s[i]-48;
returnf*temp;
}
charnum[20];
gets(num);
atoi(num);
2.编程定义一个整型、一个双精度型、一个字符型的指针,并赋初值,然后显示各指针所指目标的值与地址,各指针的值与指针本身的地址及各指针所占字节数(长度)。
(其中地址用十六进制显示。
)
int*ip,ival=100;
double*dp,dval=99.9;
char*cp,cval='
A'
ip=&
ival;
dp=&
dval;
cp=&
cval;
%d\t%x\t%d\n"
*ip,&
*ip,sizeof(*ip));
*dp,&
*dp,sizeof(*dp));
*cp,(void*)&
*cp,sizeof(*cp));
//字符指针输出是字符串,必须强制转换为无类型指针
%x\t%x\t%d\n"
ip,&
ip,sizeof(ip));
dp,&
dp,sizeof(dp));
(void*)cp,&
cp,sizeof(cp));
3.利用指向行的指针变量求5×
3数组各行元素之和。
inta[5][3]={{1,2,3},{4,5,6},{7,8,9},{11,22,33},{44,55,66}};
int(*p)[3];
inti,j,s;
i++){
p=&
a[i];
//指向第i行
s=0;
for(j=0;
3;
s+=*(*p+j);
sumoflineis:
%d=%d\n"
i,s);
4.编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。
intfun(char*s)
intk=0;
while(*s!
k++;
s++;
returnk;
charstr[100];
Stringis:
gets(str);
lengthis:
fun(str));
5.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
voiddeal(int*);
inti,a[10],*p;
p=a;
p+i);
deal(a);
%4d"
*(p+i));
voiddeal(int*p)
inti,j,k,t;
k=i=0;
for(j=i+1;
j++)
if(*(p+k)>
*(p+j))k=j;
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
k=i=9;
for(j=i-1;
j>
=0;
j--)
if(*(p+k)<
6.有若干个学生成绩(每个学生有4门课),要求在用户输入学号后,能输出学生的全部成绩。
floatscore[][4]={{66,76,86,96},{66,77,88,99},{48,78,89,90}};
float*serach(float(*pointer)[4],intn);
float*p;
inti,m;
Enterthenumberofstudent:
"
scanf("
m);
//输入要查找的学生序号
ThescoresofNo.%dare:
m);
p=search(score,m);
for(i=0,i<
4;
i++)//输出第n个学生的全部成绩
%6.2f"
float*search(float(*pointer)[4],intn)//函数的返回值为指向实型数据的指针
float*pt;
pt=*(pointer+n);
//把指针定位在第把指针定位在第把指针定位在第把指针定位在第n个学生的第一个学生的第一个学生的第一个学生的第一个数据上个数据上个数据上个数据上
return(pt);
//函数的返回值第n个学生成绩的首地址
7.将一个5×
5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素,顺序为从左到右,从上到下顺序依次从小到大存放。
voidmain()
voidchange(int*);
inta[5][5],*p,i,j;
inputmartix:
for(i=0;
i++)
for(j=0;
j++)
a[i][j]);
p=&
a[0][0];
change(p);
Now,martix:
%d"
voidchange(int*p)//交换函数的实现
int*pmax,*pmin;
pmax=p;
pmin=p;
i++)//寻找最大值和最小值
for(j=i;
if(*pmax<
*(p+5*i+j))
pmax=p+5*i+j;
if(*pmin>
pmin=p+5*i+j;
temp=*(p+12);
//最大值换给中心元素
*(p+12)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
pmin=p+1;
for(j=0;
j++);
if(((p+5*i+j)!
=p)&
(*pmin>
*(p+5*i+j)))
temp=*pmin;
*pmin=*(p+4);
*(p+4)=temp;
pmin=p+1;
=(p+4)&
(p+5*i+j)!
*pmin=*(p+20);
*(p+20)=temp;
if(((p+5*i+j)!
((p+5*i+j)!
=(p+4))&
=(p+20))&
*pmin=*(p+24);
*(p+24)=temp;
8.有一字符串,包含n个字符。
编写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
string.h>
voidcopystring(char*,char*,int);
intm;
charstring1[20],string2[20];
inputstring:
gets(string1);
whichcharacterthatbegintocopy?
if(strlen(string1)<
m)
{printf("
inputerror!
copystring(string1,string2,m);
result:
%s\n"
string2);
voidcopystring(char*p1,char*p2,intm)//字符串复制函数
intn=0;
while(n<
m-1)
{
n++;
p1++;
}
while(*p1!
)
*p2=*p1;
p2++;
*p2='
第七章习题答案
1.B2.D3.C4.C5.A6.C7.B8.A9.B
10.A11.C12.C
1.在学生数据中,找出各门课平均分在85以上的同学,并输出这些同学的信息。
malloc.h>
#defineM5//学生数
#defineN3//课程数
structstudent
longnum;
charname[20];
floatscore[N];
structstudent*next;
};
//创建链表子函数
structstudent*create(intn)
structstudent*head=NULL,*p1,*p2;
inti,j;
for(i=1;
=n;
i++)//逐个创建结点并输入相关数据
p1=(structstudent*)malloc(sizeof(structstudent));
print