C语言实验指导书.docx
- 文档编号:10331833
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:55
- 大小:45.29KB
C语言实验指导书.docx
《C语言实验指导书.docx》由会员分享,可在线阅读,更多相关《C语言实验指导书.docx(55页珍藏版)》请在冰点文库上搜索。
C语言实验指导书
C语言上机指导书
C语言上机实验
在学习C语言程序设计的过程中,上机实验是十分重要的环节,通过实验,可以加深对C语言功能特征、语法规则、程序编译与运行等基本概念和基本方法的理解和运用。
通过上机调试程序,使学生能及时发现程序编制中出现的错误并找到修改方法,提高学生的独立编程能力和编程技巧,为C语言在后续课程中的应用打下坚实的基础。
上机报告要求
1每次上机前,认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。
2上机输入和调试程序,调试通过后,打印出程序清单并把运行结果记录下来(在条件允许下)。
3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。
4上机报告应包括以下内容:
(1)上机题目;
(2)算法说明(复杂的可用流程图表示);
(3)程序清单(有条件用打印机打印出来);
(4)运行结果;
(5)对运行情况作分析,以及本次实验所取得的经验。
如程序未能通过,应分析错误原因。
目录
上机一C程序运行环境和运行过程4
上机二顺序结构程序设计5
上机三分支结构程序设计8
上机四循环结构程序设计14
上机五多重循环的实现17
上机六一维数组的使用18
上机七二维数组的使用21
上机八函数的使用26
上机九指针
(一)32
上机十指针
(二)38
上机十一结构体与共同体42
上机十二位运算和文件46
上机十三综合练习(统计学生成绩)49
上机一C程序运行环境和运行过程
(验证型3学时)
一上机目的
1学会TurboC2.0的安装方法(参看本书第一部分),熟悉C语言程序的运行环境,了解所用计算机系统软、硬件配置。
2初步了解在该集成环境下如何编辑、编译、连接和运行一个C程序,即运行一个C程序的全过程。
3通过运行简单的C程序,初步了解C程序的基本结构及特性。
二上机内容
1建立自己的文件夹,以备存放文件。
2进入TurboC集成环境,熟悉TurboC主菜单下各选择项的功能及功能键的使用。
3输入一简单C程序(可用教科书上的例题),了解C程序运行的全过程。
4编写用printf语句将3个字符串:
goodmorning,floppydisk,harddisk在同一行显示的程序。
程序例
main()
{printf(“goodmorning”);/*显示不换行*/
printf(“floppydisk”);
printf(“harddisk\n”);
}
运行结果:
goodmorningfloppydiskharddisk
三上机要求
1上机前认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。
2上机输入和调试程序,调试通过后,打印(或手写)出程序清单并把运行结果记录下来。
3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。
四思考题
1启动TurboC的可执行文件是什么?
2上机实现一个C语言程序的步骤是什么?
上机二顺序结构程序设计
(验证型3学时)
一上机目的
1进一步掌握运行一个C语言程序的方法和步骤。
2分清C语言的符号、标识符、保留字的区别。
3掌握C语言的数据类型,会定义整型、实型、字符型变量以及对它们的赋值方法。
4学会数据输入方式和数据输出格式及各种格式转意符。
5学会使用C的运算符以及用这些运算符组成的表达式,特别是自加(++)和自减(——)运算符的使用。
二上机内容
1输入并运行下面程序,分析其运行结果。
main()
{charc1,c2;
c1=46;c2=47;
printf(“%3c%3c”,c1,c2);
printf(“%3d%3d”,c1,c2);
}
运行结果:
.\4647
将程序第二行改为:
intc1,c2;
再运行,分析其结果。
运行结果:
.\4647
2输入并运行下面程序
main()
{inta,b;
floatc,d;
longe,f;
unsignedintu,v;
charc1,c2;
scanf(“%d,%d”,&a,&b);
scanf(“%f,%f”,&c,&d);
scanf(“%ld,%ld”,&e,&f);
scanf(%o,%o”,&u,&v);
scanf(“%c,%c”,&c1,&c2);
printf(“\n”);
printf(“a=%4d,b=%4d\n”,a,b);
printf(“c=%8.2f,d=%8.2f\n”,c,d);
printf(“e=%16ld,f=%16ld\n”,e,f);
printf(“u=%o,v=%o\n”,u,v);
printf(“c1=%c,c2=%c\n”,c1,c2);
}
运行上面程序,分析结果,特别注意输出C1,C2的值是什么?
什么原因?
3先分析下面程序的结果,然后再上机运行,看结果上否一致。
main()
{intx,y,z;
x=y=z=3;
y=x++-1;printf(“%4d%4d”,x,y);
y=++x–1;printf(%4d%4d”,x,y);
y=z--+1;printf(“%4d%4d”,z,y);
y=--z+1;printf(“%4d%4d”,z,y);
}运行结果:
4,25,42,41,1
4已知三角形的三边a、b、c(通过键盘输入),编写一个程序求三角形的面积。
5编写程序实现求一元二次方程式的根,ax2+bx+c=0中的a、b、c从键盘输入。
6编写程序实现求任意三个数的平均值。
三上机要求
1上机前认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。
2上机输入和调试程序,调试通过后,打印(或手写)出程序清单并把运行结果记录下来。
3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。
四思考题
1将第2题中的输入e和f、u和v的语句分别改为:
scanf(“%d,%d”,&e,&f);
scanf(%d,%d”,&u,&v);
运行并分析结果。
2编写一个程序,将输入的小写字母改写成大写字母并输出。
提示:
可采用getchar()函数输入字符,并利用for()循环语句。
当然也可用其它方法,只要能实现其功能即可。
下面给出一程序段,学生补充完整后,上机进行调试。
for(i=1;i<=10;i++)
{c1=getchar();
c2=c1–32;
printf(“string%c\n”,c2);
}
3下列程序错误在哪里?
①main()/*给定半径r,求园的面积s*/
{floatr,s;
s=п*r*r;
printf(“s=%f\n”,s)
}
②main()/*给定长和宽l,w,求矩形面积s*/
{intl,w,s;
scanf(“%d%d”,l,w);
s=l*w;
printf(l,w,s);
}
③main()
{inti,j,k;floatx,y,z;
scanf(“%d%f%”,&i,&j,&k);
scanf(“%d%f%f”,x,y,z);
i=i+x;y=y+j;z=i+j;k=x%y;
printf(“%d%f%f\n”,i,j,k);
printf(“%f%d%d\n’,x,y,z);
}
运行看看结果如何?
为什么?
④main()
{inti;floatx;longy;
i=100;x=200;y=300;
printf(“i=%d,x=%d,y=%d\n”,i,x,y);
printf(“i=%f,x=%f,y=%f\n”,i,x,y);
printf(“i=%ld,x=%ld,y=%ld\n”,i,x,y);
}
运行试试看,结果如何?
为什么?
上机三分支结构程序设计
(验证型3学时)
一实验目的
1熟悉关系表达式和逻辑表达式的使用。
2掌握break和continue语句的使用,以及它们之间的区别。
3熟悉掌握if语句和switch语句的应用。
二实验内容
1三个整数a,b,c,由键盘输入这三个数,求三个数中最大的值。
main()
{inta,b,c;
printf(“inputa,b,c:
”);
scanf(“%d;%d;%d”,&a,&b,&c);
if(a
if(b printf(“max=%d\n”,c); else printf(“max=%d\n”,b); elseif(a printf(“max=%d\n”,c); else printf(“max=%d\n”,a); } 运行上面的程序,分析if和else是哪两个相互“配对”,在书写程序时,分出层次,这样有利于程序的可读性,容易查找出错误。 此程序还有更加简明的方法实现,就是利用条件表达式。 main() {inta,b,c,max,t; printf(“inputa,b,c: ”); scanf(“%d,%d,%d”,&a,&b,&c); t=(a>b)? a: b; max=(t>c)? t: c; printf(“max=%d”,max); } 学生可利用此程序,考虑怎样修改求出三个数中的最小值。 2先读下面程序,分析出程序的执行结果,然后再上机运行,结果是否一致。 main() {intx,y=1,z; if(y! =0)x=5; printf(“x=%d\t”,x); if(y==0)x=3; elsex=5; printf(“x=%d\t\n”,x); x=1; if(z<0) if(y>0)x=3; elsex=5; printf(“x=%d\t\n”,x); if(z=y<0)x=3 elseif(y==0)x=5; elsex=7; printf(“x=%d\t”,x); printf(“z=%d\t\n”,z); if(x=z=y)x=3; printf(“x=%d\t”,x); printf(“z=%d\t\n”,z); } 3有一函数: x(x<0) y=3x-2 (10≤x<50) 4x+1(50≤x<100) 5x(x≥100) 输入x的值,求y的值。 程序如下: main() {intx,y,t; printf(“inputx=: ”); scanf(%d”,&x); if(x<10)t=0; if(x>=100)t=10; elset=x/10; switch(t) {case0: y=x;break; case1: case2: case3: case4: y=3*x–2;break; case5: case6: case7: case8: case9: y=4*x+1;break; case10: y=5*x; } printf(“y=%d”,y); } 运行程序,写出执行结果。 本题还可以单独用if语句实现,方法简单,程序可读性好,学生自己编程,上机运行。 4从数字1开始到200之间,求能被3整除的数,然后求这些数的累加和,直到和的值不大于100为止。 输出这些数及累加和。 参考程序如下: main() {inti,sum=0; for(i=1;i<=200;i++) {if(i%3! =0) continue; sum=sum+i; printf(i=%6d”,i); } printf(“sum=%6d”,sum); } 此程序的目的在于理解continue语句的用法。 学生可以自己选做一些题目理解break和continue语句之间的区别,以免混淆。 注: break语句可以从循环体内跳出循环体外,提前结束循环,接着循环着下面的语句(从第三题可看出)。 Continue语句是结束本次循环,即跳过循环体中下面尚未招待的语句,接着进行下一次执行循环的判定。 5编写程序,求S=1! +2! +……+n! 的和。 6编写程序打印下列图形: A BBB CCCCC DDDDDDD CCCCC BBB A 三上机要求 1上机前认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。 2上机输入和调试程序,调试通过后,打印(或手写)出程序清单并把运行结果记录下来。 3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。 四思考题 1以下if语句的形式哪些是错误的? 1if(x! =y) 2if(x==y) 3if(x>y)thenz=x; elsez=y; 4if(x>y)if(x>z)if(x>m)max=x; 5if(a=b)printf(“Yes”); elseprintf(“No”); 6if(5)x=5;elsey=5; 7if(x-y)z=0;elsez=1; 8if(x>0)y=0;elsey=1;elsey=-1; 2下面是计算函数 1x>0 y=0x=0 -1x<0 的几个程序段,分析其中是否存在错误? 若有,如何改正? 1y=0;if(x<=0)if(x<0)y=-1; elsey=1; 2if(x<=0)if(x<0)y=-1;elsey=0; elsey=1; 3y=1; if(x<=0)if(x=0)y=0;elsey=-1; 4y=-1; if(x>=0)if(x>0)y=1;elsey=0; 3计算函数值: t3-10≤t<1.5 2t2-t+11.5≤t<2.5 y=-t3+2t2+52.5≤t<3.5 5t3+2t3.5≤t<6 上机四循环结构程序设计 (验证型3学时) 一上机目的 1一般了解goto语句与if语句构成的循环。 2熟练掌握三种循环语句的应用。 3学会使用各种循环语句进行程序设计。 二上机内容 1分别用三种循环语句(while语句、do-while语句、for语句),实现求1~100的累加和。 编程上机调试。 2给出求∑n! (1! +2! +3! +…+25! )的程序如下: main() {floatn,s=0,t=1; for(n=1;n<=25;n++) {t=t*n; s=s+t; } printf(“1! +2! +3! +…+25! =%e\n”,s); } 上机运行,并记录下结果。 然后用另外两种循环语句实现上述功能。 3指出下面三个程序的功能,当输入“quit? ”时,它们的执行结果是什么? (1) #include main() {charc; c=getchar(); while(c! =’? ’) {putchar(c); c=getchar(); } } (2) #include main() {charc; while((c=getchar())! =’? ’)putchar(++c); } (3) #include main() {while(putchar(getchar())! =’? ’); } 分析输出的三种不同结果,在实验报告中写出为什么。 4编程实现,输入两个正整数m和n,求它们的最大公约数和最小公倍数。 5猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩一个桃子了。 求第一天共摘了多少桃子? 6从键盘输入若干学生的成绩(输入负分结束),输出平均成绩和最高分。 三上机要求 1上机前认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。 2上机输入和调试程序,调试通过后,打印(或手写)出程序清单并把运行结果记录下来。 3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。 四思考题 1sn=a+aa+…+a…a,其中a是1-9中的一个数字。 n为一正整数,a和n均从键盘输入。 (例如输入n,a为4,sn=8+88+888+8888) 2打印以下图案: * *** ***** ******* ***** *** * 3穿越沙漠。 用一辆吉普车穿越1000公里的沙漠。 吉普车的总装油量为500加仑,耗油量为1加仑/公里。 由于沙漠中没有油库,必须先用车在沙漠中建立临时加油站,该吉普车要以最少的油耗穿越沙漠,应在什么地方建立临时油库,以及在什么地方安放多少油最好? 参考程序如下: main() {intk=1; floatstation,distation,total; station=distation=total=500.0; while(distation<1000.0) {printf(“station(%d)=%9.4foil’stotal(%d)=%10.4f\n”, k,station,k,total); total=500.0*++k; station=500.0/(2*k-1); diststion+=station; distation-=station; station=1000.0-distation; printf(“station(%d)=%9.4foil’stotal(%d)=%10.4f\n”, k,station,k,(k-1)*500.0+(2*k-1)*station); } } 上机五多重循环的实现 (验证型3学时) 一上机目的 1熟悉掌握循环嵌套编程的使用方法。 2掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 3进一步学习调试程序。 二上机内容 1上机调试下列程序,改正错误。 求sum= main() {intn,sum; n=1; while(n<100)sum+=n;n++; printf(“sum=%f\n”,sum); } 2打印以下图案: * *** ***** ******* ***** *** * 3编程求水仙花数,水仙花数的要求是: abc=a3+b3+c3。 4编程实现求2--1000之间的全部素数(每行显示10个数)。 5百钱买百鸡问题。 已知公鸡每只3元,母鸡每只5元,小鸡1元三只,现用100元钱买100只鸡,可能有多少种买法? 三上机要求 1上机前认真预习本次上机实验内容,按上机指导书的要求,需编写的程序,应书写整齐。 2上机输入和调试程序,调试通过后,打印(或手写)出程序清单并把运行结果记录下来。 3上机结束后,按照上机指导书的具体要求,整理出上机报告(字迹工整),下次上机交给指导教师。 四思考题 1程序运行过程中出现“死循环”后,应该如何操作结束“死循环”? 2换零钱。 把一元钱全兑换成硬币,有多少种兑换方法? 上机六一维数组的使用 (验证型3学时) 一上机目的 1掌握一维数组的概念和使用方法。 2掌握一维数组初始化的方法。 3学会一维字符数组和字符串的应用。 4学会用数组名作函数的参数。 二上机内容 1有一数组,内放10个整数,要求找出最小的数和它的下标。 然后把它和数组中最前面的元素对换位置。 编写程序,上机运行,并记录下结果。 提示: 数组的10个元素可用输入函数scanf()通过键盘输入进去,找出数组中最小的元素可通过循环语句和条件语句来实现。 设min是存放数组中最小元素的变量,array[k]为一个暂存单元。 实现最前面的元素与最小元素对换可通过下面语句实现: array[k]=array[0]; array[0]=min; 参考程序如下: main() {i,array[10],min,k=0; printf(“Pleaseinput10data\n”); for(i=0;i<10;i++) scanf(“%d”,&array[i]); printf(“Beforeexchang: \n”); for(i=0;i<10;i++) printf(“%5d”,array[i]); min=array[0]; for(i=1;i<10;i++) if(min>array[i]) {min=array[i]; k=i; } array[k]=array[0]; array[0]=min; printf(“Afterexchange: \n”); for(i=0;i<10;i++) printf(“%5d”,array[i]); printf(“k=%d\tmin=%d\n”,k,min) } 2在一个已排好序的数列中(由小到大)再插入一个数,要求仍然有序。 编程并上机运行。 提示: 编程时应考虑到插入的数的各种可能性(比原有所有的数大;比原有所有的数小;在最大数和最小数之间)。 参考程序如下: #include main() {inti,n; folata,x[20],y[21]; printf(“Pleaseinputnvalue\n”); scanf(“%d”,&n); printf(“Pleaseinputvalue(fromsmalltobig)\n”); for(i=0;i scanf(“%f”,&x[i]); printf(“Insertvalue=? ”); scanf(“%f”,&a); i=0; while(a>x[i]&&i {y[i]=x[i]; i++; } y[i]=a; for(i=i+1;i y[i]=x[i-1]; printf(“\n”); for(i=0;i {printf(“%8.2f”,y[i]); if((i+1)%5==0)puts(“\n”); } } 3将一个一维数组中的值按逆序存放,要求分别输出正序和逆序排列数据。 4某班有n个同学,求出班级平均分,并统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 指导书