C语言程序设计实验指导书doc.docx
- 文档编号:4260901
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:20
- 大小:23.18KB
C语言程序设计实验指导书doc.docx
《C语言程序设计实验指导书doc.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书doc.docx(20页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验指导书doc
《C语言程序设计》
实验指导书
主编教师:
栾志军
实验一C语言程序初步
[实验目的和要求]
1、 熟悉C语言运行环境。
2、 掌握C语言程序的书写格式和C语言程序的结构。
3、 掌握C语言上机步骤,了解运行一个C程序的方法。
4、 本实验可在学习完教材第一章后进行。
[实验内容和步骤]
1、输入一个简单的C语言程序:
输入矩形的两条边,求矩形的面积。
[分析与讨论]
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
实验二数据类型、运算符和表达式
[实验目的]
1.熟练表达式的表示方法
2.了解表达式的运行结果
3.了解C语言中数据类型的意义
[实验内容和步骤]
1.用printf函数来输入表达式运行结果
2.程序试图计算由键盘输入的任意两个整数的平均值:
[问题讨论]
1.“=”和“==”有什么区别?
2.“&”和“&&”、“|”和“||”有什么区别?
3.如何正确地选用数据类型?
实验三选择结构
[实验目的]
1、了解条件与程序流程的关系
2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
[实验内容和步骤]
1、题目
有如下程序段:
{……
if(a>1&&b==0)x=x/a;
if(a==2||x>1)x=x+1;
}
为了更容易明白程序的逻辑结构,要求用流程图来加以描述。
要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
[分析讨论]
(1) 用哪一组数据就可使程序中的每个处理语句都执行一次?
为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?
请上机验证自己的结论。
(2)用哪两组数据就可以使程序段中的每个分支都运行一次?
这种情形与上面的讨论有何不同?
如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?
请上机验证自己的结论。
(3)用哪两组数据就可以把判定框中的每个条件运算都进行一次?
如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?
请上机验证自己的结论。
(4)用哪四组数据才可以把各种条件的组合都检测一遍?
如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?
请上机验证自己的结论。
(5)用哪四组数据才可以把起始到终止的各条路径都覆盖一次?
如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?
请上机验证自己的结论。
实验四循环结构
(2)
[目的和要求]
1、 掌握如何正确地控制计数型循环结构的次数
2、 了解对计数型循环结构进行测试的基本方法
3、 了解在嵌套循环结构中,提高程序效率的方法
4、 本实验应在学习了教材第3.3.4进行
[实验内容与步骤]
实验题目:
下面是一个循环结构的C程序。
main()
{
inti,j;
longsum=0;
for(i=1,i<=20,i++)
for(j=1;j<=3;j++)
sum=sum+(i+1)*(i+1)*(j+2)
printf(“sumis:
%d\n”,sum);
}
[分析讨论]
(1) 将上述程序中的和分别做什么样修改,能使程序按如下要求运行:
.不循环;
.外循环1次,不进入内循环;
.外循环,内循环各1次;
.外循环1次,内循环2次;
.外循环2次,内循环1次;
.外循环19次,内循环3次;
.外循环20次,内循环2次;
.外循环21次,内循环3次。
(2) 试修改程序,以便能知道控制表达式
i=1;j<=20;i++
和
j=1;j<3;j+=
各执行了多少次?
(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观
察对换后的外循环与内循环控制表达式执行的总次数有无变化?
(4)将(3)中程序写为
main()
{
inti,j,k;
longsum=0;
for(j=1.j<=3.j++)
{
k=j+2;
for(i=1;i<=20;i++)
sum=sum+(i+1)*(i+1)**k;
}
printf(“sumis:
%d\n”,sum);
}
观察程序的执行结果有无变化?
(5)将(3)中程序改写为
main()
{
intI,j,m,n;
longsum=0;
for(j=1;j<=3;j++)
{
m=j+2;
for(I=1;j<=20;I++)
{
n=I+1;
sum=sum+m*m*k;
}
}
printf(“sumis:
%d\n”,sum);
}
观察程序的执行结果有无变化?
实验五函数
(1)
[实验目的]
1.理解和掌握多模块的程序设计与调试的方法。
2.掌握函数的定义和调用的方法。
3.学会使用递归方法进行程序设计。
[实验内容和步骤]
1.编写一个函数,判断一个数是不是素数。
在主函数中输入一个整数,输出是否是素数的信息。
实验步骤与要求:
(1)编写一个函数prime(n),返回给定整数n是否为素数。
(2)编写一个主函数,输入一个整数,调用
(1)中的函数,判断此整数是否为素数,并输出结果。
(3)对于属于多函数程序,可以采用每个函数分别进行编辑、编译的方法,然后再连接、运行。
如果编译有错时,可分别修改,这样便于调试。
实验2和实验3也可以使用这样的调试方法。
2.用梯形法求函数的定积分。
实验步骤与要求:
(1)编制一个函数sab(a,b,n),其功能是求函数f(x)在[a,b]上的定积分,其中n为区间[a,b]的等分数。
要求该函数在一个独立的文件中。
(2)编制一个主函数以及计算被积函数值的函数f(x),在主函数中调用
(1)中的函数计算并输出下列积分值。
要求主函数与函数f(x)在同一个文件中。
(3)编制另一个主函数以及计算被积函数值的函数f(x),在主函数中调用
(1)中的函数计算并输出下列积分值。
要求主函数与函数f(x)在同一个文件中。
说明:
用梯形法求定积分,梯形公式为
s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n
3.用递归方法编写程序,求n阶勒让德多项式的值,递归公式为
1(n=0)
pn(x)=x(n=1)
((2n-1)xpn-1(x)-(n-1)pn-2(x))/n(n>1)
,
[分析讨论]
1.小结函数的定义及调用方法。
2.小结函数中形参和实参的结合规则。
实验六函数
(2)
[目的与要求]
1、 掌握C语言函数定义及调用的规则。
2、 理解参数传递的过程。
[实验内容与步骤]
1、 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。
main()
{
int,y;
printf(“%d\n”,sum(x+y));
intsum(a,b)
{
inta,b;
return(a+b);
}
}
2、编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
[分析讨论]
1、 针对以上实验内容写出相应的参数传递过程并分析结果。
2、 讨论参数的传递的几种形式。
实验七数组
(1)
[实验目的]
掌握有关数组和字符串的程序设计方法。
[实验内容和步骤]
1已知一组数据如下:
6,3,42,23,35,71,98,67,56,38
编写程序,把它们按从小到大的次序排列起来。
程序如下:
/*EX3-1*/
#include
#defineN10
main()
{
inta[N]={6,3,42,23,35,71,98,67,56,38};
inti,j,t;
printf(“Thearraybeforesorted:
”);
for(i=0;i printf(“%4d”,a[i]); for(i=0;i<9;i++) { for(j=i+1;j<10;j++) { if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } } for(i=0;i printf(“%4d”,a[i]); returno; } [分析讨论] 1.定义数组时下标的用法和注意事项. 2.什么情况下出现下标越界. 实验八数组 (2) [目的和要求] 1、掌握数组定义的规则。 2、掌握C语言数组的基本用法。 [实验内容与步骤] 1、编写程序,测试下列数组的定义方式是否正确 (1) main() { intn; scanf(“%d”,&n); inta[n]; …… } (2) main() { constintn=10; inta[n]; } (3) #include #defineM10 main() { inta[M]; } (4) main() { inta[2+2*4]; } (5) #include #defineM2 #defineN8 main() {inta[M+N]; } 通过这一实验,可以说明什么问题? 2、运行下面的C程序,根据运行结果,可以说明什么? main() {intnum[5]={1,2,3,4,5}; intii; for(i=0;i<=5;i++) printf(“%d”,num[i]); } 3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。 现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 4、为一个起泡排序程序设计测试用例,并测试之。 [分析讨论] 通过实验,分析定义与引用数组的区别。 实验九指针 (1) [目的和要求] 1. 熟悉指针的正确用法。 [实验内容和步骤] 1、指出下面程序错误的原因。 main() { intx=10,y=5,*px,*py; px=py; px=&x; py=&y; printf(“*px=%d,*py=%d,*px,*py); } 2.下面的程序能获得上述运行结果吗? main() { char*S=”COMPUTER”; charc; printf(“whichstyleyouwantto\n”); printf(“capital(c)oruncapital(u);”); c=getchar(); if(c=’c’) put(s); else{ s=”computer”; puts(s); } } 分析出错原因。 3.设计一个C程序,用以测试下列各表达式的运算。 (1) y=*px++ (2) y=*++py (3) y=(*py)++ (4) y=--*ppx++ [分析讨论] 数组与指针的联系。 实验十指针 (二) [目的和要求] 1、了解指针参数的特殊性。 2、掌握函数、指针、数组的用法。 [实验内容与步骤] 1、想使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的? swap(int*p1,int*p2) { int*p; p=p1;p1=p2;p2=p; } main() { inta,b; scanf(“%d,%d”,&a,&b); pt1=&a;pt2=&b; if(a printf(“%d,%d\n”,*pt1,*pt2); } 上机调试此程序。 如果不能实现题目要求,指出原因,并修改之。 2、 下面的程序。 注意其中的复杂声明语句; int(*function[4])(); 和各标记符的含义,并记录执行结果。 main() { intfun1(); intfun2(); intfun3(); intfun4(); int(*function[4])(); inta=10,b=5,i; function[0]=fun1; function[1]=fun2; function[2]=fun3; function[3]=fun4; for(I=0;I<4;i++) printf(“funno.%d->%d\n”,i+1,execute(a,b,function[i])); } execute(intx,inty,int*fun()) { return(*fun)(x,y);} fun1(intx,inty) { return(x+y);} fun2(intx,inty) { return(x-y);} fun3(intx,inty) { return(x*y);} fun4(intx,inty) {return(x/y);} [分析讨论] 指针、数组、函数的联系。 实验十一有关文件的程序设计 [实验目的] 1.掌握文件建立的方法。 2.掌握包含文件操作的程序设计和调试方法。 [实验内容和步骤] 1建立一个磁盘文件,其内容是0~90°之间每隔5°的正弦值。 程序如下: //EX8-1 #include #include #include #definePI3.14159 main() { floatS[19]; inti,a; ofstreamout(“fsin.bny”); if(! out) { cout<<”Cannotopenfile.”< return1; } for(i=0,a=-5;i<19;i++) { a+=5; S[i]=sin(a*PI/180.0); } out.write((unsignedchar*)&s,sizeofs); out.close(); return0; } [分析讨论] 文件操作中各函数的功能,具体使用方法. 实验十二结构体和共用体 [目的和要求] 1、掌握结构体类型方法以及结构体变量的定义和引用。 2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。 3、掌握运算符”.”和”->”的应用。 4、共用体的概念和应用。 [实验内容和步骤] 1、编写程序: 有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。 2、建立一个链表每个结点包括的成员为: 职工号、工资。 用malloc打印出来。 用一个creat来建立链表,用list来输出数据。 5个职工号为101,103,105,107,109。 3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。 写一函数insert来插入新结点。 4、在上面的基础上,写一函数delete,用来删除一个结点。 要求删除职工号为103的结点。 打印出删除后的链表. 5、你有无办法测试构造链表时,内存空间的动态分配情形? [分析讨论] 怎样引用结构体变量成员? 实验十三位运算 [目的和要求] 1.掌握位运算的概念和方法。 2.掌握位运算(&,|,^,~)的使用方法。 3.掌握有关位运算的用法。 [实验内容和步骤] 1.按习题8.2的要求,编一个程序,将一个整数的高字节和低字节分别输出(用位运算方法)。 上机运行。 2.按习题8.6的要求,编一个程序,使一个整数的低4位翻转。 上机运行,用十六进制数输入和输出。 3.按习题8.10的要求,将一个整数i的各位循环左移4位,设i的值为十六进制数fe13。 4.按习题8.13的要求,设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。 [分析讨论] 位运算时应注意什么问题? 实验十四综合应用举例 [目的与要求] 1、熟悉C语言的端口及硬件控制的方法与原理。 2、了解用C语言实现发声程序所要访问的端口。 [实验内容和步骤] 1、调试课本中例10.8程序,注意调出不同的效果。 2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱? 乐谱实例: 6000h51h32h20.5h30.5h14h21m72m60.5h10.5m54m32m51.5 m60.5h11.5h20.5m60.5h10.5m51h51.5h10.5h60.5h50.5h30.5 h50.5h24h21.5h30.5m71m61m51.5m60.5h11h21m31h11m60 m50.5m60.5h10.5m54h31.5h50.5m71h21m60.5h10.5m53m30. m50.5m30.5m50.5m50.5m60.5m70.5h20.5m63m50.5m60.5h11.5 h20.5h51h31h21h30.5h20.5h11m60.5m50.5m32h12m60.5h1 0.5m60.5m50.5m30.5m50.5m60.5h10.5m53h30.5h50.5h20.5h3 0.5h20.5h10.5m71m61h54## voidplay_music(char*filename)/*filename为音乐文件名格式见上*/ { FILE*fp; intrate; charsound_high[3]; floatsound_long; registerinti=0,j; intsign=0; floatstr[1000][2]; if((fp=fopen(filename,"r"))==NULL) { printf("Openfilemusic.docErrors! \n"); exit (1); } fscanf(fp,"%d",&rate); while(! feof(fp)&&! sign) { fscanf(fp,"%s%f",&sound_high,&sound_long); str[i][1]=rate*sound_long; switch(sound_high[0]) { case'h': switch(sound_high[1]) { case'1': str[i++][0]=1046.5; break; case'2': str[i++][0]=1174.7; break; case'3': str[i++][0]=1318.5; break; case'4': str[i++][0]=1396.9; break; case'5': str[i++][0]=1568; break; case'6': str[i++][0]=1760; break; case'7': str[i++][0]=1975.5; break; default: printf("\nErrorMusic.doc\n"); break; } break; case'm': switch(sound_high[1]) { case'1': str[i++][0]=523.3; break; case'2': str[i++][0]=587.3; break; case'3': str[i++][0]=659.3; break; case'4': str[i++][0]=698.5; break; case'5': str[i++][0]=784.0; break; case'6': str[i++][0]=880; break; case'7': str[i++][0]=987.8; break; default: printf("\nErrormusic.doc.\n"); break; } break; case'l': switch(sound_high[1]) { case'1': str[i++][0]=262; break; case'2': str[i++][0]=296; break; case'3': str[i++][0]=329.6; break; case'4': str[i++][0]=349.2; break; case'5': str[i++][0]=392; break; case'6': str[i++][0]=440; break; case'7': str[i++][0]=493.9; break; default: printf("\nErrormusic.doc.\n"); break; } break; case'*': switch(sound_high[1]) { case'1': str[i++][0]=131; break; case'2': str[i++][0]=147; break; case'3': str[i++][0]=165; break; case'4': str[i++][0]=176; break; case'5': str[i++][0]=196; break; case'6': str[i++][0]=220; break; case'7': str[i++][0]=247; break; default: printf("\nErrormusic.doc\n"); break; } break; case'#': if(sound_high[1]=='#')sign=1; break; case'x': if(sound_high[1]=='0')str[i++][0]=20; break; default: printf("\nERRormusic.doc\n"); exit (1); } } for(j=0;j<=i-1;j++) { sound(str[j][0]); delay(str[j][1]); } nosound(); } [分析讨论] 1.c语言怎样对数据库进行管理? 2.分析程序设计过程中怎样对基础知识进行灵活运用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 指导书 doc