《C程序设计上机实验报告(完整编辑版).doc》由会员分享,可在线阅读,更多相关《C程序设计上机实验报告(完整编辑版).doc(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-+C语言程序设计上机实验报告学院: 机械工程学院班级: 机自161213 姓名: 刘昊 学号:20162181310实验时间:2017年3月6号 任课老师: 张锐 C语言程序设计上机实验报告实验一一、实验名称: C程序的运行环境和运行C程序的方法二、实验目的: 了解在C编译系统上如何编辑、编译、连接和运行一个C程序三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。四、源程序代码:代码1:运行结果1:程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本
2、身整除,还能被其它数整除,那么它就不是一个素数,因此,用for循环来进行整除过程的简写。代码2: 运行结果2: 程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3:运行结果3:程序分析3:使用if语句进行判断。五实验总结C语言程序设计上机实验报告实验二一、实验名称:顺序结构程序设计二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法,熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。三、实验内容:(1). 编写程序,实现小写字母转大写。(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。(3). 编写程序,
3、计算三角形面积、立方体的体积和表面积、圆的面积和周长。(4). 编写程序,实现单字符getchar和putchar输入输出。(5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。四、源程序代码代码1:运行结果1:程序分析1: 所有的字符都有一个对应的数字与之对应,每一个小写字母对应的数与大写字母对应的数之间总是相差32,所以只需要对所输入的字符进行减法运算就可以转换为与之对应的大写字母。代码2:运行结果2:程序分析2:简单的数据运算和格式字符的输出。代码3:运行结果3: 程序分析3: 简单的数据运算实现相应的功能。代码4:运行结果4:程序分析4: getchar函数的返回值是用户输入
4、的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.代码5:运行结果5:程序分析5:重要的是格式字符的使用,%d(输出十进制整型数) %o(以八进制格式输出整形数)%x(以十六进制格式输出整型数)%f(以带小数点的形式输出浮点数)%c(输出一个字符)%s(输出字符串,直到遇到0)五、实验总结C语言程序设计上机实验报告实验三一、实验名称:选择结构程序设计二、实验目的:正确使用逻辑运算符和逻辑表达式,熟练掌握if 语句和switch 语句,学习调试程序。三、实验内容:(1). 编写程序,用if 语句编程实现一分段函数的求解。(2).用if 语句编写程序,求一元二次方程的根。(
5、3). 用switch 语句编写程序,给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8090分为B,7079分为C,6069分为D,60分以下为E)。(4). 用switch 语句编写程序,输入一小于6位数的整数,判断它是几位,并逆序输出。(5). 用if 语句编写程序,判断某一年是否为闰年。四、源程序代码代码1运行结果1:程序分析1:使用if 函数对不同的输入参数进行不同的算术运算。代码2:运行结果2:程序分析2: 运用math库函数中的根号运算sqrt()函数实现求根公式的表达。代码3:运行结果3: 程序分析3: 运用switch语句对所有的情况分开,注意如果没有
6、break语句,那么判断到要执行的case后,其后面的语句也要执行。代码4:运行结果4:程序分析4:重要的是判断一个数几位数的算法:每次对10取整,记录一次,降低了一位位数,直到取整位0就降到了一位数,计数完毕。然后,对于不同的基数值,输出相应的判断结果。代码5:运行结果5:程序分析5:重要的是闰年判断条件“四年一闰,百年不闰;四百年一闰”的c语言表示:i%4=0&i%100!=0|i%400=0;五、实验总结C语言程序设计上机实验报告实验四一、实验名称: 循环控制程序设计二、实验目的: 掌握在程序设计中使用循环的方法实现一些常用算法(如:穷举、迭代和递推等)。三、实验内容: (1). 分别用
7、while语句、do-while语句和for 语句编写程序,求。 (2). 用while 语句编写程序,对输入一行字符的字母、数字、空格和其他字符的个数分别予以统计,并输出。(3). 用for 或while语句编写程序,输出所有的水仙花数。(4). 用for 语句编写程序,找出100-200间的所有素数。(5). 用for语句编写程序,实现规定图案的输出。四、源程序代码代码1运行结果1:程序分析1: 三种循环语句的使用。代码2:运行结果2:程序分析2:代码3:运行结果3: 程序分析3: 重要的是如何使用取整,取余运算符将一个数的每一位取出来。代码4:运行结果4:程序分析4:重要的是,素数的判断
8、条件的c表达:如果对于小于其本身的能能够把其整除,说明其不是一个素数,反之则为素数。代码5:运行结果5:程序分析5:重要的是发现打印空格和字符个数与打印第n行之间的数字关系,根据数量关系,利用for循环实现循环打印。五、实验总结C语言程序设计上机实验报告实验五一、实验名称:函数二、实验目的:掌握函数形参和实参的对应关系;以及“值传递”的方式,掌握函数的嵌套调用和递归调用的方法。三、实验内容:(1). 通过无参函数实现多行字串的输出;(2). 通过有参函数数据传递,用函数来实现:(a)两个数比较,输出其中较大的数;)(b)对给定的两个数求和;(3). 编写程序,用函数的嵌套调用来实现输入4个数,
9、找出其中最大的数。(4). 编写程序,用函数递归调用,计算n!; (5). 写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。四、源程序代码代码1:#includevoid fun1(char *b )int i;for(i=0;i7;i+)printf(%c,bi);printf(n);void fun2(char *d)int j;for(j=0;j7;j+)printf(%c,dj);main()char a8=A,B,C,D,E,F,G;char c8=H,I,J,K,L,M,N;fun1(a);fun2(c); 运行结果1:程序分析1:执行两次同样的输出函数。代码2:#i
10、ncludevoid fun1(double *b,double *d )double max;max=*b;if(*d*b)max=*d;printf(两个数中较大的数是%fn,max);void fun2(double *b, double *d)double j;j=*b+*d;printf(%f+%f=%fn,*b,*d,j);main()double a,c;printf(请输入两个数,数据之间用空格隔开n);scanf(%lf %lf,&a,&c); fun1(&a,&c);fun2(&a,&c); 运行结果2:程序分析2:将两个功能通过两个函数来单独完成,有利于程序的阅读。代码3
11、:#includeint max(int n1,int n2);int main()int i,j,k,l,m,n,o;printf(请输入四个数(用空格隔开)n);scanf(%d %d %d %d,&i,&j,&k,&l);m=max(i,j);n=max(k,l);o=max(m,n); printf(四个数中最大的数为%dn,o);return 0;int max(int n1,int n2)if(n1n2)return n1;elsereturn n2;运行结果3: 程序分析3:代码4:#includelong jc(int m);main()int n,jg;printf(-该程序
12、用来计算阶乘-n);printf(你要计算的是几的阶乘就输入几n);scanf(%d,&n);jg=jc(n);printf(%d的阶乘是%dn,n,jg); long jc(int m)if(m=0)return 1; elsereturn m*jc(m-1);运行结果4:程序分析4:5!=5*4*3*2*15!=5*4!; 4!=4*3!; 3!=3*2!; 2!=2*1!; 1!=1*0!; 0!=1;实现函数的直接递归调用,并且递归使用的是选择结构,一定会有结束递归调用的语句,例如上题中if(m=0)的执行语句:return 1;就结束了再次调用函数jc函数。代码5:运行结果5:程序分
13、析5:只需要传递一个简单的整形数据即可,注意功能函数()里的变量一定要注明类型。五、实验总结C语言程序设计上机实验报告实验六一、实验名称: 一维和二维数组二、实验目的:掌握与数组有关的排序算法:冒泡排序和选择排序。三、实验内容:(1). 用一维数组,对给定的一组数据逆序输出。(2). 用一维数组,对10个数进行由小到大的冒泡排序。(3). 用二维数组,求一个矩阵中的最大数据元素及所在的行列位置。(4). 用一维数组,对10个数进行由小到大的选择排序。(5). 用二维数组,求一个矩阵的转置矩阵。 四、源程序代码代码1:#includemain()int i,j,m,t, a100;printf(
14、请输入一维数组的元素个数(注意:数组元素个数最多为100):n);scanf(%d,&m); j=m-1;printf(请输入一维数组的元素(注意:每输入一个数据按回车再输入下一个数据):n);for(i=0;im;i+)scanf(%d,&ai);printf(你所输入一维数组为:);for(i=0;im;i+)printf(%dt,ai);printf(n);if(m%2=0)printf(该一维数组逆序输出为:);for(i=0;im/2;i+)t=ai;ai=aj;aj=t;j-;if(m%2!=0)printf(该一维数组逆序输出为:);for(i=0;i(m-1)/2;i+)t=a
15、i;ai=aj;aj=t;j-;for(i=0;im;i+)printf(%dt,ai); 运行结果1:程序分析1:代码2:#includemain()int i,j,m,t,a100;printf(请输入一维数组的列数(注意:列数最多为100):n);scanf(%d,&m);printf(请输入一维数组的元素(注意:每输入一个数据按回车再输入下一个数据):n);for(i=0;im;i+)scanf(%d,&ai); printf(你所输入的一维数组为:n);for(i=0;im;i+)printf(%dt,ai);for(i=1;im;i+)for(j=0;jaj+1)t=aj;aj=a
16、j+1;aj+1=t;printf(n);printf(你所输入的一维数组由小到大排序为:n);for(i=0;im;i+)printf(%dt,ai);运行结果2:程序分析2:代码3:#includemain()int i,j,m,n,p=1,o=1,max1,a100100;printf(请输入二维数组的行数(注意:行数最多为100):n);scanf(%d,&m); printf(请输入二维数组的列数(注意:列数最多为100):n);scanf(%d,&n); printf(请输入二维数组的元素(注意:每输入一个数据按回车再输入下一个数据,一行输入完后,再输入下一行):n);for(i=
17、0;im;i+)for(j=0;jn;j+)scanf(%d,&aij);printf(你所输入的二维数组为:n);for(i=0;im;i+)for(j=0;jn;j+)printf(%dt,aij);if(j=n-1)printf(n);max1=a00;for(i=0;im;i+)for(j=0;jmax1)max1=aij;o=j+1;p=i+1;printf(该数组中最大的数为%dn其位于该数组的第%d行第%d列,max1,p,o); 运行结果3: 程序分析3:代码4:#includemain()int i,j,m,t,a100;printf(请输入一维数组的列数(注意:列数最多为1
18、00):n);scanf(%d,&m);printf(请输入一维数组的元素(注意:每输入一个数据按回车再输入下一个数据):n);for(i=0;im;i+)scanf(%d,&ai); printf(你所输入的一维数组为:n);for(i=0;im;i+)printf(%dt,ai);for(i=0;im;i+)for(j=i+1;jm;j+)if(ajai)t=ai;ai=aj;aj=t;printf(n);printf(你所输入的一维数组由小到大排序为:n);for(i=0;im;i+)printf(%dt,ai);运行结果4:程序分析4:代码5: #includemain()int i,
19、j,m,n,t,a100100;printf(请输入二维数组的行数(注意:行数最多为100):n);scanf(%d,&m); printf(请输入二维数组的列数(注意:列数最多为100,因为是矩阵,要求行数等于列数):n);scanf(%d,&n); printf(请输入二维数组的元素(注意:每输入一个数据按回车再输入下一个数据,一行输入完后,再输入下一行):n);for(i=0;im;i+)for(j=0;jn;j+)scanf(%d,&aij);printf(你所输入的二维数组为:n);for(i=0;im;i+)for(j=0;jn;j+)printf(%dt,aij);if(j=n-
20、1)printf(n);for(i=0;im-1;i+)for(j=i+1;jn;j+)t=aij;aij=aji;aji=t;printf(你所输入的二维数组转置后为:n);for(i=0;im;i+)for(j=0;jn;j+)printf(%dt,aij);if(j=n-1)printf(n);运行结果5:程序分析5:五、实验总结C语言程序设计上机实验报告实验七一、实验名称:字符数组和字符串二、实验目的:学会字符数组的输入/输出和初始化;掌握对字符数组进行连接、复制和比较的函数,掌握对字符数组进行排序的有关算法;了解字符串变量及字符串数组的使用技巧。三、实验内容:(1). 用一维字符数组
21、,实现字符数组的输入/输出和初始化,及对字符数组进行连接、复制和比较运算。(2). 用一维字符数组,对输入一行字符的字母、数字、空格和其他字符的个数分别予以统计,并输出。(3). 用二维字符数组,实现输出钻石图形。(4). 用二维字符数组,对8个姓氏进行由小到大的冒泡排序(或选择排序)。(5). 用字符串数组,输入输出一组学生的简单信息。四、源程序代码代码1:#include#includevoid fun1(char*g ,char*h)int i,j,k;printf(a,b两个数组比较的结果为;n);j=strlen(g);k=strlen(h);for(i=0;ij;i+)printf
22、(%c,gi);printf(-);for(i=0;ik;i+)printf(%c,hi);printf(t);printf(%d,strcmp(g,h);printf(n);void fun2(char*c ,char*d)strcat(c,d);printf(a,b两个字符数组连接后的结果为:n );puts(c);printf(n);void fun3(char*e ,char*f)int m,i;strcpy(e,f);printf(把b字符数组复制粘贴到a字符数组后两个数组元素的情况为:n );m=strlen(e);for(i=0;im;i+)printf(a%d=%ct,i,ei
23、);printf(n);m=strlen(f);for(i=0;im;i+)printf(b%d=%ct,i,fi);main()char a100,b100;int i,m;printf(请输入第一个字符数组中的元素(注意:字符个数不得超过100,字符串结束符也占一个存储空间)n);gets(a);printf(a字符数组为:n );m=strlen(a);for(i=0;im;i+)printf(a%d=%ct,i,ai);printf(n);printf(请输入第二个字符数组中的元素(注意:字符个数不得超过100,字符串结束符也占一个存储空间)n);gets(b);printf(b字符数
24、组为:n );m=strlen(b);for(i=0;im;i+)printf(a%d=%ct,i,bi);printf(n);printf(n);fun1(a,b);printf(n);fun2(a,b);printf(n);fun3(a,b);运行结果1:代码2:#includeint main()printf(请输入字符串,按回车键结束n);char str100;int i=0;int num=0,ch=0,blank=0,other=0;gets(str);while(stri!=0)if(stri=A&stri=a&stri=0&stri=9) num+; else if(stri
25、= )blank+; elseother+; i+; printf(数字%d个,字母%d个,空格%d个,其他%d个n,num,ch,blank,other); return 0;运行结果2:程序分析2:代码3:#includeint main()int i,j,m=0,n=7;char a58;for(i=0;i5;i+)for(j=0;j8;j+)aij= ;for(j=1;j7;j+)a0j=*;for(i=1;i5;i+) aim=*;ain=*;m+;n-;for(i=0;i5;i+)for(j=0;j8;j+)printf(%c ,aij);printf(n);return 0;运行
26、结果3:代码4:#include#includeint main() int i, j; char a100100,t100; printf(-对8个姓氏进行由小到大的冒泡排序-n); printf(请依次输入姓氏的拼音n); for(i=0;i8;i+) printf(请输入第%d个姓氏的拼音:,i+1); gets(ai); for(i=0;i8-1;i+) for(j=0;j0 ) strcpy(t,aj); strcpy(aj,aj+1); strcpy(aj+1,t); printf(对8个姓氏进行由小到大进行重新排序的结果为:n); for(i=0;i8;i+) puts(ai);
27、 return 0;运行结果4:程序分析4:代码5:#include#includeint main() int i, j; char a100100; printf(请输入学生的姓名:);gets(a0); printf(请输入学生的性别:); gets(a1); printf(请输入学生的年龄:); gets(a2); printf(请输入该学生的学号); gets(a3); printf(该学生的简明信息为:n); printf(姓名t性别t年龄t学号n); for(i=0;i4;i+) printf(%st,ai); return 0;运行结果5:五、实验总结C语言程序设计上机实验报告
28、实验八一、实验名称: 指针二、实验目的:能正确使用数组的指针和指向数组的指针变量,以及字符串的指针和指向字符串的指针变量。三、实验内容:(1). 用指针和函数通过地址传递,实现输入三个数,按照由大到小的顺序输出; (2). 使用指向数组的指针变量,实现数组元素的输出 (3). 用一个函数实现两个字符的比较,函数原型为:int strcmp(char *p1,char *p2); (4). 两个字符串s1,s2由main()函数输入,strcmp函数的返回值也由main()函数输出; (5).用指针数组,实现对字符串进行由小到大的选择排序;用指向指针的指针,实现字符串的输出。四、源程序代码代码1
29、:#include#includeint main(void)int len=3,i,j,Temp;/printf(请输入你要建立一个多大的数组len=);/scanf(%d,&len);int *p=(int*)malloc(sizeof(int)*len);printf(请输入三个整数n);for(i=0;ilen;i+)scanf(%d,&pi);for(i=0;i2;i+)for(j=i+1;jpi)Temp=pi;pi=pj;pj=Temp; printf(你所输入的整数按照从大到小的顺序排序为:n);for(i=0;ilen;i+)printf(%dt,pi);free(p);p=
30、NULL;return 0; 运行结果1:代码2:#include#includeint main(void)int len,i;printf(请输入你要建立一个多大的数组len=);scanf(%d,&len);int *p=(int*)malloc(sizeof(int)*len);printf(请输入数组元素n);for(i=0;ilen;i+)scanf(%d,&pi);printf(你所输入的数组为:n);for(i=0;ilen;i+)printf(%dt,pi);free(p);p=NULL;return 0; 运行结果2:代码3:#include /当不包含头文件时,strcm
31、p()函数就是一个自定义的函数,因此本题的目的在于编写一个标准函数 int strcmp(char *s1,char *s2);void main()char str121,str221;printf(第一段字符为(最长为20):);gets(str1);printf(n第二段字符为(最长为20):);gets(str2);printf(n比较结果为%dn,strcmp(str1,str2);/strcmp函数实现两个字符串自左向右逐个字符相比(按ASCII值大小相比较,即做相减运算),直到出现不同的字符或遇0 int strcmp(char *s1,char *s2)int i=0;/用wh
32、ile循环来实现找到要求的字符/要求的字符为:从字符串的首字符开始,找到两个不相同的字符 /当s1和s2都没结束而且s1i和s2i相等时循环 while (s1i&s2i)&(s1i=s2i)/*s1i&s2i表示s1i和s2i都不为0,即都不是字符串结束标志 s1i=s2i表示当s1i和s2i相同 */i+;return s1i-s2i;运行结果3: 代码4:#include#include int fun_strcmp(char *p1,char *p2);int main()char s121,s221;printf(-实现两个字符的比较-n);printf(第一段字符为(最长为20);
33、gets(s1);printf(第二段字符为(最长为20));gets(s2);printf(比较结果是:%d,fun_strcmp(s1,s2);return 0; int fun_strcmp(char *p1,char *p2)return strcmp(p1,p2);运行结果4:程序分析4:因为strcmp函数内部做的是s1的ASCII值-s2的ASCII值,所以:当s1s2时,返回正数。代码5:#include#includeint main()char *pa=zhang,rui,shi,ge,lao,you,tiao,NULL;char *p;char *pTemp;/定义一个进行交换的临时变量int i,j;printf(将要处理的字符串为:n);for(p=pa;*p!=NULL;p+)printf(%st,*p);printf(n对上面的字符串按照首字母小到大的选择排序后的结果为:n);for(i=0;i6;i+)for(j=i+1;j7;j+)if(strcmp(paj,pai)0)pTemp=pai;pai=paj;paj=pTemp; for(p=pa;*p!=NULL;p+)printf(%st,*p);return 0;运行结果5:程序分析5:五、实验总结
限制150内