习题参考答案63422.docx
- 文档编号:24038026
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:33
- 大小:58.35KB
习题参考答案63422.docx
《习题参考答案63422.docx》由会员分享,可在线阅读,更多相关《习题参考答案63422.docx(33页珍藏版)》请在冰豆网上搜索。
习题参考答案63422
第1章习题参考答案
1.对C语言来说,下列标识符中哪些是合法的,哪些是不合法的
total,_debug,Large&Tall,Counter1,begin_
解答:
Large&Tall不合法,其余都合法。
2.改写本章节中的流程图,求1~100中能被6整除的所有整数的和。
解答:
sum=0
i=1
真
i<=100
真
假
假
sum=sum+i
i=i+1
打印sum
图“求1~100中能被6整除的所有整数的和”的流程图
11
3.改写本章节中的程序,求1~100中能被6整除的所有整数的和,并在编程环境中验证
该程序的运行结果。
解答:
#include<>
intmain(void)
{
inti,sum=0;
for(i=1;i<=100;i++)
if(i%6==0)sum=sum+i;
printf("%d",sum);
return0;
}
运行结果:
816
4.对于给定的整数n(n>1),请设计一个流程图判别n是否为一个素数(只能被1和自己整
除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构与循环结构。
解答:
在流程图中,分支结构和循环结构如图所示,自上而下的2个实线框和2个虚线组
成了顺序结构。
输入n
i=2
i<=n/2
假
真
真
假
循环结构
i=i+1
真
打印n是素数
i>n/2
假
打印n不是素数
分支结构
第2章习题参考答案
(i
1
)
4.编写程序,输入两个正整数m和n,求
解答:
#include<>
intmain(void)
{
inti,m,n;
doublesum;
scanf("%d%d",&m,&n);
sum=0;
for(i=m;i<=n;i++)
sum=sum+i*i+/i;
printf("sum=%.6f\n",sum);
return0;
}
2
3
i
。
45
6
5.编写程序,输入一个正整数n,计算
解答:
#include<>
intmain(void)
{
intflag,i,n;
doubleitem,sum;
scanf("%d",&n);
sum=0;
flag=1;
for(i=1;i<=n;i++){
item=flag**i/(2*i-1);
sum=sum+item;
flag=-flag;
}
1
3
5
7
9
11
.....
的前n项之和。
26
}
printf("sum=%.3f\n",sum);
return0;
8.编写程序,输入一个正整数n,求
型是double。
解答:
#include<>
intmain(void)
{
inti,n;
doublesum;
doublefact(intn);
scanf("%d",&n);
sum=0;
for(i=0;i<=n;i++){
sum=sum+fact(i);
}
printf("sum=%.0f\n",sum);
return0;
}
doublefact(intn)
{
inti;
doubleproduct;
product=1;
for(i=1;i<=n;i++)
product=product*i;
returnproduct;
}
e
i!
。
要求定义和调用函数fact(n)计算n!
,函数类
第3章习题参考答案
程序设计题
1.输入三角形的3条边a,b,c,如果能构成一个三角形,输出面积area和周长perimeter(保
留2位小数);否则,输出"Thesesidesdonotcorrespondtoavalidtriangle"。
在一个三角形中,任意两边之和大于第三边。
三角形面积计算公式:
解答:
areas(sa)(sb)(sc),其中s=(a+b+c)/2
#include<>
#include<>
intmain(void)
{
inta,b,c;
doublearea,s,perimeter;
scanf("%d%d%d",&a,&b,&c);
if((a+b>c)&&(b+c>a)&&(a+c>b)){
perimeter=a+b+c;
s=(a+b+c)*2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%.2f,perimeter=%.2f\n",area,perimeter);
}
else
printf("Thesesidesdonotcorrespondtoavalidtriangle\n");
return0;
}
4.输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计各等级成绩的个数。
成绩分为5个等级,分别为A(90~100)、B(80~89)、C(70~79)、D(60~69)、E(0~59)。
#include<>
intmain(void)
{
intmark,n,i,sum;
doubleaverage;
intcounta,countb,countc,countd,counte;
printf("Entern:
");
scanf("%d",&n);
counta=countb=countc=countd=counte=sum=0;
for(i=1;i<=n;i++){
scanf("%d",&mark);
sum=sum+mark;
if(mark>=90)counta++;
elseif(mark>=80)countb++;
elseif(mark>=70)countc++;
elseif(mark>=60)countd++;
elsecounte++;}
}
average=sum*n;
printf("average=%.1f\n",average);
printf("A:
%d,B:
%d,C:
%d,D:
%d,E:
%d\n",counta,countb,countc,countd,counte);
return0;
}
5.输出21世纪所有的闰年。
判断闰年的条件是:
能被4整除但不能被100整除,或者能被400整除。
解答:
#include<>
intmain(void)
{
intyear;
for(year=2000;year<=2099;year++){
if((year%4==0&&year%100!
=0)||(year%400==0))
printf("%d\n",year);
}
return0;
}
第4章习题参考答案
程序设计题
1.输入一批正整数(以零或负数为结束标志),求其中的偶数和。
解答:
#include<>
intmain(void)
{
intx,sum;
printf("Inputintegers:
");
scanf("%d",&x);
sum=0;
while(x>0){
if(x%2==0)sum=sum+x;
scanf("%d",&x);
}
printf("Thesumoftheevennumbersis%d\n",sum);
return0;
}
xxx
sx
2.输入1个实数x,计算并输出下式的值,直到最后一项的绝对值小于10
要求定义和调用函数fact(n)计算n的阶乘,可以调用pow()函数求幂。
2!
3!
4!
解答:
#include<>
#include<>
intmain(void)
{
inti;
doubleitem,s,x;
doublefact(intn);
scanf("%le",&x);
s=0;
item=x;
i=1;
while(fabs(item)>={
item=pow(x,i)/fact(i);
s=s+item;
i++;
}
printf("s=%.2f\n",s);
return0;
}
doublefact(intn)
{
inti;
doubleresult=1;
for(i=1;i<=n;i++)
result=result*i;
returnresult;
}
3.输入一个整数,求它的各位数字之和及位数。
例如234的各位数字之和是9,位数是3。
解答:
#include<>
intmain(void)
{
intcount,sum;
longin;
printf("Inputaninteger:
");
scanf("%ld",&in);
if(in<0)in=-in;
count=0;
sum=0;
while(in!
=0){
sum=sum+in%10;
in=in/10;
count++;
}
printf("count=%d,sum=%d\n",count,sum);
return0;
}
7.求1~10000之间所有满足各位数字的立方和等于它本身的数。
例如153的各位数字的立
方和是1+5+3=153。
解答:
#include<>
intmain(void)
{
inti,digit,number,sum;
for(i=1;i<=10000;i++){
number=i;
sum=0;
while(number!
=0){
digit=number%10;
number=number/10;
sum=sum+digit*digit*digit;
}
if(sum==i)printf("%d\n",i);
}
return0;
}
8.验证哥德巴赫猜想:
任何一个大于等于6的偶数均可表示为两个素数之和。
例如6=3+3,
8=3+5,…,18=5+13。
要求将6~100之间的偶数都表示成两个素数之和,打印时一行打印
5组。
解答:
#include<>
intprime(intn);
intmain(void)
{
inti,m;
intcount=0;
for(m=6;m<=100;m=m+2){
for(i=3;i<=m/2;i=i+2)
if(prime(i)&&prime(m-i)){
printf("%d=%d+%d",m,i,m-i);
count++;
if(count%5==0)printf("\n");
}
}
return0;
}
intprime(intn)
{inti,flag=1;
if(n==1)flag=0;
for(i=2;i<=n/2;i++)
if(n%i==0)flag=0;
returnflag;
}
9.输入一个长整数,从高位开始逐位分割并输出。
例如输入123456,逐位输出:
1,2,3,4,5,6。
解答:
#include<>
intmain(void)
{
intdigit;
longin,temp,pow;
scanf("%ld",&in);
if(in<0)in=-in;
temp=in;
pow=1;
while(temp>10){
pow*=10;
temp/=10;
}
while(pow>=1){
digit=in/pow;
in=in%pow;
pow/=10;
printf("%-2d",digit);
}
printf("\n");
return0;
}
13.打印出以下图案:
*
***
*****
*******
*****
***
*
解答:
#include<>
intmain(void)
{
inti,j;
for(i=1;i<=4;i++){
for(j=2*(4-i);j>0;j--)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
for(i=1;i<=3;i++){
for(j=1;j<=2*i;j++)
printf("");
for(j=1;j<=2*(4-i)-1;j++)
printf("*");
printf("\n");
}
return0;
}
14.猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少桃子(提示:
采取逆向思维的方法,从后往前推断。
)
解答:
#include<>
intmain(void)
{
inti,peach;
peach=1;
for(i=1;i<10;i++){
peach=2*peach+1;
}
printf("%d\n",peach);
}
第5章习题参考答案
程序设计题
1.输入两个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a,n),
它的功能是返回aa…a(n个a)。
例如,fn(3,2)的返回值是33。
解答:
#include<>
intmain(void)
{
inta,i,n;
longsn;
longfn(inta,intn);
scanf("%ld%d",&a,&n);
sn=0;
for(i=1;i<=n;i++)
sn=sn+fn(a,i);
printf("%ld\n",sn);
return0;
}
longfn(inta,intn)
{
inti;
longtn;
tn=0;
for(i=1;i<=n;i++)
tn=10*tn+a;
returntn;
}
4.输入两个正整数m和n(1<=m,n<=1000),输出m~n之间的所有完数,完数就是因子和与它本身相等的数。
要求定义并调用函数factorsum(number),它的功能是返回number的
因子和。
例如,factorsum(12)的返回值是16(1+2+3+4+6)。
解答:
#include""
intmain(void)
{inti,m,n;
intfactorsum(intnumber);
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
if(factorsum(i)==i)
printf("%d",i);
printf("\n");
return0;
}
intfactorsum(intnumber)
{
inti,sum;
if(number==1)return1;
sum=0;
for(i=1;i<=number/2;i++)
if(number%i==0)
sum=sum+i;
returnsum;
}
6.输入一个整数,将它逆序输出。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数。
例如,reverse(12345)的返回值是54321。
解答:
#include<>
intmain(void)
{
intin,res;
intreverse(intnumber);
scanf("%d",&in);
res=reverse(in);
printf("%d\n",res);
return0;
}
intreverse(intnumber)
{
intflag,res;
if(number>=0)flag=1;
else{
flag=-1;
number=-number;
}
res=0;
do{
res=res*10+number%10;
number/=10;
}while(number!
=0);
returnflag*res;
}
第6章习题参考答案
程序设计题
1.输入一行字符,统计出其中的英文字母、空格、数字和其他字符的个数。
解答:
#include<>
intmain(void)
{
charc;
intblank,digit,letter,other;
c=getchar();
blank=digit=letter=other=0;
while(c!
='\n'){
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letter++;
elseif(c>='0'&&c<='9')
digit++;
elseif(c=='')
blank++;
else
other++;
c=getchar();
}
printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);
return0;
}
2.输入一行字符,统计其中单词的个数。
各单词之间用空格分隔,空格数可以是多个。
解答:
#include<>
intmain(void)
{
charc;
intcount,word;
c=getchar();
count=word=0;
while(c!
='\n'){
if(c=='')
word=0;
elseif(word==0){
count++;
word=1;
}
c=getchar();
}
printf("count=%d\n",count);
return0;
}
第7章习题参考答案
程序设计题
1.编写程序,输入一个正整数n(1 解答: #include<> intmain(void){ inti,index,n,t; inta[10]; printf("Inputn: "); scanf("%d",&n); printf("Input%dintegers: ");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 参考答案 63422