习题课245章.docx
《习题课245章.docx》由会员分享,可在线阅读,更多相关《习题课245章.docx(20页珍藏版)》请在冰豆网上搜索。
习题课245章
第四章习题讲解
4.6实训
实训1
【实训内容】简单if语句。
【实训目的】掌握简单if语句的使用。
【实训题目】分析下面两个程序,写出程序的功能并上机验证。
【程序1】
#include
main()
{
floatx,y,z;
printf("Pleaseenterx,y,z:
");
scanf("%f,%f,%f",&x,&y,&z);
if(xif(xprintf("%5.2f\n",x);
}
【程序2】
#include
main()
{
floatx,y,z,max;
printf("Pleaseenterx,y,z:
");
scanf("%f,%f,%f",&x,&y,&z);
max=x;
if(maxif(maxprintf("%5.2f\n",max);
}
实训2
【实训内容】if-else语句。
【实训目的】掌握if-else语句的使用。
【实训题目】简单加法练习程序。
阅读程序并上机调试,改正其中的错误,使之能正常运行。
#include
#include
#include
main()
{
intnum1,num2,answer;
srand(time(NULL));
num1=rand()%100;
num2=rand()%100;
printf("%d+%d=",num1,num2);
scanf("%d",&answer);
if(answer==num1+num2)
printf("回答正确.\n");
else
printf("回答错误.\n");
}
实训3
【实训内容】if嵌套
【实训】编写程序,根据输入的某年某月,输出该月的天数。
【程序代码】
#include
main()
{
inty,m,d;
printf("Pleaseinputtheyearandmonth:
");
scanf("%d-%d",&y,&m);
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
d=31;
elseif(m==4||m==6||m==9||m==11)
d=30;
elseif(m==2)
if((y%4==0&&y%100!
=0)||(y%400==0))
d=29;
else
d=28;
printf("\nThereare%ddaysin%d-%d\n\n",d,y,m);
}
【举一反三】用switch语句修改上面程序,并与if语句进行比较。
#include
main()
{
inty,m,d;
printf("Pleaseinputtheyearandmonth:
");
scanf("%d-%d",&y,&m);
switch(m)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
d=31;break;
case4:
case6:
case9:
case11:
d=30;break;
case2:
switch((y%4==0&&y%100!
=0)||(y%400==0))
{
case1:
d=29;break;
case0:
d=28;break;
}
}
printf("\nThereare%ddaysin%d-%d\n\n",d,y,m);
}
4-11编程题
(1)编写程序,从键盘输入整数n,当n为偶数时,输出n的平方值;否则输出n的立方值。
【程序代码】
#include
main()
{
intn;
scanf("%d",&n);
if(n%2==0)
printf("%d的平方值为:
%d\n",n,n*n);
else
printf("%d的立方值为:
%d\n",n,n*n*n);
}
(2)从键盘输入一个英文字母,如果是小写字母,则将它变为该字母后一位字母输出;如果是大写字母,则先将它变为小写字母,然后再变为该小写字母后一位字母输出。
【程序代码】
#include
main()
{
charch;
printf("请从键盘输入一个英文字母\n");
scanf("%c",&ch);
if(ch>='a'&&ch<'z')
printf("%c的后一位字母为:
%c\n",ch,ch+1);
elseif(ch>='A'&&ch<'Z')
printf("%c变为小写字母的后一位字母为:
%c\n",ch,ch+32+1);
else
printf("输入错误!
\n");
}
(3)某商场给顾客购物的折扣率为:
购物金额<200元,不打折;
200元<=购物金额<500元,9折;
500元<=购物金额<1000元,8折;
购物金额>=1000元,7.5折。
输入一个购物金额,输出折扣率、购物实际付款金额。
#include
main()
{
floatx;
scanf("%f",&x);
if(x<200)
printf("折扣率为1.0,购物实际付款金额为:
%f\n",x);
else
if(x<500)
printf("折扣率为0.9,购物实际付款金额为:
%f\n",0.9*x);
else
if(x<1000)
printf("折扣率为0.8,购物实际付款金额为:
%f\n",0.8*x);
else
printf("折扣率为0.75,购物实际付款金额为:
%f\n",0.75*x);
}
(4)输入一个人的出生年、月、日,再输入当前年、月、日,计算此人的实际年龄。
【程序代码】
#include
main()
{
inty1,m1,d1,y2,m2,d2,age;
printf("请依次输入出生年月日,以空格间隔:
");
scanf("%d%d%d",&y1,&m1,&d1);
printf("请依次输入当前年月日,以空格间隔:
");
scanf("%d%d%d",&y2,&m2,&d2);
age=y2-y1-1;
if(m2>m1)
age++;
else
if(m2==m1&&d2>=d1)
age++;
printf("你的年龄为:
%d\n",age);
}
第五章习题讲解
【例5-11】编写程序,输出如下图形:
【程序代码】
#include
main()
{
inti,j;
for(i=1;i<=6;i++)
{
for(j=1;j<=7-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
}
5.6实训
实训1
【实训目的】学习while循环的使用,累加和的计算方法。
【实训题目】
(1)从键盘输入10个整数,求其累加和。
方法一:
#include
main()
{
inta,sum=0,i=1;
while(i<=10)
{
scanf("%d",&a);
sum=sum+a;
i++;
}
printf("10个整数的累加和为:
%d\n",sum);
}
实训2
【实训目的】学习do-while循环结构的控制
【实训题目】求自然对数底e的值。
,要求直到最后一项的值小于10-6为止。
#include
main()
{
doublee=1,item;
inti=1,fm=1;
do
{
e+=1.0/fm;
i++;
fm*=i;
}while(1.0/fm>=1.0e-6);
printf("e的值为:
%lf\n",e);
}
实训3
【实训目的】学习for循环语句的使用。
【实训题目】
(一)求100~999中的水仙花数。
(水仙花数是指一个数的各位数字的立方和等于该数自身的数,如:
153=1*1*1+5*5*5+3*3*3)
【程序代码】
#include
main()
{
inti,j,k,n;
for(n=100;n<=999;n++)
{
i=n/100;
j=n/10%10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d是水仙花数。
\n",n);
}
}
(二)编写程序,统计3000~8000之间有多少个无重复数字的奇数,输出这些奇数和统计结果,要求按每行10个数的格式输出结果。
说明:
3015、3217为无重复数字的奇数,而3113、3211为有重复数字的奇数。
#include
main()
{
inti,ge,shi,bai,qian,count=0;
for(i=3001;i<=8000;i+=2)
{
ge=i%10;
shi=i/10%10;
bai=i/100%10;
qian=i/1000;
if(ge==shi||ge==bai||ge==qian||shi==bai||shi==qian||bai==qian)
continue;
count++;
printf("%d",i);
if(count%10==0)
printf("\n");
}
}
实训4
【实训目的】掌握for-for循环嵌套的应用。
【实训题目】
(一)编写程序,输出下面图形:
【程序代码】
#include
main()
{
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
{
printf("%d",i);
}
printf("\n");
}
}
(二)编写程序,输出下面图形:
#include
main()
{
inti,j;
for(i=1;i<=6;i++)
{
for(j=1;j
{
printf("");
}
printf("############\n");
}
}
实训5
【实训目的】掌握循环结构处理问题的方法。
【实训题目】假设某班有5名学生,期末考4门课程。
编写程序,要求输入每位学生的各门单科成绩,计算出每人的平均成绩。
#include
main()
{
inti,j;
floatx,ave;
for(i=1;i<=5;i++)
{
printf("请输入第%d名同学的4门课成绩:
\n",i);
ave=0;
for(j=1;j<=4;j++)
{
scanf("%f",&x);
ave+=x;
}
printf("第%d名同学的四门课平均成绩为%f\n\n\n",i,ave/4);
}
}
实训6
【实训目的】掌握用循环结构处理问题的方法
【实训题目】算术练习程序。
根据用户选择的菜单项,让计算机一次为小学生出10道简单的算术题,每题10分,小学生输入答案后,程序自动判定是否正确,最后给出小学生答对题目的数量和得分。
【程序代码】
#include
#include
#include
main()
{
inta,b,xz,answer,i,n=0,total=0,f=0;
srand(time(NULL));
printf("\n\n");
printf("*******************************\n");
printf("1————加法\n");
printf("2————减法\n");
printf("3————乘法\n");
printf("4————除法\n");
printf("*********************************\n");
printf("请选择运算:
");
scanf("%d",&xz);
switch(xz)
{
case1:
f=1;
printf("请看题,输入答案:
\n\n");
for(i=1;i<=10;i++)
{
a=rand()%10;b=rand()%10;
printf("第%d题:
%d+%d=",i,a,b);
scanf("%d",&answer);
if(answer==a+b)
{
n++;total=total+10;
}
}
break;
case2:
f=1;
printf("请看题,输入答案:
\n\n");
for(i=1;i<=10;i++)
{
a=rand()%10;b=rand()%10;
printf("第%d题:
%d-%d=",i,a,b);
scanf("%d",&answer);
if(answer==a-b)
{
n++;total=total+10;
}
}
break;
default:
f=0;
}
if(f==1)
printf("\n\n你共答对了:
%d道题,得分:
%d\n\n",n,total);
else
printf("\n\n对不起,你选择的运算不能实现,退出练习程序!
\n\n");
}
5-9编程题
(1)一张纸的厚度为0.1mm,珠穆朗玛峰的高度为8848.13m,假如纸张足够大,将纸对折多少次后可以超过珠峰的高度?
【程序代码】
#include
main()
{
inti=0;
floathigh=0.0001;
while(high<=8848.13)
{
high=high*2;
i++;
}
printf("将纸对折%d次后,可以超过珠峰的高度。
",i);
}
(2)计算1X2+3X4+5X6+……+99X100的值。
【程序代码】
#include
main()
{
inti,sum=0;
for(i=1;i<=99;i=i+2)
{
sum+=i*(i+1);
}
printf("sum=%d\n",sum);
}
(3)输入6个学生成绩,分别统计成绩在85-100分,60-85分和60分以下各分数段中的人数。
#include
main()
{
inti,score,a=0,b=0,c=0;
for(i=1;i<=6;i++)
{
printf("请输入第%d名学生的成绩:
\n",i);
scanf("%d",&score);
if(score<60)
c++;
if(score>=60&&score<85)
b++;
if(score>=85&&score<=100)
a++;
}
printf("85-100之间的人数为:
%d,60-85之间的人数为:
%d,60分以下的人数为:
%d",a,b,c);
}
(4)在1~500中,找出能同时满足用3除余2,用5除余3,用7除余2的所有整数。
#include
main()
{
inti;
for(i=1;i<=500;i++)
{
if(i%3==2&&i%5==3&&i%7==2)
printf("%d",i);
}
}
(5)输出如下图所示图案。
#include
main()
{
inti,j;
for(i=1;i<=5;i++)
{
for(j=5-i;j>=1;j--)
printf("");
for(j=1;j<=2*i-1;j++)
printf("%d",i);
printf("\n");
}
for(i=1;i<=4;i++)
{
for(j=1;j<=i;j++)
printf("");
for(j=1;j<=9-2*i;j++)
printf("%d",5-i);
printf("\n");
}
}
(6)已知xyz+yzz=532,其中x、y、z都是数字,编写程序求出x、y、z分别是多少?
#include
main()
{
intx,y,z;
for(x=0;x<=5;x++)
for(y=0;y<=5;y++)
for(z=0;z<=9;z++)
{
if(100*x+10*y+z+100*y+10*z+z==532)
printf("x=%d,y=%d,z=%d\n\n",x,y,z);
}
}
【补充:
】
1、输出Fibonacci数列,直至数列的最末项不大于100。
#include
main()
{
inta0,a1,a2,i;
a0=a1=1;
printf("%d%d",a0,a1);
a2=a0+a1;
for(;a2<100;)
{
printf("%d",a2);
a0=a1;
a1=a2;
a2=a0+a1;
}
}