C语言实验报告参考答案.docx
《C语言实验报告参考答案.docx》由会员分享,可在线阅读,更多相关《C语言实验报告参考答案.docx(45页珍藏版)》请在冰点文库上搜索。
C语言实验报告参考答案
长沙理工大学2010C语言实验报告参考答案
实验一熟悉C语言程序开发环境及数据描述
四、程序清单
1.编写程序实现在屏幕上显示以下结果:
Thedressislong
Theshoesarebig
Thetrousersareblack
答案:
#include
main()
{
printf("Thedressislong\n");
printf("Theshoesarebig\n");
printf("Thetrousersareblack\n");
}
2.改错题(将正确程序写在指定位置)
正确的程序为:
#include
main()
{
printf("商品名称 价格\n");
printf("TCL电视机 ¥7600\n");
printf("美的空调 ¥2000\n");
printf("SunRose键盘 ¥50.5\n");
}
2.编写程序:
a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。
答案:
#include
main()
{
inta,b,c,x,y;
a=150;
b=20;
c=45;
x=a/b;
y=a/c;
printf("a/b的商=%d\n",x);
printf("a/c的商=%d\n",y);
x=a%b;
y=a%c;
printf("a/b的余数=%d\n",x);
printf("a/c的余数=%d\n",y);
}
4.设变量a的值为0,b的值为-10,编写程序:
当a>b时,将b赋给c;当a<=b时,将a赋给c。
(提示:
用条件运算符)
答案:
#include
main()
{
inta,b,c;
a=0;
b=-10;
c=(a>b)?
b:
a;
printf("c=%d\n",c);
}
五、调试和测试结果
1.编译、连接无错,运行后屏幕上显示以下结果:
Thedressislong
Theshoesarebig
Thetrousersareblack
3、编译、连接无错,运行后屏幕上显示以下结果:
a/b的商=7
a/c的商=3
a/b的余数=10
a/c的余数=15
4.编译、连接无错,运行后屏幕上显示以下结果:
c=-10
实验二顺序结构程序设计
四、程序清单
1.键盘输入与屏幕输出练习
问题1D。
问题2改printf("%c,%c,%d\n",a,b,c);这条语句
改成:
printf("%c%c%d\n",a,b,c);
问题3改scanf("%c%c%d",&a,&b,&c);这条语句
改为:
scanf("%c,%c,%d",&a,&b,&c);
问题4改printf("%c,%c,%d\n",a,b,c);这条语句
改成:
printf("\’%c\’\’%c\’%d\n",a,b,c);
2
(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。
#include
intmain()
{
inta,b,c;
printf("Enteraandb:
");
scanf("%o%o",&a,&b);
c=a+b;
printf("d:
%d\n",c);
printf("x:
%x\n",c);
return0;
}
2
(2)编写程序:
从键盘输入两个实数a和x,按公式计算并输出y的值:
#include
#include
intmain()
{
floata,x,y;
scanf("%f%f",&a,&x);
y=pow(a,5)+sin(a*x)+exp(a*x)+log(a+x);
printf("y=%f\n",y);
return0;
}
3.改错题
正确的程序为:
#include
main()
{
inta,b,c,s;
scanf("%d%d%d",&a,&b,&c);
s=a+b+c;
printf("%d=%d+%d+%d\n",s,a,b,c);/*输出s=a+b+c*/
printf("%d+%d+%d=%d\n",a,b,c,s);/*输出a+b+c=s*/
}
五、调试和测试结果
2
(1)输入:
1214
输出:
26
1a
2
(2)输入:
10
输出:
2.000000
实验三选择结构程序设计
四、设计流程(算法描述)
(请写出上机内容2
(2)题的算法描述)
主要是两两比较,然后得出最大的数
五、程序清单
2
(1)输入整数x和a,计算并输出下列分段函数f(x)的值(保留2位小数),请调用log函数求自然对数,调用fabs函数求绝对值。
程序为:
#include
#include
main()
{
intx,a;
doubley;
printf("Enteraandx:
");
scanf("%d%d",&a,&x);
if(fabs(x)!
=a)
y=log(fabs((a+x)/(a-x)))/(2*a);
else
y=0;
printf("a=%d,f(%d)=%.2f\n",a,x,y);
}
(2)输入a、b、c三个整数,输出最大数。
#include
main()
{
inta,b,c,x;
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
x=a;
else
x=b;
if(xx=c;
printf("themaxnumberis:
%d\n",x);
return0;
}
3.改错题
正确程序为:
#include
main()
{
doublen;
printf("Entern:
");
scanf("%lf",&n);
if(n<0)
printf("nislessthan0\n");
elseif(n==0)
printf("nisequalto0\n");
else
printf("nisgreater0\n");
}
六、调试和测试结果
2
(1)Enteraandx:
56
a=5,f(6)=0.24
Enteraandx:
55
a=5,f(5)=0.00
2
(2)输入:
321输出:
themaxnumberis:
3
输入:
231输出:
themaxnumberis:
3
输入:
123输出:
themaxnumberis:
3
实验四循环结构程序设计
四、设计流程(算法描述)
(请写出上机内容2的算法描述)
首先求出每一个给定数的所有因子和,然后从2到5000循环,那一个数x与因子之和相等,就是完数。
五、程序清单
1.编写程序:
求1+2+3+…+100和12+22+33+…+1002。
#include
#include
intmain()
{
inti,j,sum;
sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("thesumis:
%d\n",sum);
sum=0;
for(i=1;i<=100;i++)
{
j=pow(i,2);
sum+=j;
}
printf("thesquaresumis:
%d\n",sum);
return0;
}
2.一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出2~5000中的所有完数。
#include
#include
main()
{
inti,j,sum=0;
for(i=2;i<=5000;i++)//遍历从2到5000的所有数
{
sum=0;
for(j=1;j<=i/2;j++)//找出给定整数X的所有因子和
{
if(i%j==0)
sum+=j;
}
if(i==sum)//sum为因子和,如果和i相等,则输出
printf("%d",i);
}
return0;
}
3.改错题
正确的程序为:
#include
main()
{
intn=1;
intfind=0;
while(!
find)
{
if(n%5==1&&n%6==5&&n%7==4&&n%11==10)
{
printf("n=%d\n",n);
find=1;
}
n++;
}
}
六、调试和测试结果
1:
结果:
thesumis:
5050
thesquaresumis:
338350
2:
结果:
628496
实验五函数和预处理命令
四、设计流程(算法描述)
(请写出上机内容1的算法描述)
利用循环将m乘n次
五、程序清单
1.编写自定义函数longpower(intm,intn),计算
的值。
利用此函数编程序实现:
从键盘输入两个整数m和n,计算出
的值。
#include
longpower(intm,intn)//要返回的是long型
{
inti;
longs;//因为是要返回的数,所以这里也定义为long型
s=1;
for(i=1;i<=n;i++)
{
s*=m;
}
returns;
}
intmain(void)
{
intm,n;
scanf("%d%d",&m,&n);
printf("s=%ld\n",power(m,n));
return0;
}
2、写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
1.源程序如下:
intzdgys(intn1,intn2)
{inty,i;
for(i=n2;i<=1;i--)
if(n1%i==0&&n2%i==0)
{y=i;break;}
returny;
}
intzxgbs(intn1,intn2)
{inty,i;
for(i=n1;i<=n1*n2;i++)
if(i%n1==0&&i%n2==0)
{y=i;break;}
returny;
}
main()
{intn1,n2,t;
scanf("n1=%dn2=%d",&n1,&n2);
if(n1{t=n1;n1=n2;n2=t;}
printf("zdgys=%dzxgbs=%d",zdgys(n1,n2),zxgbs(n1,n2));
}
3、改错题
正确程序如下:
#include
intfact(intn);
intmulti(intn);
main()
{inti;
doublesum,item,eps;
eps=1E-6;
sum=1;
item=1;
for(i=1;item>=eps;i++)
{item=fact(i)/multi(2*i+1);
sum=sum+item;
}
printf(“PI=%0.5lf\n”,sum*2);
return0;
}
intfact(intn)
{inti;
intres=1;
for(i=0;i<=n;i++)
res=res*i;
returnres;
}
intmulti(intn)
{inti;
intres=1;
for(i=3;i<=n;i=i+2)
res=res*i;
returnres;
}
六、调试和测试结果
1、输入:
23
输出:
s=8
2、输入:
n1=24n2=16
输出:
zdgys=8zxgbs=48
2.
3、输出结果为:
实验六数组
四、设计流程(算法描述)
(请写出上机内容1的算法描述)
设置两个变量分别指示头和尾。
第一个和最后一个元素值互换,然后头和尾变量向里移动,最终到两变量相遇为止。
五、程序清单
1.编写程序:
从键盘输入一串整数保存到数组中,调用函数antitone()将数组反序输出。
自定义函数voidantitone(inta[],intn)实现将数组中的n个数据按逆序存放。
voidantitone(inta[],intn)
{
inti,j;
intk;
i=0;
j=n-1;
while(i{
k=a[i];
a[i]=a[j];
a[j]=k;
i+=1;
j-=1;
}
}
2.已知某数列的前两项为2和3,其后每一项为其前两项之积。
编程实现:
从键盘输入一个整数x,判断并输出x最接近数列的第几项?
#include
#include
voidMad(inta[],intn)
{
inti;
a[0]=2;
a[1]=3;
for(i=2;i{
a[i]=a[i-1]*a[i-2];
}
}
intmain(void)
{
inta[100],x,k1,k2;
inti;
Mad(a,100);//产生序列
printf("inputx:
");
scanf("%d",&x);
i=0;
for(;x>a[i];i++);
k1=abs(x-a[i-1]);
k2=abs(x-a[i]);
if(k1>k2)
printf("x最接近第%d项\n",i+1);
else
printf("x最接近第%d项\n",i);
return0;
}
3、源程序如下:
#include
main()
{
charc[15];
inti,word=0,num=0,space=0;
for(i=0;i<=14;i++)
scanf("%c",&c[i]);
for(i=0;i<=14;i++)
{if(c[i]=='')space++;
if(c[i]>='0'&&c[i]<='9')num++;
if(c[i]>'a'&&c[i]<'z')word++;
}
printf("字符:
%d数字:
%d空格:
%d\n",word,num,space);
}
六、调试和测试结果
1、输入:
12345
输出:
54321
2、输入:
110
输出:
x最接近第6项
3、输入:
sd234kj64jkmjk
输出:
字符:
9数字:
5空格:
1
实验七数组和函数综合程序设计
四、程序清单
(请写出上机内容2、3中源程序)
2、原程序求得的是下三角形,经改进调试之后的程序为:
#include
#defineN6
main()
{
inti,j,sum=0;
inta[N][N]={0};
printf("input5×5data:
\n");
for(i=1;i{
printf("Inputthe%dlinedata:
\n",i);
for(j=1;jscanf("%d",&a[i][j]);
}
for(i=1;i{
for(j=1;jprintf("%5d",a[i][j]);
printf("\n");
}
for(i=1;ifor(j=N-1;j>=i;j--)
sum=sum+a[i][j];
printf("sum=%d\n",sum);
}
3、
voidfun(inttt[M][N],intpp[N])
{inti,j,max;
for(j=0;j{max=tt[0][j];
for(i=1;imax)max=tt[i][j];
pp[j]=max;
}
}
五、调试和测试结果
(写出上机内容1中填空的内容)
1、
(1)sum=0
(2)t[i][i](3)1
实验八指针
四、程序清单
(请写出上机内容2中的函数)
求出每个位上的数字,然后放在千位上的数字乘以1000,放在百位上的数字乘以100,放在10位上的数字乘以10,然后相加。
voidfun(inta,intb,long*c)
{
inta10,a1,b10,b1;
a10=a/10;
a1=a%10;
b10=b/10;
b1=b%10;
*c=a10*1000+b1*100+a1*10+b10;
}
五、调试和测试结果(请写出上机内容1的输出结果)
1
(1)输出结果为:
8,7,7,8
(2)6
(3)
(1)x=10y=20
(2)x=20y=10
(4)【1】 int*p 【2】 &a[i] 【3】p[i]
输入:
123456输出:
123456
实验九指针、函数和数组综合程序设计
设计流程(算法描述)
(请写出上机内容2中的算法描述)
五、程序清单
1.已知一个整型数组a[5],其各元素值为4,6,8,10,12。
使用指针编程求数组元素之积。
#include
intmain(void)
{
inta[]={4,6,8,10,12},sum;
int*p;
sum=1;
for(p=a;p{
sum*=*p;
}
printf("%d\n",sum);
return0;
}
2.定义函数intf(char*x,chary)判断x所指的字符串中是否包含字符y,若是则函数返回1,否则返回1。
intf(char*x,chary)
{
char*p;
for(p=x;*p!
='\0';p++)
if(*p==y)
{
printf("%c\n",*p);
return1;
}
return0;
}
3.定义函数voidf(floatx,int*y,float*z)将x的整数部分存于y所指的存储单元,x的小数部分存于x所指的存储单元。
voidf(floatx,int*y,float*z)
{
*y=(int)x;
*z=x-*y;
}
六、调试和测试结果
测试结果正确
实验十结构体
四、程序清单
(请写出上机内容1的源程序和上机内容2中的函数)
1、上机内容1的源程序
#include
#include
#defineFORMAT"%0d\t%s\t%d\t%c\n"
structstudent
{
intnum;
charname[20];
intage;
charsex;
};
main()
{voidinput(structstudentstu[]);
voidstat(structstudentstu[]);
structstudentstu[4];
inti;
input(stu);
for(i=0;i<4;i++)
{printf(FORMAT,stu[i].num,stu[i].name,stu[i].age,stu[i].sex);
}
stat(stu);
}
voidinput(structstudentstu[])
{inti;
for(i=0;i<4;i++)
{scanf("%d",&stu[i].num);
getchar();
scanf("%s",&stu[i].name);
getchar();
scanf("%d",&stu[i].age);
getchar();
scanf("%c",&stu[i].sex);
getchar();}
}
voidstat(structstudentstu[])
{inti,c=0,boy=0,girl=0;
for(i=0;i<4;i++)
{
if(stu[i].age<18)c+=1;
if(stu[i].sex=='m')boy++;
elsegirl++;
}
printf("boy\tgirl\tage<18\n");
printf("%d\t%d\t%d\n",boy,girl,c);
}
2、
voidfun(structSTREC*a)
{inti;
a->ave=0;
for(i=0;ia->ave+=a->s[i];
a->ave/=N;
}
3、改错题
正确的程序为:
将printf("%5d%-20s%2c%4d\n",*p.num,*p.name,p.sex,p.age);
改为:
printf("%5d%-20s%2c%4d\n",p->.num,p->name,p->sex,p->age);
实验十一共用体、位运算和文件
四、程序清单
(请写出上机内容2中的程序源代码)
(1)求100以内能同时被3和5整除的自然数,分别将它们输出到显示器屏幕和x.txt文件中。
(2)用程序读出上述x.txt文件中的数据,将它们输出到屏幕,并求它们的和。
#include
#include
#include
intmain(void)
{
inti,sum;
FILE*fd;
chars[10],*p,ch;
if((fd=fopen("D:
\\shi.txt","wt"))==NULL)
{
printf("creatthefilefailed\n");
exit(0);
}
else
{
for(i=1;i<100;i++)