(此文档为word格式,下载后您可任意编辑修改!)
四川师范大学计算机科学学院《C语言程序设计》
实
验
手
册
2010年2月
年级:
专业:
班级:
姓名:
学号:指导教师:
《C语言程序设计》实验课程简介
课程名称:C语言程序设计实验
课程性质:专业必修课
课程属性:专业必修课
学时学分:学时32 学分1
开课实验室:软件实验室
面向专业:网络工程、软件工程、计算机科学与技术
一、课程的任务和基本要求
C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。
二、实验项目
【实验一】最简单的C程序---顺序程序设计
【实验二】逻辑运算和判断选取控制
【实验三】循环结构程序设计(一)
【实验四】循环结构程序设计(二)
【实验五】函数
【实验六】数组(一)
【实验七】数组(二)
【实验八】指针
【实验九】结构体、共用体和文件
【实验十】C程序综合性实验
三、有关说明
1、与其它课程和教学环节的联系:
先修课程:计算机文化
后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程
2、教材和主要参考书目:
(1)教材:
《C程序设计习题解答与上机指导》,谭浩强吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目:
《C语言程序设计》谭浩强主编,清华大学出版社,2003年。
三、实验内容
实验一最简单的C程序---顺序程序设计
(验证性实验 2学时)
(一)、实验目的
1.熟悉win-tc程序运行环境
2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法
3.掌握C语言中使用最多的一种语句——赋值语句
4.掌握数据的输入输出方法,能正确使用各种格式控制符
(二)、实验内容
1.写出下列程序的运行结果
(1)#include
void main()
{
printf(“*****************\n”);
printf(“This is a c program. \n”);
printf(“****************\n”);
}
运行结果及分析:运行结果为:
Printf函数语句表示输出引号内的字符串,最后的\n表示换行,
将程序中的\n去掉后,运行结果及分析:运行结果为:
去掉\n后不换行连续显示
(2)#include
void main()
{
int a=100,b=20,sum,sb;
sum=a+b;
sb=a/b;
printf("sum=%d,sb=%d",sum,sb);
}
运行结果及分析:
sum=100+20=120;sb=100/20=5.
(3)#include
void main( )
{
char c1,c2;
c1=97;c2=98;
printf("%c ,%c\n",c1,c2);
printf("%d,%d\n",c1,c2);
printf("%c %c\n",c1+1,c2+2);
}
运行结果及分析:运行结果为:
声明c1,c2是字符型常量,第一个输出函数以字符格式输出c1,c2,97,98对应的是a,b的ASCII代码,所以输出的是“a,b”之后换行,第二个输出函数表示已十进制数形式输出c1,c2,故输出结果就是97.98,换行,第三个输出函数中表示以字符函数形式输出c1+1,c2+2,是b,d 的ASCII代码值。
(4)#include
void main ()
{
int i=8,j=10,m,n;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
运行结果及分析:运行结果为:
m=++i,当++运算符在前面时,先自增再将值赋给了m。而++在后面时是先将值赋给了n再自增。再将本程序的第3行改为m=i++;n=++j;
运行结果及分析:运行结果
分析同上
2.程序填空
任意输入一个有五位数字的正整数x,分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1表示),请将程序补充完整。
#include
main()
{
int b1,b2,b3,b4,b5;
① x;
Scanf( “ %ld ”,&x);
b5= ② ;
b4=(x/1000)%10;
b3= ③ ;
b2=(x/10)%10;
b1= ④ ;
printf(“the number is ⑤ \n”,x);
printf(“its bit is:%d,%d,%d,%d,%d\n”,b5,b4,b3,b2,b1);
}
程序分析:①long int
②x/10000
③(x/100)%10
④ x%10
⑤ %ld
3.程序改错(注意:题中的编号为行序号,并非程序本身)
计算任意一个半径为r的圆的面积和周长(结果保留两位小数)
(1)#include
(2)main()
{
(3)float r; p=3.14,c,area;
(4)printf(“input r:”);
(5)scanf(“%f”, r);
(6)c=2p*r;
(7)area=p*r*r
(8)printf(“c=%-7.2f,area=%-7.2f”,c,area);
(9)}
错误语句的行号:(3)
改正后的语句全行:float r,p=3.14,area;
错误语句的行号: (5)
改正后的语句全行: scanf(“%f”,&r);错误语句的行号: (6)
改正后的语句全行:c=2*p*r;
错误语句的行号: (7)
改正后的语句全行: area=p*r*r;
改错分析:
实验二逻辑运算和判断选取控制
(验证性实验 2学时)
(一)、实验目的
1.了解逻辑量在C语言中的表示方法
2.学会使用逻辑运算符和逻辑表达式
3.熟练掌握if语句和switch语句
(二)、实验内容
1.写出下列程序的运行结果
(1)#include
void main( )
{
int a,b,x=10,y=9;
a=(--x == y++)? --x : ++y;
b= y;
printf(“%d,%d\n”,a,b);
}
运行结果及分析:运行结果为
--x先自减=9=y,所以逻辑运算结果为1,故取值取--x=8,y只进行了一次自增运算,所以y=9. (2)#include
void main()
{
int a=2,b=-1,c=2;
If(a
if(b<0)c=0;
else c+=1;
printf(“%d\n”,c);
}
运行结果及分析:运行结果为:
由于第一个if选择的a
(3)#include
void main( )
{
int a=0,b=0,c=0;
if(++a > 0 || ++b > 0) ++c;
printf(“\n a=%d,b=%d,c=%d”,a,b,c);
}
运行结果及分析:运行结果为:
先判断++a>0,故++b不再运算,条件成立,计算++c。故a=1,b=0,c=1。
(4)#include
void main()
{
int x=-1;
switch (x)
{
default: printf(“a”);
case 1: printf(“b”);
case 2: printf(“c”);
}
}
运行结果及分析:运行结果为:
由于x=-1,所以运行default后面的语句,由于没有break语句,所以继续运行,所以三个语句都运行了。
在case 1:printf(“b”);后加上break;语句,结果如何?修改程序并上机调试。
运行结果及分析:运行结果为:
分析同上
2.程序填空
输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“is larger”。如果这两个数相等,显示“These numbers are equal.”。请在_____内填入正确内容。
#include
void main( )
{
int a,b;
printf(“please input two numbers, a, b! “);
scanf(“%d%d”,&a,&b);
if( ① ) printf(“%d is larger”, a );
else if(_______②____________) printf(“These numbers are equal”);
else ___________ ③_____________________;
}
填空①:a>b
填空②:a==b
填空③:printf(“%d is larger”, b);
结果分析:显示较大的数字
3.编写程序
(1)编写一个程序,读入5个整数,然后确定并显示这组数中的最大整数和最小整数。
程序清单:#include
int max(int x,int y,int z);
int min(int x,int y,int z);
main()
{
int a,b,c,d,e,max1,min1;
printf("Please input five intergers:\n");
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
max1=max(a,b,c);
max1=max(max1,d,e);
min1=min(a,b,c);
min1=min(min1,d,e);
printf("These five numbers are:%d,%d,%d,%d,%d\n",a,b,c,d,e);
printf("max=%d\nmin=%d",max1,min1);
getch();
}
int max(int x,int y,int z)
{
int p;
p=x>y?x:y;
p=p>z?p:z;
return(p);
}
int min(int x,int y,int z)
{
int p;
p=x p=p return(p); } 程序编写注意事项: (2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。(提示:使用求模运算符。偶数是2的倍数。任何2的倍数除以2时,余数均为零。) 程序清单:#include main() { long int a; printf("Please input a integer:\n"); scanf("%ld",&a); if(a%2==0) printf("\n\n%ld:This is an even number\n"); else printf("\n\n%ld:This is a odd number\n"); getch(); } 程序编写注意事项: (3)编写一个程序,从键盘中输入3个不同的整数,然后显示这3个整数的和、平均数、积、最小数和最大数。(用if语句)屏幕中的对话内容如下所示: 程序清单:#include int max (int x,int y,int z); int min (int x,int y,int z); main() { int a,b,c,max1,min1 long int sum,pro; float average; printf("Please input three diffrent integers:"); scanf("%d%d%d",&a,&b,&c); sum=a+b+c; average=sum/3; pro=a*b*c; max1=max (a,b,c); min1=min (a,b,c); printf("Sum is %ld\nAverage is %f\nProduct is %ld\nSmallest is %d\nLargest is %d\n",sum,average,pro,min1,max1); getch(); } int max (int x,int y,int z) { int p; p=x>y?x:y; p=p>z?p:z; return(p); } int min (int x,int y,int z) { int p; p=x p=p return(p); } 程序编写注意事项: 实验三循环结构程序设计(一) (验证性实验 2学时) (一)、实验目的 1.熟悉用while语句、do-wile语句和for语句实现循环的方法 2.掌握在程序设计中用循环方法实现的算法 (二)、实验内容 1.写出下列程序的运行结果 (1)#include void main() { int count=1; while(count<=10) { count++; printf(“%s\n”,count%2? “****”: “++++++++++”); } } 运行结果及分析:运行结果为: 奇数时显示+,偶数显示*。 (2)#include void main() { int row=10,Column; while(row>=1) { Column=1; while(Column <=10) { printf(“%s”,row%2 ? “<”: “>”); Column++; } row--; printf(“\n”); } } 运行结果及分析:运行结果为: 奇数时显示>并循环十次,偶数时显示<并循环十次。然后共循环十次。 (3)#include void main() { int y=9; for( ; y>0 ; y--) if(y%3==0) printf("%d\n" , --y); } 运行结果及分析:运行结果为: 当y能被三整除时,显示--y。 2.编写程序 (1)利用循环语句来显示如下所示的数值表: 程序清单如下: #include main() { int n,n1,n2,n3; printf("N\t\tN*10\t\tN*100\t\tN*1000\n"); for(n=1;n<11;n++) printf("%-16d%-16d%-16d%-16d\n",n,n*10,n*100,n*1000); getch(); } 程序编写注意事项: (2)编写一程序,能够输入一组10个数字,判断并显示出这些数字中的最大数。提示:程序 中应该使用如下的3个变量: Counter:能够记数到10的记数器。 Number:当前输入到程序中的数字。 Largest:迄今为止所发现的最大数字。 程序清单: #include main() { long int Number,Largest=0; int Counter; for(Counter=1;Counter<11;Counter++) { printf("Please input a number(%dof10):",Counter); scanf("%d",&Number); if(Number>Largest) Largest=Number; } printf("The largest number is %ld",Largest); getch(); } 程序编写注意事项: (3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是一个事例的输入/输出: 程序清单: #include main() { float gallons=0,miles,average[100],sum=0,aaverage; int i=0; while(gallons!=-1) { printf("Enter the gallons used <-1 to end>:"); scanf("%f",&gallons); if(gallons==-1) break; printf("Enter the miles driven:"); scanf("%f",&miles); average[i]=miles/gallons; sum+=average[i]; printf("The Miles/Gallon for this tank was %f\n\n",average[i]); i++; } aaverage=sum/i; printf("The overall average Miles/Gallon was %f",aaverage); getch(); } 程序编写注意事项: (4)编写一个程序读入一个5位数,并判断该整数是否是回文。(回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。)提示:使用除法运算符和求模运算符把该数分解成单位个数。 程序清单: #include main() { long int a,b,a1,a2,a3,a4,a5; printf("Please input a 5-digit number:"); scanf("%ld",&a); a5=a/10000; a4=(a/1000)%10; a3=(a/100)%10; a2=(a/10)%10; a1=a%10; b=a1*10000+a2*1000+a3*100+a4*10+a5; if(a==b) printf("\n%ld is a palindrome number.",a); else printf("\n%ld is not a palindrome number",a); getch(); } 程序编写注意事项: 实验四循环结构程序设计(二) (验证性实验 2学时) (一)、实验目的 1.熟练掌握循环语句。 2.较灵活地运用三种不同循环语句实现循环程序设计。 3.熟练掌握break语句、continue语句及循环的嵌套使用。 (二)、实验内容 1.写出下列程序的运行结果 (1)#include void main() { int i,j,k,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<3;j++) { if(j%2) continue; x++; } x++; } k=i+j; printf("k=%d,x=%d\n" , k , x); } 运行结果及分析:运行结果为: 最后循环结束时i=2,j=3,故k=i+j;在循环过程中x++共执行了8次,故x=8;(2)#include void main() { int x,y; for(y=1,x=1;y<=50;y++) { if(x>=10) break; if(x%2==1) { x+=5; continue;} x-=3; } printf(“x=%d,y=%d\n”,x,y); } 运行结果及分析:运行结果为: x的变化过程为:6,3,8,5,10,循环执行了5次,故y=6。 (3)#include void main() { int i , j , sum; for(i=1;i<6;i++) { sum=0; for(j=1;j<=4;j++) sum+=j; } printf(“sum=%d\n”, sum); } 运行结果及结果:运行结果为: 在j的循环后,sum=10,由于每次i循环时都使sum=0,故循环6次后仍然是sum=10。 (4) #include void main ( ) { int k = 0 , m = 0 , i , j; for( i = 0 ; i < 2 ; i++) { for ( j = 0 ; j < 3 ; j++) k++; k -= j; } m = i + j; printf("k=%d,m=%d\n",k,m); } 运行结果及结果:运行结果为: j循环中:k的值变化为:1,1,2,1,2,0.循环两次结果不变。循环结束时,i=2,j=3,故m=5. 2.程序填空 (1)下面程序的功能是:输出100以内同时能被3和7整除的所有整数,请填空。 #include void main() { int i, j; for ( i=1;___①_____; i++ ) { if (___②______) continue; printf ( "%d\t",i ); } } 填空①:i<101; 填空②:(i%3!=0) || (i%7!=0) 程序分析:当不能被3或7整除时返回i++,否则输出i。 (2)判断m是否素数 #include void main() { int m,i,k; scanf(“%d”,&m); for(i=2;i if(i>=m)printf(“%d是一个素数\n”,m); else printf(“%d不是一个素数\n”,m); } 填空并运行分析:m%i==0 可以把i 3.编写程序 (1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。 程序清单: #include main() { long int a[100],min; int i,n; printf("Please input several numbers:"); scanf("%d",&n); for(i=0;i<=n-1;i++) { scanf("%ld",&a[i]); if(a[i] min=a[i]; } printf("The smallest numbers is %ld",min); getch(); } 程序编写注意事项: (2)编写一个程序显示出如下菱形图案。可以使用printf语句来显示一个(*)和一个空格,尽量多使用循环语句(嵌套的for语句),尽量少用printf语句。 程序清单: #include main() { int i,j,n; for(i=1;i<=5;i++) { for(n=5;n>i;n--) printf(" "); for(j=1;j<=(2*i-1);j++) printf("*"); printf("\n"); } for(i=4;i>=0;i--) { for(n=5;n>i;n--) printf(" "); for(j=1;j<=(2*i-1);j++) printf("*"); printf("\n"); } getch(); } 程序编写注意事项: (3)输入从1994~1999这个范围内的年份,并使用for循环语句来生成一个简洁的日历。注意闰年的情形。 程序清单: #include int main() { int month,day,leap,max,n,m,k,j; float year,k1,m1; printf("Please input the year:"); scanf("%f",&year); n=(int)((year-1)/3324); m1=(int)((year-1)/100); m=(int)(m1*3/4+0.85); k1=(int)(year/4*5-0.15)-m-n; k=(int)((k1/7-(int)(k1/7))*7+0.5); if(year<=0) { printf("Input error."); exit(0); } if((int)year%400==0||((int)year%4==0&&(int)year%100!=0)) leap=1; else leap=0; for(month=1; month<=12; month++) { printf("NO.%d\n",month); printf("---\n"); printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n"); if(month==2) max=28+leap; else if(month==4||month==6||month==9||month==11) max=30; else max=31; for(j=1; j<=k; j++) printf("\t"); for(day=1; day<=max; day++) { printf("%3d\t",day); k++; if(k>6) { printf("\n"); k=0; } } printf("\n---\n"); printf("\nPress anykey to show next month.\n"); getch(); } getch(); }程序编写注意事项: 实验五函数 (验证性实验、综合性实验 2学时)(一)、实验目的 1.掌握定义函数的方法 2.学会利用函数的相关概念解决问题 3.学会使用函数的方法设计程序 (二)、实验内容 1.写出下列程序的运行结果 (1)#include “stdio.h” f(int x, int y); void main() { int a=1,b=2; f(a,b); printf(“%d,%d\n”,a,b); } f(int x,int y) { x=x+1; y=y+1; } 运行结果及分析:运行结果为: 没有定义函数返回值 (2) #include fun(int a); void main() { int a=3; fun(a); printf("%d\n",a); } fun(int a) { a=a+3; printf("%d,",a); } 运行结果及分析:运行结果为: 自定义函数中的a是局部变量,只在该函数中有效。 (3)#include int fun(int x) { static int a=3; a=a+x; return a;