C语言课后答案.docx
《C语言课后答案.docx》由会员分享,可在线阅读,更多相关《C语言课后答案.docx(28页珍藏版)》请在冰豆网上搜索。
C语言课后答案
C语言实验报告
课程________________实验名称_______________第页共页
系别_________________________________实验日期年月日
专业班级________________________________实验报告日期年月日
姓名________________学号_____________报告退发
教师审批签字
一.实验目的
参见实验大纲
二.实验内容
(-)实验题目一:
设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
用scanf输入数据,输出结果,取2位小数。
1.要点分析:
根据数学公式用c语言编写程序
2.实验步骤
#definepi3.1415926535
#include
voidmain()
{floatl,s1,s2,v1,v2,r,h;
scanf("%f,%f",&r,&h);
l=2*pi*r;s1=pi*r*r;v2=pi*r*r*h;
s2=4*pi*r*r;v1=4.0/3*pi*r*r*r;
printf("l=%.2f,s1=%.2f,s2=%.2f,v1=%.2f,v2=%.2f",l,s1,s2,v1,v2);}
3.实验结果
(二)实验题目二:
输入一个华氏温度,要求输出摄氏温度。
公式为c=5/9*(F-32)
1.要点分析:
2.实验步骤:
#include
voidmain()
{floatc,F;
scanf("%f",&F);
c=5.0/9*(F-32);
printf("%.2f",c);}
3.实验结果:
任意输入一个符合实际的数例如85,可得如下结果
(三)实验题目三:
有3个整数啊,a,b,c,由键盘输入,输出其中最大的数。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inta,b,c,t;
scanf("%d,%d,%d",&a,&b,&c);
if(a
{t=a;a=b;b=t;}
if(a{t=a;a=c;c=t;}
printf("%d",a);}
3.实验结果:
随便输入三个整数,例如4,32,8.得出如下结果
(四)实验题目四:
有一个函数:
当x<1时y=x;当1<=x<10时,y=2x-1;当x>=10时,y=3x-11.写一段程序,输入x,输出y的值。
1.要点分析:
2.实验步骤:
#include
voidmain()
{floatx,y;
scanf("%f",&x);
if(x<1)
y=x;
else
if(x>=10)y=3*x-11;
elsey=2*x-1;
printf("%f",y);}
3.实验结果:
任意输入一个值例如25,可得如下结果
(一)实验题目一:
要求按照百分制分数段输出考试成绩的等级,用switch语言编写程序。
1.要点分析:
用switch语言编写程序
2.实验步骤:
#include
voidmain()
{inta;floatc;
scanf("%f",&c);
a=int(c/10);
if(a<=5)a=5;
switch(a)
{case10:
case9:
printf("A\n");break;
case8:
printf("B\n");break;
case7:
printf("C\n");break;
case6:
printf("D\n");break;
case5:
printf("E\n");break;}}
3.实验结果:
输入任意一个百分制分数例如86.5,可输出如下结果
(二)实验题目二:
第5.7题,求应发奖金总数?
1.要点分析:
用switch语言编写程序
2.实验步骤:
#include
voidmain()
{floatsum;inta;
scanf("%f",&sum);
a=int(sum/100000);
if(int(sum/100000)==0)a=int(sum/100000)-1;
if(a>=10)a=10;
switch(a)
{case0:
printf("奖金总数为:
%f\n",sum*0.1);break;
case1:
printf("奖金总数为:
%f\n",10000+sum*0.075-100000*0.075);break;
case2:
case3:
printf("奖金总数为:
%f\n",17500+sum*0.05-200000*0.05);break;
case4:
case5:
printf("奖金总数为:
%f\n",27500+sum*0.03-400000*0.03);break;
case6:
case7:
case8:
case9:
printf("奖金总数为:
%f\n",33500+sum*0.015-600000*0.015);break;
case10:
printf(奖金总数为:
%f\n",39500+sum*0.01-1000000*0.01);break;}}
3.实验结果:
任意输入一个数例如657903.98可得如下结果
(三)实验题目三:
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.要点分析:
根据for循环语言编写程序
2.实验步骤:
#include
voidmain()
{intm,n,i,j,k,a;
scanf("%d,%d",&m,&n);
if(melsek=n;
for(i=1;iif(m%i==0&&n%i==0)a=i;
printf("最大公约数:
%d",a);
for(j=n;j>=n;j++)
if(j%m==0&&j%n==0)break;
printf("最小公倍数:
%d\n",j);}
3.实验结果:
任意输入两个正整数例如12和64,可得如下结果
(四)实验题目四:
输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
)1.要点分析:
2.实验步骤:
#include
voidmain()
{chara;intyw=0,kg=0,sz=0,qt=0;
while((a=getchar())!
='\n')
{if(a>='a'&&a<='z'||a>='A'&&a<='Z')yw++;
elseif(a=='')kg++;
elseif(a>='0'&&a<='9')sz++;
elseqt++;}
printf("英文字母数:
%d\n空格数:
%d\n数字数:
%d\n其他数:
%d\n",yw,kg,sz,qt);}
3.实验结果:
任意输入一串字符
(五)实验题目五:
求1!
+2!
+3!
+4!
+···+20!
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti;floatk=1,a=0;
for(i=1;i<=20;i++)
k=k*i;a=a+k;
printf("%e\n",a);}
3.实验结果:
(六)实验题目六:
求1+2+3+···+100+1*1+2*2+3*3+···+50*50+1/1+1/2+1/3+···+1/101.要点分析:
2.实验步骤:
#include
voidmain()
{inti,j,h;floats3,s0,s1,s2;
for(i=1,s1=0;i<=100;i++)
s1=s1+i;
for(j=1,s2=0;j<=50;j++)
s2=s2+j*j;
for(h=1,s3=0;h<=10;h++)
s3=s3+1.0/h;
s0=s1+s2+s3;
printf("%.2f\n",s0);}
3.实验结果:
(七)实验题目七:
输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如153
1.要点分析:
2.实验步骤:
#include
voidmain()
{intmax,g,s,b;
for(max=100;max<=999;max++)
{b=max/100;s=(max/10)%10;
g=max%10;
if(max==b*b*b+s*s*s+g*g*g)
printf("%d\n",max);}}
3.实验结果:
(八)实验题目八:
有一分数序列2/1,3/2,5/3,8/5,13/8,21/13···求出这个数列的前20项之和。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti;floata=1,b=2,c=0,t;
for(i=1;i<21;i++)
{t=a,a=b;b=t+b,c=c+b/a;}
printf("%f\n",c);}
3.实验结果:
(九)实验题目九:
一个球从100m高度自由下落,每次落地后反跳回原高度的一半,再落下,在反弹。
求它第10次落地后,共经过多少米?
第十次反弹多高?
1.要点分析:
2.实验步骤:
#include
voidmain()
{floath=100,p=0;intt;
for(t=1;t<=10;t++)
{p=p+h+h/2;h=h/2;}
printf("经历十次共经过%f米",p);
printf("第十次反弹%f米\n",h);}
3.实验结果:
实验内容
(一)实验题目一:
输入一行字符,统计其中‘a’的个数,并将‘a’替换成‘e’。
1.要点分析:
2.实验步骤:
#include
voidmain()
{charstr[100];charstring[100];inti,j,num=0;
charm;
printf("输入一行字符:
");
gets(str);
for(i=0;(m=str[i])!
='\0';i++)
if(m=='a')num++;
printf("'a'的个数为%d个\n",num);
for(i=0;(m=str[i])!
='\0';i++)
if(m=='a')string[i]='e';
elsestring[i]=str[i];
printf("替换后字符:
%s\n",string);}
3.实验结果:
输入任意一行字符,可输出如下结果:
(二)实验题目二:
求一个3*3的整型矩阵对角线元素之和。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inta[3][3],sum=0,i,j;
printf("输入数字:
");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
sum=a[0][0]+a[1][1]+a[2][2];
printf("对角线元素之和为%d\n",sum);}
3.实验结果:
任意输入一组数据,可得如下结果
(三)实验题目三:
已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
1.要点分析:
根据for循环语言编写程序
2.实验步骤:
#include
voidmain()
{intm[7]={98,56,19,11,9,4,1};
ints,i,j;
for(i=0;i<8;i++)
printf("%3d",m[i]);
printf("\n");
scanf("%d",&s);
if(selse
{for(i=0;i<8;i++)
if(m[i]
{for(j=7;j>=i;j--)
m[j+1]=m[j];m[i]=s;break;}}
printf("插入后数组为:
");
for(i=0;i<9;i++)
printf("%3d",m[i]);
printf("\n");}
3.实验结果:
在一列数组中插入10得:
(四)实验题目四:
将一个数组中的值按逆序重新存放。
例如原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
)1.要点分析:
2.实验步骤:
#include
voidmain()
{inta[5];inti,j;
printf("输入一组数:
");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<3;i++)
{j=a[i];a[i]=a[4-i];a[4-i]=j;}
printf("转换后数为:
");
for(i=0;i<6;i++)
printf("%3d",a[i]);
printf("\n");}
3.实验结果:
任意输入一串字符
(五)实验题目五:
求1!
+2!
+3!
+4!
+···+20!
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti;floatk=1,a=0;
for(i=1;i<=20;i++)
k=k*i;a=a+k;
printf("%e\n",a);}
3.实验结果:
三.实验目的
参见实验大纲
实验内容
(一)实验题目一:
求1!
+2!
+3!
+···+20!
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti;longintsum=0;
intjc(inta);
for(i=1;i<=20;i++)
{sum=jc(i)+sum;}
printf("sum=%ld\n",sum);}
intjc(inta)
{inti,b=1;
for(i=1;i<=a;i++)
b=b*i;
return(b);}
3.实验结果:
(二)实验题目二:
求5^1+5^2+5^3+···+5^10
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti,sum=0;
intjh(inta);
for(i=1;i<=10;i++)
sum=jh(i)+sum;
printf("sum=%ld\n",sum);}
intjh(inta)
{inti,b=1;
for(i=1;i<=a;i++)
b=b*5;
returnb;}
3.实验结果:
(三)实验题目三:
写两个函数,输入两个正整数a和b,求其最大公约数和最小公倍数,并输出结果。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inta,b,c,d;
intzd(intx,inty);
intzx(intx,inty);
printf("输入两个整数:
");
scanf("%d,%d",&a,&b);
c=zd(a,b);d=zx(a,b);
printf("最大公约数为:
%d\n",c);
printf("最小公倍数为:
%d\n",d);}
intzd(intx,inty)
{intk,i;
for(i=1;i<=x;i++)
{if(x%i==0&&y%i==0)k=i;}
return(k);}
intzx(intx,inty)
{intp,i;
for(i=x*y;i>=x;i--)
{if(i%x==0&&i%y==0)p=i;}
return(p);}
3.实验结果:
任意输入两个正整数例如12和8,可得如下结果
(四)实验题目四:
求方程a*x[2]+b*x+c=0的根,用3个函数分别求当b[2]-4*a*c大于0,等于0和小于0时的根并输出结果。
从主函数输入a,b,c.
1.要点分析:
2.实验步骤:
#include
#include
floatx1,x2,t;
voidmain()
{voidm(float,float);
voidn(float,float);
floata,b,c;
printf("输入a,b,c的值分别为:
");
scanf("%f,%f,%f",&a,&b,&c);
t=b*b-4*a*c;
printf("方程的根为:
");
if(t>0)
{m(a,b);}
elseif(t==0)
{n(a,b);}
elseprintf("方程无实数根\n");
printf("\n");}
voidm(floatx,floaty)
{x1=(-y+sqrt(t))/(2*x);
x2=(-y-sqrt(t))/(2*x);
printf("x1=%fx2=%f",x1,x2);}
voidn(floatx,floaty)
{x1=x2=(-y)/(2*x);
printf("x1=%fx2=%f",x1,x2);}
3.实验结果:
(五)实验题目五:
写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。
1.要点分析:
2.实验步骤:
intshusu(intx)
{inti,j=1;
for(i=2,j=1;iif(x%i==0)j=0;
return(j);}
#include
voidmain()
{inta;
printf("输入任意一个整数:
");
scanf("%d",&a);
if(shusu(a))
printf("%d是个素数\n",a);
elseprintf("%d不是个素数\n",a);}
4.实验结果:
(六)实验题目六:
用递归调用的方法求fibonacci数列的第20个数。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inti,j;
inths(intn);
scanf("%d",&i);
j=hs(i);
printf("第%d个数为:
%d\n",i,j);}
inths(intn)
{intm;
if(n==1||n==2)return1;
else
{m=hs(n-1)+hs(n-2);returnm;}}
3.实验结果:
(七)实验题目七:
写一个函数,使给定的一个3*3的二维整型数组转置。
1.要点分析:
2.实验步骤:
#include
voidmain()
{inta[3][3],i,j;
voiddz(intx[3][3]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n");
dz(a);}
voiddz(intx[3][3])
{intp,q,m;
for(p=0;p<3;p++)
for(q=0;q<3;q++)
{m=x[p][q];x[p][q]=x[q][p];x[q][p]=m;}
for(p=0;p<3;p++)
{for(q=0;q<3;q++)
printf("%d",x[q][p]);
printf("\n");}}
3.实验结果:
(八)实验题目八:
编写一个函数,由实参转来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数,在主函数中输入字符串及输出上述的结果。
1.要点分析:
2.实验步骤:
#include
voidmain()
{chara[100];intzm,sz,kg,qt;
voidzfc(chara[]);
gets(a);
zfc(a);
}
voidzfc(charm[])
{intzm=0,sz=0,kg=0,qt=0,i;
for(i=0;m[i]!
='\0';i++)
{if((m[i]>='a'&&m[i]<='z')||(m[i]>='A'&&m[i]<='Z'))zm++;
elseif(m[i]>='0'&&m[i]<='9')sz++;
elseif(m[i]=='')kg++;
elseqt++;}
printf("字母个数为%d个数字个数为%d个空格个数为%d个其他个数为%d个\n",zm,sz,kg,qt);}
3.实验结果:
(九)实验题目九:
8.13用递归方法求n阶勒让德多项式的值。
1.要点分析:
2.实验步骤:
#include
voidmain()
{intn,x;
floata(intn,intx);
scanf("%d,%d",&n,&x);
printf("%d\n",a(n,x));}
floata(intn,intx)
{floatk;
if(n==0)return
(1);
elseif(n==1)return(x);
elsek=((2*n-1)*x-a(n-1,x)-(n-1)*a(n-2,x))/n;
return(k);}
3.实验结果:
实验内容
(一)实验题目一:
输入3个字符串,按由小到大的顺序输出。
1.要点分析:
2.实验步骤:
#include
#include
voidmain()
{charm[3][100];
char*p1,*p2,*p3,*n;
inti;
for(i=0;i<=2;i++)
gets(m[i]);
p1=m[0];p2=m[1];p3=m[2];
if(strcmp(p1,p2)>0)
{n=p1;p1=p2;p2=n;}
if(strcmp(p1,p3)>0)
{n=p1;p1=p3;p3=n;}
if(strcmp(p2,p3)>0)
{n=p2;p2=p3;p3=n;}
printf("从小到大输出为:
\n");
printf("%s\n",p1);
printf("%s\n",p2);
printf("%s\n",p3);}
3.实验结果:
(二)实验题目二:
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:
1输入10个数;2进行处理;3输出10个数。
1.要点分析:
2.实验步骤:
#include
voidmain()
{int*sr(int*p);
int*yx(int*p);