《大学大一c语言程序设计实验室上机题全部代码答案(实验报告)(共30页).doc》由会员分享,可在线阅读,更多相关《大学大一c语言程序设计实验室上机题全部代码答案(实验报告)(共30页).doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上C语言实验报告实验1-1:hello world程序:源代码:#includemain() printf(hello world!n); system(pause); 实验1-2:完成3个数据的输入、求和并输出计算结果的程序:源代码:#includemain() int i,j,k,sum; scanf(%d%d%d,&i,&j,&k); sum=i+j+k; printf(sum=%d,sum); system(pause); 实验1-3:在屏幕上输出如下图形:A BBB CCCCC源代码:#includemain() printf( An); printf( BB
2、Bn); printf( CCCCCn); system(pause); 实验2-1:计算由键盘输入的任何两个双精度数据的平均值源代码:#includemain() double a,b; scanf(%lf%lf,&a,&b); printf(%.1lfn,(a+b)/2); system(pause); 实验2-2:写一个输入7个数据的程序,把输入的数据代入a + b * (c d ) / e * f g 表达式进行运算源代码:#includemain() float a,b,c,d,e,f,g,x; scanf(%f%f%f%f%f%f%f,&a,&b,&c,&d,&e,&f,&g);
3、x=a + b * (c - d ) / e * f - g; printf(x=%f,x); system(pause); 实验2-3:编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i+ , j+ +i , +j i+j源代码:#includemain() int i=1,j=1; printf(%d %dn,i+1,j+1); printf(%d %dn,i+,j+); printf(%d %dn,+i,+j); printf(%dn,(i+)+(+j); system(pause); 实验2-4:输入存款金额money,存期year和年利率rate,根据下
4、列公式计算存款到期时的利息interest(税前),输出时保留2位小数。 interest = money(1+rate)year - money源代码:#include#includemain() int year=2; float rate=0.1,money=1000; float futureMoney; futureMoney=money*pow(1+rate),year); printf(%10.2f,futureMoney); system(pause); 实验2-5:输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9 其中,c表示摄氏温
5、度,f表示华氏温度源代码:#includemain()int c,f;scanf(%d,&f);c = 5 * ( f - 32) / 9;printf(%d,c);system(pause);实验3-1:编写一个程序完成输入一个整数,输出它的符号源代码:#includemain() int i; scanf(%d,&i); if(i0) printf(+); else printf(-); system(pause); 实验3-2:请编写居民应交水费,并提供各种测试数据。 居民应交水费y(元)与月用水量x(吨)的函数关系式如下: 0 x 15源代码:#includemain()float x
6、,y;scanf(%f,&x);if(x=0&x15)y=2.5*x-10.5;printf(%f,y); system(pause);实验3-3:请根据输入的学生成绩给出成绩等级的判断,判断规则如下: 如果输入的成绩大于等于90,则输出优秀; 如果输入的成绩小于90、大于等于80,则输出良好; 如果输入的成绩小于80、大于等于70,则输出中等; 如果输入的成绩小于70、大于等于60,则输出及格; 其他输出不及格源代码:#includemain()int x;scanf(%d,&x);if (x=90)printf(优秀n);else if (x=80&x=70&x=60&x70)printf
7、(及格n);elseprintf(不及格n);system(pause);实验3-4:运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下: s = 250km 没有折扣 250km s 500km 2%折扣 500km s 1000km 5%折扣 1000km s 2000km 8%折扣 2000km s 3000km 10%折扣 3000km s 15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为: f = p * w * s * ( 1 d ) 请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费源代
8、码:#includemain()int p,w,s,f;scanf(%d%d%d,&p,&w,&s);float d;f = p * w * s * ( 1 - d );if (s=250)d=0;printf(%d,f);else if (s=250&s=500&s=1000&s=2000&s=3000) d=0.15;printf(%d,f);system(pause);实验4-1:已知xyz + yzz = 532,其中x、y、z都是数字(09),编写一个程序求出x、y、z分别代表什么数字源代码:#includemain() int x,y,z; for(x=1;x=9;x+) for(
9、y=1;y=9;y+) for(z=1;z=9;z+) if(100*x+10*y+z+100*y+10*z+z=532) printf(%d %d %d,x,y,z); system(pause); 实验4-2:编写一个程序打印如下对称图形(行数由键盘输入19范围的值),例如下面是输入的数字4时的情形: 33333 222 1 222 33333 源代码:#includemain() int i,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+) printf( ); for(j
10、=0;j2*(n-k)-1;j+) printf(%d,n-k); printf(n); system(pause);实验4-3:学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数源代码:#includemain() int i; for(i=900;i=1100;i+) if(i%5=2&i%7=3&i%3=1) printf(%dn,i); break; system(pause); 实验4-4:学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下: A说:不是我。 B说:是
11、C。 C说:是D。 D说:他胡说。 已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人源代码:#includemain() int i,j,a,b,c,d; for(i=0;i=4;i+) for(j=0;j=4;j+) if(j=i) switch(j) case 0:a=1;b=0;c=0;d=0; break; case 1:a=0;b=1;c=0;d=0; break; case 2:a=0;b=0;c=1;d=0; break; case 3:a=0;b=0;c=0;d=1; break; default:break; if(a+b+c=1&b+c=1&c+d=
12、1&b+c+d=1) printf(做好事的人是%cn,i+a); system(pause); 实验5-1:从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法源代码:#include#include#define N 10main()int aN=2,-5,-89,75,0,-89,0,93,48,0;int i,t
13、,j;for(i=0;iN;i+)printf(%4d,ai);printf(n);for(i=0;iN;i+)for(j=i+1;j0&aj0&aj=0)t=ai;ai=aj;aj=t;else if(ai=0&aj0)t=ai;ai=aj;aj=t;for(i=0;iN;i+)printf(%4d,ai);printf(n);system(pause);实验5-2:设数组a的定义如下:int a20 = 2,4,6,8,10,12,14,16; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现
14、上述功能源代码:#includemain() int a9=2,4,6,8,10,12,14,16; int i,j,number; printf(原数组n); for(i=0;i=8;i+)/输出数组原有的元素 printf(%d ,ai); printf(n); printf(请输入一个数据n); scanf(%d,&number); i=0;/以下三行找到插入位置 while(ainumber&i=i;j-)/将插入点以后的元素顺序往后移一位 aj+1=aj; ai=number;/插入数据 printf(输出改变后的数组n); for(i=0;i=8;i+)/输出插入后仍有序的数组 p
15、rintf(%d ,ai); system(pause); 实验5-3:写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果源代码:#include#includemain()int i,j;int a35=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); printf(转置后的矩阵为n);for(i=0;i5;i+) for(j=0;j3;j+) printf(%d ,aji); printf(n); system(pause);实验5-4:编程实现随机产生1
16、0个位于区间100 200互不相等的整数,并将其按降序排序和输出源代码:#include#include#include#define random(x)(rand()%101+100)main() int i,j,k,n;/产生随机数 int a10; srand(int)time(0); for(i=0;i=9;i+) ai=random(200); printf(%d ,ai); printf(n); for(i=0;i=9;i+)/排序 k=i; for(j=i;j10;j+) if(akaj)k=j; n=ai; ai=ak; ak= n; printf(排序后的数组为n); for
17、(i=0;i10;i+) printf(%d ,ai); system(pause); 实验6-1:写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3源代码:#include#includeint digit(int n,int k) int i,j,a,b; b=n%10; a=(n/10)%10; j=(n/100)%10; i=(n/1000)%10; n=1000*i+100*j+10*a+b; if(k=1) printf(%d,b); else if(k=2) printf(%d
18、,a); else if(k=3) printf(%d,j); else if(k=4) printf(%d,i); main() int x,y; printf(请输入一个数据n); scanf(%d%d,&x,&y); digit(x,y); system(pause); 实验6-2:写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值源代码:#include#includeint isprime(int n) int i; for(i=2;isqrt(n);i+) if(n%i=0)/判断 return (0); else return
19、 (1); main() int x; printf(请输入一个数据n); scanf(%d,&x); printf(%d,isprime(x); system(pause); 实验6-3:写一个函数reverse( char s),将字符串s中的字符串倒序输出。试分别用递归和非递归两种形式编写源代码:递归:#include#include#includevoid res(char s,int len)if(len=0)printf(%c,slen-1);len-;res(s,len);getchar();void reverse(char b)res(b,strlen(b);void mai
20、n()char a100;gets(a);reverse(a);system(pause);源代码:非递归:#include#includevoid reverse(char s);void main()char s100;gets(s);reverse(s);void reverse(char s) /非递归调用的reverse函数int j,i=0;doi+;while(si!=0);for(j=i-1;j=0;j-)printf(%c,sj);printf(n);system(pause);实验6-4:写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性源代码:#i
21、ncludeint max(int a,int b)if(ab)return a;if(ab)return b;main()int a,b;scanf(%d%d,&a,&b);printf(%dn,max(a,b);实验6-5:一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行源代码:#includestdio.hint hw(int n)int a5,i,k=n,j;for(i=2;in/2;i+)if(n%i=0
22、)return 0;elsefor(i=0;i5;i+)ai=k%10;k=k/10;if(n=a0*10000+a1*1000+a2*100+a3*10+a4)return 1;elsereturn 0;int main()int i,s,j=0;for(i=10000;imax|midl)max-;found(s,max,min,l);elsemin+;found(s,max,min,l);getchar();int main()int a100,i,n;for(i=0;i10;i+)scanf(%d,&ai);scanf(%d,&n);found(a,9,0,n);system(paus
23、e); 实验7-1:编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回源代码:#include#includevoid delchar(char *s,char c) char s250; int i,j; for(i=0,j=0;si!=0;i+) if(si!=c) s2j=si; j+; s2j=0; for(i=0;s2i!=0;i+) si=s2i; si=0; int main() char str20=abcdef; delchar (str,c); puts(str); system(pause); 实
24、验7-2:写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。源代码:#include int find(char *s1,char *s2) int i=0,j=0; char *p=s2; for(;s1!=0;s1+,i+) if(*s1!=*s2) s2=p; j=0; if(*s1=*s2) j+; s2+; if(*s2=0) return i-j+2; return -1; int main() char *s1=
25、I am a girl,*s2=am; printf(%d,find(s1,s2); printf(n); 实验7-3:编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f源代码:#include#includeint DtoH(int n,int a) int i=0; while(n!=0) int bit=n%16; ai=bit; i+; n=n/16; return i; int main() int x; printf(please enter a numbern); scanf(%d,&x); in
26、t a10=0; int nbits=DtoH(x,a); int i; printf(转换后的数为n); for(i=nbits-1;i=0;i-) if(ai9) printf(%c,ai-10+A); else printf(%d,ai); printf(n); system(pause);实验7-4:定义函数void Merge(int a, int n, int b, int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main
27、函数对其测试。源代码:#include void Merge(int a,int n,int b,int m) int *p,*q,i,j,k; p=a; q=b; for(i=0;i0&*(p+i)*(p+i-1) *(p+i)=*q; q+; for(i=0;i10;i+) for(j=i+1;j*(p+j) k=*(p+i); *(p+i)=*(p+j); *(p+j)=k; main() int a10=2,3,5,7,9,b5=1,4,6,8,10; int i; Merge(a,10,b,5); for(i=0;i10;i+)printf(%3d,ai); 实验8-1:编写一个书名
28、排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char *name , int n)实现它们的字典顺序。源代码:#include #include void sortstring(char *name,int n) char *p; int i,j; for(i=0;in-1;i+) for(j=i+1;j0) p=namei; namei=namej; namej=p; main() char *name=hello,world,start,end,then, first,follow,watch,see,hear; int a; sortstring(name,10); for(a=0;a10;a+) printf(%sn,namea); 实验8-2:编写函数void search( char *s1, c