C语言实验报告参考答案_第1页
C语言实验报告参考答案_第2页
C语言实验报告参考答案_第3页
C语言实验报告参考答案_第4页
C语言实验报告参考答案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、长沙理工大学2010C语言实验报告参考答案实验一 熟悉C语言程序开发环境及数据描述四、程序清单1编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black答案:#includemain()printf(The dress is longn);printf(The shoes are bign);printf(The trousers are blackn);2改错题(将正确程序写在指定位置)正确的程序为:#include main() printf(商品名称价格n); printf(TCL电视机¥76

2、00n); printf(美的空调 ¥2000n); printf(SunRose键盘¥50.5n);2编写程序: a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。答案:#includemain()int a,b,c,x,y;a=150;b=20;c=45;x=a/b;y=a/c;printf(a/b的商=%dn,x);printf(a/c的商=%dn,y);x=a%b;y=a%c;printf(a/b的余数=%dn,x);printf(a/c的余数=%dn,y);4. 设变量a的值为0,b的值为-10,编写程序:当ab时,将b赋给c;当a=b时,将a

3、赋给c。(提示:用条件运算符)答案:#includemain()int a,b,c;a=0;b=-10;c= (ab) ? b:a;printf(c = %dn,c);五、调试和测试结果1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black3、 编译、连接无错,运行后屏幕上显示以下结果:a/b的商=7a/c的商=3a/b的余数=10a/c的余数=154. 编译、连接无错,运行后屏幕上显示以下结果:c =-10实验二 顺序结构程序设计四、程序清单1键盘输入与屏幕输出练习问题1 D 。问题

4、2 改printf(%c,%c,%dn,a,b,c);这条语句 改成:printf(%c %c %dn,a,b,c);问题3 改scanf(%c%c%d,&a,&b,&c);这条语句 改为:scanf(%c,%c,%d,&a,&b,&c);问题4 改printf(%c,%c,%dn,a,b,c);这条语句 改成:printf(%c %c %dn,a,b,c);2(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。#include int main()int a,b,c; printf(Enter a and b:);scanf(%o%o,&a,&b);c = a +

5、b;printf(d:%dn,c);printf(x:%xn,c);return 0;2(2)编写程序:从键盘输入两个实数a和x,按公式计算并输出y的值: #include#includeint main() float a,x,y; scanf(%f%f,&a,&x);y = pow(a,5) + sin(a*x) + exp(a*x) + log(a+x);printf(y=%fn,y);return 0;3改错题正确的程序为:#include main()int a,b,c,s;scanf(%d%d%d,&a,&b,&c);s=a+b+c;printf(%d=%d+%d+%dn,s,a,

6、b,c); /*输出s=a+b+c*/printf(%d+%d+%d=%dn,a,b,c,s); /*输出a+b+c=s*/五、调试和测试结果2(1) 输入: 12 14 输出:26 1a2(2) 输入:1 0输出:2.000000实验三 选择结构程序设计四、设计流程(算法描述) (请写出上机内容2(2)题的算法描述) 主要是两两比较,然后得出最大的数五、程序清单2(1) 输入整数x和a,计算并输出下列分段函数f(x)的值(保留2位小数),请调用log函数求自然对数,调用fabs函数求绝对值。程序为:#include #include main()int x,a;double y;printf

7、(Enter a and x:);scanf(%d%d,&a,&x);if(fabs(x)!=a)y=log(fabs(a+x)/(a-x)/(2*a);elsey=0;printf(a=%d,f(%d)=%.2fn,a,x,y); (2)输入a、b、c三个整数,输出最大数。#includemain() int a,b,c,x;scanf(%d%d%d,&a,&b,&c);if(a=b)x=a;elsex=b;if (xc)x=c;printf(the max number is:%dn,x);return 0;3改错题正确程序为:#include main()double n;printf(

8、Enter n:);scanf(%lf,&n);if(n0)printf(n is less than 0n);else if(n=0)printf(n is equal to 0n);elseprintf(n is greater 0n);六、调试和测试结果2(1) Enter a and x:5 6a=5,f(6)=0.24Enter a and x:5 5a=5,f(5)=0.002(2) 输入:3 2 1 输出:the max number is:3 输入:2 3 1 输出:the max number is:3输入:1 2 3 输出:the max number is:3实验四 循环

9、结构程序设计四、设计流程(算法描述)(请写出上机内容2的算法描述)首先求出每一个给定数的所有因子和,然后从2到5000循环,那一个数x与因子之和相等,就是完数。五、程序清单1编写程序:求1+2+3+100和12+22+33+1002。#include#includeint main() int i,j,sum;sum = 0;for (i=1;i=100;i+)sum += i;printf(the sum is:%dn,sum);sum =0;for(i=1;i=100;i+)j=pow(i,2);sum +=j;printf(the square sum is:%dn,sum);retur

10、n 0; 2一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出25000中的所有完数。 #include#include main() int i,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);return 0; 3. 改错题正确的程序为:#include main()int n=1;int find=0;while(!find)if

11、(n%5=1 & n%6=5 & n%7=4 & n%11=10)printf(n=%dn, n);find =1;n+;六、调试和测试结果1:结果:the sum is:5050 the square sum is:3383502:结果:6 28 496实验五 函数和预处理命令四、设计流程(算法描述)(请写出上机内容1的算法描述)利用循环将m乘n次五、程序清单1编写自定义函数long power(int m,int n),计算的值。利用此函数编程序实现:从键盘输入两个整数m和n,计算出的值。 #includelong power(int m,int n)/要返回的是long型int i;lo

12、ng s;/因为是要返回的数,所以这里也定义为long型s=1;for(i=1;i=n;i+)s *=m;return s;int main(void)int m,n;scanf(%d%d,&m,&n);printf(s=%ldn,power ( m,n);return 0; 2、写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。1 源程序如下:int zdgys(int n1,int n2)int y,i; for(i=n2;i=1;i-) if(n1%i=0&n2%i=0) y=i;break; return y;int zxgb

13、s(int n1,int n2)int y,i; for(i=n1;i=n1*n2;i+) if(i%n1=0&i%n2=0) y=i;break; return y;main()int n1,n2,t; scanf(n1=%d n2=%d,&n1,&n2); if(n1n2) t=n1;n1=n2;n2=t; printf(zdgys=%d zxgbs=%d,zdgys(n1,n2),zxgbs(n1,n2);3、改错题正确程序如下:#include int fact(int n);int multi(int n);main()int i; double sum,item,eps; eps=

14、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.5lfn”,sum*2);return 0;int fact(int n)int i; int res=1; for(i=0;i=n;i+) res=res*i;return res;int multi(int n)int i; int res=1; for(i=3;i=n;i=i+2) res=res*i;return res; 六、调试和测试结果1、输入:2 3 输出:s=82、 输入:n1=24 n

15、2=16输出:zdgys=8 zxgbs=482. 3、输出结果为:实验六 数组四、设计流程(算法描述)(请写出上机内容1的算法描述)设置两个变量分别指示头和尾。第一个和最后一个元素值互换,然后头和尾变量向里移动,最终到两变量相遇为止。五、程序清单1编写程序:从键盘输入一串整数保存到数组中,调用函数antitone()将数组反序输出。自定义函数void antitone(int a,int n)实现将数组中的n个数据按逆序存放。 void antitone(int a,int n)int i,j;int k;i=0;j=n-1;while(ij)k=ai;ai=aj;aj=k;i +=1;j

16、-=1;2已知某数列的前两项为2和3,其后每一项为其前两项之积。编程实现:从键盘输入一个整数x,判断并输出x最接近数列的第几项?#include#includevoid Mad(int a,int n)int i;a0=2;a1=3;for(i=2;iai;i+);k1 = abs(x-ai-1);k2 = abs(x-ai);if(k1k2)printf( x 最接近第%d项n,i+1);elseprintf(x 最接近第%d项n,i);return 0; 3、源程序如下:#include main() char c15;int i,word=0,num=0,space=0;for(i=0;

17、i=14;i+)scanf(%c,&ci);for(i=0;i=0&cia&ciz) word+;printf(字符:%d 数字:%d 空格:%dn,word,num,space);六、调试和测试结果1、输入:1 2 3 4 5输出:5 4 3 2 12、输入:110输出:x 最接近第6项3、输入:sd234kj64jk mjk输出:字符:9数字:5空格:1实验七 数组和函数综合程序设计四、程序清单(请写出上机内容2、3中源程序)2、 原程序求得的是下三角形,经改进调试之后的程序为: #include #define N 6main()int i,j,sum=0;int aNN=0;print

18、f(input 55 data:n);for(i=1;iN;i+) printf(Input the %d line data:n,i);for(j=1;jN;j+)scanf(%d,&aij);for(i=1;iN;i+)for(j=1;jN;j+)printf(%5d,aij);printf(n); for(i=1;i=i;j-)sum=sum+aij;printf(sum=%dn,sum);3、void fun(int ttMN,int ppN) int i,j,max; for(j=0; jN; j+ ) max=tt0j; for(i=1;imax)max=ttij; ppj=max

19、; 五、调试和测试结果(写出上机内容1中填空的内容)1、(1) sum=0 (2) tii (3) 1 实验八 指针四、程序清单(请写出上机内容2中的函数)求出每个位上的数字,然后放在千位上的数字乘以1000,放在百位上的数字乘以100,放在10位上的数字乘以10,然后相加。void fun(int a,int b,long *c) int a10,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

20、,7,8(2) 6(3) (1)x=10 y=20(2)x=20 y=10 (4) 【1】int *p 【2】&ai 【3】 pi 输入:1 2 3 4 5 6 输出: 1 2 3 4 5 6实验九 指针、函数和数组综合程序设计设计流程(算法描述)(请写出上机内容2中的算法描述)当 *(x+i)!=0i=0*(x+i)= =yTreturn 1i=i+1return 0F五、程序清单1已知一个整型数组a5,其各元素值为4,6,8,10,12。使用指针编程求数组元素之积。#include int main(void)int a=4,6,8,10,12,sum;int *p;sum=1;for(p

21、=a;pa+5;p+)sum *= *p;printf(%dn,sum);return 0; 2定义函数int f(char *x, char y)判断x所指的字符串中是否包含字符y,若是则函数返回1,否则返回1。int f(char *x, char y)char *p;for(p=x;*p!=0;p+)if(*p = y)printf(%cn,*p);return 1;return 0; 3.定义函数void f(float x, int *y, float *z)将x的整数部分存于y所指的存储单元,x的小数部分存于x所指的存储单元。void f(float x, int *y, floa

22、t *z)*y=(int)x;*z=x - *y;六、调试和测试结果测试结果正确实验十 结构体四、程序清单(请写出上机内容1的源程序和上机内容2中的函数)1、上机内容1的源程序#include#include #define FORMAT %0dt%st%dt%cnstruct student int num; char name20;int age; char sex; ;main() void input(struct student stu ); void stat(struct student stu);struct student stu4;int i; input(stu); fo

23、r(i=0;i4;i+) printf(FORMAT,stui.num,,stui.age,stui.sex); stat(stu);void input(struct student stu)int i;for(i=0;i4;i+)scanf(%d,&stui.num);getchar();scanf(%s,&);getchar();scanf(%d,&stui.age);getchar();scanf(%c,&stui.sex);getchar();void stat(struct student stu)int i,c=0,boy=0,girl=0;

24、for(i=0;i4;i+) if(stui.age18) c+=1; if(stui.sex=m) boy+; else girl+;printf(boytgirltageave=0; for(i=0;iave+=a-si; a-ave/=N;3、改错题正确的程序为:将 printf(%5d %-20s %2c %4dn,*p.num, *, p.sex, p.age);改为:printf(%5d %-20s %2c %4dn, p-.num, p-name, p-sex, p-age);实验十一 共用体、位运算和文件四、程序清单(请写出上机内容2中的程序源代码)(1) 求100

25、以内能同时被3和5整除的自然数,分别将它们输出到显示器屏幕和x.txt文件中。(2)用程序读出上述x.txt文件中的数据,将它们输出到屏幕,并求它们的和。#include #include #include int main(void) int i,sum;FILE *fd;char s10,*p,ch;if( (fd=fopen(D:shi.txt,wt)=NULL)printf(creat the file failedn);exit(0);elsefor(i=1;i100;i+)if( (i%3 =0) & (i%5 = 0) )printf(%d, ,i);itoa(i,s,10);/

26、转换成字符串fputs(s,fd);fputc( ,fd);printf(n);fclose(fd);/提取字符转换成数字输入if( (fd=fopen(D:shi.txt,rt)=NULL)printf(open the file failedn);exit(0);elsep=s;sum=0;doch=fgetc(fd);if(ch = )i=atoi(s);sum +=i;printf(%d ,i);strset(s,0);p=s;else*p=ch;p+;while(ch != EOF);printf(数的和是:%dn,sum);fclose(fd); return 0;实验十二 参考答

27、案实验十二参考答案:(可根据情况,弄清楚一个模块即可)题目:设某班有n位同学,每位同学的数据包括以下内容:学号(长整型)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。注:输入数据时,要求学号不能相同,姓名可以相同。设计思路:1)程序运行时,首先显示主菜单(模块)如下:1程序运行时,首先显示主菜单如下:1新建数据2添加数据3删除数据4排序5查询6退出用户输入序号后,程序进行相应操作。2)在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:1数学成绩排序2程序设计成绩排序3总分排序。4返回主菜

28、单 选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。3在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:1学号查询2姓名查询3数学成绩查询4程序设计成绩查询5总分查询6返回主菜单请按序号选择相应操作在子菜单中选择序号后,程序按以下方式工作。(1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)(2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)(3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩

29、大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;(4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。C源程序清单如下:#include stdio.h#include stdlib.h#include string.h#include conio.h#include mem.h#include ctype.h#include alloc.h#define N 2 typedef struct z1char no11;char name15;int scoreN;float sum;float average

30、;int order;struct z1 *next;STUDENT;/*Functions*/STUDENT *init(); /*initialize*/STUDENT *create();STUDENT *delete(STUDENT *h);STUDENT *searchno(STUDENT *h);void print(STUDENT *h);void search(STUDENT *h);void save(STUDENT *h);STUDENT *load();STUDENT *insert(STUDENT *h);STUDENT *sort(STUDENT *h);STUDEN

31、T *index(STUDENT *h);int menu_select(); /*menu*/*main*/main()int i;STUDENT *head;head=init();clrscr();for(;)switch(menu_select()case 1:head=init();break;case 2:head=create();break;case 3:head=delete(head);break;case 4:print(head);break;case 5:search(head);break;case 6:head=searchno(head);break;case

32、7:save(head);break;case 8:head=load(); break;case 9:head=insert(head); break;case 10:head=sort(head);break;case 11:case 12:case 13:head=index(head);break;case 0:exit(0); menu_select()char *menu=*MENU*, 1. Init list, 2. Enter list, 3. Delete a record from list, 4. print list , 5. Search record by nam

33、e, 6. Search record by Number, 7. Save the file, 8. Load the file, 9. insert record to list , 10. sort by total scores, 11. sort by maths scores, 12. sort by program scores, 13. index on number, 0. Quit;char s3;int c,i;gotoxy(1,25);printf(press any key continue.n);getch();clrscr();gotoxy(1,1);textco

34、lor(YELLOW);textbackground(BLACK);gotoxy(10,2);putch(0xc9);for(i=1;i44;i+)putch(0xcd);putch(0xbb);for(i=3;i20;i+)gotoxy(10,i);putch(0xba);gotoxy(54,i);putch(0xba);gotoxy(10,20);putch(0xc8);for(i=1;i44;i+)putch(0xcd);putch(0xbc);window(11,3,53,19);clrscr();for(i=0;i16;i+)gotoxy(10,i+1);cprintf(%s,men

35、ui);textbackground(BLACK);window(1,1,80,25);gotoxy(10,21);doprintf(n Enter you choice(013):);scanf(%s,s);c=atoi(s);while(c14);return c;STUDENT *init()return NULL;STUDENT *create()int i; int s;STUDENT *h=NULL,*info;for(;)info=(STUDENT *)malloc(sizeof(STUDENT);if(!info)printf(nout of memory);return NU

36、LL;inputs(enter no:(10 digitals .enter 0 to exit),info-no,11);if(info-no0=0) break; /*when the first number is 0,break*/inputs(enter name:(name,15);printf(please input scores n);s=0; /*s is sum,begins with 0*/for(i=0;iscorei); /* socre0 stores maths scores,socore1 stores program scores*/if(info-scor

37、ei100|info-scoreiscorei100|info-scoreiscorei;info-sum=s;info-order=0;info-next=h;h=info;return(h);inputs(char *prompt, char *s, int count)char p255;doprintf(prompt);scanf(%s,p);if(strlen(p)count)printf(n too long! n);while(strlen(p)count);strcpy(s,p);/*Print infor*/void print(STUDENT *h)int i=0;STUD

38、ENT *p;clrscr();p=h;printf(nnn*STUDENT*n);printf(|rec| NO. | name | maths | program | sum |order|n);printf(|-|-|-|-|-|-|-|n);while(p!=NULL)i+;printf(|%3d|%-10s|%-15s|%7d|%9d|%4.2f| %3d |n,i,p-no,p-name,p-score0,p-score1,p-sum,p-order);p=p-next;printf(*end*n);STUDENT *delete(STUDENT *h)STUDENT *p,*q;

39、char s11;clrscr();printf(please enter the number you want to delete n);scanf(%s,s);q=p=h;while(strcmp(p-no,s)&p!=NULL)q=p;p=p-next;if(p=NULL)printf(nlist no %s studentn,s);elseprintf(nnn*STUDENT*n);printf(| NO. | name | maths | program | sum |order|n);printf(|-|-|-|-|-|-|n);printf(|%-10s|%-15s|%7d|%

40、9d|%4.2f| %3d |n,p-no,p-name,p-score0,p-score1,p-sum,p-order);printf(*end*n);getch();if(p=h)h=p-next;elseq-next=p-next;free(p);printf(n have deleted No %s studentn,s);return(h);STUDENT *searchno(STUDENT *h)STUDENT *p,*q;char s11;clrscr();printf(please enter the number you want to search n);scanf(%s,

41、s);q=p=h;while(strcmp(p-no,s)&p!=NULL)q=p;p=p-next;if(p=NULL)printf(n %s No Found!n,s);elseprintf(n %s Found!n,s);printf(nnn*STUDENT*n);printf(| NO. | name | maths | program | sum |order|n);printf(|-|-|-|-|-|-|n);printf(|%-10s|%-15s|%7d|%9d|%4.2f| %3d |n,p-no,p-name,p-score0,p-score1,p-sum,p-order);

42、printf(*end*n);getch();return(h);void search(STUDENT *h)STUDENT *p;char s15;clrscr();printf(please enter name for searchn);scanf(%s,s);p=h;while(strcmp(p-name,s)&p!=NULL)p=p-next;if(p=NULL)printf(n %s No Found!n,s);elseprintf(n %s Found!n,s);printf(nnn*STUDENT*n);printf(| NO. | name | maths | program | sum |order|n);printf(|-|-|-|-|-|-|n);printf(|%-10s|%-15s|%7d|%9d|%4.2f| %3d |n,p-no,p-name,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论