c语言实验指导书.docx

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

c语言实验指导书.docx

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

c语言实验指导书.docx

c语言实验指导书

Documentserialnumber【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

 

c语言实验指导书

实验一基本类型的程序设计方法(4学时)

一.实验类型

验证性

二.实验目的

1.掌握所用的C语言环境的基本操作方法。

2.掌握编辑、编译、连接和运行C程序。

3.掌握C程序的数据类型、运算符,表达式。

三.实验内容和要求

1.C语言上机步骤

⑴开机,启动MicrosoftVisualC++6。

⑵建立工程文件:

在“文件”菜单中选择“新建”命令项,在弹出的“新建”对话框的“工程”选项卡中选择“Win32ConsoleApplication”选项,在“工程”框中输入工程文件名sy1,在“c:

位置”下拉框中输入或选择文件夹,单击“确定”;在以下弹出的两个对话框中分别单击命令按钮“完成”和“确定”。

⑶建立C++源文件:

在“工程”菜单中选择“添加到工程”—“新建”命令项,在弹出的“新建”对话框的“文件”选项卡中选择“C++SourceFile”,在右边的“文件”框中输入文件名sy11后单击“确定”。

⑷输入源程序:

在弹出的文件编辑窗口中输入下面的源程序:

#include<>

voidmain()

{printf("Hello,World!

\n");(

printf("WelcometotheClanguageworld!

\n");

printf("Everyonehasbeenwaitingfor.\n");

}

⑸编译:

用“编译”菜单的“编译”命令项对源文件进行编译,如果程序有语法或语义错误,在屏幕下面的窗口会出现错误信息;这时候要修改源程序、保存后重新编译。

直到修改了全部错误,屏幕下面的窗口会出现下面的信息:

 

表示已通过编译,生成了目标程序。

⑹调试:

接下来进行调试,完成调试后,生成可执行程序文件。

 

⑺运行:

最后用“编译”菜单的“!

执行”命令项运行可执行程序文件sy.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);ac9798

⑵将第2行改为:

intc1,c2;

再次运行,并分析结果。

ac9798

⑶再将第3行改为:

c1=305;c2=340;1c305340

再使之运行,分析运行结果。

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);

}

在上机前先用人工分析程序,写出应得结果,上机后将二者对照。

3)上机调通以下程序。

输入下面的程序

#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);

}

4)运行以下程序,并分析其输出结果

#include<>

main()

{shorti;

i=-2;

printf("\ni:

dec=%d,oct=%o,hex=%x,unsigned=%u\n",i,i,i,i);

}

【注意】在VC++中,short和int类型的数据在内存中占用4个字节。

5)按格式要求输入、输出数据。

#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,

aA

请同学们写出输出的结果。

【思考】程序第8行中,为什么变量c1要输入两次

6)运行以下程序,并分析其输出结果

#include<>

main()

{floatf;

f=;

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

}

7)运行以下程序,并分析其输出结果

#include<>

main()

{inta,b;floatc,d;charc1,c2;

a=61;b=62;c=;d=;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++中,实数的指数形式是:

±±XXX

8)以下程序的功能是从键盘输入一个整型数,一个实型数和一个字符型数,并把他们在屏幕上输出。

完成以下填空,并把程序调通,写出当输入为45,,A<回车>时程序的运行结果。

#include<>

main()

{inta;floatb;charc;

scanf("%d,%f,%c",);

printf("a=\n",a);

printf("b=\n",b);

printf("c=\n",c);

}

9)指出以下程序的错误并改正,并上机把程序调通。

#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输出计算结果,输出时要求有文字说明,取小数点后两位数字。

3.将5位整数按逆序输出,并按位求和。

实验二程序流程控制(4学时)

一.实验类型

验证和设计

二.实验目的

1.掌握嵌套if-else语句与if的比较。

2.掌握for语句与while语句的比较。

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

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

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

6.掌握选择结构与循环结构的嵌套。

7.掌握用break语句和continue语句改变循环状态的方法。

三.实验内容和要求

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""

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除十取整,化为相应的常数。

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

3.程序分析

下面是一个计算e的近似值(使误差小于给定的δ)的程序。

#include<>

main()

{doublee=,x=,y,delta;

inti=1;

printf("请输入给定的误差:

");

scanf("%lf",&delta);

y=1/x;

while(y>=delta)

{e=e+y;

i++;

x=x*i;

y=1/x;

}

printf("计算结果是:

%\n",e);

}

⑴阅读上面的程序,写出程序所依据的计算公式。

⑵当输入的delta是什么值时,能分别使程序按下面的要求运行:

ⅰ不进入循环;

ⅱ只循环一次;

ⅲ只循环两次;

ⅳ进入死循环(程序将永远循环下去)。

ⅴ为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句

⑶原程序中while语句中的y>=delta,分别换成y>delta,y=delta,y

⑷把程序中的while结构改写成do-while结构,再运行程序,说明两种结构的区别。

⑸将程序改成用for循环结构,计算前50项,并运行程序,写出运行结果。

4.有一数列:

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单步跟踪执行程序,可以在监视窗口设置要观察的变量或表达式。

 

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

算法:

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

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

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

请同学们根据算法写出完整的程序,并编译、运行、检查结果的正确性。

四.思考题

1.求整数N的阶乘。

2.求两个数的最小公倍数。

3.从键盘上输入三个实数,它们分别代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的C程序;如果能构成三角形,求出三角形的面积(取小数2位)。

用下面的数据运行程序,记录程序的输出结果:

a

b

c

类型

三角形面积

【提示】已知三角形边长a、b、c,计算三角形面积s的公式是:

4.编写程序:

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

五.注意事项

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

2.while语句的句法格式及用法。

3.for语句的正确使用方法。

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

4.当循环不能停止(出现死循环),应该用Ctrl+break中断程序的运行。

实验三指针和数组(4学时)

一.实验类型

验证性

二.实验目的

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

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

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

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

三.实验内容和要求

1.在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。

分析:

C中数组长度必须是确定大小,即指定N的值。

#defineN10

main()

{

inta[N],i,j,temp;

printf("pleaseinput%dnumbers\n",N);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

for(j=0;j

{

if(a[j]

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

printf("thearrayaftersort:

\n");

for(i=0;i

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

}

2.有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。

#include<>

#defineM3

#defineN4

main()

{intmax,i,j,r,c;

inta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};

max=a[0][0];

for(i=0;i

for(j=0;j

if(a[i][j]>max){max=a[i][j];r=i;c=j;}

printf("max=%d,row=%d,colum=%d\n",max,r,c);

}

输入并调试、运行程序,记录程序的输出;若将a[0][0]改为1230,程序运行结果有错,应如何修改程序

3.测试、运行自己编写的程序。

(1)编写程序,将数组中所有奇数放在另一个数组中返回。

(2)输入若干有序数放在数组中。

然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。

请对插在最前、插在最后、插在中间三种情况运行程序,以便验证程序是否正确。

(3)求两个矩阵之和。

4.以下程序的功能是求数组num中小于零的数据之和,程序中存在错误,请上机调试并改正。

main()

{intnum[20];

intsum,i;

for(i=0;i<=19;i++)

scanf(“%d”,&num[i]);

for(i=0;i<=19;i++);

if(num[i]<0)sum+=num[i];

printf(“sum=%6d”,sum);

}

5.运行下列程序,写出运行结果。

#include""

main()

{inta[5],*p,j;

for(j=0;j<5;j++)a[j]=j+1;

p=a;

for(j=0;j<5;j++)printf("*(p+%d)=%d\n",j,*(p+j));

}

将输出语句中的*改成方括号的形式,修改后再运行程序。

6.输入3个数a,b,c,按大小顺序输出。

   

程序分析:

利用指针方法。

程序源代码:

/*pointer*/

main()

{

intn1,n2,n3;

int*pointer1,*pointer2,*pointer3;

printf("pleaseinput3number:

n1,n2,n3:

");

scanf("%d,%d,%d",&n1,&n2,&n3);

pointer1=&n1;

pointer2=&n2;

pointer3=&n3;

if(n1>n2)swap(pointer1,pointer2);

if(n1>n3)swap(pointer1,pointer3);

if(n2>n3)swap(pointer2,pointer3);

printf("thesortednumbersare:

%d,%d,%d\n",n1,n2,n3);

}

swap(int*p1,int*p2)

{intp;

p=*p1;*p1=*p2;*p2=p;

}

7.程序填空并调试:

下面的程序可以实现从10个数中找出最大数和最小值的功能,请填空完成并上机调试。

#include<>

intmax,min;

find(int*p,intn)

{int*q;

max=min=*p;

for(q=_____①____;____②___;q++)

if(__③____)max=*q;

elseif(___④____)min=*q;

}

main()

{inti,num[l0];

printf("Input10numbers:

\n");

for(i=0;i

scanf("%d",&num[i]);

find(num,10);

printf("max=%d,min=%d\n,max,min);

}

四.思考题

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图编写选择排序函数。

3.下面的程序用来实现将一个3×3的矩阵转置。

#include""

voidtranf(int(*p)[3])

{intt,i,j;

for(i=0;i<3;i++)

for(j=0;j

{t=p[i][j];p[i][j]=p[j][i];p[j][i]=t;}

}

main()

{inti,j,a[3][3];

for(i=0;i<3;i++)

for(j=0;j<3;j++)scanf("%d",&a[i][j]);

tranf(a);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf("%3d",a[i][j]);

printf("\n");

}

}

将上面程序tranf函数中的的方括号改成*号的表示形式,调试并运行程序。

程序输入:

123456789,记录程序的输出。

4.用指向指针的方法对n个整数排序并输出。

要求将排序单独写一个函数。

n和各个整数在主函数中输入,最后在主函数中输出。

实验四函数调用和变量存储类别(4学时)

一.实验类型

验证和设计

二.实验目的

1.掌握定义函数的方法;

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

3.掌握函数的嵌套调用和递归调用的方法;

4.全局变量和局部变量动态变量、静态变量的概念和使用方法。

三.实验内容和要求

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

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

⑴实验五介绍了求最大公约数的算法

⑵若最大公约数为h,则最小公倍数l=m*n/h。

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

#include<>

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

{……}

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

{……}

voidmain()

{intm,n,h,l;

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

");

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

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

当前位置:首页 > 小学教育 > 小学作文

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

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