《(新)XX大学大一C语言程序设计实验室上机题全部代码答案(实验).docx》由会员分享,可在线阅读,更多相关《(新)XX大学大一C语言程序设计实验室上机题全部代码答案(实验).docx(28页珍藏版)》请在课桌文档上搜索。
1、C语言实验报告实验1-1:helloworld程序:源代码:#includemain()(printf(uhelloworld!nr);SyStem(pause);实验1-2:完成3个数据的输入、求和并输出计算结果的程序:源代码:#includemain()(inti,j,k,sum;SCanf(”d%d%d”,&i,&j,&k);sum=i+j+k;Printf(sum=%dsum);SyStem(pause);实验l-3!在屏幕上输出如下图形:ABBBCCCCC源代码:#includemain()(printf(An);printf(BBBn);printf(CCCCCn);system(
2、pause);实验2-1:计算由键盘输入的任何两个双精度数据的平均值源代码:#includemain()(doublea,b;scanf(,%lf%lf,a,feb);printf(u%.1lfno,(a+b)2);system(opausen);实验2-2:写一个输入7个数据的程序,把输入的数据代入a+b*(c-d)e*f-g表达式进行运算源代码:#includemain()(floata,b,c,d,e,f,g,x;SCanf(”f%f%f%f%f%f%F,&a,&b,&c,&d,&e,&f,&g);x=a+b*(c-d)e*f-g;printf(ox=%f*,x);SyStem(paus
3、e);实验2-3:编写一个C语言程序,测试下列各表达式:i+1J+1i,j+i,+ji+j源代码:#includemain()(iti=l,j=l;printf(u%d%dn,i+l,j+l);printf(,%d%dn,i+,j+);printf(u%d%dn,+i,+j);Printf(%dn,(i+)+(+j);SyStem(pause);实验2-4:输入存款金额money存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。interest=money(1+rate)ycar-money源代码:#includeincludemain
4、()(intyear=2;floatrate=0.1,money=1000;floatfutureMoney;futureMoney=money*pow(1+rate),year);printf(u%10.2,futureMoney);SyStem(pause);实验2-5:输入华氏温度,输出对应的摄氏温度0计算公式如下:c=5*(f-32)9其中,c表示摄氏温度,f表示华氏温度源代码:#includemain()(intc,f;SCanfe%d”,&f);c=5(f-32)9;printf(,%d,c);system(fpausen);实验3-1编写一个程序完成输入一个整数,输出它的符号源代
5、码:#includemain()(inti;scanf(t%dt5i);if(i0)Printf(”+);elsePrintlrJ);system(,pausen);实验3-2:请编写居民应交水费,并提供各种测试数据。居民应交水费y(元)与月用水量X(吨)的函数关系式如下:rOx15源代码:#includemain()(floatx,y;SCanf(”F,&x);if(x=0&x15)(y=2.5*x-10.5;printf(,%,y);system(,pausen);实验3-3:请根据输入的学生成绩给出成绩等级的判断,判断规则如下:如果输入的成绩大于等于90,则输出优秀;如果输入的成绩小于9
6、0、大于等于80,则输出良好;如果输入的成绩小于80、大于等于70,则输出中等;如果输入的成绩小于70、大于等于60,则输出及格;其他输出不及格源代码:#includemain()(intx;SCanf(%d,&x);if(x=9()PrintfC优秀n);elseif(x=80&x=70&x=60&x70)Pintfc及格n);elsePrintf(不及格n);system(,pausen);实验3-4:运输公司对用户计算运费。路程(三)越远,每公里运费越低。标准如下:s=250km没有折扣250ks500km2%折扣5OOkms1000km5%折扣1000kms2000km8%折扣2000
7、kms3000km10%折扣3000kms15%折扣设每公里每吨货物的基本运费为p,货物重为W,距离为S,折扣为d,则总运费的计算公式为:f-p*w*s*(1-d)请编程实现:从犍盘输入基本运费P,货物重W,距离S,计算输出用户最终需要支付的运费源代码:#includemain()(intp,w,s,f;SCanfe%d%d%d”,&p,&w,&s);floatd;f=p*w*s*(1-d);if(s=250)(d=0;printf(%du,f);Ielseif(s=25O&s=5(X)&s=l(XX)&s=2000&s=3OOO)(d=O.15;Printf(%d,f);system(t,p
8、ausen);实验4-1:己知xyz+yzz=532,其中x、y、Z都是数字(09),编写一个程序求出x、y、Z分别代表什么数字源代码:#includemain()intx,y,z;for(x=l;xv=9;x+)for(y=1;y=9;y+)for(z=1;z=9;z+)if(l00*x+10*y+z+100*y+l0*z+z=532)printf(,%d%d%d,x,y,z);SyStem(pause);实验4-2:编写一个程序打印如下对称图形(行数由键盘输入19范围的值),例如卜面是输入的数字4时的情形:4444444333332221222333334444444源代码:#includ
9、emain()(inti,j,k,n;Printf(请输入一个数字n);SCanf(%d,&n);i=n;for(i=0;i=n)k=2*n-2-i;for(j=0;jk;j+)pri11tf(h);for(j=02*(-k)-l;)+)printf(%d,n-k);printf(n);SyStem(pause”);实验4-3:学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数源代码:#includemain()inti;for(i=900;i=l100;i+)(if(i%5=2&i%7=3&i%3=1)(Printf(%drj);br
10、eak;SyStem(pause”);实验4-4:学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:A说:不是我。B说*是CC说:是DOD说:他胡说。已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人源代码:#includemain()(inti,j,a,b,c,d;for(i=0;i=4;i+)forO=0;j=4;j+)if(j=i)switch(j)case0:a=l;b=0;c=0;d=0;break;case1:a=0;b=1;c=0;d=0;break;case2:a=0;b=0;c=1;d=0;b
11、reak;case3:a=0;b=0;c=0;d=l;break;default:break;if(a+b+c=1&b+c=1&c+d=1&b+c+d=1)Printf(”做好事的人是%cni+宣);SyStem(pause);实验5-1:从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2-5-89750-89093480,经过处理后的数组为:-5-89-890007593482。由于不要求数组有序,所以不允许用排序方法源代码:#include#include#defineN10mai
12、n()(intaN=2,-5,-89,75,0,-89,0,93,48,0;inti,t,j;for(i=O;iN;i+)printf(,%4d,ai);Printf(n);for(i=0;ivN;i+)r(j=i+ljOfeaLjJO&aj=O)t=ai;aiaj=t;Ielseif(ai=O&a|j0)t=ai;aiJ=ajLajj=t;for(i=0;iN;i+)printf(%4d,ai);printf(n);system(pause);实验5-2:设数组a的定义如下:inta2O=2,4.6,8.O.I2,14,l6;己存入数组中的数据值己经按由小到大的顺序存放,现从键盘输入一个数据
13、,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能源代码:#includemain()(inta9=2,4,6,8,10,12,14,16;inti,j,number;Printf(原数组n);for(i=0;i=8;i+)输出数组原有的元素printf(%d,ai);Printf(n);Printf(请输入一个数据、n);scanf(o%d,number);i=0;以下三行找到插入位置while(ainumber&i=i;j-)/将插入点以后的元素顺序往后移一位aj+l=ajhai=number;/插入数据Printf(输出改变后的数组n);for(i=
14、0;i=8;i+)输出插入后仍有序的数组printf(%d,ai);SyStem(pause);实验5-3:写一个3X5矩阵的转置程序,输出其原矩阵的值和转置以后的结果源代码:#include#includemain()(inti,j;inta35=1,2,3,4,5,6,7,8,9,4,5,6,7,8,9;for(i=0;i3;i+)for(j=0;j5;j+)printf(%d,aij);printf(n);IPrintf(转置后的矩阵为n);for(i=0;i5;i+)forQ=0u3+)p1111tf(,%d,ai);printf(,);SyStem(“pause”);实验5-4:编程
15、实现随机产生IO个位于区间1002001互不相等的整数,并将其按降序排序和输出源代码:#include#include#include#definerandom(x)(rand()%101100)main()(intij,k,n;产生随机数inta10J;srand(int)time(O);for(i=0;i=9;i+)ai=random(200);printf(o%du,aiJ);printf(n);for(i=0;i=9;i+)排序k=i;for(j=i;j10;j+)if(akjaj)k=j;n=ai;ai=ak;ak=n;Printf(排序后的数组为n);for(i=0i+)print
16、f(%d,ai);system(pause);实验6.1:写一个函数intdigit(intn,intk),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3源代码:include#includeintdigit(intn,i11tk)inti,j,a,b;b=n%10;a=(n10)%10;j=(n100)%10;i=(n1000)%10;n=lOOO*i+1OO*j+1O*a+b;if(k=l)printf(%d,b);elseif(k=2)printf(%d,a);elseif(k=3)printf(%d,j);elseif(k=4)printf(
17、%d,i);main()(int,y;Printf(请输入一个数据n);SCanf(%d%d,&x,&y);digit(x,y);system(pause);实验6-2:写一个函数intisprime(intn),当n是质数时,函数返回非零值;当n是合数时,函数返回零值源代码:include#includeintisprime(intn)inti;for(i=2;isqrt(n);i+)if(n%i=O)判断return(0);elsereturn(1);main()intx;Printf(请输入一个数据n);SCanf(”d”,&x);Printf(%d,isprime(x);SyStem(
18、pause”);实验6-3:写一个函数reverse(chars口),将字符串Su中的字符串倒序输出。试分别用递归和非递归两种形式编写源代码:递归:#include#includeincludevoidres(chars,intlen)(if(len=O)(printf(l,%c,slen-1);len-;res(s,len);getchar();Ivoidreverse(charb)res(b,strlen(b);voidmain()(charaLOO;gets(a);reverse(a);system(,pausen);源代码:非递归:#include#includevoidreverse
19、(chars);voidmain()chars100;gets(s);reverse(s);voidreverse(chars)非递归调用的reverse函数(intjfi=0;do(+;while(si!=0);for(j=i-lj=(-)printf(%c,sj);printf(n);system(pause);实验6-4:写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性源代码:#includeintmax(intajntb)if(ab)returna;if(ab)returnb;main()inta,b;scanf(,%d%d,a,b);printf(%dn,m
20、ax(a,b);实验6-5s一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需耍通过子函数实现,输出的时候耍求5个数字一行源代码:#includestdio.hinthw(intn)(inta5,i,k=11,j;for(i=2;in/2;i+)if(n%i=O)return0;elsefor(i=0;imaxmidl)(max;fbund(s,max,min,l);else(min+;fbund(s,max,min,l);getchar();intmain(
21、)(inta100,i,n;for(i=0;i10;i+)SCanf(%d,&ai);SCanf(%d,fen);found(a,9,0,n);system(,pausen);实验7-1编写一个函数Char*delk(char*sp),把SP所指向的字符串中所有的$字符删除,并把处理后的字符串指针返回源代码:#include#includevoiddelchar(char*s,charc)(chars2(50;inti,j;for(i=0,j=0;si!=0;i+)if(si!=c)s2bJ=s;j+;s2UJ=t01;for(i=0;s2i!=O;i+)i=s2i;si=,h0,t;intm
22、ain()(charstr20=,tabcdef,;delchar(str,c);puts(str);system(,pause);实验7-2:写一个函数intfind(char*sLchar*s2),函数find的功能是查找串si中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔.源代码:includeintfind(char*sl,char*s2)(inti=0,j=0;char*p=s2;for(;sl!=0;sl+,i+)if(*sl!=*s2)s2=p;J=0;)if(*s1=*s2)+;$2+;if(*s2=0*)
23、(returni-j+2;return-1;intain()(char*sl=,IamagirT,*s2=am;printfC%do,find(sl,s2);printf(ln);实验7-3:编程实现将输入的十进制整数n通过函数DtOH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f源代码:#include#includeintDtoH(intn,inta)(inti=0;while(n!=O)intbit=n%16;ai=bit;i+;n=n16;returni;intmain()(intx;printf(,pleaseenteranumbern);
24、scanf(,%d,x);inta10=0;intnbits=DtoH(x,a);inti;Printf(转换后的数为n);for(i=nbits-l;i=O;i-)if(aij9)printf(o%c,*,ai-l0+,A,);elseprintf(u%do,ali);printf(,n1*);system(,pauseo);实验7-4:定义函数VOidMerge(inta,intn,intb,intm),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列请编程实现,
25、并编写main函数对其测试。源代码:#includevoidMerge(inta,intn,intbjntm)(int*p,*q,i,j,k;p=a;q=b;for(i=0;ivl();i+)(if(iO&*(p+i)v*(p+i-l)(气p+i)=*q:q+;for(i=0;i10;i+)for(j=i+J*(p+j)(k=*(p+i);*(p+i)=*(p+j);*(p+j)=k;main()inta10=2,3,5,7,9,b5=l,4,6,8,10;inti;Merge(a,10,b,5);for(i=0;i10;i+)printf(,%3d,ai);实验8-1:编写一个书名排序程序,
26、输入10个书名存入一个二维数组,用函数voidsortstring(char*nameJ,intn)实现它们的字典顺序。源代码:#includeincludevoidsortstring(char*name,intn)(char*p;inti,j;for(i=0;in-l;i+)for(j=ihjO)(p=namei;namei=namej;namej=p;main()char*name=,hello,nWorld1Vstart*,nend,then,firstJfoiIoW,watch”,see,hear;inta;sortstring(name,10);for(a=0;a10;a+)pri
27、ntf(,%snrnamea);实验8-2:编写函数VoidSeaIch(char*s1,char*s2,char*s3)。函数SearCh()从己知的两个字符串si与s2中找出它们都包含的最长的单词放入字符串S3,约定字符串中只有小写字母和空格字符,单词用1个或1个以上空格分隔源代码:#include#include#includevoidsearch(char*sl,char*s2,char*s3)char*p;intword,i,m,n;chara20;P=s1;s30=,0,;while(*p!=0)word=0;for(i=O;pi!+(y;i+)记录单词的长度i(if(pi!三,*
28、&word=0)word=1;m=i;Ielseif(pi=&word=l)(n=i;break;Iif(p|i=0&word=l)n=i;if(word=l)A单词复制到atemp中strncpy(a,p+m,n-m);an-m=W;/puts(s3);char*pfind;/StrStr:找出atemp字符串在s2字符串中第一次出现的位置Qif(pfind=strstr(s2,a)!=NULL)(/finded只是找到包含,如果完全一致,应该将找到对应的单词取出来再比较if(*(pflnd+strlen(a)=,*(pfind+strlen(a)=,O)if(strlen(a)strlen
29、(s3)strcpy(s3,a);p三p+n;elsebreak;main()(char*s1=Whafsyourname”;char*s2=Mynameis007;chars320;search(sl,s2,s3);Printf(%sns3);实验8-3:编写一个主函数,测试上述两个函数的正确性。结果如上两题所示。实验8-4:输入一个字符串,内有数字和非数字字符,例如:A123cdf456.78cpc876.9er849.1将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a0,456.78存放在a2,依次类推,统计共有多少个数,并输出这些数。源代码:#includevoi
30、df(char*sp,floaib)char*p;floatvalue;intpower,i=0,j=0;P=sp;while(*p)fbr(;!(*p=O&*p=0&*p=0&*p=9);p+j+)value=value*10+*p-*0power=power*10;1value=valuepower;bj+l=value;Prindr数字个数为:%dni);voidmain()tj;floatb4=(0;char*a=,A123cdf456.78cpc876.9er849.,;f(a,b);for(j=04y+)printf(r%.2n,bj);实验9-1:编写一个建立单徒表的函数,设链表
31、的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号杳学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。源代码:#includestructstudentintnum;charname20;floatscore;stu=lJzeng98M2Jp.90,3Jw.90,4Jwang89H;main()i11tij;Printf(请输入学号:n);scanf(H%d*&i);for(j=0a4y+)if(stuj.nun=i)rintf(,%4d%8s%12fn,stuj.num,stujj.name,stujcore);实验9-2:编一程序,能把从终
32、端输入的一个字符串中的小写字母全部转换成大写字母,要求输入的字符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结果(用字符!表示输入字符串的结束)。源代码:#includestructstrchara;intnum;s10;main()inti=0;Prirnf(请输入字母,以!为结束标志n);while(1)scanf(M%c*&si.a);if(si.a!=,!)si.num=i+l;elsebreak;if(si.a,Z,)sli.a=si.a-32;printf(,%c,%dn
33、,sli.a,sli.num);i+;实验9-3:在本实验的实验内容1的基础上,实现在链表元素index之前插入元素的操作InSert(structnode*head,intindex)和删除指定位置元素的操作Delete(structnode*head,intindex),并编写主函数测试。源代码:#include#include#include#includestructstudentcharname15;charnum15;charrisk15;structstudent*next;structstudent*fun()(structstudent*p,*q,*head;q=head=N
34、ULL;charstr15=,0t);Printfr请依次输入学生的姓名,学号,成绩T以0作为结束标志);While(I)(SCanf(%s,str);if(strOJ=,O,)break;p=(structstudent*)malloc(sizeof(structstudent);strcpy(p-name,str);SCanf(%s,p-num);SCanf(%sprisk);if(head=NULL)head=q=p;else(q-next=p;q=p;Iq-next=NULL;returnhead;structstudent*park(structstudent*head)inti;c
35、harstr15;structstudent*p,*q;Printf(你想要删除某个学生的信息吗?是/否(l0)n“);SCanf(”d,&i);if(!i)returnhead;Printf(”请输入你想要删除的学生姓名n”);scanf(,%s,str);for(p=head,q=NULL;p!=NULL;q=p,p=p-next)if(!strcmp(p-name,str)break;If(P=NULL)Printf(没有你要删除的学生的信息n);returnhead;else(if(q=NULL)head=p-next;else(q-next=p-next;free(p;Ireturn
36、head;structstudent*wall(structstudent*head)(inti,j,k=l;structstudent*p,*q,*r;Printf(你想要添加某个学生的信息吗?是/否(l/O)n);scanf(%d,&i);f(!i)returnhead;Printf(请输入你想要添加的学生的信息:(依次为:姓名,学号,成绩)n);p=(structstudent*)malloc(sizeof(structstudent);scanf(%s,p-name);scanf(%s,p-num);scanf(%s,p-risk);PrintfC请输入你想要添加到的位置n);scanf(%d,fcj);