




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2010C语言实验报告参考答案 长沙理工大学 2010C 语言实验报告参考答案 实验一 熟悉 C 语言程序开发环境及数据描述 四、程序清单 1编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include main() printf(The dress is longn); printf(The shoes are bign); printf(The trousers are blackn); 2改错题 (将正确程序写在指定位置) 正确的程序为: #include main()
2、printf( 商品名称价格 n); printf(TCL 电视机¥7600n); printf( 美的空调¥ 2000n); printf(SunRose 键盘¥ 50.5n); 2编写程序: a=150,b=20,c=45, 编写求 a/b 、 a/c( 商) 和 a%b、a%c(余数) 的程序。 答案: #include main() 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,
3、x); printf(a/c 的余数 =%dn,y); 4. 设变量 a的值为 0,b 的值为-10 ,编写程序: 当 ab 时,将 b 赋给 c ;当 a=b 时,将 a 赋给 c ( 提示:用条件运算符 ) 答案: #include main() 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 black 3、 编译、连接无错,运行后屏幕上显示以下结
4、果: a/b 的商 =7 a/c 的商 =3 a/b 的余数 =10 a/c 的余数 =15 4. 编译、连接无错,运行后屏幕上显示以下结 果: c =-10 实验二 顺序结构程序设计 四、程序清单 1键盘输入与屏幕输出练习 问题 1 D 。 问题 2 改 printf(%c,%c,%dn,a,b,c); 这条语 改成: printf(%c %c %dn,a,b,c); 问题 3 改 scanf(%c%c%d, 这条 语句 改为: scanf(%c ,%c ,%d, 问题 4 改 printf(%c,%c,%dn,a,b,c); 这条语 句 改成: %c %dn,a,b,c); 2(1) 从键
5、盘输入两个八进制数,计算两数之和 并分别用十进制和十六进制数形式输出。 #include int main() int a,b,c; printf(Enter a and b:); scanf(%o%o, c = a + b; printf(d:%dn,c); printf(x:%xn,c); return 0; 2(2) 编写程序: 从键盘输入两个实数 a 和 x,按 公式计算并输出 y 的值: 5 ax y a sin( ax) ln(a x) e #include #include int main() float a,x,y; scanf(%f%f, y = pow(a,5) + si
6、n(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, s=a+b+c; printf(%d=%d+%d+%dn,s,a,b,c);/* 输 出 s=a+b+c*/ printf(%d+%d+%d=%dn,a,b,c,s); /* 输出 a+b+c=s*/ 五、调试和测试结果 2(1) 输入: 12 14 输出: 26 1a 2(2) 输入: 1 0 输出: 2.000000 实验三 选择结构程序设计 四、设计流程(算法描述)
7、 (请写出上机内容 2(2)题的算法描述 ) 主要是两两比较,然后得出最大的数 五、程序清单 2(1) 输入整数 x 和 a,计算并输出下列分段函数 f(x)的值(保留 2 位小数),请调用 log 函数求 自然对数,调用 fabs 函数求绝对值 a x a x xx 程序为: #include #include main() int x,a; double y; printf(Enter a and x:); scanf(%d%d, if(fabs(x)!=a) y=log(fabs(a+x)/(a-x)/(2*a); else y=0; printf(a=%d,f(%d)=%.2fn,a,
8、x,y); (2) 输入 a、 b、c 三个整数,输出最大数 #include main() int a,b,c,x; scanf(%d%d%d, if(a=b) x=a; else x=b; if (xc) x=c; printf(the max number is:%dn,x); return 0; 3改错题 正确程序为: #include main() double n; printf(Enter n:); scanf(%lf, if(n0) printf(n is less than 0n); else if(n=0) printf(n is equal to 0n); else pr
9、intf(n is greater 0n); 六、调试和测试结果 2(1) Enter a and x : 5 6 a=5, f ( 6) =0.24 Enter a and x : 5 5 a=5, f ( 5) =0.00 2(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 实验四 循环结构程序设计 四、设计流程(算法描述) (请写出上机内容 2 的 算法描述 ) 首先求出每一个给定数的所有因子和, 然后从 2 到 5000 循环
10、,那一个数 x 与因子之和相等,就是完数。 五、程序清单 1编写程序:求 1+2+3+ +100 和 12+22+33+ 2 +1002。 #include #include int 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); return 0; 2 一个数如果恰好等于它的因子之和,这个 数就称为“完数”,
11、编写程序找出 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(n%
12、5=1 find =1; n+; 六、调试和测试结果 1:结果: the sum is:5050 the square sum is :338350 2:结果: 6 28 496 实验五 函数和预处理命令 四、设计流程(算法描述) (请写出上机内容 1 的算法描述 ) 利用循环将 m 乘 n 次 五、程序清单 1编写自定义函数 long power(int m,int n) 计算 mn的值。利用此函数编程序实现:从键盘输 入两个整数 m和 n,计算出 mn 的值。 #include long power(int m,int n)/要返回的是 long 型 int i; long s;/ 因为是
13、要返回的数,所以这里也定 义为 long 型 s=1; for(i=1;i=n;i+) s *=m; return s; int main(void) int m,n; scanf(%d%d, 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=0break; return y; int zxgbs(int n1,
14、int n2) int y,i; for(i=n1;i=n1*n2;i+) if(i%n1=0break; return y; main() int n1,n2,t; scanf(n1=%d n2=%d, 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=1E-6; sum=1; item=1; f
15、or(i=1;item=eps;i+) item=fact(i)/multi(2*i+1); sum=sum+item; printf( “ PI=%0.5nl”f ,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=8 2、输入: n1=24 n2=16 输出
16、: zdgys=8 zxgbs=48 2. 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
17、=ai; ai=aj; aj=k; i +=1; j -=1; 2已知某数列的前两项为 2 和 3,其后每一项 为其前两项之积。 编程实现: 从键盘输入一个整 数 x ,判断并输出 x 最接近数列的第几项? #include #include void 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); else printf(x 最接近第 %d项n,i); return 0; 3、源程序如下: #incl
18、ude main() char c15; int i,word=0,num=0,space=0; for(i=0;i=14;i+) scanf(%c, for(i=0;i=0 printf( 字 符 : %d 数 字 : %d 空 格: %dn,word,num,space); 六、调试和测试结果 1、输入: 1 2 3 4 5 输出:5 4 3 2 1 2、输入: 110 输出: x 最接近第 6 项 3、输入: sd234kj64jk mjk 输出:字符: 9 数字: 5 空格: 1 实验七 数组和函数综合程序设计 四、程序清单 (请写出上机内容 2、3 中源程序 ) 2、 原程序求得的是
19、下三角形, 经改进调试之后 的程序为: #include #define N 6 main() int i,j,sum=0; int aNN=0; printf(input 5 5 data:n); for(i=1;iN;i+) printf(Input the %d line data:n,i); for(j=1;jN;j+) scanf(%d, 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、 id fun(int ii
20、fndot r i(f,juj=,nm0 ( ;ai nmjx m papxj 五、调试 和 测 试结果 )=m=1ma;ixa=xMt;t ;tii+t0+j); j; (写出上机内容 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;
21、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=10 y=20 (2)x=20 y=10 (4) 【 1】 int *p【2】 int *p; sum=1; for(p=a;pa+5;p+) sum *= *p; printf(%dn,sum); return 0; 2 定义函数 int f(char *x, char y)判断 x 所指的字符串中是否包含字符 y,若是则函数返 回 1,否则返
22、回 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, float *z) *y=(int)x; *z=x - *y; 六、调试和测试结果 测试结果正确 实验十 结构体 四、程序清单 (请写出上机内容 1 的源程序和上机内容 2 中
23、的函数) 1 、上机内容 1 的源程序 #include #include #define FORMAT %0dt%st%dt%cn struct 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); for(i=0;i4;i+) printf(FORMAT,stui.num,,st ui.age,stui.s
24、ex); stat(stu); void input(struct student stu) int i; for(i=0;i4;i+) scanf(%d, getchar(); scanf(%s, getchar(); scanf(%d, getchar(); scanf(%c, getchar(); void stat(struct student stu) int i,c=0,boy=0,girl=0; for(i=0;i (D * 最据皑,e 宀 乏 H05eAe 兰 SAeeeAe (+NVO.II)。 o3ee u 一) (e*o山 MIS lorusuapo ,cxl 宀 KwA
25、oqrp% 乍 p% 乍 P%4U 一d -(一g l Ve6 多一Moqlu 一d 宀 匸土一 6S05 匸+Aoq (.LUPHXessmsM 匚+。O0LV 6esms)七 四、程序清单 (请写出上机内容 2 中的程序源代码 ) (1)求 100 以内能同时被 3 和 5 整除的自然 数,分别将它们输出到显示器屏幕和 x.txt 文件中。 (2) 用程序读出上述 x.txt 文件中的数据, 将它 们输出到屏幕,并求它们的和。 #include #include #include int main(void) int i,sum; FILE *fd; char s10,*p,ch; if(
26、 (fd=fopen(D:shi.txt,wt)=N ULL) printf(creat the file failedn); exit(0); else for(i=1;i100;i+) if( (i%3 =0) itoa(i,s,10); / 转换成字符串 fputs(s,fd); fputc( ,fd); printf(n); fclose(fd); / 提取字符转换成数字输入 if( (fd=fopen(D:shi.txt,rt)=N ULL) printf(open the file failedn); exit(0); else p=s; sum=0; do ch=fgetc(fd
27、); 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; 实验十二 参考答案 实验十二参考答案: (可根据情况,弄清楚一 个模块即可 ) 题目:设某班有 n 位同学,每位同学的数据 包括以下内容: 学号(长整型)、姓名(字符串)、 数学成绩(整型)、程序设计成绩(整型)。设计 程序完成以下五项功能: 新建数据档案、 添加数 据、删除数据、对输入的数据进行排序和查询
28、。 注:输入数据时,要求学号不能相同,姓名可以 相同。 设计思路: 1)程序运行时,首先显示主菜单(模块) 如下: 1程序运行时,首先显示主菜单如下: 1新建数据 2添加数据 3删除数据 4排序 5查询 6退出 用户输入序号后, 程序进行相应操 2)在主菜单中选择序号 4,弹出子菜单选 择排序方式,子菜单如下: 1数学成绩排序 2程序设计成绩排序 3总分排序。 4返回主菜单 选择子菜单的序号后,程序能正确运 行并在屏幕上显示按要求排序后的相关信息。 3在主菜单中选择序号 5,弹出子菜单选择 查询方式,子菜单如下: 1学号查询 2姓名查询 3数学成绩查询 4程序设计成绩查询 5总分查询 6返回主
29、菜单 请按序号选择相应操作 在子菜单中选择序号后,程序按以下方式工 1)学号查询: 输入学号后, 若该学号存在 则显示与其相关的所有信息, 否则显示找不到的 提示信息;(提示:查询到满足条件的结果后, 查询即可结束) (2)姓名查询: 输入姓名后, 若该姓名存在 则显示与其相关的所有信息, 否则显示找不到的 提示信息;(提示:使用字符串比较函数进行比 较) ( 3)按科目查询:输入指定分数, 程序运行 后显示该科目中考试成绩大于等于指定分数的 同学的学号、姓名以及该科成绩并统计满足条件 的人数; ( 4)总分查询: 输入指定分数, 程序运行后 显示总分成绩大于等于指定分数的同学的学号、 姓名以
30、及各科成绩并统计满足条件的人数。 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 z1 char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT; /*Functions*/ STUDENT *i
31、nit(); /*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); STUDENT *index(STUDENT *h); int menu_select(); /*menu*
32、/ /*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 7:save(head);break; case 8:head
33、=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 name, 6. Search record by N
34、umber, 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 continuen); getch(); clrscr(); gotoxy(1,1); textcolor(YELLOW); text
35、background(BLACK); gotoxy(10,2); putch(0 xc9); for(i=1;i44;i+) putch(0 xcd); putch(0 xbb); for(i=3;i20;i+) gotoxy(10,i);putch(0 xba); gotoxy(54,i);putch(0 xba); gotoxy(10,20);putch(0 xc8); for(i=1;i44;i+) putch(0 xcd); putch(0 xbc); window(11,3,53,19); clrscr(); for(i=0;i16;i+) gotoxy(10,i+1); cprin
36、tf(%s,menui); textbackground(BLACK); window(1,1,80,25); gotoxy(10,21); do printf(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) print
37、f(nout of memory); return NULL; 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 s
38、tores program scores*/ if(info-scorei100|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; do printf(prompt); scanf(%s,p); if(strlen(p)count)printf(n too long! n); while(strlen(p)count); strcpy(s,p);
39、/*Print infor*/ void print(STUDENT *h) int i=0; STUDENT *p; clrscr(); p=h; printf(nnn * STU DENT* 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
40、; printf( end *n); STUDENT *delete(STUDENT *h) STUDENT *p,*q; 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=p-next; if(p=NULL) printf(nlist no %s studentn,s); else *STUD n); printf(nnn ENT* printf(| NO. | name | maths | program |
41、 sum |order|n); printf(| |n); printf(|%-10s|%-15s|%7d|%9d|%4.2f| %3d end |n,p-no,p-name,p-score0,p-score1, p-sum,p-order); printf( *n getch(); if(p=h) h=p-next; else q-next=p-next; free(p); printf(n have deleted No %s studentn,s); return(h); STUDENT *searchno(STUDENT *h) STUDENT *p,*q; char s11; clr
42、scr(); printf(please enter the number you want to search n); scanf(%s,s); q=p=h; while(strcmp(p-no,s) p=p-next; if(p=NULL) printf(n %s No Found!n,s); else printf(n %s Found!n,s); printf(nnn* *STUDE NT* n); printf(| NO. | name | maths | program | sum |order|n); printf(| |n); %3d printf(|%-10s|%-15s|%
43、7d|%9d|%4.2f| |n,p-no,p-name,p-score0,p-score1, p-sum,p-order); 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) if(p=NULL) printf(n %s No Found!n,s); else printf(n %s Found!n
44、,s); printf(nnn *STUDE NT* *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); printf( end *n); STUDENT *insert(STUDENT *h) STUDENT *p,*q,*info; char s11; int s1,i; printf(please enter the
45、No.which this record will be located before n); scanf(%s,s); printf(nplease new recordn); info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(nout of memory); return NULL; inputs(enter no:(10 digitals),info-no,11); inputs(enter name:(name,15); printf(please input scores n); s1=0; for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; info-sum=s1; info-order=0; info-next=NULL; p=h; q=h; while(strcmp(p-no,s) p=p-next; if(p=NULL) if(p=h) h=info; else q-next=info; else if(p=h) info-ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 荒山林地流转合同协议
- 英文咨询费合同协议
- 蚕棚和桑园出租合同协议
- 药品上市协议书范本
- 衣橱买卖衣服合同协议
- 茶叶鲜叶购销合同协议
- 英文商业合作合同协议
- 茶叶供应合同协议书范本
- 蔬菜农场租赁合同协议
- 行李消毒机采购合同协议
- 铁道概论道岔的结构课件
- 解析:湖北省十一校2024-2025学年高三第二次联考数学试卷(原卷版)
- 2024年江苏省常州外国语学校中考一模语文试题(含答案)
- 2025年全球及中国潜孔钻机行业发展现状调研及投资前景分析报告
- 多模态数据交互式可视化-全面剖析
- (一模)2025年抚顺市普通高中高三模拟考试地理试卷(含答案)
- 2025年骨干教师复试试题及答案
- (二模)新疆维吾尔自治区2025年普通高考第二次适应性检测 英语试卷(含答案详解)
- 喷播花籽施工方案
- 乘除法练习题1000道可直接打印
- 08第三方人员访问控制管理制度
评论
0/150
提交评论