c语言实验报告.docx
- 文档编号:11733853
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:38
- 大小:254.27KB
c语言实验报告.docx
《c语言实验报告.docx》由会员分享,可在线阅读,更多相关《c语言实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
c语言实验报告
C语言程序设计实验报告
11电信2班
陈海植
1107032011
2012年12月24号
实验一:
简单的C语言程序
一、实验目的
1.了解C语言的语法结构和书写格式;
2.掌握C语言数据类型以及变量的定义和赋值;掌握运算符的种类、运算优先级和结合性;掌握不同类型数据间的转换和运算。
2.掌握C语言的表达式。
3.掌握C程序的编辑、编译、连接和运行的过程。
二、实验内容
1.输入并运行以下程序:
#include
voidmain()
{charc1,c2;
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
运行结果:
在此基础上
①将第三行、第四行改为:
c1=321;c2=353;
再使之运行,分析其运行结果。
②将第二行改为:
intc1,c2;
再使之运行,分析其运行结果。
2.输入并运行以下程序:
①#include
voidmain()
{
inta,b,x;
x=(a=3,b=a--);
printf(“x=%d,a=%d,b=%d\n”,x,a,b);
}
运行结果:
②#include
voidmain()
{floatf1,f2,f3,f4;
intm1,m2;
f1=f2=f3=f4=2;
m1=m2=1;
printf(“%d\n”,(m1=f1>=f2)&&(m2=f3 } 运行结果: ③#include voidmain() {floatf=13.8; intn; n=(int)f%3; printf(“n=%d\n”,n); } 运行结果: 3.输入并运行以下程序: #include voidmain() {inti=8,j=10,m,n; m=++i;n=j++; printf(“%d,%d,%d,%d\n”,i,j,m,n); } 运行结果: 分别作以下改动并运行: ①将程序改为: #include voidmain() {inti=8,j=10; printf(“%d,%d\n”,i++,j++); } 运行结果: ②在①的基础上,将printf语句改为: printf(“%d,%d\n”,++i,++j); 运行结果: ③再将printf语句分别改为: printf(“%d,%d,%d,%d\n”,i,j,i++,j++);运行结果: printf(“%d,%d,%d,%d\n”,++i,++j,i,j);运行结果: ④程序改为: main() {inti=8,j=10,m=0,n=0; m+=i++; n-=--j; printf(“i=%d,j=%d,m=%d,n=%d\n”,i,j,m,n); } 运行结果: 4.请将下列给出的两个程序段分别输入计算机后,分析其运行结果: ①voidmain() {intnum; num=32767; printf(“num=%d\n”,++num); } 运行结果: ②voidmain() {inta=-2; printf(“%d,%d\n”,a,a--); } 运行结果: 3、实验小结与体会 1.经过此次实验,基本掌握C语言数据类型以及变量的定义和赋值、掌握运算符的种类、运算优先级和结合性、掌握不同类型数据间的转换和运算及编辑、编译、连接和运行的过程。 2.在实验中常常因为符号的遗漏而导致程序执行不了,同时寻找错误也是一个极需耐心的过程。 3.制作C语言数据类型表,方便查询。 实验二、输入输出函数的使用 一、实验目的 掌握数据的输入输出的方法,能正确使用各种格式转换符。 二、实验内容 1.上机输入以下程序: #include voidmain() { inta,b; floatd,e; charc1,c2; doublef,g; longm,n; unsignedintp,q; a=61;b=62; c1='a';c2='b'; d=3.56;e=-6.87; f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000; printf("a=%db=%d\nc1=%cc2=%c\nd=%6.2fe=%6.2f\n",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.12f\nm=%ld,n=%ld\np=%u,q=%x\n",f,g,m,n,p,q); } 运行此程序并分析结果。 2.键盘输入与屏幕输出练习 问题1: 要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个? #include main() { chara,b; intc; scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%d\n",a,b,c); } A)1234B)1,2,34 C)’1’,’2’,34D)1234 答案: 选D 问题2: 与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1234,则应修改程序中的哪条语句? 怎样修改? 回答: 只需修改第7行的语句,修改后: printf("%c%c%d\n",a,b,c); 问题3: 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句? 怎样修改? 回答: 只需修改第6行语句,修改后: scanf("%c,%c,%d",&a,&b,&c); 问题4: 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为’1’,’2’,34,则应修改程序中的哪条语句? 怎样修改? 回答: 修改第7行语句,修改后: printf("'%c''%c'%d\n",a,b,c); 3.编程: 由键盘输入学生三门课(英语、数学和程序设计)成绩,计算并输出总成绩、平均成绩。 【编程解析】 (1)程序的输入与输出: 输入三门课的成绩English、math、program,输出总成绩sum及平均成绩average。 (2)数据结构: intEnglish,math,program,sum;floataverage; (3) 解决问题的关键算法: 求总成绩: 三门课成绩相加;求平均成绩: 总成绩除以3。 #include voidmain() { intenglish,math,program,sum; floataverage; printf("Enterthescoreofenglish,mathandprogram: \n"); scanf("%d%d%d",&english,&math,&program); sum=english+math+program; average=sum/3.0; printf("sum=%d\t",sum); printf("average=%5.1f\n",average); } 运行结果: 三、实验小结与体会 1.初步掌握数据基本的输入输出方法,认识几种基本常用的格式转换符。 2.初步学会将程序图转化为c语言程序。 实验三: 选择结构程序设计 【实验目的】 1.了解C语句表示逻辑量的方法,0代表假和1代表真; 2.正确使用关系表达式和逻辑表达式表达条件。 3.熟练掌握if语句和switch语句。 1.有一个函数,定义如下。 用分支结构编写一程序,根据用户输入的自变量 的值,计算函数值。 【参考源程序】 #include"stdio.h" voidmain() {floatx; pintf(“inputx: \n”); scanf(“%f”,&x); if(x<0.0) printf(“y=0\n”); elseif(x>=0.0&&x<=50.0) printf(“y=%f\n”,x); else printf(“y=%f\n”,x*x); } 运行结果: 2.编写一个程序,要求输入一个字符并判断它是字母字符、数字字符、还是其他字符。 【编程解析】 (1)程序的输入与输出: 程序要求输入一个字符ch。 程序要求输出字符的类型,即字母(alpha)、数字(numeric)或其他字符。 (2)数据结构: charch (3)解决问题的关键算法: 判断字符的类别: 若字符在’a’到’z’之间或者在’A’到’Z’之间,则字符为字母字符;若字符在'0'到'9'之间,则为数字字符;否则,为其他字符。 【算法流程图】如图2-3所示。 【参考源程序】 #include main() { charch; printf("Enterancharacter: "); scanf("%c",&ch); if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') printf("%cisanalpha\n",ch); else if(ch>='0'&&ch<='9') printf("%cisanumeric\n",ch); else printf("%cisothercharacter\n",ch); } 程序运行结果如下: 或者 3.用switch语句编写程序: 某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lowerclass);4岁孩子进中班(Middleclass);5岁、6岁孩子进大班(Higherclass)。 编写程序(分别用switch语句和IF语句两种方式编程),输入孩子年龄,输出年龄及进入的班号。 如: 输入: 3,输出: age: 3,enterLowerclass。 【参考源程序】 #include main() { intage; printf("Entertheageofchild(2~6): "); scanf("%d",&age); switch(age) { case2: case3: printf(“age: %d,enterlowerclass”,age); break; case4: printf(“age: %d,entermiddleclass”,age); break; case5: case6: printf(“age: %d,enterhigherclass”,age); break; default: printf(“theageerror\n”); } } 运行结果: 4.设计作业 输入整数a和b,若a2+b2大于100,则输入a2+b2百位以上的数字,否则输出两数之和。 源代码如下: #include"stdio.h" voidmain() { inta,b; scanf("%d%d",&a,&b); if(a*a+b*b>100) printf("%d\n",(a*a+b*b)/100); elseprintf("a+b=%d\n",a+b); } 运行结果: 或者: 三、实验小结与体会 1.基本掌握了关系表达式和逻辑表达式,。 2.掌握了if语句,学会使用if-else语句设计双分支和多分支结构程序;掌握了switch语句的特点,学会使用switch语句设计多分支结构程序。 3.熟练掌握将流程图转化为C语言程序的思想,同时在写c语言的过程中犯错频率降低。 实验四 循环结构程序设计 【实验目的】 1.学习循环语句for、while和do-while语句的使用方法; 2.学习用循环语句实现各种算法 3.进一步熟悉TC集成环境的使用方法。 【实验内容】 1.使用while循环求两个正整数的最小公倍数。 【参考源程序】 #include"stdio.h" voidmain() {intm,n,result; printf(“inputtwointegers: ”); scanf(“%d%d”,&m,&n); result=m n: m; while(! (result%m==0&&result%n==0)) result++; printf(“Theleastcommonmultipleofmandnis%d\n”,result); } 运行结果: 2.打印500以内的“水仙花数”。 “水仙花数”是一个三位数,其各位数立方和等于该数本身。 #include voidmain() { inti,j,k,n; for(n=100;n<=500;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d\n",n); } } 运行结果: 3.编写一个程序,把用户输入的数据累加,直到输入零为止,输出累加的结果。 【编程解析】 (1)程序的输入与输出: 输入若干个数(正数或负数),以0结束输入。 输出输入数据的累加和。 (2)数据结构: floatsum,d。 (3)关键算法: 求累加和,先将sum初始化为0,每输入一个数d,判断它是否为0,若为0就跳出循环,否则将其累加到sum中。 【算法流程图】如图2-4所示。 【参考源程序】 #include voidmain() { floartsum=0,d; printf("Enteraserialofnumbersendedby0: \n"); for(;;) { scanf("%f",&d); if(d==0)break; sum+=d; } printf("sum=%g\n",sum); } 程序运行结果如下: 该程序实现了累加器的功能。 此思路可扩展到实现任意数的累加、连乘等功能。 4.编写一个程序,输入一个正整数n,求sum=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 【编程解析】 (1)程序的输入与输出: 输入一个正整数n,输出1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 (2)数据结构: inti,j,n,s1,sum (3)解决问题关键算法: 求和。 采用两层循环求解,外层循环i从1到n,内层循环j从1到i。 【算法流程图】如图2-5所示。 【参考源程序】 #include main() { inti,j,n,s,sum=0; printf("Enteraninteger: "); scanf("%d",&n); for(i=1;i<=n;i++) { s=0; for(j=1;j<=i;j++) s+=j; sum+=s; } print("sum=%d\n",sum); } 程序运行结果如下: 【实验小结及体会】 1.基本掌握了循环语句for、while和do-while语句的使用方法, 2.能够使用循环语句进行各种算法。 3.常常遗漏表达式后面的分号,导致程序无法执行。 4.混淆continue和break语句。 实验五函数 【实验目的】 1.学习C语言中函数的定义和调用方法。 2.掌握通过参数在函数间传递数据的方法。 3.学习递归程序设计,掌握递归函数的编写规律。 4.熟悉包含函数调用的程序的调试方法。 5.实验目的: 掌握宏定义、宏调用,以及宏展的处理过程,掌握文件包含的概念和使用。 【实验内容】 程序示例: 功能: fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数的个数以及它们的平均值。 #include"math.h" main() {inta=0,k;/*a保存素数之和*/ floatav;/*av保存1000以内素数的平均值*/ for(k=2;k<=1000;k++) if(fun(k))/*判断k是否为素数*/ a+=k; av=a/1000; printf("av=%f\n",av); } fun(intn)/*判断输入的整数是否为素数*/ {inti,y=0; for(i=2;i if(n%i==0)y=1; elsey=0; returny; } 运行结果: 1.编制求两数相乘的函数。 #include"stdio.h" floatmul(intx,inty) { floatz; z=x*y; returnz; } voidmain() { floata,b,c; scanf("%f%f",&a,&b); c=mul(a,b); printf("%.2f\n",c); } 运行结果: 2.写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。 两个正数由键盘输入。 #include"stdio.h" inthcf(intu,intv) { inta,b,t,r; if(u>=v) { t=u;u=v;v=t; } a=u;b=v; while((r=b%a)! =0) { b=a;a=r; } returna; } intlcd(intu,intv,inth) { return(u*v/h); } voidmain() { intu,v,h,l; scanf("%d%d",&u,&v); h=hcf(u,v); printf("hcf=%d\n",h); l=lcd(u,v,h); printf("lcd=%d\n",l); } 运行结果: 3.求x的n次方。 采用递归调用方法计算。 1当n=0时 xn= x*xn-1当n>0时 #include"stdio.h" #include"math.h" intpower(intx,intn) { if(n==0) return (1); else return(x*power(x,n-1)); } voidmain() { intx,n; scanf("%d%d",&x,&n); printf("%d**%d=%d\n",x,n,power(x,n)); } 运行结果: 4.倒序输出26个英文大写字母。 #include"stdio.h" printletter(charc) { if(c>='A') { printf("%c",c); c--; printletter(c); } } voidmain() { charc='Z'; printletter(c); printf("\n"); } 运行结果: 5.全局变量与局部变量,计算运行结果 #include"stdio.h" inta,b=5; voidmain() { inta=10,c; c=a+b; printf("%d,%d,%d\n",a,c,b); } 运行结果: 6.定义一个带参数的宏,使两个参数的值互换。 设计主函数调用宏将a和b的值进行交换。 #include"stdio.h" #defineexchange(a,b)t=a;a=b;b=t; voidmain() { inta,b,t; printf("Inputtwonumbers: "); scanf("%d%d",&a,&b); exchange(a,b); printf("a=%d,b=%d\n",a,b); } 运行结果: 【实验小结和体会】 1.初步掌握C语言中函数的定义和调用方法。 2.初步掌握通过参数在函数间传递数据的方法与递归程序的设计方法,此外还学会了基本的宏定义以及其调用方法。 3.在犯被调函数处没有进行函数的原型声明、忽略参数的求值顺序等小错误后,体会到c语言的严谨,写程序时不能放松警惕。 实验六一维数组 【实验目的】 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组和字符串处理函数的使用; 3.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等); 【实验内容】 1.调试程序实现功能: 青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 #include"stdio.h" voidmain() { inti,j,min,max; floattemp,average=0; floata[11]; for(i=1;i<=10;i++) scanf("%f",a[i]); for(i=1;i<=9;i++) { min=i; for(j=i+1;j<=10;j++) if(a[min]>a[j]) { min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } } for(i=2;i<=9;i++) average+=a[i]; printf("%6.2f\n",average/8); } 2.输入一串字符,计算其中空格的个数。 #include"stdio.h" #include"string.h" voidmain() { charc[30]; inti,sum=0; gets(c); for(i=0;i if(c[i]=='') sum+=1; printf("%d\n",sum); } 运行结果: 3.有一递推数列,满足: f(0)=0,f (1)=1,f (2)=1,f(n)=f(n-1)+f(n-2) 。 使用数组编写程序,顺序打印
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 报告