c语言答案.docx
《c语言答案.docx》由会员分享,可在线阅读,更多相关《c语言答案.docx(51页珍藏版)》请在冰豆网上搜索。
![c语言答案.docx](https://file1.bdocx.com/fileroot1/2023-1/21/57a8cb79-140d-4cc0-8b6d-e8a59efe582c/57a8cb79-140d-4cc0-8b6d-e8a59efe582c1.gif)
c语言答案
C语言实验参考答案
实验一
5、输入并运行自已编写的程序(教材第一章P14三编程题)。
实验二
1、编写一个程序,从键盘接收3个实数(分别为10.0、20.0、5.0),输出这3个数的和s、乘积t和平均值a。
#include
main()
{floatx,y,z,s,t,a;
printf(“x,y,z=”);
scanf(“%f,%f,%f”,&x,&y,&z);
s=x+y+z;
t=x*y*z;
a=s/3;
printf(“s=%f,t=%f,a=%f\n”,s,t,a);
}
2、编程。
要求用户输入两个整数a、b(分别为20、10),读取用户从键盘输入的值,然后:
1)用整数输出这两个数的和、差;
2)用长整型输出这两个数的积,用float输出商;
3)用整数输出这两个数的余数,用float输出平均值。
#include
main()
{inta,b,he,cha,yu;
longji;
floatshang,aver;
printf(“a,b=”);
scanf(“%d,%d”,&a,&b);
he=a+b;
cha=a-b;
ji=(long)a*b;
shang=1.0*a/b;
yu=a%b;
aver=(a+b)/2.0;
printf(“a+b=%d,a-b=%d,a*b=%ld\n”,he,cha,ji);
printf(“a/b=%f,a%%b=%d,aver=%f\n”,shang,yu,aver);
}
3.再次运行程序第2题中的程序,使整数a、b的值分别为10、20,分析程序运行结果,并给出说明。
程序同上。
实验三
1、编写一个程序,从键盘接收一个一位的整型数,经转换,用字符函数putchar输出。
例如,输入整数5,程序运行后输出字符5。
#include
main()
{inta;
charc;
printf(“a=”);
scanf(“%d”,&a);
c=a+48;
putchar(c);
}
2、编程。
输入半径,计算球体表面积()和球体积()。
#include
#definePI3.1415926
main()
{floatr,s,v;
printf(“r=”);
scanf(“%f”,&r);
s=4*PI*r*r;
v=4/3.0*PI*r*r*r;
printf(“s=%f,v=%f\n”,s,v);
}
3、编写一个程序,要求通过键盘给6个变量赋值,然后将变量的值在屏幕上打印输出。
这六个变量的值分别为:
10,-10,40000,a,3.14,hello。
#include
main()
{inta,b;
longc;
chard,ch[6];
floate;
scanf(“%d%d%ld%c%f%s”,&a,&b,&c,&d,&e,ch);
printf(“%d,%d,%ld,%c,%f,%s\n”,a,b,c,d,e,ch);
}
实验四
1.编程实现:
键盘输入三个整数,分别存放到变量a,b,c中,输出其中的最小值(要求不改变a、b、c的值)。
#include
main()
{inta,b,c,min;
printf("请输入三个整数a,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
min=a>b?
(b>c?
c:
b):
(a>c?
c:
a);
printf("min=%d\n",min);
}
2.编程实现:
键盘输入一个字符,如是大写字母,则输出相应小写字母;如是小写字母,则输出相应大写字母;其它字符原样输出。
#include
main()
{charc;
printf("请输入一个字符:
");
scanf("%c",&c);
if(c>='a'&&c<='z')c=c-32;
elseif(c>='A'&&c<='Z')c=c+32;
printf("%c\n",c);
}
3、计算以下分段函数值
#include
main()
{doublex,y;
printf("请输入一个实数:
");
scanf("%lf",&x);
if(x<0&&x!
=-3)y=x*x+x-6;
elseif(x>=0&&x<10&&x!
=2&&x!
=3)y=x*x-5*x+6;
elsey=x*x-x-1;
printf("x=%f,f(x)=%f\n",x,y);
}
4.编写程序,键盘接收一个字符串(只含大、小写英文字母),将该字符串加密后输出。
加密规则为:
若为小写字母则不变,若为大写字母则将其转换为小写后再后移一个字母,例如“A”应转换为“b”,“B”应转换为“c”,“Y”应转换为“z”,而“Z”应转换为“a”。
#include
main()
{charc[20];
inti;
printf("请输入一个字符串(只含英文字母):
");
gets(c);
for(i=0;c[i]!
=’\0’;i++)
if(c[i]>=‘A’&&c[i]<=‘Y’)c[i]=c[i]+33;
elseif(c[i]==’Z’)c[i]=‘a’;
puts(c);
putchar(‘\n’);
}
5.编写程序,用scanf输入任意两个数给变量a、b,若a大于等于b,则直接输出a、b,否则将a、b的值交换(即a的原值放入b中,b的原值放入a中)后再输出。
#include
main()
{floata,b,t;
printf("请输入两个数:
");
scanf("%f,%f",&a,&b);
if(a
printf("a=%f,b=%f",a,b);
}
6.编写程序:
由系统生成一个10以内的随机整数,用户从键盘上输入一个10以内的整数,如果两者相等输出“OK”,否则输出“ERROR”。
#include
#include
#include
main()
{inta,b;
srand((unsigned)time(NULL));
b=rand()%10+1;
printf("请输入一个10以内的整数:
");
scanf("%d",&a);
printf("a=%d,随机数b=%d\n",a,b);
if(a==b)printf("OK!
\n");
elseprintf("ERROR!
\n");
}
7.编写程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
(此题为选做)
#include
main()
{inta,b,t;
printf("请输入两个整数a,b=");
scanf("%d,%d",&a,&b);
t=a*a+b*b;
if(t<=100)
printf("a+b=%d",a+b);
else
{t=t/100;
printf("a*a+b*b百位以上的数字是%d\n",t);
}
}
实验五
1.编程,计算函数y的值,已知函数y与自变量x的关系为:
#include
main()
{floatx,y;
printf(“请输入一个非负数x=”);
scanf(“%f”,&x);
if(x>=0&&x<100)y=3*x+10;
elseif(x>=100)y=x*x*x-20;
if(x>=0)printf(“y=%f\n”,y);
elseprintf(“输入错误!
\n”);
}
2.编写一个简单的计算器程序,输入格式为:
data1opdata2。
其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。
#include
main()
{charop;
floatd1,d2;
printf("请输入算式(如3+5):
");
scanf("%f%c%f",&d1,&op,&d2);
switch(op)
{case'+':
printf("%g+%g=%g\n",d1,d2,d1+d2);break;
case'-':
printf("%g-%g=%g\n",d1,d2,d1-d2);break;
case'*':
printf("%g×%g=%g\n",d1,d2,d1*d2);break;
case'/':
printf("%g÷%g=%g\n",d1,d2,d1/d2);break;
}
}
2.编程实现:
输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:
①能同时被3,5,7整除
②能被其中两数(要指出是哪两个数)整除
③能被其中一个数(要指出是哪一个数)整除
④不能被3,5,7任一个数整除
#include
main()
{intn;
printf("请输入一个整数n=");
scanf("%d",&n);
if(n%3==0&&n%5==0&&n%7==0)
printf("%d能被3,5,7整除\n",n);
elseif(n%3==0&&n%5==0)printf("%d能被3,5整除\n",n);
elseif(n%3==0&&n%7==0)printf("%d能被3,7整除\n",n);
elseif(n%5==0&&n%7==0)printf("%d能被5,7整除\n",n);
elseif(n%3==0)printf("%d能被3整除\n",n);
elseif(n%5==0)printf("%d能被5整除\n",n);
elseif(n%7==0)printf("%d能被7整除\n",n);
elseprintf("%d不能被3,5,7任一个整除\n",n);
}
4.已知从2008年12月开始,银行整存整取存款不同期限的年利率分别为:
三个月1.71%,半年1.98%,一年2.25%,两年2.79%,三年3.33%,五年3.60%。
编写程序,要求输入存钱的本金和期限,求出到期时能从银行得到的利息与本金的合计数。
#include
main()
{charc;
floatx,y;
printf("请输入存款本金x=");
scanf("%f",&x);
do
{getchar();/*接受回车符*/
clrscr();/*清屏*/
printf("\n存款期限:
\n");
printf("a------三个月(年利率1.71%%)\n");
printf("b------半年(年利率1.98%%)\n");
printf("c------一年(年利率2.52%%)\n");
printf("d------两年(年利率2.79%%)\n");
printf("e------三年(年利率3.33%%)\n");
printf("f------五年(年利率3.60%%)\n");
printf("请输入存款期限(a,b,c,d,e,f):
");
scanf("%c",&c);
}
while(!
(c>='a'&&c<='f'));
printf("%g元存期",x);
x=x/100;
switch(c)
{case'a':
y=x*(100+1.71/4);printf("三个月");break;
case'b':
y=x*(100+1.98/2);printf("半年");break;
case'c':
y=x*(100+2.25);printf("一年");break;
case'd':
y=x*(100+2.79*2);printf("两年");break;
case'e':
y=x*(100+3.33*3);printf("三年");break;
case'f':
y=x*(100+3.6*5);printf("五年");break;
}
printf("到期的本息合计为%f元\n",y);
}
5.设函数
(1)用条件表达式求函数值y。
(2)用if语句编程,输入x,输出y,并给出你所使用的测试用例。
解
(1)用条件表达式求函数值y。
#include
main()
{floatx;
inty;
printf("请输入x=");
scanf("%f",&x);
y=(x>=0)?
(x>0?
1:
0):
-1;
printf("y=%d\n",y);
}
解
(2)用if语句编程,输入x,输出y。
#include
main()
{floatx;
inty;
printf("请输入x=");
scanf("%f",&x);
if(x>=0)
if(x>0)y=1;
elsey=0;
elsey=-1;
printf("y=%d\n",y);
}
6.编写程序:
键盘上输入一个不多于5位的正整数,要求:
①求它是几位数②逆序打印出各位数字。
如原数为123,应输出321。
(此题为选做)
#include
#include
main()
{longn,m,p,w1=0,w2=0,w3=0,w4=0,w5=0,t=0;
printf("请输入一个非负整数(n<100000)n=");
scanf("%ld",&n);
if((n/10000)!
=0)m=5;
elseif(n/1000!
=0)m=4;
elseif(n/100!
=0)m=3;
elseif(n/10!
=0)m=2;
elsem=1;
switch(m)
{case5:
p=n/10000;w1=p;n-=p*10000;t+=w1*pow(10,m-5);
case4:
p=n/1000;w2=p;n-=p*1000;t+=w2*pow(10,m-4);
case3:
p=n/100;w3=p;n-=p*100;t+=w3*pow(10,m-3);
case2:
p=n/10;w4=p;n-=p*10;t+=w4*pow(10,m-2);
case1:
p=n;w5=p;t+=w5*pow(10,m-1);
}
printf("输入的是%ld位数,逆序数为%ld\n",m,t);
}
实验六
1、编程:
输出200以内所有能被7整除的数。
#include
main()
{inti;
for(i=0;i<=200;i+=7)
printf(“%4d”,i);
}
2、从键盘输入n个数(n<10),找出其中最小值,请编写相应程序。
#include
main()
{intn,i,a,min;
printf(“n=”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{scanf(“%d”,&a);
if(i==1)min=a;
if(min>a)min=a;
}
printf(“min=%d”,min);
}
3、键盘输入正整数m和n(m#include
main()
{intm,n,i,x1=0,x2=0;
printf(“inputm,n(m”);
scanf(“%d,%d”,&m,&n);
for(i=m;i<=n;i++)
if(i%2==1)x1+=i;
elsex2+=i;
printf(“x1(奇数之和)=%d,x2(偶数之和)=%d\n”,x1,x2);
}
4.编程,计算函数y的值。
要求键盘接收自变量x的值,若x的值不为零,则计算函数y的值并输出,再从键盘接收下一个x的值,……,直到x的值为零,则显示“ThankYou,Bye!
”,尔后结束程序,已知函数y与自变量x的关系为:
#include
main()
{floatx=1,y;
do
{if(x<0)printf("输入错误(x<0)!
请重新输入\n");
printf("请输入x=");
scanf("%f",&x);
if(x>0&&x<100)y=3*x+10;
if(x>=100)y=x*x*x-20;
if(x>0)printf("y(%g)=%g\n",x,y);
}
while(x!
=0);
printf("ThankYou,Bye!
\n");
}
5.编写程序:
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include
main()
{inti;
floatf1=1,f2=2,f,s=0;
for(i=1;i<=20;i++)
{f=f2/f1;s+=f;
f=f1;f1=f2;f2=f+f2;
}
printf("s(20)=%g\n",s);
}
6.我国现有人口13亿,设年增长率为1%,编写程序,计算多少年后增加到20亿。
#include
main()
{floatp=13;
intn=0;
do
{p=p*1.01;
n++;
}
while(p<20.);
printf("%d年后人口增加到20亿!
\n",n);
}
7.求解爱因斯坦数学题。
有一条长阶梯,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7阶,最后才正好一阶不剩。
请问,这条阶梯共有多少阶?
#include
main()
{intn=7;
do
{if(n%2!
=1){n++;continue;}
if(n%3!
=2){n++;continue;}
if(n%5!
=4){n++;continue;}
if(n%6!
=5){n++;continue;}
if(n%7!
=0){n++;continue;}
break;
}
while
(1);
printf("这条阶梯共有%d阶!
\n",n);
}
(说明:
该题应有多解:
119,329,……)
8.每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果个数达到不超过100的最大值。
编写程序求每天平均花多少钱?
(此题为选做)
#include
main()
{floats=0;
intn=1,p=0,d=0;
do
{d++;/*第d天*/
n=n*2;/*买n个苹果*/
p=p+n;/*共p个苹果*/
}
while(p+n*2<=100);
s=p*0.8/d;
printf("每天平均花%g元钱!
\n",s);
}
9.编写程序,求一个整数任意次方的最后三位数。
即求xy的最后三位数,要求x,y从键盘输入。
(注意xy的结果是否会溢出)。
(此题为选做)
#include
#include
main()
{doublex,y,m;
intm3;
printf("请输入x,y=");
scanf("%lf,%lf",&x,&y);
m=pow(x,y);
m3=(int)m%1000;
printf("x的y次方为%g,其最后三位数是%0.3d\n",m,m3);
}
实验七
1.编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。
#include
main()
{inta,b,s;
floatv;
for(a=1;a<=6;a++)
{v=0;
for(b=1;b<=5;b++)
{printf("请输入第%d名学生的第%d门成绩:
",a,b);
scanf("%d",&s);
v=v+s;
}
printf("第%d名学生的平均成绩为:
%g\n",a,v/5.);
}
}
2、打印出所有的"水仙花数",所谓的"水仙花数"是指一个3位数,其各位数字的立方和等于该数本身。
例如,153是一个"水仙花数",因为有153=1*1*1+5*5*5+3*3*3。
解
(1)
#include
main()
{inta,b,c,n;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{n=100*a+10*b+c;
if(n==a*a*a+b*b*b+c*c*c)
printf(“%d\n”,n);
}
}
解
(2)
#include
main()
{inta,b,c,n;
for(n=100;n<=999;n++)
{a=n/100;
b=n%100/10;
c=n%10;
if(n==a*a*a+b*b*b+c*c*c)
printf(“%d\n”,n);
}
}
3、请分别用三种循环结构编程计算:
1!
+2!
+3!
+...+n!
,n的值由键盘输入。
解
(1)
#include
main()
{intn,i;
longp=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{p*=i;
sum+=p;
}
printf(“1!
+2!
+…+%d!
=%ld\n”,n,sum);
}
解
(2)
#include
main()
{intn,i=1;
longp=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
while(i<=n)
{p*=i;
sum+=p;
i++;
}
printf(“1!
+2!
+…+%d!
=%ld\n”,n,sum);
}
解(3)
#include
main()
{intn,i=1;
longp=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
do
{p*=i;
sum+=p;
i++;
}
while(i<=n);
printf(“1!
+2!
+…+%d!
=%ld\n”,n,sum);
}
4.用循环语句编写程序,其功能是计算:
s=1+12+123+1234+12345+123456+1234567
#include
main()
{longi,t=0,s=0;
for(i=1;i<=7;i++)
{t=10*t+i;
/*printf("t=%ld\n",t);*/
s=s+t;