1、四川师范大学计算机科学学院C 语言程序设计实验手册2008 年 3 月1年级: 专业: 班级: 姓名: 学号: 指导教师: 2C语言程序设计实验课程简介课程名称:C语言程序设计实验课程性质:专业必修课课程属性:专业必修课学时学分:学时32 学分1开课实验室:软件实验室面向专业:网络工程、软件工程、计算机科学与技术一、课程的任务和基本要求C语言程序设计实验是面向计算机相关专业学生开设的C语言程序设计实验课,是配合C语言程序设计课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识
2、进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。二、实验项目【实验一】最简单的C程序-顺序程序设计【实验二】逻辑运算和判断选取控制【实验三】循环结构程序设计(一)【实验四】循环结构程序设计(二)【实验五】函数【实验六】数组(一)【实验七】数组(二)【实验八】指针【实验九】结构体、共用体和文件【实验十】C程序综合性实验三、有关说明1、与其它课程和教学环节的联系:先修课程:计算机文化后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程2、教材和主要参考书目:(1)教材:C程序设计习题解答与上
3、机指导,谭浩强 吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目:C语言程序设计 谭浩强主编,清华大学出版社,2003年。3三、实验内容实验一 最简单的 C 程序-顺序程序设计(验证性实验 2 学时)(一) 、实验目的1熟悉 win-tc 程序运行环境2掌握运行一个 C 程序的步骤,理解并学会 C 程序的编辑、编译、链接方法3掌握 C 语言中使用最多的一种语句赋值语句4掌握数据的输入输出方法,能正确使用各种格式控制符(二) 、实验内容1写出下列程序的运行结果(1)#include void main()printf(“*n”);printf(“This is a c progra
4、m. n”);printf(“*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);运行结果及分析:(3)#include void main( ) char c1,c2;c1=97;c2=98;printf(“%c ,%cn“,c1,c2);printf(“%d,%dn“,c1,c2);printf(“%c %cn“,c1+1,c2+2);运行结果及分析:4(4)#include void main ()
5、 int i=8,j=10,m,n;m=+i;n=j+;printf(“%d,%d,%d,%d“,i,j,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 ”,b5= ;b4=(x/1000)%10;b3= ;b2=(x/10)%10;b1= ;printf(“the number is n”,x);printf(
6、“its bit is:%d,%d,%d,%d,%dn”,b5,b4,b3,b2,b1);程序分析:3程序改错(注意:题中的编号为行序号,并非程序本身)计算任意一个半径为 r 的圆的面积和周长(结果保留两位小数)(1)#include (2)main()5(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)错误语句的行号: 改正后的语句全行:错误语句的行号: 改正后的语
7、句全行:错误语句的行号: 改正后的语句全行:错误语句的行号: 改正后的语句全行:改错分析:6实验二 逻辑运算和判断选取控制(验证性实验 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,%dn”,a,b);运行结果及分析:(2)#include void main()int a=2,b=-1,c=2;If(a
8、void main( )int a=0,b=0,c=0;if(+a 0 | +b 0) +c;7printf(“na=%d,b=%d,c=%d”,a,b,c);运行结果及分析:(4)#include void main() int x=-1;switch (x)default: printf(“a”);case 1: printf(“b”); case 2: printf(“c”);运行结果及分析:在 case 1:printf(“b”);后加上 break;语句,结果如何?修改程序并上机调试。运行结果及分析:2程序填空输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“is
9、larger”。如果这两个数相等,显示“These numbers are equal.” 。请在_内填入正确内容。#include void main( )8int a,b;printf(“please input two numbers, a, b! “);scanf(“%d%d”,if( ) printf(“%d is larger”, a );else if(_) printf(“These numbers are equal”);else _ _; 填空:填空:填空:结果分析:3编写程序(1)编写一个程序,读入 5 个整数,然后确定并显示这组数中的最大整数和最小整数。 程序清单:程序
10、编写注意事项:(2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。 (提示:使用求模运算符。偶数是 2 的倍数。任何 2 的倍数除以 2 时,余数均为零。 )程序清单:9程序编写注意事项:(3)编写一个程序,从键盘中输入 3 个不同的整数,然后显示这 3 个整数的和、平均数、积、最小数和最大数。 (用 if 语句)屏幕中的对话内容如下所示:程序清单:程序编写注意事项:Input three different integers: 13 27 14Sum is 54Average is 18Product is 4914Smallest is 13Largest is 2710实验
11、三 循环结构程序设计(一)(验证性实验 2 学时)(一) 、实验目的1熟悉用 while 语句、do-wile 语句和 for 语句实现循环的方法2掌握在程序设计中用循环方法实现的算法(二) 、实验内容1写出下列程序的运行结果(1)#include void main()int count=1;while(countvoid main() int row=10,Column;while(row=1)Column=1;while(Column ”);Column+;row-;printf(“n”);运行结果及分析:11(3)#include void main() int y=9;for( ;
12、y0 ; y-)if(y%3=0) printf(“%dn“ , -y);运行结果及分析:2编写程序(1)利用循环语句来显示如下所示的数值表:程序清单如下:程序编写注意事项:12(2)编写一程序,能够输入一组 10 个数字,判断并显示出这些数字中的最大数。提示:程序中应该使用如下的 3 个变量:Counter:能够记数到 10 的记数器。Number:当前输入到程序中的数字。Largest:迄今为止所发现的最大数字。程序清单:程序编写注意事项:(3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的
13、行驶里程。以下是一个事例的输入/输出:程序清单:13程序编写注意事项:(4)编写一个程序读入一个 5 位数,并判断该整数是否是回文。 (回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。 )提示:使用除法运算符和求模运算符把该数分解成单位个数。程序清单:程序编写注意事项:14实验四 循环结构程序设计(二)(验证性实验 2 学时)(一) 、实验目的1熟练掌握循环语句。2较灵活地运用三种不同循环语句实现循环程序设计。3熟练掌握 break 语句、continue 语句及循环的嵌套使用。(二) 、实验内容1 写出下列程序的运行结果(1)#include void main() in
14、t i,j,k,x=0;for(i=0;i void main() int x,y;for(y=1,x=1;y=10) break;if(x%2=1) x+=5; continue;x-=3;printf(“x=%d,y=%dn”,x,y);15运行结果及分析:(3)#include void main() int i , j , sum; for(i=1;ivoid main ( ) int k = 0 , m = 0 , i , j;for( i = 0 ; i void main() int i, j;for ( i=1;_; i+ ) if (_) continue;printf (
15、“%dt“,i );填空:填空:程序分析:(2)判断 m 是否素数#include void main() int m,i,k;scanf(“%d”,for(i=2;i=m)printf(“%d 是一个素数n”,m);else printf(“%d 不是一个素数n”,m);填空并运行分析:3 编写程序(1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。程序清单:17程序编写注意事项:(2)编写一个程序显示出如下菱形图案。可以使用 printf 语句来显示一个(*)和一个空格,尽量多使用循环语句(嵌套的 for 语句) ,尽量少用 printf 语句。程序清
16、单:程序编写注意事项:18(3)输入从 19941999 这个范围内的年份,并使用 for 循环语句来生成一个简洁的日历。注意闰年的情形。程序清单:程序编写注意事项:19实验五 函数(验证性实验、综合性实验 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,%dn”,a,b);f(int x,int y)x=x+1;y=y+1;运行结果及分
17、析:(2) #include fun(int a);void main() int a=3;fun(a);printf(“%dn“,a);fun(int a) a=a+3;printf(“%d,“,a);20运行结果及分析:(3)#include int fun(int x) static int a=3;a=a+x;return a;void main() int k=2,m=1,n;n=fun(k);n=fun(m);printf(“%dn”,n);运行结果及分析:(4) #include float fac(int n) float f;if(nfloat add(float x,flo
18、at y);void main() float add(float x,float y);float a,b,c;scanf(“%f,%f”,c=_;printf(“%f”,c);float add(float x,float y) float z;z=x+y;return z;填空并运行分析:(2)从键盘输入任意一个数,用函数计算它的阶乘#include long int f(int a)long int i,t=1;for(i=1;ivoid main()int a3=1,2;int i,j;for(i=0;i#define N 20fun(int a,int n,int m)int i,
19、j;for(i=m;i=n;i-)ai+1=ai;void main()int i,aN=1,2,3,4,5,6,7,8,9,10;fun(a,2,9);for(i=0;ivoid swap1(int c)int t;t=c0;c0=c1;c1=t;void swap2(int c0,int c1)int t;t=c0;c0=c1;c1=t;void main( ) int a2=3,5,b2=3,5;swap1(a) ;swap2(b0,b1);printf(“%5d %5d %5d %5d “,a0,a1,b0,b1);运行结果及分析:2.程序填空(1)将 Fibonacci 数列前 15
20、 项放入一个一维数组中(fib0=1,fib1=1) ,并计算其中奇数之和。#include void main() int fib15,i,s=0;fib0=1;fib1=1;for(i=2;ivoid main()int a33=1,2,4,6,1,5,8,0,0,b3=0;int i,j;for(i=0;i3;i+)for(j=0;j3;j+) ;for(i=0;i3;i+)printf(“%6d“, );填空:填空:程序分析:3. 编写程序(1)已知数组 a10=3,7,6,5,4,1,2,9,9,7,计算数组下标为奇数的元素之和。程序清单:085164227程序编写注意事项:(2)使
21、用数组解决下列问题。公司在对销售人员支付佣金。销售人员每个星期收到$200,以及那个星期他们总销售额的 9%。例如,在某个星期中销售额为$3000 的销售人员收到$200 以及$3000 的 9%,也就是$470。编写一个程序(使用计数器数组) ,确定销售人员在下列范围内可以赚取的收入(假定每个销售人员的工资将截断为整数):a) $200 -$299b) $300 -$399c) $400 -$499d) $500 -$599e) $600 -$699f) $700 -$799g) $800 -$899h) $900 -$999i) $1000 以及$1000 以上程序清单:28程序编写注意事
22、项:(3)使用二维数组来解决下列问题。公司与 4 个销售人员(1 4) ,他们销售 5 种不同的产品 (1 5) 。每天,每个销售人员为销售的每种不同产品上交报告。每份报告包括:a) 销售人员编号。b) 产品编号。c) 当天每种产品的总销售额。因此,每个销售人员每天上交 05 份销售报告。假设已经知道上个月所有报告的信息。编写一个程序读取所有这些信息,以得到上个月的销售额,并对销售人员按产品来计算总销售额。所有总和必须存储在二维数组 sales 中。在处理了上个月的所有信息之后,以列表形式输出结果,其中列代表特定的销售人员,而行代表特定的产品。计算每行的总和,以得到上个月每个销售人员的销售总额。输出结果应该在每行的右边显示产品销售总和,在每列的底部显示个人销售总和。程序清单:程序编写注意事项:29