C语言程序设计实验指导书.docx
- 文档编号:12749582
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:35
- 大小:508.13KB
C语言程序设计实验指导书.docx
《C语言程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书.docx(35页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验指导书
C语言程序设计
实验指导书
桂林电子科技大学信息科技学院
2017.03
前言上机实验的目的和要求
一上机实验的目的
上机实验的目的,绝不仅仅是为了验证教材和讲课的内容,或者验证自己所编程序正确与否。
学习程序语言,上机实验的目的如下:
1加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,通过多次上机,就能自然、熟练地掌握语法规定。
2了解和熟悉C语言程序开发环境。
熟悉一两种环境(计算机系统的软件和硬件条件),再遇到其他的系统时便会触类旁通,很快学会。
3学会上机调试程序,也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能够正确地运行。
要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,而且要求自己动手实践能力强。
4在做实验时千万不要在程序通过后就认为万事大吉,完成任务了,应当在通过的程序上做一些调试和修改,看看会得到什么结果。
多动脑筋思考,将会对你有很大帮助。
二上机实验前的准备工作
1了解所用的计算机系统的性能和使用方法;
2复习和掌握与本实验有关的教学内容;
3准备好上机所用的程序,切忌自己不思考、不编制程序或抄袭别人的程序;
4准备好调试和运行时所需的数据。
三上机实验的步骤
1调出C语言编译系统,进入C语言工作环境;
2输入自己编制好的程序;
3检查输入是否有错,及时更正;
4进行编译和连接;
5运行程序,分析结果。
四、实验结束,整理实验报告
实验报告应包括以下内容:
1上机题目;
2程序清单;
3运行结果;
4对结果的分析和本次获得的经验和体会。
实验一C语言程序初步数据类型、运算符和表达式
一实验目的
1熟悉C语言运行环境——MicrosoftVisualC++6.0中文版。
2掌握C语言程序的书写格式和C语言程序的结构,初步了解C源程序的特点。
3掌握C语言上机步骤,了解如何编辑、编译、调试和运行一个C程序的方法。
4掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对他们赋值的方法。
5掌握不同的类型数据之间赋值的规律。
二实验内容
1C语言上机步骤
⑴开机,启动MicrosoftVisualC++6。
⑵建立工程文件:
在“文件”菜单中选择“新建”命令项,在弹出的“新建”对话框的“工程”选项卡中选择“Win32ConsoleApplication”选项,在“工程”框中输入工程文件名sy1,在“c:
位置”下拉框中输入或选择文件夹,单击“确定”;在以下弹出的两个对话框中分别单击命令按钮“完成”和“确定”。
⑶建立C++源文件:
在“工程”菜单中选择“添加到工程”—“新建”命令项,在弹出的“新建”对话框的“文件”选项卡中选择“C++SourceFile”,在右边的“文件”框中输入文件名sy11后单击“确定”。
⑷输入源程序:
在弹出的文件编辑窗口中输入下面的源程序:
#include
voidmain()
{printf("Hello,World!
\n");
printf("WelcometotheClanguageworld!
\n");
printf("Everyonehasbeenwaitingfor.\n");
}
⑸编译:
用“编译”菜单的“编译”命令项对源文件sy11.cpp进行编译,如果程序有语法或语义错误,在屏幕下面的窗口会出现错误信息;这时候要修改源程序、保存后重新编译。
直到修改了全部错误,屏幕下面的窗口会出现下面的信息:
表示已通过编译,生成了目标程序sy11.obj。
⑹调试:
接下来进行调试,操作如下图所示。
完成调试后,生成可执行程序文件sy1.exe。
⑺运行:
最后用“编译”菜单的“!
执行sy1.exe”命令项运行可执行程序文件sy1.exe。
运行结果如下:
2用同样的方法,完成下面程序的运行
1输入并运行下面的程序,运行后记录并分析结果。
#include
main()
{charc1,c2;/*第2行*/
c1=97;c2=98;/*第3行*/
printf("%c%c\n",c1,c2);
}
在此基础上:
⑴在程序最后增加一个语句,再运行,并分析结果。
printf("%d%d\n",c1,c2);
⑵将第2行改为:
intc1,c2;
再次运行,并分析结果。
⑶再将第3行改为:
c1=305;c2=340;
再使之运行,分析运行结果。
2输入并运行下面的程序
#include
main()
{charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\t\b%c%c\n",c4,c5);
}
在上机前先用人工分析程序,写出应得结果,上机后将二者对照。
三分析与讨论
1下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论成功或失败的原因。
2总结C程序的结构和书写规则。
四思考题
1请写出C语言程序的构成和运行C语言程序的一般步骤。
2编写一个C语言程序,输入a、b、c三个数,输出其中最大者。
试想,如果求四个数中的最大者,则程序该如何编写。
五注意事项
1当程序在编译时发现很多错误,此时应从上到下逐一改正,或改一个错误,就重新再编译,因为有时一个错误会引起很多错误信息。
2当需要用比较复杂的逻辑表达式时,要避免发生优先级上的错误,可以使用最高优先级的运算符()将其括起来,这样既增加可读性,又不会出现不必要的错误。
实验二顺序结构与输入/输出方法
一实验目的
1学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
2掌握C语言中赋值语句的使用。
3掌握C语言中各种数据的输入/输出方法,能正确使用各种格式转换符。
4理解C语言程序的顺序结构。
二实验内容
上机调通以下程序。
1输入下面的程序
#include
main()
{inti,j,m,n;
i=8;j=10;
m=++i;/*第5行*/
n=j++;/*第6行*/
printf("%d,%d,%d,%d\n",i,j,m,n);
}
运行程序,注意i、j、m、n各变量的值;然后分别作以下改动并运行:
⑴将第5、6行改为如下以后再运行:
m=i++;
n=++j;
⑵将程序改为:
#include
main()
{inti,j;
i=8;j=10;
printf("%d,%d\n",i++,j++);/*第5行*/
}
⑶在⑵的基础上,将第5行printf语句改为:
printf("%d,%d\n",++i,++j);
⑷再将printf语句改为:
printf("%d,%d,%d,%d\n",i,j,i++,j++);
⑸将程序改为:
#include
main()
{inti,j,m=0,n=0;
i=8;j=10;
m+=i++;n-=--j;
printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n);
}
2运行以下程序,并分析其输出结果
#include
main()
{shorti;
i=-2;
printf("\ni:
dec=%d,oct=%o,hex=%x,unsigned=%u\n",i,i,i,i);
}
【注意】在VC++6.0中,short和int类型的数据在内存中占用4个字节。
3按格式要求输入、输出数据。
#include
main()
{inta,b;
floatx,y;
charc1,c2;
scanf("a=%d,b=%d",&a,&b);
scanf("%f,%e",&x,&y);
scanf("%c%c%c",&c1,&c1,&c2);/*第8行*/
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);
}
运行该程序,按如下方式在键盘上输入数据:
a=3,b=7
85,71.82
aA
请同学们写出输出的结果。
【思考】程序第8行中,为什么变量c1要输入两次?
4运行以下程序,并分析其输出结果
#include
main()
{floatf;
f=3.1415;
printf("\n%f,%4.3f,%5.3f,%-10.3f,%10.3f\n",f,f,f,f,f);
}
4运行以下程序,并分析其输出结果
#include
main()
{inta,b;floatc,d;charc1,c2;
a=61;b=62;c=31.5;d=-68.87;c1='a';c2='A';
printf("\n");
printf("a=%d,b=%d\n",a,b);
printf("c=%f,d=%f\n",c,d);
printf("c=%e,d=%e\n",c,d);
printf("c1=%c,%c\n",c1,c2);
}
【注意】在VC++6.0中,实数的指数形式是:
±X.XXXXXXe±XXX
5以下程序的功能是从键盘输入一个整型数,一个实型数和一个字符型数,并把他们在屏幕上输出。
完成以下填空,并把程序调通,写出当输入为45,34.5,A<回车>时程序的运行结果。
#include
main()
{inta;floatb;charc;
scanf("%d,%f,%c",);
printf("a=\n",a);
printf("b=\n",b);
printf("c=\n",c);
}
6指出以下程序的错误并改正,并上机把程序调通。
#include
main()
{inta;
scanf("%f",a);
printf("a=%f,a);
charc;
c=A;
printf("%f,c)
}
三思考题
1编写程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符。
并思考以下问题:
⑴变量c1,c2应定义为字符型或整型?
还是二者皆可?
⑵要求输出c1和c2的ASCII码,应如何处理?
用putchar函数还是printf函数?
⑶整型变量和字符型变量是否在任何情况下都可以互相代替?
2设圆半径r=2,圆柱高h=3,求圆周长,圆柱底面积,圆柱体积。
用scanf输入数据,用printf输出计算结果,输出时要求有文字说明,取小数点后两位数字。
实验三逻辑运算和选择结构程序设计
一实验目的
1掌握C语言表示逻辑量的方法(0代表“假”,1代表“真”);
2学会正确使用逻辑运算符和逻辑表达式;
3熟练掌握if语句和switch语句。
二实验内容
1已知三个数a,b,c,找出最大值放在max中。
#include
main()
{inta,b,c,max;
printf("请输入3个整数(中间用逗号分开):
");
scanf("%d,%d,%d",&a,&b,&c);
if(a>=b)max=a;
elsemax=b;
if(c>max)max=c;
printf("max=%d\n",max);
}
若输入下列数据,分析程序的执行顺序并写出输出结果。
序号
输入的3个整数a、b、c
输出max
1
1,2,3
2
1,3,2
3
2,1,3
4
2,3,1
5
3,1,2
6
3,2,1
2输入某学生的成绩,经处理后给出学生的等级,等级如下:
90分以上(包括90):
A80~90分(包括80):
B
70~80分(包括70):
C60~70分(包括60):
D
60分以下:
E
方法一:
用嵌套的if语句
#include"stdio.h"
main()
{intscore;chargrade;
printf("请输入学生成绩:
");
scanf("%d",&score);
if(score>100||score<0)printf("\n输入成绩错误!
\n");
else{if(score>=90)grade='A';
elseif(score>=80)grade='B';
elseif(score>=70)grade='C';
elseif(score>=60)grade='D';
elsegrade='E';
printf("\n成绩等级是%c\n",grade);
}
}
输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中100分,60分,0分以及小于0和大于100的数据。
如果稍不注意就会出现小的程序缺陷。
方法二:
用switch语句
分析:
switch语句是用于处理多分支的语句。
注意,case后的表达式必须是一个常量表达式,所以在用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外)、B、C、D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可把score除十取整,化为相应的常数。
请同学们自己根据分析写出完整的程序段,并编译、运行、查看结果。
三思考题
1有一函数:
x(-5 y=x-1(x=0) x+1(0 要求输入x的值,输出y的值。 分别用: ⑴不用嵌套的if语句;⑵用嵌套的if语句;⑶用switch语句编写程序。 2从键盘上输入三个实数,它们分别代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的C程序;如果能构成三角形,求出三角形的面积(取小数2位)。 用下面的数据运行程序,记录程序的输出结果: a b c 类型 三角形面积 1.58 2.37 1.58 3.21 4.25 5.16 2.48 2.48 2.48 2.35 9.28 3.83 【提示】已知三角形边长a、b、c,计算三角形面积s的公式是: 四注意事项: 1if-else语句书写时应采用分层缩进的格式。 2switch语句的句法格式。 实验四循环结构程序设计 一目的和要求 1掌握在设计条件型循环结构时,如何正确地设定循环条件,以及如何正确地控制计数型循环结构的次数。 2熟悉用while语句,do-while语句和for语句实现循环的方法。 3掌握在程序设计中用循环的方法实现各种算法(如穷举、选代、递推等)。 4掌握选择结构与循环结构的嵌套。 二实验内容 1有一数列: 2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。 #include main() {intn,t; floata=2,b=1,s=0; for(n=1;n<=10;n++) {s=s+a/b; t=a; a=a+b; b=t; } printf("%f\n",s); } 要求: 跟踪执行,观察s、t、a、b的变化。 方法: 使用功能键F10单步跟踪执行程序,可以在监视窗口设置要观察的变量或表达式。 2程序修改题 #include #include floatfun(floatnum) {ints; floatn,t,pi; t=1;pi=0;n=1;s=1; /**************found**************/ while(t>=num) { pi=pi+t; n=n+2; s=-s; /**************found**************/ t=s%n; } pi=pi*4; returnpi; } main() {floatn1,n2; printf("Enterafloatnumber: "); scanf("%f",&n1); n2=fun(n1); printf("%6.4f\n",n2); } 3计算两个数的最大公约数。 算法: ⑴输入两个整数m、n,并求m除以n的余数k。 ⑵当k≠0,将除数n作为被除数m,余数k作为除数n,继续求m除以n的余数k;反复做第⑵步,直到余数为0结束循环。 ⑶结束循环后,除数n就是m与n的最大公约数。 请同学们根据算法写出完整的程序,并编译、运行、检查结果的正确性。 三思考题 编写程序: 输入6名学生5门课程的成绩,分别统计出每个学生5门课程的平均成绩。 四、注意事项 1while语句的句法格式及用法。 2for语句的正确使用方法。 注意它的初始值、终止条件及步长的确定。 3当循环不能停止(出现死循环),应该用Ctrl+break中断程序的运行。 实验五数组 一实验目的 1掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2掌握字符数组和字符串函数的使用; 3掌握与数组有关的算法(特别是排序算法) 二、实验内容 编程序并上机调试运行。 1、程序填空 #include voidfun(inta[],intn) {inti,t; /**********found**********/ for(i=0;i<___1___;i++) { t=a[i]; /**********found**********/ a[i]=a[n-1-___2___]; /**********found**********/ ___3___=t; } } main() {intb[9]={1,2,3,4,5,6,7,8,9},i; printf("\nTheoriginaldata: \n"); for(i=0;i<9;i++) printf("%4d",b[i]); printf("\n"); fun(b,9); printf("\nThedataafterinvert: \n"); for(i=0;i<9;i++) printf("%4d",b[i]); printf("\n"); } 2、程序填空题 #include #defineN3 #defineM4 /**********found**********/ voidfun(int(*a)[N],int__1__) {inti,temp; /**********found**********/ for(i=0;i<__2__;i++) {temp=a[0][i]; /**********found**********/ a[0][i]=__3__; a[k][i]=temp; } } main() {intx[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}},i,j; printf("Thearraybeforemoving: \n\n"); for(i=0;i {for(j=0;j printf("\n\n"); } fun(x,2); printf("Thearrayaftermoving: \n\n"); for(i=0;i {for(j=0;j printf("\n\n"); } } 3、程序修改题 #include intfun(doublex[],intn) { /************found************/ intj,c=0,doublexa=0.0; for(j=0;j xa+=x[j]/n; printf("ave=%f\n",xa); for(j=0;j /************found************/ if(x[j]=>xa) c++; returnc; } main() {doublex[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763}; printf("%d\n",fun(x,8)); } 4按照下面算法编一个程序,将两个字符串连接起来,不能用strcat函数。 ⑴定义整型变量i、j,字符串s1、s2 ⑵输入字符串s1、s2 ⑶当字符串s1尚未结束,改变字符串s1的下标,使之到s1结束处 ⑷当字符串s2尚未结束,将字符串s2逐个字符连接到字符串s1的后面 ⑸为字符串s1添加结束标志 ⑹输出连接后的字符串 三思考题 1将一个数组中的值按逆序重新存放,例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。 2最常用的排序方法除了冒泡排序外,还有选择排序。 程序设计思路: 设有10个元素a[0]~a[9],将a[0]与a[1]~a[9]比较,若a[0]比a[1]~a[9]都小,则不进行交换,即无任何操作。 若a[1]~a[9]中有一个以上比a[0]小,则将其中最小的一个(假设为a[i])与a[0]交换,此时a[0]中存放了10个中最小的数。 第二遍将a[1]与a[2]~a[9]比较,将剩下9个数中的最小者a[i]与a[1]对换,此时a[1]中存放的是10个中第2小的数。 依此类推,共进行9遍比较,a[0]到a[9]就已按由小到大顺序存放。 n个数的选择排序的N-S图如下: 定义变量、输入n及数组a各元素 for(i=0;i k=i for(j=i+1;j a[j] k=j 交换a[k]与a[i] 输出已排序的n个数 用冒泡排序同样的主函数,请根据上面的N-S图编写选择排序函数。 四、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 指导书