C语言试验大纲
第一部分 实验指导
1. 上机实验的目的
C语言程序设计是一门实践性很强的课程,必须十分重视实践环节,必须保证有足够的上机实验时间,学习本课程应该至少有36小时的上机时间,最好能做到上机时间与授课时间之比为1:1。除了学校规定的上机时间以外,应当提倡学生自己课余抽时间多上机实践。
上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。学习程序设计,上机实验的目的是:
1) 加深对讲授内容的理解,尤其是一些语法上的规定,光靠课堂讲授,即枯燥无味又难以记住,但它们都很重要。通过多次上机,就能自然地、熟练地掌握。通过上机来掌握语法规则是行之有效的方法。
2) 熟练所用的计算机系统的操作方法,也就是了解和掌握C语言程序开发的环境。一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件。使用者应该了解为了运行一个C程序,需要哪些必需的外部条件,可以利用哪些系统的功能来帮助自己开发程序。每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他的系统时便会触类旁通,很快学会。
3) 学习上机调试程序。也就是善于发现程序中的错误,并且能很快排除这些错误,使程序能正确的运行。经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快判断出错误所在,并改正之。而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求救于别人。要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。对程序设计来说,要求会编程序并上机调试通过。因此调试程序本身是程序设计课程的一个重要的内容和基本要求,应给于充分的重视。调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“意会”难以“言传”,别人的经验不能替代自己的经验。调试程序的能力是每个程序设计人员应当掌握的一项基本功。
因此,在做实验时应当在已通过的程序基础上有意作一些修改,以观察所出现的情况,这样的学习才会有真正的收获,才是灵活主动的学习而不是呆板被动的学习。
2. 上机实验前的准备工作
在上机实验前因事先做好准备工作,以提高上集实验的效率,准备工作至少应包括:
1) 了解所用的计算机系统(包括C编译系统)的性能和使用方法。
2) 复习和掌握与本实验有关的教学内容。
3) 准备好上集所用的程序。手编程序应书写整齐,并经人工检查无误会才能上机,以提高上机效率。初学者切忌不编程序或抄别人程序上机,应从一开始就养成严谨的科学作风。
4) 对运行中可能出现的问题应事先做出估计;对程序中自己有疑问的地方,因作上记号,以便在上机时给于注意。
5) 准备好调试和运行时所需的数据。
3. 上机实验的步骤
上机实验时应该一人一组,独立上机。上机过程中出现的问题。除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师。尤其是对“出错信息”,应善于自己分析判断。这是学习调试程序的良好机会。
上机实验一般应包括以下几个步骤:
1) 调出C编译系统,进入C工作环境。
2) 输入自己编好的程序(在使用键盘输入时,最好采用正确的指法击键,为今后正确使用键盘打下基础)。
3) 检查一编已输入的程序是否有错。
4) 进行编译。如果在编译和连接中发现错误,屏幕上会出现“出错信息”,根据提示找到出错位置和原因,加以改正,在进行编译……如此反复,直到顺利通过编译和连接为止。
5) 运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同数据时所得到的结果是否正确。通过多次的运行,分别检查在不同情况下程序是否正确。
6) 输出程序清单和运行结果。
4. 实验后,应整理出实验报告,实验报告应包括以下内容:
1) 题目;
2) 程序清单(必须是计算机打印出的程序清单);
3) 运行结果(必须是上面程序清单所对应打印出的结果):
4) 对运行情况所做出的分析,以及本次调试程序所取得的经验。如果程序未能通过,则因分析其原因。
5. 实验内容的安排
课后习题和上机题统一。教师制定的课后习题就是上机题。本大纲给出15个实验内容。每个实验对应教材中相应章节的内容,学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。
C语言试验大纲
第二部分 实验内容
实验一 C程序的运行环境和运行一个C程序的方法
1. 实验目的:
1) 了解所用的计算机系统的基本操作方法。
2) 掌握在该系统上如何编辑、编译、连接和运行一个C程序。
3) 通过运行简单的C程序,初步了解C程序的特点
2. 预习内容
见教材第一章
3. 实验内容(参考例题)
【例】
main()
{
printf("hello !\n");
}
main是主函数的函数名,表示这是一个主函数。
每一个C源程序都必须有,且只能有一个主函数(main函数)。
函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。
printf函数是一个由系统定义的标准函数,可在程序中直接调用。
【例】
#include
#include
main()
{
double x,s;
printf("input number:\n");
scanf("%lf",&x);
s=sin(x);
printf("sine of %lf is %lf\n",x,s);
}
实验二 数据类型,运算符和表达式
1. 实验目的:
1) 掌握C语言的基本数据类型
2) 理解常量、变量的意义与区别
3) 理解不同类型的数据在内存中的存储形式(注意区别字符常量与字符串常量)
4) 掌握运算符的规则
5) 掌握不同数值类型的混合运算规则
2. 预习内容
见教材第三章
3. 实验内容(参考例题)
【例】符号常量的使用。
#define PRICE 30
main()
{
int num,total;
num=10;
total=num* PRICE;
printf(“total=%d”,total);
}
用标识符代表一个常量,称为符号常量。
符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。
使用符号常量的好处是:
含义清楚;
能做到“一改全改”。
【例】整型变量的定义与使用。
main()
{
int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);
}
【例】整型数据的溢出。
main()
{
int a,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
}
32767:
0111111111111111
-32768
1000000000000000
【例】
main(){
long x,y;
int a,b,c,d;
x=5;
y=6;
a=7;
b=8;
c=x+a;
d=y+b;
printf("c=x+a=%d,d=y+b=%d\n",c,d);
}
实验三 顺序结构C程序设计
1. 实验目的:
1) 掌握C语言的语句
2) 掌握输入输出函数的格式
3) 掌握顺序结构的程序设计方法
2. 预习内容
见教材第四章
3. 实验内容(参考例题)
【例】 输入任意三个整数,求它们的和及平均值
/*功能:设计一个顺序结构程序,求三个整数的和及平均值。*/
main()
{
int num1,num2,num3,sum;
float aver;
printf("Please input three numbers:");
scanf("%d,%d,%d",&num1,&num2,&num3); /*输入三个整数*/
sum=num1+num2+num3; /*求累计和*/
aver=sum/3.0; /*求平均值*/ printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3);
printf("sum=%d,aver=%7.2f\n",sum,aver);
}
【例】 求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a≠0且b2-4ac>0。
/*功能:设计一个顺序结构程序,求方程的根。*/
#include "math.h" /*为使用求平方根函数sqrt(),包含math.h头文件 */
main()
{float a,b,c,disc,x1,x2;
printf("Input a, b, c: ");
scanf("%f,%f,%f",&a,&b,&c); /*输入方程的三个系数的值*/
disc=b*b-4*a*c; /*求判别式的值赋给disc*/
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);
}
实验四 逻辑运算和判断选取控制
1. 实验目的:
1) 掌握关系运算符和逻辑运算符
2) 掌握 if 语句
3) 掌握 switch 语句
4) 掌握选择结构程序设计
2. 预习内容
见教材第五章
3. 实验内容(参考例题)
【例】 求一元二次方程ax*x+b*x+c=0的解(a≠0)。
/*功能:求一元二次方程的解。*/
#include "math.h"
main()
{float a,b,c,disc,x1,x2,p,q;
scanf(“%f,%f,%f”, &a, &b, &c);
if (fabs(a) printf(“is not a quadratic”);
else
{
disc=b*b-4*a*c;
if (fabs(disc) printf(“x1=x2=%7.2f\n”, -b/(2*a)); /*输出两个相等的实根*/
else
if (disc>1e-6)
{x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%7.2f,x2=%7.2f\n", x1, x2);
}
else
{p=-b/(2*a); /*求出两个共轭复根*/
q=sqrt(fabs(disc))/(2*a);
printf(“x1=%7.2f + %7.2f i\n“, p, q); /*输出两个共轭复根*/
printf(”x2=%7.2f - %7.2f i\n“, p, q);
}
}
}
【例】 写程序,判断某一年是否为闰年。
main()
{
int year,leap;
scanf(“%d”,&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else leap=0;
}
else leap=1;
}
else leap=0;
if(leap)
printf(“%d is ”,year);
else
printf(“%d is not ”,year);
printf(“a leap year.\n”);
}
【例】 运输公司对用户计算运费。
main()
{
int c,s;
float p,w,d,f;
scanf(“%f,%f,%d”,&p,&w,&s);
if(s>=3000) c=12;
else c=s/250;
switch(c)
{
case 0:d=0; break;
case 1:d=2; break;
case 2:
case 3:d=5; break;
case 4:
case 5:
case 6:
case 7:d=8; break;
case 8:
case 9:
case 10:
case 11:d=10; break;
case 12:d=15; break;
}
f=p*w*s*(1-d/100.0);
printf(“freight=%15.4f”,f);
}
实验五 循环控制
1. 实验目的:
1) 掌握“当型”和“直到型”循环结构
2) 掌握while语句和 do-while 语句并区分二者的异同
3) 掌握 for 语句
4) 掌握循环结构程序设计
2. 预习内容
见教材第六章
3. 实验内容(参考例题)
【例】用∏/4≈1-1/3+1/5-1/7+………公式求∏的近似值,直到最后一项的绝对值小于0.000001为止。
#include
main()
{
int s;
float n,t,pi;
t=1;pi=0;n=1.0;s=1;
while((fabs(t))>1e-6)
{
pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf(“pi=%10.6f\n”,pi);
}
【例】求Fibonacci数列40个数。
main()
{
long int f1,f2;
int i;
f1=1;f2=1;
for(i=1;i
{
printf(“%12ld %12ld”,f1,f2);
if(i%2==0) printf(“\n”);
f1=f1+f2;
f2=f1+f2;
}
}
【例】判断m是否为素数。
#include
main()
{
int m,i,k;
scanf(“%d”,&m);
k=sqrt(m+1);
for(i=2;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);
}
【例】 求100~200间的全部素数。
#include
main()
{
int m,i,k,n=0;
for(m=101;m
{
k=sqrt(m);
for(i=2;i
if(m%i==0) break;
if(i>=k+1)
{printf(“%d ”,m); n=n+1;}
if(n%10==0) printf(“\n”);
}
printf(“\n”);
}
【例】 译密码。见教材P-119页
#include
main()
{
char c;
while((c=getchar())!=’\n’)
{
if((c>=’a’&&c=’A’&&c
if(c>’Z’&&c’z’) c=c-26;
}
printf(“%c”,c);
}
}
实验六 数组
1. 实验目的:
1) 掌握一维数组和多维数组的定义
2) 掌握对数组的引用规则
3) 理解多维数组的特殊性
4) 掌握字符数组和字符串
2. 预习内容
见教材第七章
3. 实验内容(参考例题)
【例】选择法排序
思想:对n个数据对象排序
1.i置为0,表示当前操作对象的范围是[i,n-1]
2.数据范围[i,n-1]中确定最大值所在下标p
3.使最大值与当前操作范围的第一个数据交换
4.i++,使i自增1,从而操作数据范围缩小1
5.如果i小于n-1,则转入第二步
main()
{
int i,j,p,s,a[10];
printf("\n input 10 numbers:\n");
for(i=0;i<10 ;i++)
scanf("%d",&a[i]);
for(i=0;i<10 ;i++)
{
p=i;
for(j=i+1;j<10 ;j++)