《C语言程序设计》实验指导
韶关学院计算机科学学院
庄景明
课程性质:非独立设置的实验课
课程类别:专业基础课
学时学分:总学时72、总学分4、实验学时18、实验学分1
适用专业: 计算机科学与技术,信息管理与信息系统
专业层次:本科,专科
第一部分 上机实验的指导思想和要求
1.上机实验的目的
学习C语言程序设计课程不能满足于“懂了”,满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。程序设计是一门实践性很强的课程,必须十分重视实践环节,必须保证有足够的上机实践时间。学习本课程应该至少有18小时的上机时间,最好能做到上机时间与授课时间之比为1﹕1。除了学校规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践。
上机实验的目的是:
(1)加深对讲授内容的理解,尤其是一些语法规定。
(2)熟悉C语言程序开发的环境。
(3)学会上机调试程序。也就是善于发现程序中的错误,并且能很快地排除这些错误。要学会根据“出错提示”,分析并找出错误。调试程序的能力是每个程序设计人员应当掌握的一项基本功。因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序的一些功能、改变输入数据的方法等),再进行编译、连接和运行;甚至于“自设障碍”,即把正确的程序改为有错的(例如,用scanf函数输入变量时,漏写“&”符号;使数组下标出界;使整数溢出等),以观察和分析所出现的情况。
2.上机实验前的准备工作
(1)了解所用的计算机系统(包括C编译系统)的性能和使用方法。
(2)复习和掌握与本实验有关的教学内容。
(3)准备好上机所需的程序。
(4)对运行中可能出现的问题应事先作出估计;对程序中自己有疑问的地方,应作上记号,以便在上机时给予注意。
(5)准备好调试和运行时所需的数据。
3.上机实验的步骤
(1)调出C编译系统,进人C工作环境(例如Turbo c集成环境)。
(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);
}
当输人的b为非零值时,运行无问题。当输入的b为零时,运行时出现“溢出(over
-flow)”的错误。如果在执行上面的scanf函数语句时输入:
456.78,34.56↙
则输出c的值为2,显然是不对的。这是由于输入的数据类型与输入格式符%d不匹
配而引起的。
2.程序的测试
程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。
测试的目的是检查程序有无“漏洞”。对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。但是,如果需要测试一个复杂的大程序,要找到全部可能的路径,并准备出所需的测试数据并非易事。例如,有两个非嵌套的if语句,每个if语句有2个分支,它们所形成的路径数目为2×2=4;如果一个程序包含100个if语句,则可能的路径数目为2100=1.267651×1030。实际上进行测试的只是其中一部分(执行几率最高的部分)。因此,经过测试的程序一般还不能轻易宣布为“没有问题”,而只能说:“经过测试的部分无问题”。
第三部分 实验内容
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必修
一、目的和要求
1、熟悉C语言运行环境。
2、掌握C语言程序的书写格式和C语言程序的结构。
3、掌握C语言上机步骤,了解运行一个C程序的方法。
二、实验内容
1、C语言上机步骤:
(1)、进入系统
在D盘或其他盘上找到TC或TURBOC2,然后双击其图标打开文件夹,在其中找到TC.EXE并双击即可。
然后进行编辑源程序->编译->连接->执行程序->显示结果
(2)、常用命令
编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。
2、有下面的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;
}
三、分析与讨论
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
(实验学时:2学时 )
一、目的和要求
1、了解C语言中数据类型的意义。
2、掌握不同数据类型之间的赋值的规律。
3、学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用。
4、进一步熟悉C程序的编辑环境。
二、实验内容和步骤
1、下面的程序试图计算由键盘输入的任意两个整数的平均值:
#include <stdio.h>
main()
{
int x,y,a;
scanf(“%x,%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);
}
(1)、运行程序,观察结果。
(2)、分析++在变量之前和在变量之后的不同点?
三、分析与讨论
如何正确地选用数据类型、总结运算符的优先级?
(实验学时: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);
再用上述测试数据测试并分析结果。
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的意义有何不同。
三、分析与讨论
1、总结在printf函数中可以使用的各种格式指定符,并给出样例。
2、总结在printf函数中可以使用的各转义字符及其功能。
(实验学时:2学时 )
一、实验目的
1、了解条件与程序流程的关系.
2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
3、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);
4、学会正确使用逻辑运算符和逻辑表达式;
5、熟练掌握if语句和switch语句。
二、实验内容和步骤
1、
(1)、题目
有如下程序段:
{……
if (a>1&&b= =0) x=x/a;
if(a==2||x>1) x=x+1;
}
为了更容易明白程序的逻辑结构,我们用图4.1所示流程图来加以描述。
y
n
y
n
要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
(2)、实验步骤
记下分别使用下列各组数据运行时的操作流程。
(1) a=1,b=1,x=1;
(2) a=1,b=1,x=2;
(3) a=3,b=0,x=1;
(4) a=2,b=1,x=4;
(5) a=2,b=1,x=1;
2、
(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
3、
(1)、题目
输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
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语句
分析:
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);
}
}
输入测试数据,同方法一一样调试程序并写出结果。
4、
有一函数:
用scanf函数输入x的值(分别为x<1,1~10,>=10三种情况),求y值。
分析:y是一个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。
main()
{
int x,y;
printf(“please input x :”);
scanf(“%d”,&x);
if (x<1)
{
y=x;
printf(“y=%d\n”,y);
}
else if (x<10)
{
y=2*x-1;
printf(“y=%d\n”,y);
}
else
{
y=3*x-11;
printf(“y=%d\n”,y);
}
三、程序设计
1、有一函数:
x x<1
y= 2x-1 1=<x<10
3x-11 x>=10
写一程序,输入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个整数,要求按由小到大的顺序输出。
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必修
一、目的和要求
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2、了解条件型循环结构的基本测试方法。
3、掌握如何正确地控制计数型循环结构的次数。
4、了解对计数型循环结构进行测试的基本方法。
5、了解在嵌套循环结构中,提高程序效率的方法。
二、实验内容与步骤
1、
(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);
}
2、实验步骤
(1)、阅读上面的程序,写出程序所依据的计算公式。
(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:
.不进入循环;
.只循环一次;
.只循环两次;
.进入死循环(程序将永远循环下去)。
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y<detax,y<=detax,观察程序运行将会有什么变化。
(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。
(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?
(6)、把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。
2、求5!
main()
{
int n,t;
n=1;
t=1;
while(t<=5)
{
n=n*t;
t=t+1;
}
printf(“%d”,n);
}
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);
}
4、求和s=1!+3!+5!
main()
{
int s=0,t,i,j;
for(i=1;i<=3;i++)
{
t=1;
for(j=1;j<=2*i-1;j++)
t=t*j;
s=s+t;
}
printf(“%d”,s);
}
5、求和s= 3+33+333
main()
{
int s=0,t=3,i;
for(i=1;i<=3;i++)
{
s=s+t;
t=10*t+3;
}
printf(“%d”,s);
}
6、有一数列: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);
}
7、打印500以内的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。 main()
{
int i,j,k,n;
for(n=100;n<=500;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n= =i*i*i+j*j*j+k*k*k)
printf(“ %d”,n);
}
}
8、一个数如果恰好等于它的因子之和,这个数就称为完数。求100之内的所有完数。
main()
{
int n,s,j;
for(n=1;n<=100;n++)
{
s=0;
for(j=1;j<n;j++)
if (n%j= =0)
s=s+j;
if (s= =n)
printf(“%d”,s);
}
}
9、计算两个数的最大公约数; 分析:首先,随机输入两个数m,n(默认m>n);其次,算法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。
#include"stdio.h"
main()
{
int m,n,k,result;
printf("Enter two numbers:");
scanf("%d,%d",&m,&n);
if(m>0&&n>0) /*限定两个正整数*/
{
do
{
k=n%m;
if(k= =0)
result=m;
else
{
n=m;
m=k;
}
}while(k>0); /*循环取余求出最大公因子*/
printf("The greatest common divistor is:%d\n",result);
}
else printf("Nonpositive values not allowed\n");
}
10、用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。
#include “math.h”
main()
{
float x,x0,f,f1;
x=1.0;
do
{ x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
}
while(fabs(x-x0)>=1e-5);
printf(“%6.2f”,x);
}
11、打印下列图案
*
***
*****
********
main()
{ int i,j;
for(i=1; i<=4;i++)
{for(j=1;j<= 4-i;j++)
printf(“ ”);
for(j=1;j<=2*i-1;j++)
printf(“*”);
printf(“\n”);
}
}
12、判断m是否是素数。
程序:
#include <math.h>
main()
{
int m,i,k;
scanf(“%d”,&m);
k=sqrt(m+1);
for(i=2;i<=k;i++)
if (m%i= =0)
break;
if(i>=k+1)
printf(“%d is a prime number\n”,m);
else
printf(“%d is not a prime number\n”,m);
}
三、程序设计
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项之和。
7、用迭代法求x= √a 。求平方根的迭公式为
xn+1=1/2(xn+a/xn)
要求前后两次求出的x的差的绝对值小于10-5
8、用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。
9、打印下列图案
*
***
*****
***
*
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必修
一、目的和要求
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");
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
方法二:选择排序
首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。
#include"stdio.h"
#define N 10
main()
{
int a[N],i,j,r,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++)
{ r=i;
for(j=i+1;j<N;j++)
if(a[j]<a[r])
r=j;
if(r!=i)
{
temp=a[r];
a[r]=a[i];
a[i]=temp;
}
}
printf("the array after sort:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
}
2、青年歌手参加歌曲大奖赛,有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");
}
3、输入一串字符,计算其中空格的个数。
#include <stdio.h>
main( )
{char c[30];
int i,sum=0;
gets(c);
for(i=0;i<strlen(c);i++)
if(c[i]==' ')
sum=sum+1;
printf("空格数为:%d \ n",sum);
}
4、有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。
#define M 3
#define N 4
main( )
{int max,i,j,r,c;
static int a[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};
max=a[0][0];
for(i=0;i<M;i++)
for(j=0;j<N;i++)
if ( a[i][j]>max)
{max= a[i][j];
r=i;
c=j;
}
printf(“max=%d , row =%d , colum=%d \n”,max , r, c);
}
5、打印以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
main()
{char a[5]={' * ' , ' * ' , ' * ' , ' * ' , ' * '};
int i,j,k;
char space=' ';
for(i=0;i<5;i++) /*输出5行*/
{printf("\n"); /* 输出每行前先换行* /
printf(" "); /* 每行前面留5个空格 */
for (j=1;j<=i;j++)
printf("%c",space); /* 每行再留1个空格*/
for ( k=0;k<5;k++)
printf("%c",a[k]); /*每行输入5个*号*/
}
}
6、求矩阵下三角形元素之和。
#define N 6
main()
{int i,j,sum=0;
int a[N][N]={0};
printf("input 5×5 data:\n");
for(i=1;i<N;i++)
{ printf("Input the %d line data:\n",i);
for(j=1;j<N;j++)
scanf("%d",&a[i][j]);
}
for(i=1;i<N;i++)
{for(j=1;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=1;i<N;i++)
for(j=1;j<=i;j++)
sum=sum+a[i][j];
printf("sum=%d\n",sum);
}
三、程序设计
1、已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
2、将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
3、有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
4、编一程序,将两个字符串连接起来,不要用strcat函数。
5、打印出以下的杨辉三角形(要求打印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必修
一、目的与要求
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);
}
}
2、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
源程序如下:
mian()
{
int number;
printf(“请输入一个正整数:\n”);
scanf(“%d”,&number);
if (prime(number))
printf(“\n %d是素数.”,number);
else
printf(“\n %d不是素数.”,number);
}
int prime(number) /*此函数用于判别素数*/
int number;
{
int flag=1,n;
for(n=2;n<number/2&&flag==1;n++)
if (number%n==0)
flag=0;
return(flag);
}
判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。
3、写一函数,是给定的一个二位数组(4×4)转置,即行列互换。
源程序如下:
/*矩阵的转置*/
#define N 4
int array[N][N];
convert(array)
int array[4][4];
{
int i,j,t;
for (i=0;i<N;i++)
for (j=i+1;j<N;j++)
{
t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t;
}
}
main()
{
int i,j;
printf(“输入数组元素:\n”);
for (i=0;i<N;i++)
for (j=0;j<N;j++)
scanf(“%d”,&array[i][j]);
printf(“\n数组是:\n”);
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
printf(“%5d”,array[i][j]);
printf(“\n”);
}
conver(array);
printf(“转置数组是:\n”);
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
printf(“%5d”,array[i][j]);
printf(“\n”);
}
}
本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。
4、写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。
源程序如下:
#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;
}
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);
}
这是一个十分典型的算法,同学们一定要认真分析、学习。
5、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。
源程序如下:
/*起泡法排序*/
#define N 10
char str[N];
main()
{
int i,flag;
for (flag=1; flag = =1;)
{
printf(“\n输入字符串,长度为10:\n”);
scanf(“%s”,&str);
if (strlen(str)>N)
printf(“超过长度,请重输!”);
else
flag = 0;
}
sort(str);
printf(“\n排序结果:”):
for (i=0;i<N;i++)
printf(“%c”,str[i]);
}
sort(str)
char str[N];
{
int i,j;
char t;
for (j=1;j<N;j++)
for (i=0;(i<N-j)&&(str[i]!=’\0’);i++)
if (str[i]>str[i+1])
{
t=str[i]; str[i]=str[i+1]; str[i+1]=t;
}
}
6、用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。
源程序如下:
/*牛顿迭代法解方程*/
#include “math.h”
float solut(a,b,c,d)
float a,b,c,d;
{
float x=1,x0,f,f1;
do
{
x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}while(fabs(x-x0)>=1e-5);
return(x);
}
main()
{
float a,b,c,d;
printf(“\n输入方程的系数a,b,c,d\n”);
scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);
printf(“\n方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0”,a,b,c,d);
printf(“\nX=%10.7f\n”,solut(a,b,c,d));
}
在此题目中,方程的系数是未知的,这是与以前我们用牛顿迭代法的时候不同的地方。但原理、算法是相同的,这里我们用函数来求方程的根。也就是把牛顿迭代法用函数的形式表现出来。
三、程序设计
1定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?
2、编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。
3、编写一个程序,包括主函数和如下子函数。
(1) 输入10个无序的整数;
(2) 用起泡方法从大到小排序;
(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。
分析:input函数完成10个整数的录入。sort函数完成起泡法排序,search函数完成输入数的查找。
4、 编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必做
一、目的和要求
1、熟悉指针的正确用法。
2、本实验可在学习了教材第10.3节之后运行。
3、了解指针参数的特殊性。
4、 掌握函数、指针、数组的用法。
5、实验可在学习了教材第六章后进行。
二、实验内容和步骤
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);
}
上机调试此程序。如果不能实现题目要求,指出原因,并修改之。
三、程序设计
1、 输入3个字符,按由小到了大的顺序输出。
2、 有n个整数,使其右循环移m个位置,写函数实现以下功能,n,m在main函数中输入,并输出循环可移之后的n个数。
3、 输入一行文字,统计大写字母、小写字母、空格、数字字符及其他字符各多少个?
4、 入3个整数,按由小到大的顺序输出。
5、 利用指针作函数参数,设计一函数实现将n个元素进行排序。
6、 写一函数,求一个字符串的长度。
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:必修
一、目的和要求
1、掌握结构体类型方法以及结构体变量的定义和引用。
2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。
3、掌握运算符”.”和”->”的应用。
4、共用体的概念和应用。
二、实验内容和步骤
1、要求编写程序:有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。
2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。
3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。
4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.
5、你有无办法测试构造链表时,内存空间的动态分配情形?
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:选做
一、目的和要求
二、实验内容和步骤
(实验学时:2学时 )
(一)实验类别:设计
(二)每组人数:1人
(三)实验要求:选做
一、目的和要求
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;
}
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”中。
(实验学时:2学时 )
(一)实验类别:综合
(二)每组人数:1人
(三)实验要求:选做
一、目的与要求
1、熟悉C语言的端口及硬件控制的方法与原理。
2、了解用C语言实现发声程序所要访问的端口。
二、实验内容和步骤
1、调试课本中例10.8程序,注意调出不同的效果。
2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱?
乐谱实例:
6000 h5 1 h3 2 h2 0.5 h3 0.5 h1 4 h2 1 m7 2 m6 0.5 h1 0.5 m5 4 m3 2 m5 1.5
m6 0.5 h1 1.5 h2 0.5 m6 0.5 h1 0.5 m5 1 h5 1.5 h1 0.5 h6 0.5 h5 0.5 h3 0.5
h5 0.5 h2 4 h2 1.5 h3 0.5 m7 1 m6 1 m5 1.5 m6 0.5 h1 1 h2 1 m3 1 h1 1 m6 0
m5 0.5 m6 0.5 h1 0.5 m5 4 h3 1.5 h5 0.5 m7 1 h2 1 m6 0.5 h1 0.5 m5 3 m3 0.
m5 0.5 m3 0.5 m5 0.5 m5 0.5 m6 0.5 m7 0.5 h2 0.5 m6 3 m5 0.5 m6 0.5 h1 1.5
h2 0.5 h5 1 h3 1 h2 1 h3 0.5 h2 0.5 h1 1 m6 0.5 m5 0.5 m3 2 h1 2 m6 0.5 h1
0.5 m6 0.5 m5 0.5 m3 0.5 m5 0.5 m6 0.5 h1 0.5 m5 3 h3 0.5 h5 0.5 h2 0.5 h3
0.5 h2 0.5 h1 0.5 m7 1 m6 1 h5 4##
void play_music(char *filename) /*filename为音乐文件名格式见上*/
{
FILE *fp;
int rate;
char sound_high[3];
float sound_long;
register int i=0,j;
int sign=0;
float str[1000][2];
if ((fp=fopen(filename,"r"))==NULL)
{
printf("Open file music.doc Errors!\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("\n Error Music.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("\n Error music.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("\n Error music.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("\n Error music.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("\n ERRor music.doc\n");
exit(1);
}
}
for(j=0;j<=i-1;j++)
{
sound(str[j][0]);
delay(str[j][1]);
}
nosound();
}
2、文件复制
/*拷贝一个文件*/
#include<stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
FILE *in,*out;
if (argc!=3)
{
printf("Wrong file structure!\n");
exit(0);
}
if ((in=fopen(argv[1],"rb"))==NULL) /*注意是"rb"*/
{
printf("Can't open infile.\n");
exit(0);
}
if ((out=fopen(argv[2],"wb"))==NULL) /*注意是"wb"*/
{
printf("Can't open outfile.\n");
exit(0);
}
while (!feof(in)) fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
成批拷贝文件
int CopyFile(char *sfile,char *dfile,int f2d,int barlong,int height,int x,int y)
{
int Copyfile(char *sf,char *df);
int MakeNdir(char *Dir);
char filename[200][13],d[40],s[40],s1[40];
struct ffblk ffblk;
int done,i,j,l,len;
i=0;
done=findfirst(sfile,&ffblk,0);
if (!done) strcpy(filename[i],ffblk.ff_name);
while(!done)
{
done=findnext(&ffblk);
if (!done)
{
i++;
strcpy(filename[i],ffblk.ff_name);
}
}
if (f2d)
{
Copyfile(sfile,dfile);
return 1;
}
strcpy(s,sfile);
l=strlen(sfile);
for(j=l-1;j>=0;j--)
if (s[j]=='\\')
{
s[j+1]=0;
break;
}
(实验学时:2学时 )
(一)实验类别:综合
(二)每组人数:1人
(三)实验要求:选做
一、目的与要求
1、掌握用C语言进行简单的数据库管理。
2、了解C程序菜单设计的一般方法。
3、理解链表的概念及应用。
二、实验内容和步骤
建立一个链表,每个结点包括学号、姓名、及三科成绩、平均成绩。除平均成绩
外,各项均由键盘输入。
要求:
(A).计算平均成绩。
(B).要实现插入功能。
(C).要有排序功能。
(D).要有存取功能。
参考程序:
#include <stdio.h>
struct SStudent
{
unsigned number;
char name[11];
int score1, score2, score3;
struct SStudent * link;
};
struct SStudent * CreateTable();
void AppendToTable(struct SStudent * stu);
void InsertToTable(struct SStudent * stu);
void QueryTable(struct SStudent * stu, unsigned age);
void SortTable(struct SStudent * stu);
void PrintTable(struct SStudent * stu);
void Save(struct SStudent * stu);
void Load(struct SStudent * stu);
void Help();
void main()
{
struct SStudent * student;
unsigned number;
char keyValue;
student = CreateTable();
clrscr();
Help();
printf("\n= ");
while((keyValue = getche()) != 'q' && keyValue != 'Q' && keyValue != 27)
{
puts("");
switch(keyValue)
{
case 'l': case 'L':
PrintTable(student); break;
case 'd': case 'D':
printf("Please input the number you want delete: ");
scanf("%d", &number);
QueryTable(student, number);
break;
case 'a': case 'A':
AppendToTable(student); break;
case 'i': case 'I':
InsertToTable(student); break;
case 's': case 'S':
SortTable(student);
puts("Sort complished! Please use command L to list.");
break;
case 'v': case 'V':
Save(student); break;
case 'o': case 'O':
Load(student); break;
case 'c': case 'C':
clrscr(); break;
case 'h': case 'H':
Help(); break;
default: puts("Error command!");
}
printf("\n= ");
}
}
struct SStudent * CreateTable()
{
struct SStudent * stu;
stu = (struct SStudent *) malloc(sizeof(struct SStudent));
stu->number = 0;
stu->score1 = stu->score2 = stu->score3 = 0;
stu->name[0] = '\0';
stu->link = NULL;
return(stu);
}
void AppendToTable(struct SStudent * stu)
{
struct SStudent * next, * last;
int number;
last = stu;
while(last->link) last = last->link;
printf("Please input the number (0 to quit): ");
scanf("%d", &number);
while(number)
{
next = (struct SStudent *) malloc(sizeof(struct SStudent));
next->number = number;
printf("Please input name: ");
scanf("%10s", next->name);
printf("Please input the first score: ");
scanf("%d", &next->score1);
printf("Please input the second score: ");
scanf("%d", &next->score2);
printf("Please input the third score: ");
scanf("%d", &next->score3);
last->link = next;
last = last->link;
printf("\nPlease input the number (0 to quit): ");
scanf("%d", &number);
}
last->link = NULL;
}
void InsertToTable(struct SStudent * stu)
{
struct SStudent * next, * last;
int number;
printf("Please input the number (0 to quit): ");
scanf("%d", &number);
while(number)
{
next = (struct SStudent *) malloc(sizeof(struct SStudent));
next->number = number;
printf("Please input name: ");
scanf("%10s", next->name);
printf("Please input the first score: ");
scanf("%d", &next->score1);
printf("Please input the second score: ");
scanf("%d", &next->score2);
printf("Please input the third score: ");
scanf("%d", &next->score3);
last = stu;
while(last->link)
{
if(last->link->number > next->number)
{
next->link = last->link;
last->link = next;
break;
}
else last = last->link;
}
printf("\nPlease input the number (0 to quit): ");
scanf("%d", &number);
}
}
void QueryTable(struct SStudent * stu, unsigned number)
{
struct SStudent * temp, * next;
next = stu;
while(next->link)
{
if(next->link->number == number)
{
temp = next->link;
next->link = next->link->link;
free(temp);
}
else next = next->link;
}
}
void PrintTable(struct SStudent * stu)
{
stu = stu->link;
if(!stu)
{
puts("The table is EMPTY!");
return;
}
printf("number\tname\t\tscore1\tscore2\tscore3\n");
while(stu)
{
printf("%3d\t", stu->number);
printf("%-10s\t", stu->name);
printf("%4d\t", stu->score1);
printf("%4d\t", stu->score2);
printf("%4d\t\n", stu->score3);
stu = stu->link;
}
}
void SortTable(struct SStudent * stu)
{
struct SStudent * next, * last, * temp;
int flag;
last = stu;
while(last->link)
{
next = stu; flag = 1;
while(next->link != last->link)
{
if(next->link->number > last->link->number)
{
temp = last->link;
last->link = last->link->link;
temp->link = next->link;
next->link = temp;
flag = 0;
break;
}
else next = next->link;
}
if(flag) last = last->link;
}
}
void Save(struct SStudent * stu)
{
unsigned char filename[13];
FILE * fileSave;
printf("Please input the filename you want save in: ");
scanf("%s", filename);
if((fileSave = fopen(filename, "wb")) == 0)
{
printf("Cannot open file %s !\n", filename);
return;
}
puts("Saveing ...");
stu = stu->link;
while(stu)
{
fwrite(stu, sizeof(struct SStudent), 1, fileSave);
stu = stu->link;
}
puts("Saveing is finished!");
}
void Load(struct SStudent * stu)
{
unsigned char filename[13];
FILE * fileLoad;
struct SStudent * temp;
while(stu->link)
{
temp = stu->link;
stu->link = stu->link->link;
free(temp);
}
temp = (struct SStudent *) malloc(sizeof(struct SStudent));
printf("Please input the filename you want load from: ");
scanf("%s", filename);
if((fileLoad = fopen(filename, "rb")) == 0)
{
printf("Cannot open file %s !\n", filename);
return;
}
puts("Loading ...");
while(fread(temp, sizeof(struct SStudent), 1, fileLoad))
{
stu->link = temp;
stu = stu->link;
temp = (struct SStudent *) malloc(sizeof(struct SStudent));
}
stu->link = NULL;
puts("loading is finished!");
}
void Help()
{ puts(" *********************************************");
puts(" * Student System Command Help *");
puts(" *********************************************");
puts(" * L = List all records *");
puts(" * D = Delete a record seleced by number *");
puts(" * A = Append records *");
puts(" * I = Insert records *");
puts(" * S = Sort records *");
puts(" * H = Show this help message *");
puts(" * V = Save records to a file *");
puts(" * O = Load records from a file *");
puts(" * C = Clear screen *");
puts(" * Q = Quit System *");
puts(" *********************************************");
puts(" * Copyright (C) 1999.09.09 By Kcliu *");
puts(" *********************************************");
}
C++程序设计实验报告学号:姓名:班级:指导老师:实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑…
C语言程序设计实验报告1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之…
学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指…
西南交通大学程序设计综合实验实验地点实验学期学生班级学生学号学生姓名任课教师龚勋信息科学与技术学院20xx年4月实验一ATM机用户…
C语言程序设计实验报告学号不告诉你哦班级信管一班姓名你猜猜哈哈一实验题目一编程实验猜数问题输入两个整数并求这两个整数的和输入所猜的…
C语言实验内容及说明20xx级13班实验报告填写说明实验课程C语言程序设计设课形式非独立课程学分4实验室名实验楼A309实验目的和…
C程序设计实验报告实验名称控制结构综合程序设计学时安排2课时实验类别上机操作型实验要求1人1组一实验目的1熟练掌握分支结构循环结构…
C程序设计实验报告实验名称结构程序设计学时安排2课时实验类别上机操作型实验要求1人1组一实验目的1234掌握结构变量的基本使用方法…
C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称数组实验一实验目…
C语言程序设计实验报告学号姓名1设计一个函数fc统计数组中偶数和奇数的个数数组元素个数不多于10个编写main函数正确调用fc函数…
《C语言程序设计》实验报告实验七、结构体和联合体程序设计学号姓名一、实验目的1.掌握结构体类型变量和数组、共用体类型变量和数组以及…