c语言第五六章课后题.docx
《c语言第五六章课后题.docx》由会员分享,可在线阅读,更多相关《c语言第五六章课后题.docx(27页珍藏版)》请在冰点文库上搜索。
![c语言第五六章课后题.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/565571f4-5877-49fc-917d-8320f6abcf26/565571f4-5877-49fc-917d-8320f6abcf261.gif)
c语言第五六章课后题
第五章作业:
5-1、
N-S流程图
#include
main()
{
constdoubleeps=1e-8;/*定义eps,用于输入的实数和0比大小*/
floata;
printf("inputanumber:
");
scanf("%f",&a);
if(a>0||fabs(a)<=eps)/*该实数大于等于0*/
{printf("|%f|=%f\n",a,a);}
else/*该实数小于0*/
{printf("|%f|=%f\n",a,-a);}
}
结果:
5-2、
传统流程图
#include
main()
{
intx,m;
printf("inputaintanger:
");
scanf("%d",&x);
if(x>=0)
{
m=x%2;/*取余运算,判断余数是否为0*/
if(0==m)
{printf("%d是偶数\n",x);}
else
{printf("%d是奇数\n",x);}
}
else/*提示输入为负数*/
{printf("输入错误,%d为负数\n",x);}
}
结果:
5-3、
传统流程图
#include
#include
main()
{
floata,b,c,l,s;
printf("inputthreesides:
");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)/*构成三角形的条件*/
{
l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-b)*(l-c));
printf("三角形的面积是%.3f\n",s);
}
else
{printf("不能构成三角形\n");}
}
结果:
5-4、
#include
#include
main()
{
floatm,s;/*定义本金,利息和*/
intn;/*定义期限*/
printf("输入本金、期限:
");
scanf("%f,%d",&m,&n);
switch(n)
{
case1:
/*存储年限为1年*/
s=m*pow(1+0.0225,n);
printf("本金和=%.3f\n",s);
break;
case2:
/*存储年限为2年*/
s=m*pow(1+0.0243,n);
printf("本金和=%.3f\n",s);
break;
case3:
/*存储年限为3年*/
s=m*pow(1+0.0270,n);
printf("本金和=%.3f\n",s);
break;
case5:
/*存储年限为5年*/
s=m*pow(1+0.0288,n);
printf("本金和=%.3f\n",s);
break;
case8:
/*存储年限为8年*/
s=m*pow(1+0.03,n);
printf("本金和=%.3f\n",s);
break;
default:
/*提示输入错误*/
printf("输入的期限有误");
break;
}
}
结果:
5-5、
#include
main()
{
intyear,flag;
printf("Entertheyear:
");
scanf("%d",&year);
if(year%100==0&&year%400==0||year%4==0)
flag=1;
else
flag=0;
if(flag==1)
printf("%disaleapyear!
\n",year);
else
printf("%disnotaleapyear!
\n",year);
}
5-6、
#include
main()
{
intyear,flag;
printf("Entertheyear:
");
scanf("%d",&year);
(year%100==0&&year%400==0||year%4==0)?
(flag=1):
(flag=0);
if(flag==1)
printf("%disaleapyear!
\n",year);
else
printf("%disnotaleapyear!
\n",year);
}
5-7、
#include
main()
{
charch;/*定义输入的字符*/
intm;/*定义该字符的ASCII值*/
printf("inputastringandpressEnter:
");
ch=getchar();/*获取该字符*/
if(ch>='A'&&ch<='Z')/*若为大写字符,则转化为小写*/
{
m=ch+32;
printf("%c的小写字母:
%c\n",ch,m);
}
elseif(ch>='a'&&ch<='z')/*若为小写字符,则转化为大写并算出ASCII值*/
{
m=ch-32;
printf("%c的大写字母为:
%c,其ASCII值为:
%d\n",ch,m,m);
}
else/*若输入的不是字母,则只输出ASCII值*/
{
printf("%c的ASCII值为:
%d\n",ch,ch);
}
}
结果:
5-8、
#include
main()
{
charch;
printf("inputastringandpressEnter:
");
ch=getchar();/*获取该字符*/
if(ch>='A'&&ch<='Z')/*判断为大写*/
{printf("%c为大写字母\n",ch);}
elseif(ch>='a'&&ch<='z')/*判断为小写*/
{printf("%c为小写字母\n",ch);}
elseif(ch=='')/*判断为空格*/
{printf("%c为空格\n",ch);}
elseif(ch>='0'&&ch<='9')/*判断为数字*/
{printf("%c是数字字符\n",ch);}
else/*判断为其他字符*/
{printf("%c是其他字符\n",ch);}
}
结果:
5-9
#include
main()
{
intscore;
printf("inputthescore:
");
scanf("%d",&score);
if(score>100||score<0)/*判断师傅输入大于100的数或负数*/
{printf("成绩输入错误\n");}
else
{
if(score>=90)
{printf("score:
%d-------grade:
%c\n",score,'A');}
elseif(score>=80)
{printf("score:
%d-------grade:
%c\n",score,'B');}
elseif(score>=70)
{printf("score:
%d-------grade:
%c\n",score,'C');}
elseif(score>=60)
{printf("score:
%d-------grade:
%c\n",score,'D');}
else
{printf("score:
%d-------grade:
%c\n",score,'E');}
}
}
结果:
5-10、
#include
main()
{
intyear,month,flag=1;/*定义年份、月份、标识变量flag*/
printf("输入年份:
");
scanf("%d",&year);
if(year%400==0||year%100!
=0&&year%4==0)/*若为润年,flag=0,平年,flag=1*/
{flag=0;}
printf("输入月份:
");
scanf("%d",&month);
switch(month)
{
case1:
/*1,3,5,7,8,10,12月为31天*/
case3:
case5:
case7:
case8:
case10:
case12:
printf("%d年的%d月有31天\n",year,month);
break;
case2:
/*2月需要判断润年和平年的情况*/
if(0==flag)
{printf("%d年的%d月有29天\n",year,month);}
else
{printf("%d年的%d月有28天\n",year,month);}
break;
case4:
/*4,6,9,11月为30天*/
case6:
case9:
case11:
printf("%d年的%d月有31天\n",year,month);
break;
default:
/*若输入非1~12的月份,提示输入错误*/
printf("月份输入错误\n");
}
}
结果:
第六章作业
6-1
(1)
分析:
这是一个二重嵌套循环,
I=1,j=1,打出1个空格和6个*
I=2,j=1和2,做2次循环打出2个空格和6个*
I=3,j=1,2,3,做3次循环打出3个空格和6个*
I=4,j=1,2,3,4,做4次循环打出4个空格和6个*
结果
6-1
(2)
分析:
开始:
k=4,n=0
第一次循环n<4,n%2==0,n=n+1=1;
第二次循环n第三次循环n第四次循环n结束:
输出n=3,k=3
结果:
6-1(3)
分析:
开始:
k=4,n=0;
第一次循环:
0<4,0%2==0,break,
结束:
输出k=4,n=0;
结果:
6-2
(1)计算1+3+5+7+.......+99+101的值
#include
main()
{
inti,sum=0;
for(i=1;i<=101;i=i+2)
{
sum=sum+i;
}
printf("sum=%d\n",sum);
}
结果:
(2)计算1*2*3+3*4*5+……+99*100*101
#include
main()
{
longi;
longterm,sum=0;
for(i=1;i<=99;i=i+2)
{
term=i*(i+1)*(i+2);
sum=sum+term;
}
printf("sum=%ld\n",sum);
}
结果:
(3)计算a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入
#include
main()
{
longterm=0,sum=0;
inta,i,n;
printf("inputa,n:
");
scanf("%d,%d",&a,&n);
for(i=1;i<=n;i++)
{
term=10*term+a;/*将相邻的数乘以10,再加上之前的数*/
sum=sum+term;
}
printf("sum=%ld\n",sum);
}
结果:
(4)计算1-1/2+1/3-1/4+…+1/99-1/100+…,直到最后一项的绝对值小于1e-4为止
#include
#include
main()
{
intn=1;
floatterm=1.0,sign=1,sum=0;
while(sign>=1e-4)
{
term=pow(-1,n-1)*sign;/*计算每项因子*/
sum=sum+term;
sign=(float)1/(n+1);/*强制类型转换*/
n++;
}
printf("sum=%f\n",sum);
}
结果:
(5)利用sinx=x-x^3/3!
+x^5/5!
-x^7/7!
+….,计算最后一项的绝对值小于10(-5)时为止,输出e的值并统计累加的项数
#include
#include
main()
{
intn=1,count=1;
floatx;
doublesum,term;
printf("inputx:
");
scanf("%f",&x);
sum=x;
term=x;
do{
term=(-1)*x*x*term/((n+1)*(n+2));
sum=sum+term;
n=n+2;
count=count+1;
}while(fabs(term)>1e-5);
printf("sin(x)=%f,count=%d\n",sum,count);
}
结果:
6-3
#include
main()
{
intx=1,find=0;
while(!
find)
{
if(x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0)
{
printf("x=%d\n",x);
find=1;
}
x++;
}
}
错误分析:
1、while后不能加分号,否则进入死循环;
2、判等运算用的是双等号,不是单等号;
3、不管是否找,x都要自增运算,所以x++放在if语句的外面。
结果:
6-5、
伪代码:
定义华氏温度f,摄氏温度c
for(f=0;f<=300;f=f+10)
输出华氏温度f;
c=5.0/9*(f-32);
输出摄氏温度;
#include
main()
{
intf=0;/*定义华氏温度f*/
floatc=0;/**定义摄氏温度c/
printf("华氏温度--------摄氏温度\n");
for(f=0;f<=300;f=f+10)/*产生0~300,并以10为间隔的温度值*/
{
printf("%dF",f);
printf("-----");
c=5.0/9*(f-32);/*将5写成5.0,防止发生整除运算*/
printf("%.2fC\n",c);
}
}
结果:
6-11、
#include
main()
{
intm=0;/*定义最终输出的整数个数为m*/
floatn;/*输入的数为n*/
longp=1,sum=0;/*p为阶乘每次阶乘结果,sum为所有阶乘加和*/
printf("pleaseinputthenumber:
");
scanf("%f",&n);
do{
m++;/*m做自增运算*/
p=p*m;/*每次阶乘结果*/
sum=sum+p;
}while(sum<=n);/*循环截止条件*/
printf("m=%d\n",m-1);/*当不满足sum<=n时,m已经多加了一次1,所以输出m-1*/
}
结果:
6-15、
#include
main()
{
intchicken;
intrabbit;
printf("鸡--------兔\n");
for(chicken=1;chicken<98;chicken++)/*鸡的数量从1~98中取*/
{
for(rabbit=1;rabbit<98;rabbit++)/*兔子的数量从1~98中取*/
{
if(2*chicken+4*rabbit==386&&chicken+rabbit==98)/*满足头为98,腿为386*/
{printf("%d只%d只\n",chicken,rabbit);}
}
}
}
结果:
6-18、
类型一、
#include
main()
{
inti=1,j=1;/*定义外部循环变量i,内部循环变量j*/
for(i=1;i<=9;i++)/*输出表头1~9,每个数字占4位*/
{printf("%-4d",i);}
printf("\n");/*换行*/
for(j=1;j<=9;j++)/*输出‘-’,每个占4位*/
{printf("%-4c",'-');}
printf("\n");/*换行*/
for(i=1;i<=9;i++)/*外部循环9次*/
{
for(j=1;j<=9;j++)/*内部循环9次*/
{
printf("%-4d",i*j);/*输出结果,每个数字占4位*/
}
printf("\n");/*每行结束,要换行输出*/
}
}
结果:
类型二、
#include
main()
{
inti=1,j=1;/*定义外部循环变量i,内部循环变量j*/
for(i=1;i<=9;i++)/*输出表头1~9,每个数字占4位*/
{printf("%-4d",i);}
printf("\n");/*换行*/
for(j=1;j<=9;j++)/*输出‘-’,每个占4位*/
{printf("%-4c",'-');}
printf("\n");/*换行*/
for(i=1;i<=9;i++)/*外部循环9次*/
{
for(j=1;j<=i;j++)/*内部循环i次*/
{
printf("%-4d",i*j);/*输出结果,每个数字占4位*/
}
printf("\n");/*每行结束,要换行输出*/
}
}
结果:
类型三、
#include
main()
{
inti=1,j=1;/*定义外部循环变量i,内部循环变量j*/
intp=1;
for(i=1;i<=9;i++)/*输出表头1~9,每个数字占4位*/
{printf("%-4d",i);}
printf("\n");/*换行*/
for(j=1;j<=9;j++)/*输出‘-’,每个占4位*/
{printf("%-4c",'-');}
printf("\n");/*换行*/
for(i=1;i<=9;i++)/*外部循环9次*/
{
for(p=1;p<=i-1;p++)/*先打印每行的空格*/
{
printf("%-4c",'');/*定义占4位*/
}
for(j=i;j<=9;j++)/*内部循环9-i次*/
{
printf("%-4d",i*j);/*在空格后输出结果,每个数字占4位*/
}
printf("\n");/*每行结束,要换行输出*/
}
}
结果:
6-20、
伪代码描述:
定义4位车号abcd;
for(a=0;a<=9;a++)
令b=a;
for(c=0;c<=9;c++)
令d=c;
if(c==a)重新产生c;
sum=1000*a+100*b+10*c+d
for(m=0;m<100;m++)
if(sum==m*m)
输出abcd
#include
main()
{
inta=0,b=0,c=0,d=0;/*定义4位车号为a,b,c,d*/
intm=0;/*定义一个在0~100之间的整数,用于判断车号与m*m*/
intsum=0;/*4位车号abcd*/
intp;/*p=m*m*/
for(a=0;a<=9;a++)/*a在0~9中寻找*/
{
b=a;/*b=a*/
for(c=0;c<=9;c++)/*c在0~9中寻找*/
{
d=c;/*d=c*/
if(c==a)continue;/*使产生的前两位车号与后两位车号不同*/
sum=1000*a+100*b+10*c+d;/*计算abcd*/
for(m=0;m<100;m++)/*在0~100的范围内寻找m*/
{
p=m*m;
if(sum==p)/*满足的丙的条件:
4位车号是一个整数的平方*/
{
printf("4位车号:
%d%d%d%d\n",a,b,c,d);
}
}
}
}
}
结果:
成绩
批阅教师
批阅日期