C程序设计实验指导书2.docx

上传人:b****8 文档编号:9605713 上传时间:2023-02-05 格式:DOCX 页数:23 大小:26.30KB
下载 相关 举报
C程序设计实验指导书2.docx_第1页
第1页 / 共23页
C程序设计实验指导书2.docx_第2页
第2页 / 共23页
C程序设计实验指导书2.docx_第3页
第3页 / 共23页
C程序设计实验指导书2.docx_第4页
第4页 / 共23页
C程序设计实验指导书2.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C程序设计实验指导书2.docx

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

C程序设计实验指导书2.docx

C程序设计实验指导书2

《C语言程序设计》实验指导

第一部分上机实验的指导思想和要求

1.上机实验的目的

学习C语言程序设计课程不能满足于“懂了”,满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。

这是一门实践性很强的课程,必须十分重视实践环节,保证有足够的上机实践时间。

上机实验的目的是:

(1)加深对讲授内容的理解,尤其是一些语法规定。

(2)熟悉C语言程序开发的环境。

(3)学会上机调试程序。

也就是善于发现程序中的错误,并且能很快地排除这些错误。

要学会根据“出错提示”,分析并找出错误。

2.上机实验前的准备工作

(1)了解所用的计算机系统(包括C编译系统)的性能和使用方法。

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

(3)准备好上机所需的程序。

(4)对运行中可能出现的问题应事先作出估计;对程序中自己有疑问的地方,应作上记号,以便在上机时给予注意。

(5)准备好调试和运行时所需的数据。

3.上机实验的步骤

(1)调出C编译系统,进人C工作环境。

(2)输人自己编好的程序

(3)检查一遍已输人的程序是否有错(包括输入时打错的和编程中的错误),及对改正。

(4)进行编译。

如果在编译和连接过程中发现错误,输出窗口会出现“出错信息”,根据提示找到出错位置和原因,加以改正,再进行编译,如此反复,直到顺利通过编译和连接。

(5)运行程序,并分析运行结果是否合理和正确。

在运行时要注意当输入不同数据时所得到的结果是否正确。

此时应运行几次,分别检查在不同情况下程序是否正确。

4.写实验报告,实验报告应包括以下内容:

(1)预习报告(实验目的,题目,程序清单(或算法流程),疑难问题等);

(2)实验数据;(3)实验过程报告;(4)实验小结。

第二部分关于程序的调试和测试

l.程序错误的类型

主要有以下几种:

(1)语法错误:

不符合C语言的语法规定。

会在编译时被发现并指出。

属于“致命错误”,不改正是不能通过编译的。

对一些在语法上有轻微毛病但不影响程序运行的问题(如定义了变量但始终未使用),编译时会发出“警告”。

虽然程序能通过编译,但不应当使程序“带病工作”,应尽可能将程序中所有“致命错误(error)”和“警告(warning)”的因素都排除。

(2)逻辑错误:

程序无语法错误,也能正常运行,但是结果不对。

例如求s=1+2+3+…+100,有人写出以下语句:

for(s=0,i=1;i<100;i++)

s=s+i;

语法没有错,但求出的结果是1+2+3+…+99之和,而不是1+2+3+……100之和。

这种错误计算机是无法检查出来的。

如果是算法有错,则应先修改算法,再改程序。

如果是算法正确而程序写得不对,则直接修改程序。

(3)运行错误:

有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。

多数情况是数据不对,包括数据本身不合适以及数据类型不匹配。

2.程序的测试

程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。

程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。

除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。

测试的目的是检查程序有无“漏洞”。

对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。

但是,如果需要测试一个复杂的大程序,要找到全部可能的路径,并准备出所需的测试数据并非易事。

例如,有两个非嵌套的if语句,每个if语句有2个分支,它们所形成的路径数目为2×2=4;如果一个程序包含100个if语句,则可能的路径数目为2100=1.267651×1030。

实际上进行测试的只是其中一部分(执行几率最高的部分)。

因此,经过测试的程序一般还不能轻易宣布为“没有问题”,而只能说:

“经过测试的部分无问题”。

实验一C语言运行环境

一、目的和要求

1、熟悉使用C语言运行环境。

2、掌握C语言程序的书写格式和C语言程序的结构。

3、掌握C语言上机步骤,了解运行一个C程序的方法。

二、实验内容

调试运行以下程序(调试时找出程序错误并修改,再编译、运行)

1.编写自己的第一个程序

录入如下C源程序,文件名自定(**.c):

#include

intmain() 

{

printf("ThisisaCProgram。

\n);

return0;

} 

对源程序进行编译、连接并运行,观察分析运行结果。

2.编写程序,译密码,要求将“China”译成密码,密码规律是:

用原来的字母后面第4个字母代替原来的字母,因此,“China”应译为“Glmre”。

请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为字符C,h,i,n,a,经过运算后,输出译码后的结果。

3下面的C程序,目的是想计算由键盘输入的任意两个整数的积。

记下在调试过程中所发现的错误、系统给出的出错信息和对策。

分析讨论对策成功或失败的原因

#include“stdio.h”

intprodct(inta,intb)

{intc;

c=a*b;

returnc;

}

intmain()

{intx,y,p;

scanf(“%d,%”,&x,&y);

p=prodct(x,t);

printf(“Theproductis%d”,p);

return0;

}

4、求1+2+3+…+100的和,程序如下。

记下在调试过程中所发现的错误、系统给出的出错信息和对策。

分析讨论对策成功或失败的原因

#include“stdio.h”

intmin()

{inti,sum=0;

for(i=1;i<=100;i++)sum=sum+i;

printf("sum=%d\n",sum);

return0;

}

三、分析与讨论

1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。

分析讨论对策成功或失败的原因。

2、总结C程序的结构和书写规则。

实验二顺序程序设计

一、实验目的

1.学习C语言基本输入输出函数的使用。

2.编写顺序结构程序并运行。

二、实验内容

1、已知:

a=2,b=3,x=3.9,y=2.3(a,b整型,x,y实型),计算算术表达式(float)(a+b)/2+(int)x%(int)y的值。

试编程上机验证。

(提示编程要点:

1、先判断结果值类型,可设置一个此类型的变量用于记录表达式结果,例如变量r;2、程序先给几个条件变量赋初值,然后将表达式赋值给变量r;3、最后输出变量r的值就是表达式的值。

2.若a=5,b=7,c1=‘a’,x=31.19,y=-32.19,“COMPUTER”,编写程序,实现下面的输出格式和结果(空格用□表示):

a=□5,b=□□7,a-b=-2,a/b=71%

c1=’a’□or□97(ASCII)

x=31.1900,y=□-32.19,x+y=□□-1.0

c2=COMPUTER,COMP,□□□COMP

程序中要包括定义变量类型和设计输出(最后一个字符串可使用常量形式,其余要求使用变量)。

3.求两个复数的加、减、乘运算结果并输出。

要求,复数(complex)的实部(therealpart)和虚部(theimaginarypart)由键盘输入,输入数据前要有提示信息输出,将两个复数及其加、减、乘运算结果以复数的形式输出。

例:

输出:

两个复数分别是:

comp1=6.00+j4.40,comp2=5.00+j3.00

compl1+compl2=11.00+j7.40等

三、实验要求

上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。

实验三 选择结构程序设计

一、实验目的  

1.正确使用关系表达式和逻辑表达式表达条件。

2.学习分支语句if和switch的使用方法。

3.学习调试程序。

二、实验内容

1、从键盘输入一个整数,编程判断其奇偶性,并输出结果。

2、某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lowerclass);4岁孩子进中班(Middleclass);5岁、6岁孩子进大班(Higherclass)。

编写程序,输入孩子年龄,输出年龄及进入的班号。

如:

输入:

3,输出:

age:

3,enterLowerclass。

建议用switch语句来实现。

调试无语法错误后,使用下列测试用例进行测试:

(1)3岁;

(2)4岁;(3)5岁;(4)7岁。

3编写一个运算器程序,要求能实现两个数的加、减、乘、除四种运算,输入两个操作数和一个运算符号,输出结果,注意0不能做除数。

使用下列测试用例进行测试:

(1)加法;

(2)减法;(3)乘法;(4)0不为除数的除法;(5)0为除数的除法。

选作题:

通过键盘输入一个字符,判断该字符是数字字符、字母、空格还是其他字符。

三、实验要求

1.复习选择结构程序设计。

2.上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。

    3.上机结束后,应整理出实验报告,实验报告的内容应包括:

题目、程序清单、运行结果及对运行情况的分析。

实验四 循环结构程序设计

一、实验目的

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

2、了解条件型循环结构的基本测试方法。

3、掌握如何正确地控制计数型循环结构的次数。

4、了解在循环结构中,提高程序效率的方法。

5、进一步学习调试程序。

二、实验内容

(1)编程求解:

鸡兔同笼,有三十五只头,九十四只足,求鸡和兔各有多少?

(提示:

用穷举法求解。

即鸡或免的个数x从0至35循环试探,如果满足共有94只足的已知条件,那么此时的x就是一个解。

问题:

循环条件可以进一步简化以提高程序效率吗?

(2)假设密码为12345,当用户输入的密码正确时,显示“Welcome!

”,程序结束;密码错误时,显示“Error!

Tryagain!

”,并要求用户重新输入密码。

如果输入3次后密码仍错误,显示“Sorry!

Youarenotwelcome”,并不允许再输入,程序结束。

(用户输入的密码限定为整数)

问题:

此题应选择哪些测试用例较好?

(3)已知某班有4位同学:

A、B、C、D。

其中有一位同学做了好事,但不知是谁。

当被询问时,A说:

不是我;B说:

是C;C说:

是D;D说:

他胡说。

已知其中有三个人说的是真话,一个人说的是假话。

请根据以上信息,编写程序,找出做了好事的人。

(提示:

C语言中,某个表达式为“真”即值为1,为“假”即值为0;本题中要认真考虑4位同学的话应如何用关系表达式表示?

选作题:

求和sum=1!

+2!

+3!

+4!

+…20!

(考虑应该用何种类型的量存放结果sum.)

三、实验要求

1.复习循环结构程序设计。

2.上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。

    3.上机结束后,应整理出实验报告,实验报告的内容应包括:

题目、程序清单、运行结果及对运行情况的分析。

实验5数组

[实验目的和要求]:

了解数组与数学矩阵的关系

掌握数组的定义、引用和初始化

理解二维数组数据的存储顺序

理解并掌握冒泡排序法和选择排序法

掌握字符数组与字符串的定义和引用

了解字符串处理函数的用法

[实验预习和准备]:

填空题:

(1)若有定义inta[3][5];,则排序在数组中第9个元素是。

(2)已知intx[10]={0,2,4};,则数组x在内存中所占的字节数是(turboc)、(VC++6.0)。

(3)已知floats[10];,计算s在内存中占用多少个内存单元的表达式是。

(4)写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是。

(5)ints[4]={1,2,3,4};则s[s[0]+2*s[2]-s[3]]的值是。

(6)strlen(“student\t\101\\\n”)的值是。

排序算法:

熟悉冒泡排序法和选择排序法

比较冒泡排序法和选择排序法的差异

[实验内容和步骤]:

从键盘输入10个整数,统计其中正数、零和负数的个数并输出。

#include

1:

intmain()

2:

{inta[10],i,s1,s2,s3;

3:

s1=s2=s3=0;

4:

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

5:

scanf(“%d”,①);

6:

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

7:

if(a[i]>0)s1++;

8:

elseif(a[i]==0)s2++;

9:

else②;

10:

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

11:

printf(“%3d”,③);

12:

printf(“\n”);

13:

printf(“positive=%3d,zero=%3d,negative=%3d”,s1,s2,s3);

14:

return0;}

回答下面的问题:

完成程序中的空白处。

①②③

第10行,for循环输出时,共输出多少个数?

如果将10改为20,将会出现什么结果?

上机测试并解释原因。

程序中所定义的数组a[10]在内存中占多少个字节?

在程序中利用sizeof计算a[10]在内存中占多少个字节。

数组元素在内存中是顺序存放的?

还是随机存放的?

分析并测试下面程序的运行结果。

#include

1:

intmain()

2:

{

3:

inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;

4:

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

5:

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

6:

s+=a[i][j];

7:

printf(“%d\n”,s);

8:

return0;}

回答下面的问题:

(1)第3行,定义数组a的所有元素的初值是。

(2)第4~6行,参与s相加的元素有。

(3)程序运行的结果是。

3、不用字符串处理函数将两个字符串连接,即将字符串b连到字符串a的后面,变成字符串c.

1:

#include

2:

intmain()

3:

{chara[80],b[80],c[160];

4:

inti=0,j=0,k=0;

5:

scanf(“%s”,a);

6:

scanf(“%s”,b);

7:

while(a[i]!

=’\0’)

8:

c[k++]=a[i++];

9:

while(b[j]!

=’\0’)

10:

c[k++]=b[j++];

11:

c[k]=’\0’;

12:

printf(“%s\n%s\n%s\n”,a,b,c);

13:

return0;}

回答下面的问题:

第5行,输入一串字符放入数组a中时,为什么没有对a加&操作?

第7~8行,此句的作用是什么?

第8行,如果将两个自加运算用一般加法来等价,请写出此语句的等价表达式。

第7~8行,本循环结束时,是否将字符串a中的结束符也复制给了字符串c?

第9~10行,此语句是将字符串b复制到c数组的开始处吗?

第11行,此句的作用是什么?

是否可以省略此行?

为什么?

根据此程序思路,如果将字符串s2连接到字符串s1的后面,且不需要第三个字符串变量作中间过渡,如何实现?

编程实现并测试。

4、将一个数组从大到小排序,再把一个从键盘输入的数插入数组中,使其仍按从大到小的顺序排列。

#include

1:

intmain()

2:

{

3:

inti,j,p,q,s,n,a[11]={120,-3,0,28,64,68,87,105,162,-8};

4:

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

5:

{

6:

p=i;q=a[i];

7:

for(j=i+1;j<10;j++)

8:

if(q

9:

{p=j;q=a[i];}

10:

if(p!

=i)

11:

{

12:

s=a[i];

13:

a[i]=a[p];

14:

a[p]=s;

15:

}

16:

printf(“%d”,a[i]);

17:

}

18:

printf(“pleaseinputnewdata:

\n”);

19:

scanf(“%d”,&n);

20:

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

21:

if(n>a[i])

22:

{

23:

for(s=9;s>=i;s--)

24:

a[s+1]=a[s];

25:

break;

26:

}

27:

a[i]=n;

28:

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

29:

printf(“%d”,a[i]);

30:

printf(“\n”);

31:

return0;}

回答下面的问题:

(1)在上述程序代码中,找出将数组a进行排序的代码段。

(2)第20~26行的作用是什么?

请加以解释。

(3)将一个新的元素插入到一个数组中间时,其后面的元素应该怎样移动?

5、编写程序,要求在无序数组中查找给定值首次出现的位置。

例如,数组为:

a[10]=1012039941243334,要查找的数:

4,输出:

其位置:

5,若在数组中没找到该数,则输出:

4在该数组中不存在。

提示:

从第0个元素到最后一个元素依次与被找元素比较,相等则停止查找。

循环结束条件:

(已经找到)||所有的数组元素都已经找遍

6、删除一个字符串中指定的字符。

要求:

从键盘输入一个字符串,以及对待删除的字符,处理后输出。

同一字母的大、小写按不同字符处理。

如果输入的字符在字符串中不存在,则字符串照原样输出。

例如:

输入字符串“Iamateacher,youareastudent”,输入待删除的字符‘e’,处理后输出“Iamatachr,youarastudnt”。

实验6函数

[实验目的与要求]:

了解函数的类型

掌握C函数的定义与一般调用方法

理解并掌握函数嵌套调用方法

理解并掌握函数参数传递的方法

理解地址传递的含义

了解函数值的返回方法

理解递归调用的两个阶段

[实验预习与准备]:

1、从下列10个有关函数说法中,选择5个正确答案。

(1)建立函数有助于程序实现模块化,也可以提高程序的执行效率。

(2)在C语言中,实参和与其对应的形参共占用一个存储单元。

(3)用户若需调用标准库函数,调用前必须包含其相应的头文件。

(4)在函数内定义的变量,如无特殊说明,只在此函数内部有效。

因此,不同函数中变量的名字可以相同,互不干扰。

(5)C语言中,实参是全局变量,形参是局部变量。

(6)若调用一个函数,且此函数中没有return语句,则该函数返回一个不确定的值。

(7)C语言中,实参可以是常量、变量,但不可以是表达式。

(8)C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是单向值传递。

(9)函数调用可以出现在表达式中,但不能单独作为一条语句或其他函数的实参。

(10)在C语言程序中,函数不可以嵌套定义,但函数可以嵌套调用。

2、填空题

在C语言中,若对函数类型无说明,则函数的默认类型是。

在一个源程序中,main函数的位置。

若用数组名作为函数调用的实参,传递给形参的是

[实验内容和步骤]:

1、分析下面程序的运行结果。

#include

1:

voidf(intx,inty,intz)

2:

{

3:

x=456;y=567;z=678;

4:

}

5:

intmain()

6:

{intx=10 ,y=20 ,z=30 ;

7:

f(x,y,z);

8:

printf("%d,%d,%d",x,y,z ) ;

9:

return0 ;}

程序运行的结果是:

2、分析下面的程序并回答问题。

#include

1 :

intfun(inti)

2 :

{

3 :

i=i*i*2 ;

4 :

return(i) ;

5 :

}

6 :

intmain()

7 :

{inti ;

8 :

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

9 :

printf("%d,%d\n",fun(i),i) ;

10 :

}

回答下面的问题:

(1)第3行,在fun函数中,i没有初值,能否直接进行运算?

说明理由。

(2)第1行和第7行都定义了变量i,会不会出现重复定义现象?

说明理由。

(3)写出上机测试的结果。

3、将输入的十进制正整数n转换为二进制数,并将转换结果输出,转换方法采用“除二取余”法。

分析下面的程序,补充完整,并测试运行结果。

#include

1 :

voidtransfer(intm)

2 :

{

3 :

ints[20],i ;

4 :

for(i=0 ;m !

=0 ;i++)

5 :

{

6 :

s[i]=①;

7 :

m=m/2 ;

8 :

}

9:

i--;

10 :

for( ;i >=0;i--)

11 :

printf(”%d”,②);

12 :

}

13 :

intmain()

14 :

{

15 :

intn;

16 :

scanf(”%d”,&n) ;

17 :

③;

18 :

}

要求运行结果:

键盘输入:

11↙

输出结果:

1011

4、编程题

(1)编写一个函数square,对一个整数返回它的平方值。

(2)编写一个函数cube,对一个整数返回它的立方值。

(3)用函数square和cube编写函数quartic和quintic,它们分别返回一个整数的四次方和五次方值。

(4)用上述函数编写一个显示从1~20的整数幂的表的程序,程序输出的形式如下:

ATABLEOFPOWERS

N0.SquareCubeQuarticQuintic

11111

2481632

392781243

﹍﹍﹍﹍﹍

5、编制一个函数find(chars[],chara),统计字符串s中字符变量a的值出现的次数,在主函数中输入字符串并显示统计结果。

(1)find函数的类型是什么类型?

(2)在定义find函数时,能否将参数直接定义成find(chars[],chara)?

这里的s[]没有具体的长度,会不会错?

为什么?

(3)编程实现find函数。

(4)在main函数中调用find函数,测试字符串“student”中t的次数。

(选做题)编写程序,设计一个判别素数的函数。

如果是素数,返回值1;如果不是素数,则返回值0。

在主函数中调用这个判别函数,输出100以内的所有素数。

输出格式如下:

NO.Value

21

31

40

﹍﹍

实验7指针

[实验目的与要求]:

掌握指针变量的定义与引用

掌握指针与变量、指针与数组、指针与字符串的关系

掌握C集成环境中调试指针程序的方法。

[实验预习与准备]:

概念判断题

(T)inta[5],*p=a;指针变量p和数组名a都指向a[0]的首地址。

(T)inti=1,*p=&i;则*(&(*p))=1。

(F)可以把一个字符串赋值给一个指

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

当前位置:首页 > 高等教育 > 文学

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

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