C程序设计实验指导书2Word文档下载推荐.docx
- 文档编号:22741736
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:23
- 大小:26.30KB
C程序设计实验指导书2Word文档下载推荐.docx
《C程序设计实验指导书2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C程序设计实验指导书2Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。
多数情况是数据不对,包括数据本身不合适以及数据类型不匹配。
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<
stdio.h>
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);
4、求1+2+3+…+100的和,程序如下。
intmin()
{inti,sum=0;
for(i=1;
=100;
i++)sum=sum+i;
sum=%d\n"
sum);
}
三、分析与讨论
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.复习循环结构程序设计。
实验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个整数,统计其中正数、零和负数的个数并输出。
1:
2:
{inta[10],i,s1,s2,s3;
3:
s1=s2=s3=0;
4:
for(i=0;
10;
5:
scanf(“%d”,①);
6:
7:
if(a[i]>
0)s1++;
8:
elseif(a[i]==0)s2++;
9:
else②;
10:
11:
printf(“%3d”,③);
12:
printf(“\n”);
13:
printf(“positive=%3d,zero=%3d,negative=%3d”,s1,s2,s3);
14:
回答下面的问题:
完成程序中的空白处。
①②③
第10行,for循环输出时,共输出多少个数?
如果将10改为20,将会出现什么结果?
上机测试并解释原因。
程序中所定义的数组a[10]在内存中占多少个字节?
在程序中利用sizeof计算a[10]在内存中占多少个字节。
数组元素在内存中是顺序存放的?
还是随机存放的?
分析并测试下面程序的运行结果。
1:
2:
3:
inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;
3;
5:
for(j=0;
j<
=i;
j++)
6:
s+=a[i][j];
printf(“%d\n”,s);
return0;
回答下面的问题:
(1)第3行,定义数组a的所有元素的初值是。
(2)第4~6行,参与s相加的元素有。
(3)程序运行的结果是。
3、不用字符串处理函数将两个字符串连接,即将字符串b连到字符串a的后面,变成字符串c.
1:
#include<
{chara[80],b[80],c[160];
inti=0,j=0,k=0;
scanf(“%s”,a);
scanf(“%s”,b);
while(a[i]!
=’\0’)
c[k++]=a[i++];
while(b[j]!
c[k++]=b[j++];
c[k]=’\0’;
printf(“%s\n%s\n%s\n”,a,b,c);
}
第5行,输入一串字符放入数组a中时,为什么没有对a加&
操作?
第7~8行,此句的作用是什么?
第8行,如果将两个自加运算用一般加法来等价,请写出此语句的等价表达式。
第7~8行,本循环结束时,是否将字符串a中的结束符也复制给了字符串c?
第9~10行,此语句是将字符串b复制到c数组的开始处吗?
第11行,此句的作用是什么?
是否可以省略此行?
为什么?
根据此程序思路,如果将字符串s2连接到字符串s1的后面,且不需要第三个字符串变量作中间过渡,如何实现?
编程实现并测试。
4、将一个数组从大到小排序,再把一个从键盘输入的数插入数组中,使其仍按从大到小的顺序排列。
{
inti,j,p,q,s,n,a[11]={120,-3,0,28,64,68,87,105,162,-8};
{
p=i;
q=a[i];
for(j=i+1;
if(q<
a[j])
{p=j;
if(p!
=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
15:
16:
printf(“%d”,a[i]);
17:
18:
printf(“pleaseinputnewdata:
\n”);
19:
scanf(“%d”,&
n);
20:
21:
if(n>
a[i])
22:
23:
for(s=9;
s>
s--)
24:
a[s+1]=a[s];
25:
break;
26:
27:
a[i]=n;
28:
29:
30:
31:
(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、分析下面程序的运行结果。
voidf(intx,inty,intz)
x=456;
y=567;
z=678;
intmain()
{intx=10
y=20
z=30
;
f(x,y,z);
printf("
%d,%d,%d"
x,y,z
)
return0
程序运行的结果是:
2、分析下面的程序并回答问题。
1
:
intfun(inti)
2
3
i=i*i*2
4
return(i)
5
6
intmain()
7
{inti
8
for(i=1
=5
9
%d,%d\n"
fun(i),i)
10
(1)第3行,在fun函数中,i没有初值,能否直接进行运算?
说明理由。
(2)第1行和第7行都定义了变量i,会不会出现重复定义现象?
(3)写出上机测试的结果。
3、将输入的十进制正整数n转换为二进制数,并将转换结果输出,转换方法采用“除二取余”法。
分析下面的程序,补充完整,并测试运行结果。
voidtransfer(intm)
2
3
ints[20],i
4
for(i=0
m
!
=0
5
6
s[i]=①;
7
m=m/2
8
i--;
10
for(
i
>
=0;
i--)
11
printf(”%d”,②);
12
13
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)可以把一个字符串赋值给一个指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实验 指导书