C语言实验报告参考答案原.docx
《C语言实验报告参考答案原.docx》由会员分享,可在线阅读,更多相关《C语言实验报告参考答案原.docx(35页珍藏版)》请在冰点文库上搜索。
C语言实验报告参考答案原
C语言实验报告参考答案
实验一熟悉C语言程序开发环境及数据描述
四、程序清单
1.编写程序实现在屏幕上显示以下结果:
Thedressislong
Theshoesarebig
Thetrousersareblack
答案:
#include<>
main()
{
printf("Thedressislong\n");
printf("Theshoesarebig\n");
printf("Thetrousersareblack\n");
}
2.编写程序:
(1)a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。
(2)a=160,b=46,c=18,d=170,编写求(a+b)/(b-c)*(c-d)的程序。
答案:
(1)
#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);
}
(2)
#include<>
main()
{
inta,b,c,d;
floatx;
a=160;
b=46;
c=18;
d=170;
x=(a+b)/(b-c)*(c-d);
printf("(a+b)/(b-c)*(c-d)=%f\n",x);
}
3.设变量a的值为0,b的值为-10,编写程序:
当a>b时,将b赋给c;当a<=b时,将0赋给c。
(提示:
用条件运算符)
答案:
#include<>
main()
{
inta,b,c;
a=0;
b=-10;
c=(a>b)b:
a;
printf("c=%d\n",c);
}
五、调试和测试结果
1.编译、连接无错,运行后屏幕上显示以下结果:
Thedressislong
Theshoesarebig
Thetrousersareblack
2、
(1)编译、连接无错,运行后屏幕上显示以下结果:
a/b的商=7
a/c的商=3
a/b的余数=10
a/c的余数=15
(2)编译、连接无错,运行后屏幕上显示以下结果:
(a+b)/(b-c)*(c-d)=
3.编译、连接无错,运行后屏幕上显示以下结果:
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);
问题5把scanf("%c%c%d",&a,&b,&c);和printf("%c,%c,%d\n",a,b,c);
改成scanf("%c%*c%c%*c%d",&a,&b,&c);
printf("\'%c\',\'%c\',%d\n",a,b,c);
2
(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。
#include<>
intmain()
{
inta,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("%d\n",c);
printf("%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;
}
五、调试和测试结果
2
(1)输入:
1214
输出:
26
1a
2
(2)输入:
10
输出:
实验三选择结构程序设计
四、设计流程(算法描述)
(请写出上机内容2(3)题的算法描述)
主要是两两比较,然后得出最大的数
五、程序清单
(1)输入一个整数,若大于等于0,输出提示信息“ispositive”,否则输出“isnegative”。
#include<>
#include<>
main()
{
inta;
scanf("%d",&a);
if(a>=0)
printf("thenumberispositve\n");
else
printf("thenumberisnegetive\n");
return0;
}
(2)输入两个整数a和b,若a>=b时,求其积c并显示;若a
#include<>
main()
{
inta,b,c;
scanf("%d%d",&a,&b);
if(a>=b)
printf("c=%d\n",a*b);
else
printf("c=%d\n",a/b);
return0;
}
(3)输入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;
}
六、调试和测试结果
2
(1)输入:
2
输出:
thenumberispositve
输入:
0
输出:
thenumberispositve
输入:
-2
输出:
thenumberisnegetive
2
(2)输入:
32输出:
c=6
输入:
23输出:
c=0
2(3)输入:
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++)写程序:
计算sinx的近似值,精确到10-6。
其实
所以程序
#include<>
#include<>
main()
{
floatx,sinx,i,t;
printf("请输入一个x值(弧度值):
");
scanf("%f",&x);
sinx=0;t=x;i=1;
while(fabs(t)>=1e-6)
{sinx=sinx+t;
t=t*(-x*x/(2*i*(2*i+1)));
i++;
}
printf("sin(%.2f)=%.6f\n",x,sinx);
}
六、调试和测试结果
1:
结果:
thesumis:
5050
thesquaresumis:
338350
2:
结果:
628496
3、输入0,输出sin=
输入,输出sin=
输入,输出sin=
实验五函数和编译预处理
四、设计流程(算法描述)
(请写出上机内容2的算法描述)
求素数的方法就是:
给定一个大于3的数x,从2到X的平方根遍历,只要有数可以被x整除,就不是素数
五、程序清单
1.编写自定义函数longpower(intm,intn),计算
的值。
利用此函数编程序实现:
从键盘输入两个整数m和n,计算出
的值。
#include<>
longpower(intm,intn)编写自定义函数count(intx),计算x的因子个数。
利用此函数找出并输出1~1000中有奇数个不同因子的整数。
#include<>
#include<>
intcount(intx)
{
intsum,i;
sum=0;入:
23
输出:
s=8
2.输出:
共有668个素数
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);程实现:
输入10个学生5门课的成绩并完成如下功能
(1)求每个学生的平均分;
(2)求每门课程的平均分。
#include<>
#include<>
#definenum10
typedefstructstudent
{
charname[20];
floatmath;
floatenglis;
floatcomputer;
floatChinese;
floathistory;
}STUDENT;
intmain(void)
{
STUDENTstu[num];
inti;
floatscore,sum,average;
chars[10];
floatscoreMath,scoreEng,scoreCom,scoreChi,scoreHis;
for(i=0;i{
printf("Name:
");
gets(stu[i].name);
printf("mathscore:
");
scanf("%f",&score);
stu[i].math=score;
printf("englisscore:
");
scanf("%f",&score);
stu[i].englis=score;
printf("computerscore:
");
scanf("%f",&score);
stu[i]puter=score;
printf("Chinesescore:
");
scanf("%f",&score);
stu[i].Chinese=score;
printf("historyscore:
");
scanf("%f",&score);
stu[i].history=score;
gets(s);ame);才能起到作用
}
ath;
sum+=stu[i].englis;
sum+=stu[i]puter;
sum+=stu[i].Chinese;
sum+=stu[i].history;
average=sum/5;
printf("%s'saveragescoreis:
%f\n",stu[i].name,average);
}
ath;
scoreEng+=stu[i].englis;
scoreCom+=stu[i]puter;
scoreChi+=stu[i].Chinese;
scoreHis+=stu[i].history;
}
printf("math'saveragescoreis:
%f\n",scoreMath/num);
printf("englis'saveragescoreis:
%f\n",scoreEng/num);
printf("computer'saveragescoreis:
%f\n",scoreCom/num);
printf("Chinese'saveragescoreis:
%f\n",scoreChi/num);
printf("history'saveragescoreis:
%f\n",scoreHis/num);
return0;
}
实验七数组和函数
四、程序清单
(请写出上机内容2中函数的源代码)
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)
(1)1
(2)i(3)a[p+i]
实验八指针
(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)
设计流程(算法描述)
(请写出上机内容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;
}
实验十结构体
四、程序清单
(请写出上机内容2中的函数的源代码)
voidfun(structSTREC*a)
{inti;
a->ave=0;
for(i=0;ia->ave+=a->s[i];
a->ave/=N;
}
五、调试和测试结果(请写出上机内容1的填空结果)
上机内容1的填空结果
(1)->sno
(2)->name(3)&t
实验十一共用体与枚举文件
四、程序清单
(请写出上机内容2中的程序源代码)
#include<>
#include<>
#include<>
intmain(void)
{
inti,sum;
FILE*fd;
chars[10],*p,ch;
if((fd=fopen("D:
\\","wt"))==NULL)
{
printf("creatthefilefailed\n");
exit(0);
}
else
{
for(i=1;i<100;i++)
{
if((i%3==0)&&(i%5==0))
{
printf("%d,",i);
itoa(i,s,10);Initlist",
"2.Enterlist",
"3.Deletearecordfromlist",
"4.printlist",
"5.Searchrecordbyname",
"6.SearchrecordbyNumber",
"7.Savethefile",
"8.Loadthefile",
"9.insertrecordtolist",
"10.sortbytotalscores",
"11.sortbymathsscores",
"12.sortbyprogramscores",
"13.indexonnumber",
"0.Quit"};
chars[3];
intc,i;
gotoxy(1,25);
printf("pressanykeycontinue......\n");
getch();
clrscr();
gotoxy(1,1);
textcolor(YELLOW);
textbackground(BLACK);
gotoxy(10,2);
putch(0xc9);
for(i=1;i<44;i++)
putch(0xcd);
putch(0xbb);
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba);
gotoxy(54,i);putch(0xba);
}
gotoxy(10,20);putch(0xc8);
for(i=1;i<44;i++)
putch(0xcd);
putch(0xbc);
window(11,3,53,19);
clrscr();
for(i=0;i<16;i++)
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK);
window(1,1,80,25);
gotoxy(10,21);
do{
printf("\nEnteryouchoice(0~13):
");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>14);
returnc;
}
STUDENT*init()
{
returnNULL;
}
STUDENT*create()
{
inti;ints;
STUDENT*h=NULL,*info;
for(;;)
{
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
info)
{
printf("\noutofmemory");
returnNULL;
}
inputs("enterno:
(10digitals.enter0toexit)",info->no,11);
if(info->no[0]=='0')break;/*whenthefirstnumberis0,break*/
inputs("entername:
(<15letters)",info->name,15);
printf("pleaseinputscores\n");
s=0;/*sissum,beginswith0*/
for(i=0;i{
do{
if(i==0)
printf("PleaseinputMathsscores:
");
if(i==1)
printf("PleaseinputProgramscores:
");
scanf("%d",&info->score[i]);/*socre[0]storesmathsscores,socore[1]storesprogramscores*/
if(info->score[i]>100||info->score[i]<0)
printf("baddata,repeatinput\n");