C程序设计实验指导

时间:2024.4.27

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

韶关学院计算机科学学院

庄景明

课程类别:专业基础课

学时学分:总学时72、总学分4、实验学时18、实验学分1 适用专业: 计算机科学与技术,信息管理与信息系统 专业层次:本科

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

1.上机实验的目的

学习C语言程序设计课程不能满足于“懂了”,满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。程序设计是一门实践性很强的课程,必须十分重视实践环节,必须保证有足够的上机实践时间。学习本课程应该至少有18小时的上机时间,最好能做到上机时间与授课时间之比为1﹕1。除了学校规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践。 上机实验的目的是:

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

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

(3)学会上机调试程序。也就是善于发现程序中的错误,并且能很快地排除这些错误。要学会根据“出错提示”,分析并找出错误。调试程序的能力是每个程序设计人员应当掌握的一项基本功。因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序的一些功能、改变输入数据的方法等),再进行编译、连接和运行;甚至于“自设障碍”,即把正确的程序改为有错的(例如,用scanf函数输入变量时,漏写“&”符号;使数组下标出界;使整数溢出等),以观察和分析所出现的情况。

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

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

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

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

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

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

3.上机实验的步骤

1

(1)调出C编译系统,进人C工作环境(例如Turbo c,VC6.0)。

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

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

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

(5)运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同数据时所得到的结果是否正确(例如解方程ax2+bx+c=0时,不同的a、b、c组合应得到相应的不同结果)。此时应运行几次,分别检查在不同情况下程序是否正确。

(6)输出程序清单和运行结果。

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

(1)预习报告(题目,实验目的,实验设备,程序清单,疑难问题等)

(2)实验数据

(3)实验过程报告

(4)实验小结。

5.实验内容的安排

结合所学内容布置上机练习题。应要求学生在实验前将教师指定的题目编好程序,然后上机输人和调试。

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

l.程序错误的类型

主要有以下几种:

(1)语法错误:不符合C语言的语法规定。例如将printf错写为pintf,括弧不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出。这些都属于“致命错误”,不改正是不能通过编译的。对一些在语法上有轻微毛病但不影响程序运行的问题(如定义了变量但始终未使用),编译时会发出“警告”。虽然程序能通过编译,但不应当使程序“带病工作”,应该将程序中所有“导致错误(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)运行错误:有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果 不对。多数情况是数据不对,包括数据本身不合适以及数据类型不匹配。如有以下程序: main()

{int a,b,c;

scanf(“%d,%d”,&a,&b);

c=a/b;

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

2

}

当输人的b为非零值时,运行无问题。当输入的b为零时,运行时出现“溢出(over -flow)”的错误。如果在执行上面的scanf函数语句时输入:

则输出c的值为2,显然是不对的。这是由于输入的数据类型与输入格式符%d不匹 配而引起的。

2.程序的测试

程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。

测试的目的是检查程序有无“漏洞”。对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。但是,如果需要测试一个复杂的大程序,要找到全部可能的路径,并准备出所需的测试数据并非易事。例如,有两个非嵌套的if语句,每个if语句有2个分支,它们所形成的路径数目为2×2=4;如果一个程序包含100个if语句,则可能的路径数目为2100=1.267651×1030。实际上进行测试的只是其中一部分(执行几率最高的部分)。因此,经过测试的程序一般还不能轻易宣布为“没有问题”,而只能说:“经过测试的部分无问题”。

第三部分 实验内容

实验一 Turbo C的使用与C程序运行方法

(实验学时:2学时 )

一、目的和要求

1、熟悉使用C语言运行环境(Turbo c )。

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

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

二、实验内容

1、C语言上机步骤:

(1)、进入系统

在D盘或其他盘上找到TC或TURBOC2.0,然后双击其图标打开文件夹,在其中找到TC.EXE并双击即可。

然后进行编辑源程序->编译->连接->执行程序->显示结果

(2)、常用命令

编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。

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

3

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

#include “stdio.h”

main()

{ int x,y,p;

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

p=prodct(x,t) ;

printf(“The product is %d”,p);

}

int prodct(int a ,int b )

{int c ;

c=a*b;

return c;

}

(2)求1+2+3+…+100的和

min()

{ int i , sum=0;

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

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

}

(3) 输出一个数字三角形

# include <stdio.h>

main ( )

{ int i , j ;

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

{ for ( j=0 ; j<= 10-2*i ; j++)

printf (“ “ ) ; /*输出一个空格*/

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

printf (“%4d “ , i ) ;

printf (“ \n“ ) ;

}

}

三、分析与讨论

1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。

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

4

实验二 数据类型、运算符和表达式的应用

及简单程序设计

(实验学时:2学时 )

一、目的和要求

1、了解C语言中数据类型的意义。

2、掌握不同数据类型之间的赋值的规律。

3、学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用,编写一个简单C程序。

4、进一步熟悉C程序的运行环境。

二、实验内容和步骤

1、下面的程序试图计算由键盘输入的任意两个整数的平均值:

#include <stdio.h>

main()

{

int x,y;

float a;

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

a=(x+y)/2;

printf(“The average is%d\n”a);

}

调试无语法错误后,分别使用下列测试用例对上述程序进行测试:

(1)2,6

(1)1,3

(3)-2,-6

(9)32800,33000

(10)-32800,33000

2、输入以下程序

main()

{int j,k,m,n;

k=8;

j=10;

m=k++;

n=++j;

printf(“%d,%d,%d,%d”,k,j,m,n);

5

}

(1)、运行程序,观察结果。

(2)、分析++在变量之前和在变量之后的不同点?

3、输入一个三角形的三条边长,求出三角形的面积。 已知三角形的三边长a,b,c,则该三角形的面积公式为: area?s(s?a)(s?b)(s?c),

其中s = (a+b+c)/2

三、分析与讨论

如何正确地选用数据类型、总结运算符的优先级? 6

实验三 顺序结构程序设计

(实验学时:2学时 )

一、目的和要求

1、掌握C语言程序输入、输出的方法和格式。

2、学会编写顺序结构的C程序。

二、实验内容与步骤

程序1、输入并编辑下面的程序

main()

{

int a,b;

float c,d;

long e,f;

unsigned int u,v;

char c1,c2;

scanf(“%d,%d”,a,b);

scanf(“%f,%f”,c,d);

scanf(“%ld,%ld”,e,f);

scanf(“%o,%o”,u,v);

scanf(“%c,%c”,c1,c2);

printf(“\n”);

printf(“a=%7d,b=%7d\n”,&a,&b);

printf(“c=%10.2f,d=%10.2f\n”,&c,&d);

printf(“e=17ld,f=%17ld\n”,&e,&f);

printf(“u=%o,d=%o\n”,&u,&v);

printf(“c1=%c,d=%c\n”,&c1,&c2);

}

这个程序有语法错误吗?为什么?

2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:

a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1=’a’,c2=’b’ 分析运行结果。特别注意输入c1,c2的值是什么?什么原因?

3、将输入e和f的语句改为:

scanf(“%d,%d”,&e,&f);

再用上述测试数据测试并分析结果。

4、将输入u、v的语句改为:

scanf(“%d,%d”,&u,&v);

再用上述测试数据测试并分析结果。

7

5、将输出e ,f 的语句改为:

printf(“e=%17d,f=%17d\n”,e,f);

再用上述测试数据测试并分析结果。

6、将输出u、v的语句改为:

printf(“u=%u,v=%u\n”,u,v);

printf(“u=%d,v=%d\n”,u,v);

再用上述测试数据测试并分析结果。

7、请自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。

8、在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句:

getchar();

9、验证转义字符\n 与 \r的意义有何不同。

程序2:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积入圆柱体积,用scanf输入数据,输出计算结果,取小数点后2位数字

三、分析与讨论

1、总结在scanf 、printf函数中可以使用的各种格式指定符,并给出样例。

2、总结在printf函数中可以使用的各转义字符及其功能。

8

实验四 选择结构程序设计

(实验学时:2学时 )

一、实验目的

1、了解条件与程序流程的关系.

2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。

3、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);

4、学会正确使用逻辑运算符和逻辑表达式;

5、熟练掌握if语句和switch语句。

二、实验内容和步骤

1、调试运行以下程序

(1)已知三个数a,b,c,找出最大值放于max中。

分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else 形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为a,b,c中的最大值。 #include "stdio.h"

main()

{

int a,b,c,max; /*定义四个整型变量*/

scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

if (a>=b)

max=a; /*a>=b*/

else

max=b; /*a<b*/

if (c>max)

max=c; /*c是最大值*/

printf("max=%d",max);

}

(2)、实验步骤

若输入下列数据,分析程序的执行顺序并写出运行结果

(1)a=1,b=2,c=3

(2)a=2,b=1,c=3

(3)a=3,b=2,c=1

(2)、题目

输入某学生的成绩,经处理后给出学生的等级,等级分类如下:

9

90分以上(包括90): A

80至90分(包括80):B

70至80分(包括70):C

60至70分(包括60):D

60分以下: E

方法一:(用if嵌套`)

分析:

由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。

#include"stdio.h"

main()

{

int score;

char grade;

printf("\nplease input a student score:");

scanf("%f",&score);

if(score>100||score<0)

printf("\ninput error!");

else

{ if(score>=90)

grade='A';

else

{ if(score>=80)

grade='B';

else

{if(score>=70)

grade='C';

else

{ if(score>=60)

grade='D';

else grade='E';

}

}

}

printf("\nthe student grade:%c",grade);

}

}

输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。

方法二:用switch语句

分析:

10

switch 语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。

#include"stdio.h"

main()

{

int g,s;

char ch;

printf("\ninput a student grade:");

scanf("%d",&g);

s=g/10;

if(s<0||s>10)

printf("\ninput error!");

else

{ switch (s)

{ case 10:

case 9: ch='A'; break;

case 8: ch='B'; break;

case 7: ch='C'; break;

case 6: ch='D'; break;

default: ch='E';

}

printf("\nthe student scort:%c",ch);

}

}

输入测试数据,同方法一一样调试程序并写出结果。

3 程序设计(任选2题)

1、有一函数: x

y= 2x-1

3x-11

写一程序,输入x, 输出y。

2、给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80~89为B, 70~79分为C,60~69分为D,60分以下为E。

3、给一个不多于5位的正整数,要求:

(1)求出它是几位数;

(2)、分别打出每一位数字;

(3)、按逆序打出各位数字,例如原数为321,应输出123。

4、输入4个整数,要求按由小到大的顺序输出。 x<1 1=<x<10 x>=10

11

实验五 循环结构程序设计

(实验学时:2学时 )

一、目的和要求

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

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

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

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

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

二、实验内容与步骤

1、调试运行以下程序

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

{double e=1.0,x=1.0,y,detax;

int i=1;

printf(“\n please input enter a error:”);

scanf(“%lf”,&detax);

y=1/x;

while(y>=detax)

{

x=x*i;

y=1/x;

e=e+y;

++i;

}

printf(“%12.10lf”,e);

}

实验步骤

(1)、阅读上面的程序,写出程序所依据的计算公式。

(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:

.不进入循环;

.只循环一次;

.只循环两次;

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

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

(3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y<detax,y<=detax,观察程序运行将会有什么变化。

12

(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。

(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?

(6)、把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。

程序二、求和s=1!+2!+3!

main()

{

int n,s=0,t=1;

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

{

t=t*n;

s=s+t;

}

printf(“%d”,s);

}

程序三、有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。 main()

{

int n,t,;

float a=2,b=1,s=0;

for(n=1;n<=10;n++)

{

s=s+a/b;

t=a;

a=a+b;

b=t;

}

printf(“%f”,s);

}

2、程序设计(任选2题)

1、输入两个正整数m和n,求其最大公约数和最小公倍数。

2、求Sn=a+aa+aaa+…+aa…a 之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5), n由键盘输入。

3、求和1!+2!+3!+4!+…20!

4、打印100-999之间所有的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。

5、一个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。

6、有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。

8、打印下列图案

*

***

*****

13

*** * 14

实验六 数组及应用

(实验学时:2学时 )

一、目的和要求

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

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

3、掌握字符数组的使用;

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

5、掌握与数组有关的算法(例如排序算法)。

二、实验内容与步骤

1、调试运行以下程序

程序一、在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。 分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。

方法一:起泡排序

从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。

源程序如下:

#define N 10

#include"stdio.h"

main()

{

int a[N],i,j,temp;

printf("please input %d numbers\n",N);

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

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

for(i=0;i<N-1;i++)

for(j=0;j<N-1-i;j++)

{

if(a[j]>a[j+1])

{

temp=a[j];

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

a[j+1]=temp;

}

}

printf("the array after sort:\n");

15

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

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

}

程序二、青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。

分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。 main()

{int i,j,min;

float temp,ave=0;

float a[11];

printf("\n输入评委所打的分数:\n");

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

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

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

{min=i;

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

if(a[min]>a[j])

min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

for(i=2;i<=9;i++) /*注意i值的变化范围*/

ave=ave+a[i];

printf("选手所得最后分数:%6.1f",ave/8);

printf("\n");

}

2、程序设计

1、有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。

2、编一程序,将两个字符串连接起来,不要用strcat函数。

3、打印出以下的杨辉三角形(要求打印出10行)。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

16

实验七 函数的定义及调用

(实验学时:2学时 )

一、目的与要求

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

2、 理解参数传递的过程。

3、掌握C语言函数的声明及函数的递归调用。

二、 实验内容与步骤

1、调试运行以下程序

程序一:

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

{

int,y;

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

int sum(a,b)

{

int a,b;

return(a+b);

}

}

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

源程序如下:

#include "stdio.h"

hcf(u,v)

int u,v;

{

int a,b,t,r;

if(u>v)

{

t=u; u=v; v=t;

}

a=u; b=v;

while((r=b%a)!=0)

{

b=a; a=r;

}

17

return(a);

}

lcd(u,v,h)

int u,v,h;

{

return(u*v/h);

}

main()

{

int u,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("H.C.F=%d\n",h);

l=lcd(u,v,h);

printf("L.C.D=%d\n",l);

}

这是一个十分典型的算法,同学们一定要认真分析、学习。

2、程序设计(任选2题)

1定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?

2、编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。

3、编写一个程序,包括主函数和如下子函数。

(1) 输入10个无序的整数;

(2) 用起泡方法从大到小排序;

(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。

分析:input函数完成10个整数的录入。sort函数完成起泡法排序,search函数完成输入数的查找。

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

18

实验八 指针的使用

(实验学时:2学时 )

一、目的和要求

1、熟悉指针的正确用法。

2、本实验可在学习了教材第10.3节之后运行。

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

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

二、实验内容和步骤

1、调试运行以下程序

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

swap(int *p1,int *p2)

{

int *p;

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

}

main()

{

int a,b;

scanf(“%d,%d”,&a,&b);

pt1=&a;pt2=&b;

if(a<b)swap(pt1.pt2);

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

}

上机调试此程序。如果不能实现题目要求,指出原因,并修改之。

三、程序设计(2题)

1、 输入3个字符,按由小到了大的顺序输出。

2、 有n个整数,使其右循环移m个位置,写函数实现以下功能,n,m在main函数中输入,并输出循环可移之后的n个数。

3、 输入一行文字,统计大写字母、小写字母、空格、数字字符及其他字符各多少个?

4、 入3个整数,按由小到大的顺序输出。

5、 利用指针作函数参数,设计一函数实现将n个元素进行排序。

6、 写一函数,求一个字符串的长度。

19

实验九 结构体数据的使用

(实验学时:2学时 )

一、目的和要求

1、掌握结构体类型方法以及结构体变量的定义和引用。

2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。

3、掌握运算符”.”和”->”的应用。

4、共用体的概念和应用。

二、实验内容 (编程)

1、要求编写程序:有10名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。

2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。

3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。

4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.

20

*实验十 位运算

(实验学时:2学时 )

一、目的和要求

1. 掌握位运算的概念和方法。

2. 掌握位运算(&,|,^,~)的使用方法。

3. 掌握有关位运算的用法。

二、实验内容和步骤

1.

2.

3.

4. 编一个程序,将一个整数的高字节和低字节分别输出(用位运算方法)。上机运行。 编一个程序,使一个整数的低4位翻转。上机运行,用十六进制数输入和输出。 将一个整数i的各位循环左移4位,设i的值为十六进制数fe13。 设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负

数)。

21

*实验十一 文件

(实验学时:2学时 )

一、 目的和要求

1、 文件和文件指针的概念以及文件的定义方法。

2、了解文件打开和关闭的概念及方法。

3、掌握有关文件的函数。

二、 实验内容和步骤

1、对data.dat文件写入100条记录。

#include <stdio.h>

main()

{FILE *fp;

int i;

float x;

fp=fopen("date.dat","w");

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

{scanf("%f",&x);

fprintf(fp,"%f\n",x);

}

fclose(fp);

}

2、设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为:每人一行,成绩间由逗号分隔。计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。

#include <stdio.h>

main()

{FILE *fp;

int num;

float x , y , z , s1 , s2 , s3 ;

fp=fopen ("cj.dat","r");

{fscanf (fp,"%f,%f,%f",&x,&y,&z);

s1=s1+x;

s2=s2+y;

s3=s3+z;

if((x+y+z)/3>=90)

num=num+1;

}

22

printf("分数高于90的人数为:%.2d",num);

fclose(fp);

}

3、统计上题cj.dat文件中每个学生的总成绩,并将原有数据和计算出的总分数存放在磁盘文件“stud”中。

#include "stdio.h"

main()

{

FILE *fp1,*fp2;

float x,y,z;

fp1=fopen("cj.dat","r");

fp2=fopen("stud","w");

while(!feof(fp1))

{

fscanf (fp1,"%f,%f,%f",&x,&y,&z);

printf("%f,%f,%f,%f\n",x,y,z,x+y+z);

fprintf(fp2,"%f,%f,%f,%f\n",x,y,z,x+y+z);

}

fclose(fp1);

fclose(fp2);

}

三、程序设计

1. 有 5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。

2. 将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu_sort”中。

23

更多相关推荐:
C++程序设计实验报告

C++程序设计实验报告学号:姓名:班级:指导老师:实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循…

程序设计实验报告模板

C语言程序设计实验报告1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的值传递的方式;(3)掌握函数的嵌套调用及递归调用的设计方法;(4)在编程过程…

Java程序设计实验报告

学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指导教师:20XX20XX学年第二学期金陵科技学院教务处制实验报告书写要求实验报告…

程序设计综合实验报告册

西南交通大学程序设计综合实验实验地点实验学期学生班级学生学号学生姓名任课教师龚勋信息科学与技术学院20xx年4月实验一ATM机用户操作界面业务逻辑编写实验目的及内容1根据ATM的工作流程编写用户界面掌握文本用户...

C程序设计实验报告

C语言程序设计实验报告学号不告诉你哦班级信管一班姓名你猜猜哈哈一实验题目一编程实验猜数问题输入两个整数并求这两个整数的和输入所猜的结果如果输入数比正确的结果要大提示猜大了如果输入数比正确的结果要小提示猜小了当猜...

C程序设计实验报告5

工学院工业设计专业10级20xx至20xx学年度第1学期学号2104021638姓名杨芹芹20xx年9月22日第34节综合楼325教室

C程序设计实验报告2

院专业20xx级20xx至20xx学年度第1学期学号姓名20xx年9月22日第34节综合楼325教室

《高级语言程序设计》实验报告(必看)

高级语言程序设计实验报告

c++程序设计实验报告实验一

C实验报告课程名称C程序设计成绩评定实验项目名称几何形体练习1指导教师实验项目编号1实验项目类型实验地点学生姓名学号学院计算机与信息工程学院专业计算机科学与技术实验时间20xx年11月26日一实验目的熟悉掌握类...

C++程序设计实验报告

C实验报告实验一1实验要求1编写一个函数把华氏温度转换为摄氏温度转换公式如下CF32592编写重载函数Max1可分别求两个整数三个整数两个双精度数三个双精度数的最大值3使用系统函数powxy计算xy的值注意包含...

C程序设计实验报告3-

院专业20xx级20xx至20xx学年度第1学期学号姓名20xx年10月8日第34节综合楼325教室

C++描述程序设计实验报告

《程序设计基础》实验报告实验一面向过程的简单程序设计1.实验目的掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运算符和表达式的使用。掌握赋值语句的使用。掌握数据的输入输出方法。2.实…

程序设计实验报告(37篇)