资源描述
C语言实验报告参考答案实验一熟悉C语言程序开发环境及数据描述四、程序清单1编写程序实现在屏幕上显示以下结果:ThedressislongTheshoesarebigThetrousersareblack答案:#includemain()printf(Thedressislongn);printf(Theshoesarebign);printf(Thetrousersareblackn);2编写程序:(1)a=150,b=20,c=45,编写求a/b、a/c(商)和a%ba%c除数)的程序的程序(2)a=160,b=46,c=18,d=170,编写求(a+b)/(b-c)*(c-d)答案: 1)#includemain()inta,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); 2) 2)#includemain()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)=%fn,x);3.设变量a的值为0,b的值为-10,编写程序:当ab时,将b赋给c;当a=b时,将0赋给c。(提示:用条件运算符)答案:#includemain()inta,b,c;a=0;b=-10;c=(ab)?b:a;printf(c=%dn,c);五、调试和测试结果1.编译、连接无错,运行后屏幕上显示以下结果:ThedressislongTheshoesarebigThetrousersareblack2、(1)编译、连接无错,运行后屏幕上显示以下结果:a/b的商=7a/c的商=3a/b的余数=10a/c的余数=15(2)编译、连接无错,运行后屏幕上显示以下结果:(a+b)/(b-c)*(c-d)=-1064.00003.编译、连接无错,运行后屏幕上显示以下结果:c=-10实验二顺序结构程序设计四、程序清单1.键盘输入与屏幕输出练习问题1D。问题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,%g%d,&a,&b,&c);这条语句4改printf(%c,%c,%dn,a,b,c);改成:%c%dn,a,b,c);5把scanf(%c%c%d,&a,&b,&c);和printf(%c,%c,%dn,a,b,c);改成scanf(%c%*c%c%*c%d,&a,&b,&c);printf(%c,%c,%dn,a,b,c);2(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。#includeintmain()inta,b,c;scanf(%d%d,&a,&b);c=a+b;printf(%dn,c);printf(%xn,c);return0;2(2)编写程序:从键盘输入两个实数a和x,按公式计算并输出y的值:#include#includeintmain()floata,x,y;scanf(%f%f,&a,&x);y=pow(a,5)+sin(a*x)+exp(a*x)+log(a+x);printf(y=%fn,y);return0;五、调试和测试结果2(1)输入:1214输出:261a2(2)输入:10输出:2.000000实验三选择结构程序设计四、设计流程(算法描述)(请写出上机内容2(3)题的算法描述)主要是两两比较,然后得出最大的数五、程序清单(1)输入一个整数,若大于等于0,输出提示信息“ispositive”,否则输出“isnegative#include#includemain()inta;scanf(%d,&a);if(a=0)printf(thenumberispositven);elseprintf(thenumberisnegetiven);return0;(2)输入两个整数a和b,若a=b时,求其积c并显示;若ab时,求其商c并显示#includemain()inta,b,c;scanf(%d%d,&a,&b);if(a=b)printf(c=%dn,a*b);elseprintf(c=%dn,a/b);return0;(3)输入a、b、c三个整数,输出最大数。#includemain()inta,b,c,x;scanf(%d%d%d,&a,&b,&c);if(a=b)x=a;elsex=b;if(xc)x=c;printf(themaxnumberis:%dn,x);return0;六、调试和测试结果2(1)输入:2输出:thenumberispositve#include输入:0输出:thenumberispositve输入:-2输出:thenumberisnegetive2(2) 输入: 3 2输入: 2 32(3) 输入: 3 2 1输入:2 3 1输入:1 2 3四、设计流程(算法描述)输出: c=6输出: c=0输出: the max number is:3输出: the max number is:3输出: the max number is:3实验四 循环结构程序设计(请写出上机内容2的算法描述)首先求出每一个给定数的所有因子和,然后从2到5000循环,那一个数x与因子之和相等,就是完数。五、程序清单1 .编写程序:求1+2+3+化。和12+22+33+1002。#includeintmain()inti,j,sum;sum=0;for(i=1;i=100;i+)sum+=i;printf(thesumis:%dn,sum);sum=0;for(i=1;i=100;i+)j=pow(i,2);sum+=j;printf(thesquaresumis:%dn,sum);return0;if(i = sum)/sum为因子和,如果和i 相等,则输出2 50002 一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出中的所有完数。#include#includemain()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;printf(%d,i);return0;3 .编写程序:计算sinx的近似值,精确到10-60(2n1)(n1)X一-、其实sinx(1)-u所以程序n1(2n1)!#include#includemain()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)=%.6fn,x,sinx);六、调试和测试结果1:结果:thesumis:5050thesquaresumis:3383502:结果:6284963、输入0,输出sin(0.00)=0.000000输入1.57,输出sin(1.57)=1.000000输入0.5,输出sin(0.50)=0.479426实验五函数和编译预处理四、设计流程(算法描述)(请写出上机内容2的算法描述)求素数的方法就是:给定一个大于3的数x,从2到X的平方根遍历,只要有数可以被x整除,就不是素数五、程序清单1编写自定义函数longpower(intm,intn),计算mn的值。利用此函数编程序实现:从键盘输入两个整数m和n,计算出mn的值。#includelongpower(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=%ldn,power(m,n);return0;2 .编写自定义函数prime(intx),判断x是否为素数。利用此函数编写程序找出35000中的所有素数,并输出素数的个数。#include#includeintprime(intm)inti,k;k=sqrt(m);for(i=2;ik)return1;return0;main()inti,k;k=0;for(i=3;i=5000;i+)if(prime(i)=1)k+;printf(%disaprimemubern,i);printf(共有d个素数n,k);3 .编写自定义函数count(intx),计算x的因子个数。利用此函数找出并输出11000中有奇数个不同因子的整数。#include#includeintcount(intx)intsum,i;sum=0;/记住因子的个数for(i=1;i=x/2;i+)if(x%i=0)sum+=1;returnsum+1;intmain(void)inti,y;for(i=1;i=100;i+)y=count(i);if(y%2=1)printf(%dt,i);return0;六、调试和测试结果1 .输入:23输出:s=82 .输出:共有668个素数日6y 口 1 FT? m?1 Q、Q如金日-3-33后1NT拶1 -TN6T卡 *gY mGR整Vb J-H 3?AH 7 4itbUiJ1i. Vauy,RRIL日9鼻 UM少1 061 1.31 HOli Zid J之量W3 %3,1 33 3N6日R 省色电JA S7eV ZVV 工emu itvy /g3 WNQ ?aei 33(1 n&i 1633 -I?JfaW 隼KV/富力 401 3 MTl 一177 41.9 T:3T 号 444.6-g-e MN Jl 事69, .”用:好 心q /亨67 口!叫! Vl&WV 1WV 1567 V33 NR 1 M*HV 213sta3a 33口号 3 *ifhV 3 5SV 泼OL% 3 71 1aftisv X堂M assn? 11 Ai3 IV 1 33 3修3学 m咤1 q JbV i3W-& 日3曾鼻事 iI中 f 44V, &LE-tm日7 441SJ 4.33 /& 3,T 41?W3事才OR-t6i/r7 :v FT Hlr-七a mv 2 793SEEK2?1,3 MZtf 1 a6i 3 957 TUI a a,飞 1 i -I 1117Tl 3-15V U方qJl 牙V 21匕子少 37K 3B&S 3*31 4O3JI4/J44耳?” 141grWE 量:L a Ii VI XT,量”内 提安4 9316 3 33:95 33 13 inyugyJ?tKl 3?*3 JttV 3*FI T曰才7 -IIS-? TN 17 司 TQ 7m 4463 M O 的41 -473司Q TY好71 7X1 J 学 f之如主/ I3ST3 St V N7N1?鼻J? 3。喙1 SXb?T 33X3 3*1 3-tTl 33* YJHU AX7 -I IM 重 4l :2 s/T NJl ? -tMWJIT3中 “ 4Eb 1?4Hi aT屯宁1F.卡qyI to M l扫? mvt 3口勺量* *立 aee-7 Ulf .h 4PVT 1送MM3 量前呼PVI 用。6P LU3:sa? -fMV mT ? atib* 397 青孑上4* 泞 ift 0 Jl Jfata46 41 3 1 f ZW? * TiK 誓 7 ?!343 dWM V laanM嗔日七73 y 433 1里中? -1HW-T 4*fl 中当日争,eJ,Y中?6 4H314 fl 辛排木&日阳3 3-(13 他口 3 BATIbttl 争用巧争 J! Kt II a鼻鼻a -IVjLx加I er?34i B3 0-111 3 a? Si 也1吗1?BH 4b3 J今 4HjX W THg#include2.3、输出结果为:实验六数组四、设计流程(算法描述)(请写出上机内容1的算法描述)设置两个变量分别指示头和尾。第一个和最后一个元素值互换,然后头和尾变量向里移动,最终到两变量相遇为止。五、程序清单实现将数组中的n个数据按逆序存放1 .编写程序:从键盘输入一审整数保存到数组中,调用函数antitone()将数组反序输出自定义函数voidantitone(inta口,intn)voidantitone(inta口,intn)inti,j;intk;i=0;j=n-1;while(ij)k=ai;ai=aj;aj=k;i+=1;j-=1;2 已知某数列的前两项为2和3,其后每一项为其前两项之积。编程实现:从键盘输入一个整数X,判断并输出x最接近数列的第几项?#includevoidMad(inta,intn)inti;a0=2;a1=3;for(i=2;iai;i+);k1=abs(x-ai-1);k2=abs(x-ai);if(k1k2)printf(themostsimilarxnumberis:%dn,ai);elseprintf(themostsimilarxnumberis:%dn,ai-1);return0;3 .编程实现:输入10个学生5门课的成绩并完成如下功能(1) 求每个学生的平均分;(2) 求每门课程的平均分。#include#include#definenum10typedefstructstudentcharname20;floatmath;floatenglis;floatcomputer;floatChinese;floathistory;STUDENT;intmain(void)STUDENTstunum;inti;floatscore,sum,average;chars10;floatscoreMath,scoreEng,scoreCom,scoreChi,scoreHis;for(i=0;inum;i+)printf(Name:);gets(stui.name);printf(mathscore:);scanf(%f,&score);stui.math=score;printf(englisscore:);scanf(%f,&score);stui.englis=score;printf(computerscore:);scanf(%f,&score);stui.computer=score;printf(Chinesescore:);scanf(%f,&score);stui.Chinese=score;printf(historyscore:);scanf(%f,&score);stui.history=score;gets(s);/功能是接受最后一个回车符,然后下一次gets(stui.name);才能起到作用/求每个学生的平均分数for(i=0;inum;i+)sum=0;sum+=stui.math;sum+=stui.englis;sum+=stui.computer;sum+=stui.Chinese;sum+=stui.history;average=sum/5;printf(%ssaveragescoreis:%fn,stui.name,average);/求每门课的平均成绩scoreMath=0;scoreEng=0;scoreCom=0;scoreChi=0;scoreHis=0;for(i=0;inum;i+)scoreMath+=stui.math;scoreEng+=stui.englis;scoreCom+=stui.computer;scoreChi+=stui.Chinese;scoreHis+=stui.history;printf(mathsaveragescoreis:%fn,scoreMath/num);printf(englissaveragescoreis:%fn,scoreEng/num);printf(computersaveragescoreis:%fn,scoreCom/num);printf(Chinesesaveragescoreis:%fn,scoreChi/num);printf(historysaveragescoreis:%fn,scoreHis/num);return0;实验七数组和函数四、程序清单(请写出上机内容2中函数的源代码)voidfun(intttMN,intppN)inti,j,max;for(j=0;jN;j+)max=tt0j;for(i=1;imax)max=ttij;ppj=max;五、调试和测试结果(写出上机内容1中填空的内容)(1)sum=0(2)姬(3)J(1)J(2)(3)ap+i实验八指针(1)四、程序清单100,放(请写出上机内容2中的函数)求出每个位上的数字,然后放在千位上的数字乘以1000,放在百位上的数字乘以在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+bl*100+al*10+b10;五、调试和测试结果(请写出上机内容1的输出结果)1(1)输出结果为:8,7,7,86(3) (1)x=10y=20x=20y=101int*p2&ai3】pi输入:123456输出:123456实验九指针(2)设计流程(算法描述)(请写出上机内容2中的算法描述)使用指针编程求数组元素之积o#includeintmain(void)inta=4,6,8,10,12,sum;int*p;sum=1;for(p=a;pave=0;for(i=0;iave+=a-si;a-ave/=N;五、调试和测试结果(请写出上机内容1的填空结果)上机内容1的填空结果(1) -sno(2)-name(3)&t实验十一共用体与枚举文件四、程序清单(请写出上机内容2中的程序源代码)#include#include#includeintmain(void)inti,sum;FILE*fd;chars10,*p,ch;if(fd=fopen(D:shi.txt,wt)=NULL)printf(creatthefilefailedn);exit(0);elsefor(i=1;i100;i+)if(i%3=0)&(i%5=0)printf(%d,i);itoa(i,s,10);/转换成字符串fputs(s,fd);fputc(,fd);printf(n);fclose(fd);/提取字符转换成数字输入if(fd=fopen(D:shi.txt,rt)=NULL)printf(openthefilefailedn);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);return0;实验十二参考答案实验十二参考答案:(可根据情况,弄清楚一个模块即可)题目:设某班有n位同学,每位同学的数据包括以下内容:学号(长整型)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。注:输入数据时,要求学号不能相同,姓名可以相同。设计思路:1) 程序运行时,首先显示主菜单(模块)如下:1 程序运行时,首先显示主菜单如下:2 新建数据2添加数据3删除数据4排序5查询6退出用户输入序号后,程序进行相应操作。2) 在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:1 数学成绩排序2程序设计成绩排序3总分排序。4返回主菜单选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信3在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:2 学号查询2姓名查询3数学成绩查询4程序设计成绩查询5总分查询6返回主菜单请按序号选择相应操作在子菜单中选择序号后,程序按以下方式工作。( 1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)( 2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)( 3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;( 4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。C源程序清单如下:#includestdio.h#includestdlib.h#includestring.h#includeconio.h#includemem.h#includectype.h#includealloc.h#defineN2typedefstructz1charno11;charname15;intscoreN;floatsum;floataverage;intorder;structz1*next;STUDENT;/*Functions*/STUDENT*init();/*initialize*/STUDENT*create();STUDENT*delete(STUDENT*h);STUDENT*searchno(STUDENT*h);voidprint(STUDENT*h);voidsearch(STUDENT*h);voidsave(STUDENT*h);STUDENT*load();STUDENT*insert(STUDENT*h);STUDENT*sort(STUDENT*h);STUDENT*index(STUDENT*h);intmenu_select();/*menu*/*main*/main()inti;STUDENT*head;head=init();clrscr();for(;)switch(menu_select()case1:head=init();break;case2:head=create();break;case3:head=delete(head);break;case4:print(head);break;case5:search(head);break;case6:head=searchno(head);break;case7:save(head);break;case8:head=load();break;case9:head=insert(head);break;case10:head=sort(head);break;case 11:case 12:case13:head=index(head);break;case0:exit(0);menu_select()char*menu=*MENU*1.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;chars3;intc,i;gotoxy(1,25);printf(pressanykeycontinuen);getch();clrscr();gotoxy(1,1);textcolor(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,menui);textbackground(BLACK);window(1,1,80,25);gotoxy(10,21);doprintf(nEnteryouchoice(013):);scanf(%s,s);c=atoi(s);while(c14);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-no0=0)break;/*whenthefirstnumberis0,break*/inputs(entername:(name,15);printf(pleaseinputscoresn);s=0;/*sissum,beginswith0*/for(i=0;iscorei);/*socre0storesmathsscores,socore1storesprogramscores*/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,intcount)charp255;doprintf(prompt);scanf(%s,p);if(strlen(p)count)printf(ntoolong!n);while(strlen(p)count);strcpy(s,p);/*Printinfor*/voidprint(STUDENT*h)inti=0;STUDENT*p;clrscr();p=h;printf(nnn*STUDENT*n)printf(|rec|NO.|name|maths|program|sum|order|n);
展开阅读全文