C语言作业(实验报告.doc

上传人:jian****018 文档编号:9129976 上传时间:2020-04-03 格式:DOC 页数:51 大小:1.34MB
返回 下载 相关 举报
C语言作业(实验报告.doc_第1页
第1页 / 共51页
C语言作业(实验报告.doc_第2页
第2页 / 共51页
C语言作业(实验报告.doc_第3页
第3页 / 共51页
点击查看更多>>
资源描述
程序设计基础(c语言)实践报告 专 业 : 计算机科学与技术班 级 : 信息大类1303 姓 名 : 蒋国辉 学 号 : 1130299090 教 师 : 程序设计基础(c语言)课程组教师寄语课程简介程序设计基础是计算机相关专业的专业基础课,其目的是为了培养学生程序设计的技能,使学生掌握程序设计的基本思想和方法,培养学生用计算机解决实际问题的能力。该课程是后续理论和实践教学的基础和重要工具,将直接影响到专业兴趣的培养,后续专业课程教学内容的实施。课程内容本课程教学的主要内容包括:1、程序与程序设计的基本概念;算法与算法的表示;结构化程序设计方法等。2、C语言的基本组成,C程序的基本结构;C程序的上机过程;C语言的数据类型和各类运算规则。3、顺序程序设计;选择结构程序设计;循环控制;函数;指针;结构体和文件等。4、C程序的模块化结构;函数的定义与调用,包括函数的递归调用;变量存储属性;工程文件的建立和使用;编译预处理;库函数简介;文件的概念;文件的建立、打开与关闭;各种文件的读写方法。补充说明1、本课程作为一种与计算机“沟通”的语言工具,在某种程度上讲,和普通话、英语有一些类似。对初学者而言,最好的学习方式就是在基本的语法规则框架下,不断的模仿和重复训练,最畏惧和担心的就是灵活与多变。只有不畏惧,才能敢模仿,敢写、敢调试。才能避免掉入语法漩涡止步不前。2、课程共设8个单元,对于每个单元的实践内容,按照基础训练和差异化训练相结合的思想,设置了多道编程题目,同学们在每个单元可以根据实际情况,可选做3道,鼓励在有精力的情况下尽可能多练习。3、课程的源码可以手写也可以打印出来粘贴,对程序运行结果打印粘贴。4、单元内容即是平时基本功的训练,也可当做理论考试的复习。实验1 顺序结构程序设计一、实验目的1. 熟悉C语言的编程环境,掌握C程序运行的一般步骤;2. 掌握C语言中数据的输入输出方法,常用输入/输出函数的使用;3. 掌握顺序结构程序设计方法,能编写简单的C程序;二、实验内容1、编写程序,输入一个四位数,打印输出其个位数、十位数、百位数和千位数。2、 编写程序,从键盘上输入两个电阻的值,求它们并联和串连的电阻值,输出结果保留两位小数。3、编写一个程序,从键盘上输入学生的三门课程成绩,求总成绩和平均成绩。4、输入一元二次方程的三个系数,求根。5、输入三角形的三个边长a,b,c,输出面积s。6、打印 5 2 0+ 1 3 1 41 8 3 4 * 1 0三、实验源码及测试数据1.编写程序,输入一个四位数,打印输出其个位数、十位数、百位数和千位数。#include void main()int a,b,c,d,e;scanf(%d,&a);b=a/1000;c=(a-b*1000)/100;d=(a-b*1000-c*100)/10;e=a-b*1000-c*100-d*10;printf(千位数=%dn百位数=%dn十位数=%dn个位数=%dn,b,c,d,e);2、 编写程序,从键盘上输入两个电阻的值,求它们并联和串连的电阻值,输出结果保留两位小数。#include void main()double a,b,c,d;scanf(%lf%lf,&a,&b);c=1/(1/a+1/b);d=a+b;printf(并联=%.2fn串联=%.2fn,c,d);3、编写一个程序,从键盘上输入学生的三门课程成绩,求总成绩和平均成绩。#include void main()double a,b,c,d,f;scanf(%lf%lf%lf,&a,&b,&c);d=a+b+c;f=d/3;printf(总和=%.2fn平均=%.2fn,d,f);4、 输入一元二次方程的三个系数,求根。#include #include void main()double a,b,c,d,e,f,X1,X2;scanf(%lf%lf%lf,&a,&b,&c);d=b*b-4*a*c;e=-b/(2*a);f=sqrt(d)/(2*a);X1=e+f;X2=e-f;printf(x1=%.2fnx2=%.2fbn,X1,X2);5、 输入三角形的三个边长a,b,c,输出面积s。#include #include void main()double a,b,c,p,d,s;scanf(%lf%lf%lf,&a,&b,&c);p=(a+b+c)/2.0;d=p*(p-a)*(p-b)*(p-c);s=sqrt(d);printf(面积=%.2fn,s);6、打印 5 2 0+ 1 3 1 41 8 3 4 * 1 0#include void main()printf( 5 2 0n +1 3 1 4n 1 8 3 4 * 10n);1.有一个函数 用scanf函数输入x的值(分别为x1、110、10三种情况),求y值。1#include int main()int x,y;scanf(%d,&x);if(x=10)y=3*x-11;printf(%dn,y);if(x=1&x10)y=2*x-1;printf(%dn,y);return 0;2、输入3个整数,要求按由小到大的顺序输出。2#include int main()int a,b,c,t;scanf(%d%d%d,&a,&b,&c);if(ab)t=a; a=b; b=t;if(ac)t=a; a=c; c=t;if(bc)t=b; b=c; c=t;printf(从小到大排列%d%d%dn,a,b,c);3根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积。#include #include int main()double a,b,c,s,p,d,t;scanf(%lf%lf%lf,&a,&b,&c);if(ab)t=a; a=b; b=t;if(ac)t=a; a=c; c=t;if(bc)t=b; b=c; c=t;if(c0,输出方程X1,X2的解。当a0,0,输出无实根。#include #include void main()double a,b,c,d,e,f,X1,X2,x;scanf(%lf%lf%lf,&a,&b,&c);if(0=a&0=b)printf(不是方程n);if(0=a&0!=b)x=-c/b;printf(%.2fn,x);if(0!=a&0!=b)d=b*b-4*a*c;e=-b/(2*a);f=sqrt(d)/(2*a);X1=e+f;X2=e-f;printf(x1=%.2fnx2=%.2fbn,X1,X2);5、键盘输入一个至多五位数,判断它是几位数,并将该数逆序输出。例:输入1456,输出结果是:四位数,逆序后:6541。#include int main ()int n; scanf(%d,&n); int num=0; int re=0; int temp; while(n)num+; temp = n%10; re=re*10+temp; n=n/10; printf(位数=%dn,num); printf(倒序=%dn,re); return 0;#include #include int main ()char str255; int i;scanf(%s,str);printf(位数=%dn,strlen(str);printf(倒序=);for(i=0;istrlen(str);i+)printf(%c,strstrlen(str)-i-1);printf(n);return 0;7、编写程序,要求从键盘输入成绩,输出对应的等级(100分为A,90-99为B,80-89为C,70-79为D,60-69为E,小于60为F)。7#include void main()int a;scanf(%d,&a);if(100=a)printf(An);if(a=90&a=80&a=700&a=600&a=69)printf(En);if(a=60)printf(Fn);8、设计一个简单的计算机程序,用户输入运算数和四则运算符(+、-、*、/),输出计算结果。#includeint main() int a,b; char c;scanf(%d%c%d,&a,&c,&b);switch(c)case+:printf(a+b=%dn,a+b);break; case-:printf(a-b=%dn,a-b);break; case*:printf(a*b=%dn,a*b);break; case/:printf(a/b=%dn,a/b);实验3循环结构程序设计一、实验目的1、掌握用while语句,do-while语句和for语句实现循环的方法。2、掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。3、调试程序的技巧。二、实验内容1、 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。#includemain() int space,letter,number,other; space=0;letter=0;number=0;other=0; char c; for (c=getchar();c!=n;c=getchar() if (c64) letter+; else if (c=32) space+; else if(c=48&c=57) number+; else other+; printf(空格=%d,字母=%d,数字=%d,其他=%dn,space,letter,number,other);2、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。#includemain()int i,s;i=1;s=1;while(i10)s=(s+1)*2;i+; printf(总数=%dn,s);3、用for 语句求1 到100中是 3的倍数的数的和。#includemain()int i,s;s=0;for(i=0;in2),k1k2同上。#include#includeint main()int n1,n2,k1,k2,res1=0,res2=0,i=0,jie=1,k;scanf(%d%d%d%d,&n1,&n2,&k1,&k2); while(n2n1 & k2k1)printf(输错重输n);scanf(%d%d%d%d,&n1,&n2,&k1,&k2); while(i=n2)res1=res1+2*i*i; i+;for(i=k1;i=k2;i+)k=1;while(k=i)jie=jie*k;k+;res2+=jie * (int)pow(-1,i);printf(结果=%dn,res1+res2); 1005求 n!+(n3-3n2+2)(-1)n n=1#include#includevoid main()int i=1,sum=0,s1=0,s2=1,k=1,n=1;while(i=5)s1=(n*n*n-3*n*n+2)*int(pow(-1,n); s2=s2*n; n+;sum=sum+s1+s2;i+;printf(%dn,sum);6、 找出5000以内所有完数。完数:一个数是它所有的因子的和。#includevoid main()int j,i,sum; for(i=0;i=5000;i+) sum=0; for(j=1;ji;j+) if(i%j=0) sum=sum+j; if(sum=i)printf(%dn,i);7、 任意输入10个数,分别算出其中负数和正数的个数#includemain()int i,j,k,n;i=0;j=0;k=0;while(i10)scanf(%d,&n);if(n0)k+;i+;printf(fushu=%dnzhengshu=%dn,j,k);8、.键盘输入字符串,遇#结束,分别统计字母、数字和其它字符个数。#includemain() int space,letter,number,other; space=0;letter=0;number=0;other=0; char c; for (c=getchar();c!=#;c=getchar() if (c64) letter+; else if (c=32) space+; else if(c=48&c=57) number+; else other+; printf(空格=%d,字母=%d,数字=%d,其他=%dn,space,letter,number,other);9、计算1-100内所有含有6的数的和。#includemain()int i,sum;sum=0;for(i=1;i=100;i+)if(60=i&i=69|i%10=6)sum=sum+i;printf(1-100内所有含有6的数的和=%dn,sum);10、输出所有3位水仙花数。所谓水仙花数是指所有位的数字的立方和等于该数。例:153=13+53+33。 #include#includemain()int i,a,b,c,s;for(i=100;i1000;i+) a=i/100; b=(i-a*100)/10; c=(i-a*100-b*10); s=pow(a,3)+pow(b,3)+pow(c,3); if(i=s) printf(%dn,i); b11、梯形法求数值积分。F(x)= (4-X*X)0.5dx。 a12、用二分法求3X3+2X2-4X=6的解。#include#include#define f(x) (3*pow(x,3)+2*pow(x,2)-4*x-6)void main() float a=-10000,b=10000,c,eps=1e-5; while (b-a)eps) c=(a+b)/2; if(f(c)=0) break;else if(f(a)*f(c)0) b=c; else a=c; printf(root=%fn,c);13、用牛顿迭代法求3X3+2X2-4X=6的解。14、利用循环嵌套,输出九九乘法表。 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 4 6 8 10 #include void main()int i,j;printf(输出九九乘法表);for (i=1;i=9;i+)for (j=1;j=i;j+)printf(%d*%d=%dt,j,i,i*j);printf(n);15、观察数列,输出其前20项,每4个数一行,每个数占8列。 2 ,2, 4, 4, 6, 16, 8#include#includemain()int i;int a100;a1=a2=2;for(i=3;i=20;i+)if(i%2!=0)ai=(i-1)+2;elseai=int(pow(ai-2,2);for(i=1;i=20;i+)printf(%8d,ai);if(i%4=0)printf(n);16、编写程序输出下面图形。12 34 5 67 8 9 0实验4数组一、实验目的1、掌握一维数组和二维数组的定义、赋值和输入输出的方法;2、掌握字符数组和字符串函数的使用;3、掌握与数组有关的算法(特别是排序算法)。二、实验内容1、用冒泡排序法对10个整数排序。10个整数用scanf函数输入。#includevoid main()int a11; int i,j,t;for(i=0;i10;i+)scanf(%d,&ai);for(j=0;j=10;j+) for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=1;i11;i+)printf(%3d,ai);2、 有15个数存放在一个数组中,输入一个数,要求查找该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。#includevoid main () int b15,sign,i,a;sign=0;printf(shurushigeshun );for(i=0;i15;i+) scanf(%d,&bi); printf(shuruyigeshun); scanf(%d,&a); for(i=0;i15;i+) if(a=bi) sign=1; break; if(sign=1) i=i+1; printf(该数是数组中第%d个元素n,i); else printf(无此数n); 3、 将两个字符串连接起来,不要用strcat函数。#includevoid main()char s180,s240;int i=0,j=0;printf(enter string No.1:n);scanf(%s,&s1);printf(enter string No.2:n);scanf(%s,&s2);while(s1i+!=0);i-;while(s1i+=s2j+)!=0);printf(%sn,s1); 4、编写程序输出下面矩阵:1 2 3 4 52 3 4 5 13 4 5 1 24 5 1 2 35 1 2 3 4#includemain()int i,k,a5;for(i=0;i5;i+)ai=i+1; for(i=0;i5;i+) for(k=0;k5;k+) printf( %d,a(i+k)%5); printf(n); 5、输入10个数,逆序输出(折半)。#includemain() int a10,b10; int i,k; k=0; for (i=0;i10;i+) scanf(%d,&ai); for (i=0;i10;i+) bk=a9-i; k+; for (k=0;k10;k+) printf(%2d,bk);6、键盘输入7个评委对选手的打分,去掉最高分,去掉最低分,输出平均分,要求左对齐,保留到小数点后两位。#includevoid main()int a7; int i,j,t,sum=0;for(i=0;i7;i+)scanf(%d,&ai);for(j=0;j=7;j+) for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=1;i6;i+)sum=sum+ai;printf(ave=%dn,sum/5);8、 对某同学的作业记录作处理,输入作业每题的批改结果(对或错),遇#号结束,输出错题的题号。#includevoid main()char str1000=0;int index=0;while(strindex+=getchar() != #);index=0;while(strindex+)if(strindex-1 = 0)printf(%dt,index);printf(n);9、 键盘读入7个选手的编号与得分,要求输出优秀率(=90),及格率(=60),和平均分。输出排行榜(编号+成绩)。#includetypedef struct _pscint id;int scr;psc;main()float x=0.0;/完全是VC的bug,目的是为了初始化浮点寄存器psc p7=0,q;int iA=0,iD=0,sum=0,hscr=0;for(int i=0;i=90)iA+;if(pi.scr=60)iD+;sum+=pi.scr;printf(优秀率:%.2lf 及格率:%.2lf 平均分:%.2lfn,(double)iA/7,(double)iD/7,(double)sum/7);for(int j=0;j6;j+) for (i=0;i6-j;i+) if (pi.scrpi+1.scr) q.id=pi.id,q.scr=pi.scr; pi.id=pi+1.id, pi.scr=pi+1.scr; pi+1.id=q.id,pi+1.scr=q.scr; for(i=0;i7;i+)printf(id:%d score:%dn,pi.id,pi.scr);9、输入一个矩阵,找出所在行上最大,列上最小的数。(可能没有)10、读入下列数字存放在数组a54中,分别求各行、各列元素之和。将结果补在最后1行和最后1列后,输出整个矩阵。 12 4 6 8 23 3 15 7 9 2 5 17 #includevoid main()int arr54=12,4,6,0,8,23,3,0,15,7,9,0,2,5,17,0,0,0,0,0;for(int i=0;i4;i+)arri3=arri0+arri1+arri2;for(i=0;i3;i+)arr4i=arr0i+arr1i+arr2i+arr3i;for(i=0;i5;i+)for(int j=0;j113、比较数组a和数组b,得出a中的数(每一个)比b中的几个数大,并输出。14、投票选班长,5个候选人,10个人每人投一票,输入投票结果,输出每个候选人的得票数。三、实验源码及测试数据#include#includemain() int i,a3;float ave,pass,sum;float summ(int a3);float passion(int a3);for(i=0;i3;i+)scanf(%d,&ai);sum=summ(a);ave=sum/3;pass=passion(a); printf(总分%.0fn平均分%.2fn及格率%.2f%n,sum,ave,pass);float summ(int a3) /函数int sum=0,i;for(i=0;i3;i+)sum=sum+ai;return sum;float passion(int a3) / 函数float pass;int i,k=0; for (i=0;i60) k+; pass=100*k/3 ; return (pass);#include stdio.h#includestring.h void main() char a200; int i,k;int hanshu(char a);int panduan(char a); gets(a); k=hanshu(a); for(i=k;panduan(ai);i+) printf(%c,ai);printf(n);int hanshu(char a)int i,l=0, k=0,m,n; int panduan(char a); for(i=0;ik) n=i;k=l;l=0; else l=0; return (n-k); int panduan(char a) if(a=a&a=A&a0)jiaohuan(str1,str2);if(strcmp(str1,str3)0)jiaohuan(str1,str3);if(strcmp(str2,str3)0)jiaohuan(str2,str3);puts(str1);puts(str2);puts(str3); void jiaohuan(char str1,char str2)char x20;strcpy(x,str1);strcpy(str1,str2);strcpy(str2,x); #include stdio.h void main() void h();h();void h()int a,b,c;for(a=0;a10;a+) for(b=0;b10;b+) for(c=0;c10;c+) if(a*100+b*10+c+b*100+c*10+c)=200) printf(%dn%dn%dn,a,b,c);#include void main()int a11,weizhi11;int i,j,b,t=0;void paixu(int a,int weizhi); void charu(int a,int b); int chazhao(int a,int weizhi,int b); a0=0;weizhi0=0; for(i=1;i11;i+) scanf(%d,&ai); weizhii=i; scanf(%d,&b); /输入要判断的数 paixu(a,weizhi); /从大到小排序for(i=1;i11;i+)printf(数值%dt位置%dn,ai,weizhii);t=chazhao(a,weizhi,b); /用t判断是否存在if(t)printf(存在该数位置为:);printf(%dn,t); else charu(a,b);void paixu(int a,int weizhi) int i,j,t,te;for(j=1;j10;j+)for(i=1;i10-j;i+)if(aiai+1) t=ai; te=weizhii; ai=ai+1; weizhii=weizhii+1; ai+1=t; weizhii+1=te; int chazhao(int a,int weizhi,int b) int i,j,t=0; for(i=1;ia1)a0=b;else for(i=0;ib) ai=ai+1; else break; ai=b;printf(不存在该数n将该数插入数列后的新数列:n); for(i=0;i11;i+) printf(%-5d,ai);#include void main()int a50;int i;int hanshu(int a);for(i=0;i50;i+)scanf(%d,&ai); i=hanshu(a); printf(%dn,i); int hanshu(int a) int i,j=0,sum=0; float k; for(i=0;i50;i+) sum+=ai; k=float(sum)/50 ; for(i=0;ik) j+; return (j) ;编写函数求n2 k2 2 j 2 + i! (-1)i j=n1 i=k1#includestdio.h#includemath.hvoid main()int k1,k2,n1,n2;long a;long sum(int n1,int n2,int k1,int k2);scanf(%d%d%d%d,&n1,&n2,&k1,&k2);a=sum(n1,n2,k1,k2);printf(%ldn,a);long sum(int n1,int n2,int k1,int k2)long a=0;int i,j,k;for(i=n1;i=n2;i+)a=a+2*i*i;for(i=k1;i=k2;i+)k=1;for(j=1;j=i;j+) k=k*j*(-1);a+=k; return a;#include#includevoid main()double a,b,A,B,C,c,d,e;void hanshu(double,double);scanf(%lf%lf,&a,&b);hanshu(a,b); void hanshu(double a,double b) double c,A,B,C,d;A=(3*a*a*a+2*a*a-4*a-6)*(3*b*b*b+2*b*b-4*b-6);if(A0) do c=(a+b)/2; B=(3*c*c*c+2*c*c-4*c-6)*(3*a*a*a+2*a*a-4*a-6); C=(3*c*c*c+2*c*c-4*c-6)*(3*b*b*b+2*b*b-4*b-6); if(B0)b=c; if(C0.001); printf(%8.2lf,a); else printf(error a&b);求5000内的完数(用函数)#includestdio.h#includemath.hvoid main() int a;void wanshu(int a);scanf(%d,&a);wanshu(a);void wanshu(int a)int i,j,s;for (i=2;ia;i+)s=0;for(j=1;ji/2+1;j+) if(i%j=0)s=s+j; if(s=i) printf(%dn,i);编写数列2,2,4,4,6,16,8#includestdio.h#includemath.hvoid main() long a;void fuc(long ); scanf(%ld,&a); fuc(a);void fuc(long n) long a,b;a=2;b=2; int i; for(i=1;i1#include stdio.hvoid main()int n,x;long s;long h(int, int);scanf(%d%d,&n,&x);s=h(n,x); printf(%d,s);long h(int n,int x) long s; if(0=n) s=1; else if(1=n) s=x*x-2*x+7; else s=h(n-1,x)+h(n-2,x); return (s); #includevoid main()int a5,b5,i,j,k;for(i=0;i5;i+)scanf(%d,&ai);for(j=0;j5;j+)scanf(%d,&bj);for(i=0;i5;i+)k=0;for(j=0;jbj)k+;printf(%dt,k);printf(n);四、 调试运行结果五、 实验心得体会实验6指针一、实验目的1、掌握指针的概念、会定义和使用指针变量2、掌握指向数组的指针变量3、掌握字符串指针的使用二、实验内容1、用指针实现,输入3个数,按从小到大输出。2、编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。3、编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。4、编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a0和an-1),要求以指针变量作函数参数。5、用指向指针的指针的方法
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!