C语言实验指导书.docx

上传人:b****5 文档编号:29473190 上传时间:2023-07-23 格式:DOCX 页数:27 大小:78.16KB
下载 相关 举报
C语言实验指导书.docx_第1页
第1页 / 共27页
C语言实验指导书.docx_第2页
第2页 / 共27页
C语言实验指导书.docx_第3页
第3页 / 共27页
C语言实验指导书.docx_第4页
第4页 / 共27页
C语言实验指导书.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言实验指导书.docx

《C语言实验指导书.docx》由会员分享,可在线阅读,更多相关《C语言实验指导书.docx(27页珍藏版)》请在冰豆网上搜索。

C语言实验指导书.docx

C语言实验指导书

 

C语言程序设计

实验指导书

沈岚岚吕元长编写

 

桂林电子科技大学信息科技学院

2012.03

 

前言上机实验的目的和要求

一上机实验的目的

上机实验的目的,绝不仅仅是为了验证教材和讲课的内容,或者验证自己所编程序正确与否。

学习程序语言,上机实验的目的如下:

1加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,通过多次上机,就能自然、熟练地掌握语法规定。

2了解和熟悉C语言程序开发环境。

熟悉一两种环境(计算机系统的软件和硬件条件),再遇到其他的系统时便会触类旁通,很快学会。

3学会上机调试程序,也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能够正确地运行。

要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,而且要求自己动手实践能力强。

4在做实验时千万不要在程序通过后就认为万事大吉,完成任务了,应当在通过的程序上做一些调试和修改,看看会得到什么结果。

多动脑筋思考,将会对你有很大帮助。

二上机实验前的准备工作

1了解所用的计算机系统的性能和使用方法;

2复习和掌握与本实验有关的教学内容;

3准备好上机所用的程序,切忌自己不思考、不编制程序或抄袭别人的程序;

4准备好调试和运行时所需的数据。

三上机实验的步骤

1调出C语言编译系统,进入C语言工作环境;

2输入自己编制好的程序;

3检查输入是否有错,及时更正;

4进行编译和连接;

5运行程序,分析结果。

四、实验结束,整理实验报告

实验报告应包括以下内容:

1上机题目;

2程序清单;

3运行结果;

4对结果的分析和本次获得的经验和体会。

 

实验一C语言程序初步

数据类型、运算符和表达式

一实验目的

1掌握C语言程序的书写格式和C语言程序的结构,初步了解C源程序的特点。

2掌握C语言上机步骤,了解如何编辑、编译、调试和运行一个C程序的方法。

3掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对他们赋值的方法。

4掌握不同的类型数据之间赋值的规律。

二实验内容

1输入并运行下面的程序,运行后记录并分析结果。

#include/*第1行*/

main()

{charc1,c2;/*第3行*/

c1=97;c2=98;/*第4行*/

printf("%c%c\n",c1,c2);/*第5行*/

}

在此基础上:

⑴在程序最后增加一个语句,再运行,并分析结果。

printf("%d%d\n",c1,c2);/*第6行*/

⑵将第3行作如下修改后运行程序,并分析结果。

intc1,c2;/*第3行*/

⑶在⑵的基础上将第4行如下修改后运行程序,并分析结果。

c1=305;c2=340;/*第4行*/

2输入并运行下面的程序,运行后记录并分析结果。

#include

main()

{printf("123456789012345\n");

printf("abc\tde\rf\tg\n");

printf("h\ti\b\bjk\n");

printf("abc\t\101d\\e\x62Q\bg\n");

}

3分析下面的程序,写出应得结果。

#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总结运行C程序的一般步骤。

2编写一个C程序,输入a、b、c三个数,输出其中最大者;如果求四个数中的最大者,则程序该如何修改。

四注意事项

当程序在编译时发现很多错误,此时应从上到下逐一改正;或改一个错误,就重新再编译,因为有时一个错误会引起很多错误信息。

 

实验二顺序结构与输入/输出方法

一实验目的

1学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自增减运算符的使用。

2掌握C语言中赋值语句的使用。

3掌握C语言中各种数据的输入/输出方法,能正确使用基本格式符。

二实验内容

1输入下面的程序:

#include

main()

{inti,j,m,n;

i=8;j=10;

printf("%d,%d,%d,%d\n",i,j,m,n);/*第5行*/

m=++i;n=j++;/*第6行*/

printf("%d,%d,%d,%d\n",i,j,m,n);/*第7行*/

}

运行程序,分析第5行和第7行输出的不同。

⑴将第6行按如下修改以后再运行,分析第5行和第7行输出的不同。

m=i++;n=++j;/*第6行*/

⑵在程序最后增加两行,记录并分析该行的输出。

i=j=8;/*第8行*/

printf("%d,%d,%d,%d\n",i,++i,j,j++);/*第9行*/

2运行以下程序,并分析输出结果

#include

main()

{inta=-2;longb;floatc;

b=20000+20000;c=1.23e-1;

printf("a=%d,%3d,%-3d,b=%Ld\n",a,a,a,b);

printf("a=%o,%x,%u\n",a,a,a);

printf("d=%f,%8.2f,%.2f\n",c,c,c);

printf("d=%e,%8.2e,%g\n",c,c,c);

printf("%c,%s,",'\072',"China");

printf("|-%5.2s|%5.2s|\n","China","China");

}

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以下程序的功能是从键盘输入一个整型数,一个实型数和一个字符型数,并把他们在屏幕上输出。

完成以下填空,并把程序调通,写出当输入为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);

}

5指出以下程序的错误并改正,并上机把程序调通,记录输出的结果

#include

main()

{inta;

scanf("%f",a);

printf("a=%f,a);

charc;

c=A;

printf("%f,c)

}

6编写根据圆柱体半径r,圆柱高h,求圆柱底周长l,底面积s,圆柱体积v的程序。

要求用scanf输入数据,用printf输出计算结果,小数点后取3位数字。

键盘输入半径r为2.14,高h为3.48,记录程序运行后的输出结果。

三思考题

编写程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符。

并思考以下问题:

⑴变量c1,c2应定义为字符型或整型?

还是二者皆可?

⑵要求输出c1和c2的ASCII码,应如何处理?

用putchar函数还是printf函数?

⑶整型变量和字符型变量是否在任何情况下都可以互相代替?

 

实验三逻辑运算和选择结构程序设计

一实验目的

1掌握C语言表示逻辑量的方法(0代表“假”,1代表“真”);

2学会正确使用逻辑运算符和逻辑表达式;

3熟练掌握if语句和switch语句。

二实验内容

1已知三个整数a,b,c,找出最大值放在max中。

#include

main()

{定义整数变量a,b,c,max;

键盘输入3个整数a,b,c;

在a,b中间求出较大数max(如果a>=b,则max=a;否则max=b);

c与max比较,如果c>max,则max=c;

输出最大数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):

B70~80分(包括70):

C

60~70分(包括60):

D60分以下:

E

方法一:

用嵌套的if语句

#include"stdio.h"

main()

{定义整数变量:

成绩score,字符型变量:

等级grade;

输入学生成绩score;

如果score>100或score<0,则输出信息:

“输入成绩错误!

”;

否则{如果score>=90,则等级grade='A';

否则如果score>=80,则等级grade='B';

否则如果score>=70,则等级grade='C';

否则如果score>=60,则grade='D';

否则grade='E';

输出成绩等级grade;

}

}

输入测试数据,调试程序。

测试数据要覆盖所有路径,注意临界值,例如此题中100分,60分,0分以及小于0和大于100的数据。

如果稍不注意就会出现小的程序缺陷。

方法二:

用switch语句

分析:

switch语句是用于处理多分支的语句。

注意,case后的表达式必须是一个常量表达式,所以在用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。

所有A(除100以外)、B、C、D类的成绩的共同特点是十位数相同,此外都是E类。

则由此可把score除十取整,化为相应的常数。

请同学们自己根据分析写出完整的程序段,并编译、运行、查看结果。

3从键盘上输入三个实数,它们分别代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的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的公式是:

求平方根用函数sqrt。

注意,应在程序中加入文件包含命令行:

#include

【算法】

定义变量a,b,c,e,(a,b,c是三角形三边长,e是组成三角形的条件),

p,s(计算三角形面积用);

输入三角形三边长a,b,c;

判定三角形类型并输出结果;

if(组成三角形的条件)

if(等腰三角形)是等腰三角形;

if(等边三角形)输出是等边三角形;

else输出是等腰三角形;

else输出是三角形;

else输出不是三角形;

如果是三角形,计算并输出面积;

●组成三角形的条件a+b>c&&b+c>a&&c+a>b

●等腰三角形(Isoscelestriangle)a==b||b==c||c==a

●等边三角形(Equilateraltriangle)a==b&&a==c

三注意事项:

1if-else语句书写时应采用分层缩进的格式。

2switch语句的句法格式。

 

实验四循环结构程序设计

一目的和要求

1掌握在设计条件型循环结构时,如何正确地设定循环条件,以及如何正确地控制计数型循环结构的次数。

2熟悉用while语句,do-while语句和for语句实现循环的方法。

3掌握在程序设计中用循环的方法实现各种算法(如穷举、选代、递推等)。

4掌握循环结构的嵌套。

二实验内容

1分析下面的程序的作用。

#include

main()

{floate=1.0,x=1.0,y,delta;/*delta—给定的误差δ*/

inti=1;

printf("Iuputdelta:

");scanf("%f",&delta);

y=1/x;

while(y>=delta)

{x=x*i;y=1/x;e=e+y;i++;}

printf("i=%d\n",i-1);/*第9行*/

printf("Resultis%f\n",e);

}

}

⑴阅读上面的程序,写出程序中e所依据的计算公式;输入delta=0.0001,记录程序输出。

⑵说明程序第9行语句的作用。

将程序分别改成do-while、for循环结构,输入delta=0.0001运行程序,写出运行结果。

2有一数列:

编程求这个数列前n项之和(n在运行时从键盘输入)。

【分析】数列中各项的分子用变量a表示,分母用变量b表示

第1项:

分子a=2,分母b=1

从第2项起:

分子a等于前一项的分子与分母的和,分母b等于前一项的分子

【算法】

定义变量:

项数n,分子a(初值2),分母b(初值1),和s(初值0);

请自己考虑变量的数据类型。

从键盘输入项数n。

循环求和如用for循环:

for(i=1;i<=n;i++)/*应增加变量i的定义*/

循环体为:

在s中加入当前项s=s+a/b;

求下一项

t=a;/*保存前一项的分子,应增加变量t的定义*/

a=a+b;/*后一项分子*/

b=t;/*后一项分母*/

输出和s。

 

3计算两个数的最大公约数。

【算法】

⑴输入两个整数m、n,并求m除以n的余数k。

⑵当k≠0,将除数n作为被除数m,余数k作为除数n,继续求m除以n的余数k;反复做第⑵步,直到余数k为0结束循环。

⑶结束循环后,除数n就是m与n的最大公约数。

请同学们根据算法写出完整的程序,并运行程序(输入两整数m,n为360,135)。

4编写程序:

输入6名学生5门课程的成绩,分别统计出每个学生5门课程的平均成绩。

参考程序:

#include

main()

{inti,j,sum,score;floatav;

for(i=1;i<=6;i++)

{printf("请输入第%d个学生的成绩:

",i);

sum=0;/*注意本语句的位置*/

for(j=1;j<=5;j++)

{scanf("%d",&score);sum+=score;}

av=sum/5;

printf("序号:

%d平均分:

%5.1f\n",i,av);

}

getch();

}

三注意事项

1while语句的句法格式及用法。

2for语句的正确使用方法。

注意它的初始值、终止条件及步长的确定。

3当循环不能停止(出现死循环),可以用Ctrl+break中断程序的运行。

实验五数组

一实验目的

1掌握一维数组和二维数组的定义、赋值和输入输出的方法;

2掌握字符数组和字符串函数的使用;

3掌握与数组有关的算法(特别是排序算法)

二实验内容

1程序功能:

输入12个整数,按每行3个数输出,最后输出它们的平均值。

#include

#defineN12

main()

{inti,a[N],av;

for(i=0;i

for(i=0;i

{printf("%d",a[i]);

if(i%3==0)printf("\n");

}

for(i=0;i!

=N;i++)av+=a[i];

printf("av=%f\N",av);

}

上面给出的程序有错误,请改正并运行,记录输出结果。

【提示】请注意输入提示、变量赋初值、循环结束条件、输出格式等问题。

2选择排序(升序):

最常用的排序方法除了冒泡排序外,还有选择排序。

【算法】n个数的选择排序的算法:

定义变量、输入n及数组a各元素

n个数排序要进行n-1遍

以下是一遍排序(第i遍)的方法:

①设最小数的下标k=i,则最小数为a[k]

②从下标j=i+1的元素起,到最后一个元素(j=n-1),将a[j]与最小数a[k]比较,确定最小数的下标k

③交换a[i]与最小数a[k]

输出已排序的n个数

请根据上面的算法编写选择排序程序,并编辑运行、记录输入输出数据。

3编写程序,输出由1~N×N的整数组成的N阶方阵和它的上、下三角阵。

例如,N=3时,输出:

1231231

4565645

7899789

N阶方阵上三角阵下三角阵

【提示】N阶方阵用二维数组表示,用二重循环输出:

外循环控制输出多少行,内循环输出每行中的整数。

输出上、下三角阵时注意内循环控制变量的取值。

4按照下面算法编一个程序,将两个字符串连接起来,不能用strcat函数。

⑴定义整型变量i、j,字符串s1、s2

⑵输入字符串s1、s2

⑶当字符串s1尚未结束,改变字符串s1的下标,使之到s1结束处

⑷当字符串s2尚未结束,将字符串s2逐个字符连接到字符串s1的后面

⑸为字符串s1添加结束标志

⑹输出连接后的字符串

三思考题

编程将一个字符串中的字符按逆序重新存放,例如,

原字符串:

Computer

逆序存放字符串:

retupmoC

四注意事项

1在C语言中,数组元素的下标从0开始,最大下标总是比定义的数组长度少1。

2在C语言中,定义数组时,其长度必须指定且必须用常量表示。

 

实验六函数

一实验目的

1掌握定义函数的方法;

2掌握函数实参与形参的对应关系以及“值传递”的方式;

3掌握函数递归调用的方法;

二实验内容

1编写两个函数,分别求两个正整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个正整数由键盘输入。

【提示】设有两个正整数m和n

⑴实验四介绍了求最大公约数的算法,也可以用递归的方法求最大公约数。

设hcf(intm,intn)是用来求m和n的最大公约数h函数,k=m%n,则:

⑵若最大公约数为h,则最小公倍数为:

m*n/h。

实验时,完成以下两个函数的定义,使之和主程序构成完整的程序,实现题目的要求。

#include

inthcf(intm,intn)/*求最大公约数的函数*/

{……}

intlcd(intm,intn,inth)/*求最小公倍数的函数*/

{返回最小公倍数;}

main()

{intm,n,h,l;

printf("请输入两个正整数m、n:

");

scanf("%d,%d",&m,&n);

h=hcf(m,n);

printf("%d和%d的最大公约数是:

%d\n",m,n,h);

l=lcd(m,n,h);

printf("%d和%d的最小公倍数是:

%d\n",m,n,l);

}

程序调试通过后,用m=350、n=125和m=96、n=64两组数据运行程序,记录程序的输出。

2编写求n!

的函数f(intn),在主函数中输入两个整数m、n,然后调用函数求:

【注意】函数f的类型应用long或double。

3有一个字符串,输入一个字符,编写函数dstr将输入的指定字符从字符串中删去。

#include

voiddstr(charstr[],charch)

{

}

main()

{charstr[80],ch;

printf("请输入字符串:

");gets(str);

printf("请输入欲删除的字符:

");scanf("%c",&ch);

dstr(str,c);

printf("删除指定字符后的结果:

%s\n",str);

}

三注意事项

1注意函数调用返回的特点:

返回调用处,而后继续执行下面的语句。

2函数中无return语句时,函数的类型定义为void或int,不可定义为其他。

3当被调函数定义在主调函数之后时,应在主调函数中说明被调函数,否则,调用时将出现错误。

实验七指针

一实验目的

1了解指针的概念,学会定义和使用指针变量。

2掌握指针、变量和数组的关系及使用方法。

3学会使用指向函数的指针变量。

二实验内容

1编写函数fun(float*sn,intn),其功能是:

根据以下公式计算s,计算结果通过形参sn传回;n通过实参传入,n的值大于等于0。

上机运行并记录输入输出(主函数已给出)。

fun(float*sn,intn)

{定义变量:

和s,通项w,符号f,循环控制变量i;/*其中s、f要初始化*/

循环求累加和s

{改变符号;/*由负变正或由正变负*/

求通项w;

累加:

s+=w;

}

形参指针变量sn赋值;/*通过形参sn传回累加和s*/

}

main()

{floats;intn;

printf("n=");scanf("%d",&n);

fun(&s,n);

printf("s=%f\n",s);

}

2想使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的?

swap(int*p1,int*p2)

{int*p;

p=p1;p1=p2;p2=p

}

main()

{inta,b;int*pt1,*pt2;

scanf("%d,%d",&a,&b);

pt1=&a;pt2=&b;

if(a

printf("%d,%d\n",*pt1,*pt2);

}

上机调试此程序。

如果不能实现题目要求,指出原因并修改之。

3下面的程序用来实现将一个

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1