C语言程序设计实验指导书docWord文档下载推荐.docx

上传人:b****3 文档编号:17176877 上传时间:2022-11-28 格式:DOCX 页数:20 大小:23.18KB
下载 相关 举报
C语言程序设计实验指导书docWord文档下载推荐.docx_第1页
第1页 / 共20页
C语言程序设计实验指导书docWord文档下载推荐.docx_第2页
第2页 / 共20页
C语言程序设计实验指导书docWord文档下载推荐.docx_第3页
第3页 / 共20页
C语言程序设计实验指导书docWord文档下载推荐.docx_第4页
第4页 / 共20页
C语言程序设计实验指导书docWord文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言程序设计实验指导书docWord文档下载推荐.docx

《C语言程序设计实验指导书docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书docWord文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

C语言程序设计实验指导书docWord文档下载推荐.docx

为了更容易明白程序的逻辑结构,要求用流程图来加以描述。

要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。

[分析讨论]

(1) 

用哪一组数据就可使程序中的每个处理语句都执行一次?

为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?

请上机验证自己的结论。

(2)用哪两组数据就可以使程序段中的每个分支都运行一次?

这种情形与上面的讨论有何不同?

如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?

(3)用哪两组数据就可以把判定框中的每个条件运算都进行一次?

如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?

(4)用哪四组数据才可以把各种条件的组合都检测一遍?

如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?

(5)用哪四组数据才可以把起始到终止的各条路径都覆盖一次?

如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?

实验四循环结构

(2)

[目的和要求]

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

了解对计数型循环结构进行测试的基本方法

了解在嵌套循环结构中,提高程序效率的方法

本实验应在学习了教材第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次,内循环2次;

.外循环2次,内循环1次;

.外循环19次,内循环3次;

.外循环20次,内循环2次;

.外循环21次,内循环3次。

(2) 

试修改程序,以便能知道控制表达式

i=1;

=20;

i++

j=1;

3;

j+=

各执行了多少次?

(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观

察对换后的外循环与内循环控制表达式执行的总次数有无变化?

(4)将(3)中程序写为

inti,j,k;

for(j=1.j<

=3.j++)

k=j+2;

for(i=1;

i<

i++)

sum=sum+(i+1)*(i+1)**k;

}

printf(“sumis:

观察程序的执行结果有无变化?

(5)将(3)中程序改写为

intI,j,m,n;

longsum=0;

{

m=j+2;

for(I=1;

I++)

{

n=I+1;

sum=sum+m*m*k;

实验五函数

(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)中的函数计算并输出下列积分值。

说明:

用梯形法求定积分,梯形公式为

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)

[目的与要求]

掌握C语言函数定义及调用的规则。

理解参数传递的过程。

[实验内容与步骤]

上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

int,y;

printf(“%d\n”,sum(x+y));

intsum(a,b)

inta,b;

return(a+b);

2、编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。

针对以上实验内容写出相应的参数传递过程并分析结果。

讨论参数的传递的几种形式。

实验七数组

(1)

掌握有关数组和字符串的程序设计方法。

1已知一组数据如下:

6,3,42,23,35,71,98,67,56,38

编写程序,把它们按从小到大的次序排列起来。

程序如下:

/*EX3-1*/

#include<

stdio.h>

#defineN10

inta[N]={6,3,42,23,35,71,98,67,56,38};

inti,j,t;

printf(“Thearraybeforesorted:

”);

for(i=0;

i<

N;

i++)

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

9;

for(j=i+1;

j<

10;

j++)

if(a[i]>

a[j])

t=a[i];

a[i]=a[j];

a[j]=t;

returno;

[分析讨论]

1.定义数组时下标的用法和注意事项.

2.什么情况下出现下标越界.

 实验八数组

(2)

[目的和要求]

1、掌握数组定义的规则。

2、掌握C语言数组的基本用法。

1、编写程序,测试下列数组的定义方式是否正确

main()

intn;

scanf(“%d”,&

n);

inta[n];

……

constintn=10;

(3) 

#include<

#defineM10

inta[M];

(4) 

{

inta[2+2*4];

(5) 

#defineM2

#defineN8

{inta[M+N];

通过这一实验,可以说明什么问题?

2、运行下面的C程序,根据运行结果,可以说明什么?

main()

{intnum[5]={1,2,3,4,5};

intii;

for(i=0;

=5;

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

3、操作符&

用以求一个变量的地址,这在函数scanf中已经使用过了。

现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。

4、为一个起泡排序程序设计测试用例,并测试之。

通过实验,分析定义与引用数组的区别。

实验九指针

(1)

1. 

熟悉指针的正确用法。

1、指出下面程序错误的原因。

intx=10,y=5,*px,*py;

px=py;

px=&

x;

py=&

y;

printf(“*px=%d,*py=%d,*px,*py);

2.下面的程序能获得上述运行结果吗?

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程序,用以测试下列各表达式的运算。

y=*px++

y=*++py

y=(*py)++

y=--*ppx++

数组与指针的联系。

实验十指针

(二)

1、了解指针参数的特殊性。

2、掌握函数、指针、数组的用法。

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

swap(int*p1,int*p2)

int*p;

p=p1;

p1=p2;

p2=p;

scanf(“%d,%d”,&

a,&

b);

pt1=&

a;

pt2=&

b;

if(a<

b)swap(pt1.pt2);

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

上机调试此程序。

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

下面的程序。

注意其中的复杂声明语句;

int(*function[4])();

和各标记符的含义,并记录执行结果。

intfun1();

intfun2();

intfun3();

intfun4();

inta=10,b=5,i;

function[0]=fun1;

function[1]=fun2;

function[2]=fun3;

function[3]=fun4;

for(I=0;

I<

4;

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<

iostream.h>

fstream.h>

math.h>

#definePI3.14159

floatS[19];

inti,a;

ofstreamout(“fsin.bny”);

if(!

out)

cout<

<

”Cannotopenfile.”<

endl;

return1;

for(i=0,a=-5;

19;

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)

%s%f"

sound_high,&

sound_long);

str[i][1]=rate*sound_long;

switch(sound_high[0])

case'

h'

:

switch(sound_high[1])

1'

str[i++][0]=1046.5;

break;

2'

str[i++][0]=1174.7;

3'

str[i++][0]=1318.5;

4'

str[i++][0]=1396.9;

5'

str[i++][0]=1568;

6'

str[i++][0]=1760;

7'

str[i++][0]=1975.5;

default:

printf("

\nErrorMusic.doc\n"

m'

str[i++][0]=523.3;

str[i++][0]=587.3;

str[i++][0]=659.3;

str[i++][0]=698.5;

str[i++][0]=784.0;

str[i++][0]=880;

str[i++][0]=987.8;

\nErrormusic.doc.\n"

l'

str[i++][0]=262;

str[i++][0]=296;

str[i++][0]=329.6;

str[i++][0]=349.2;

str[i++][0]=392;

str[i++][0]=440;

str[i++][0]=493.9;

*'

str[i++][0]=131;

str[i++][0]=147;

str[i++][0]=165;

str[i++][0]=176;

str[i++][0]=196;

str[i++][0]=220;

str[i++][0]=247;

\nErrormusic.doc\n"

#'

if(sound_high[1]=='

)sign=1;

x'

0'

)str[i++][0]=20;

\nERRormusic.doc\n"

for(j=0;

=i-1;

sound(str[j][0]);

delay(str[j][1]);

nosound();

1.c语言怎样对数据库进行管理?

2.分析程序设计过程中怎样对基础知识进行灵活运用。

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

当前位置:首页 > 考试认证 > 公务员考试

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

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