1、阿坝师专计科系 C 语言程序设计实验手册C语言程序设计实验简介课程名称:C语言程序设计课程性质:专业必修课课程属性:专业必修课课程学时学分:学时78 实验学时32 学分6面向专业:软件技术、网络系统管理、计算机应用技术、楼宇智能化工程技术、现代教育技术一、课程的任务和基本要求C语言程序设计实验是面向计算机相关专业学生开设的C语言程序设计实验课,是配合C语言程序设计课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机
2、实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。二、实验项目【实验一】最简单的C程序-顺序程序设计【实验二】逻辑运算和判断选取控制【实验三】循环结构程序设计(一)【实验四】循环结构程序设计(二)【实验五】函数【实验六】数组(一)【实验七】数组(二)【实验八】指针【实验九】结构体、共用体和文件【实验十】C程序综合性实验三、有关说明1、与其它课程和教学环节的联系:先修课程:计算机导论后续课程:面向对象程序设计、Java程序设计、php、数据结构、软件工程2、教材和主要参考书目:(1)教材:C程序设计题解与上机指导(第三版),谭浩强 编著,北京:清华大学出版社,20
3、05年。(2)主要参考书目:阿坝师专计科系 C 语言程序设计实验报告第 1 页 共 50 页C语言程序设计(第三版) 谭浩强 著,清华大学出版社,2005年。三、实验内容实验一 最简单的 C 程序-顺序程序设计(验证性实验 2 学时)实验时间: 2012, 10,16 实验地点: 公共机房 3 实验成绩: (一) 、实验目的1熟悉 win-tc 程序运行环境2掌握运行一个 C 程序的步骤,理解并学会 C 程序的编辑、编译、链接方法3掌握 C 语言中使用最多的一种语句赋值语句4掌握数据的输入输出方法,能正确使用各种格式控制符(二) 、实验内容1写出下列程序的运行结果(1)#include voi
4、d main()printf(“*n”);printf(“This is a c program. n”);printf(“*n”);运行结果为: *This is a c program.* 分析: printf 函数表示输入字符,n 表示换行 将程序中的n 去掉后,运行结果及分析: 运行结果为:* This is a c program. * 分析: 无 “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); 阿坝师专计科系 C 语言程序设计实验
5、报告第 2 页 共 50 页运行结果为: sum=120 sb=5 分析: sum=100+20=120,sb=100/20=5 输出时一一对应 (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);运行结果为: a,b97,98b,d 分析: 定义字符 c1,c2。第一行以字符型输出(a,b),换行, 第二行将字符型以十进制输出得(97,98) ,换行,第三行以字符型输出 (c1+1,c2+2)得(b,d
6、) (4)#include void main () int i=8,j=10,m,n;m=+i;n=j+;printf(“%d,%d,%d,%d“,i,j,m,n);阿坝师专计科系 C 语言程序设计实验报告第 3 页 共 50 页运行结果为: 9, 11, 9 10 分析: “+” 在前先 i 自身加再赋值给 m,”+”在后面 j 先赋值给 n 再自身加 再将本程序的第 3 行改为 m=i+;n=+j;运行结果及分析: 运行结果为: 8,11,8,11 分析: 2程序填空任意输入一个有五位数字的正整数 x,分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1 表示),请将程序
7、补充完整。#include main() int b1,b2,b3,b4,b5;printf(“b1,b2,b3,b4,b5:” x;Scanf( “ %ld ”,b5= (x/10000)%10 ;b4=(x/1000)%10;b3= (x/100)%10 ;b2=(x/10)%10;b1= x%10 ;printf(“the number is %d n”,x);printf(“its bit is:%d,%d,%d,%d,%dn”,b5,b4,b3,b2,b1);阿坝师专计科系 C 语言程序设计实验报告第 4 页 共 50 页程序分析: long int x/10000 (x/100)%
8、10 x%10 %1d 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,c,area; 错误语句的行号: (5) 改正后的语句全行: sca
9、nf(“%f”,r) 错误语句的行号: 6 改正后的语句全行: c=2*p*r 错误语句的行号: (7) 改正后的语句全行: area=p*r*r 教师评语:阿坝师专计科系 C 语言程序设计实验报告第 5 页 共 50 页实验二 逻辑运算和判断选取控制实验时间: 2012 10,25 实验地点:公共机房 3 实验成绩: (验证性实验 2 学时)(一) 、实验目的1了解逻辑量在 C 语言中的表示方法2学会使用逻辑运算符和逻辑表达式3熟练掌握 if 语句和 switch 语句(二) 、实验内容1写出下列程序的运行结果(1)#include void main( ) int a,b,x=10,y=9
10、;a=(-x = y+)? -x : +y;b= y;printf(“%d,%dn”,a,b);运行结果为: 8,11 分析: -x 先自减 x=9=y,所以计算结果为 1,故取值x=8,y 只进行了一次自增,所以 y=9. (2)#include void main()int a=2,b=-1,c=2;If(avoid main( )int a=0,b=0,c=0;if(+a 0 | +b 0) +c;printf(“na=%d,b=%d,c=%d”,a,b,c);阿坝师专计科系 C 语言程序设计实验报告第 6 页 共 50 页运行结果为: a=1,b=0,c=1 分析: 先判断+a0,故+
11、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”);运行结果为: abc 分析:由于 x=-1,所以运行 default 后面的句子,由于没有 break 语句,所以继续运行,所以三个语句都运行了。 在 case 1:printf(“b”);后加上 break;语句,结果如何?修改程序并上机调试。运行结果为: ab 分析: 2程序填空输入两个整数,从用户处获取这两个整数,显示
12、其中较大的数,在其后跟随“is larger”。如果这两个数相等,显示“These numbers are equal.” 。请在_内填入正确内容。#include void main( )int a,b;printf(“please input two numbers, a, b! “);scanf(“%d%d”,if( ab ) printf(“%d is larger”, a );else if(_) printf(“These numbers are equal”);else _ _; 填空: ab 填空: a=b 阿坝师专计科系 C 语言程序设计实验报告第 7 页 共 50 页填空:
13、 printf(“%d is larger”,b) 结果分析: 显示较大数字 3编写程序(1)编写一个程序,读入 5 个整数,然后确定并显示这组数中的最大整数和最小整数。 程序清单:#include viod main()Int a,b,c,d,e,max1,min1;Scanf(“%d%d%d%d%d”max1=max(a,b,c);max1=max(max1,d,e);min1=min(a,b,c);min1=min(min1,d,e);printf(“max=%d min=%d”,max1,min1);getch();程序编写注意事项:(2)编写程序,读取一个整数,判断并显示出这个整数是
14、奇数还是偶数。 (提示:使用求模运算符。偶数是 2 的倍数。任何 2 的倍数除以 2 时,余数均为零。 )程序清单:#include Viod main()long int a;Printf(“Enter a num:n”);Scanf(“%1d”,If(a%2=0)Printf(“An”);elseprintf(“Bn”);getch(); 程序编写注意事项:阿坝师专计科系 C 语言程序设计实验报告第 8 页 共 50 页(3)编写一个程序,从键盘中输入 3 个不同的整数,然后显示这 3 个整数的和、平均数、积、最小数和最大数。 (用 if 语句)屏幕中的对话内容如下所示:程序清单:#inc
15、lude viod main()int a,b,c,max1,min1;long int sum,product;float average;printf(“Enter three different integer:”);scanf(“%d%d%d”,sum=a+b+c;average=sum/3;product=a*b*c;max1=max(a,b,c);min1=min(a,b,c);printf(“sum is %1dn average is %fn product is %1dn smallest is %dn largest is %dn”,sum,average,pro,minl
16、,max1);getch();程序编写注意事项:教师评语:Input three different integers: 13 27 14Sum is 54Average is 18Product is 4914Smallest is 13Largest is 27阿坝师专计科系 C 语言程序设计实验报告第 9 页 共 50 页实验三 循环结构程序设计(一)实验时间: 2012, 11,01 实验地点: 公共机房 3 实验成绩: (验证性实验 2 学时)(一) 、实验目的1熟悉用 while 语句、do-wile 语句和 for 语句实现循环的方法2掌握在程序设计中用循环方法实现的算法(二)
17、、实验内容1写出下列程序的运行结果(1)#include void main()int count=1;while(countvoid main()阿坝师专计科系 C 语言程序设计实验报告第 10 页 共 50 页 int row=10,Column;while(row=1)Column=1;while(Column ”);Column+;row-;printf(“n”);运行结果为:偶数时显示void main() int y=9;for( ; y0 ; y-)if(y%3=0) printf(“%dn“ , -y);运行结果为:8阿坝师专计科系 C 语言程序设计实验报告第 11 页 共 5
18、0 页52 分析: y 能被三整除时,显示-y 2编写程序(1)利用循环语句来显示如下所示的数值表:程序清单如下:#include viod main()int n,n1,n2,n3;frintf(“NttN*10ttN*100ttN*1000n”);for (n=1;nviod main()long int num,l=0;int i;for(i=1;il) l=num;,largest); 阿坝师专计科系 C 语言程序设计实验报告第 12 页 共 50 页Printf(“the largest num is %1d”getch(); 程序编写注意事项:(3)请开发一个程序来输入每油箱的行程
19、里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是一个事例的输入/输出:程序清单:#include viod main()float gallons=0,miles,average100,sum=0,average;int i=0;while(gallons!=-1)printf(“Enter the gallons used:”);scanf(“%f”,if(gallons=-1)break;printf(“Enter the miles driver:”);scanf(“%f”,averrgei=miles/g
20、allons;Sum+=averagei;printf(“The MilesGallon for this tank was %fnn”,averagei);i+;阿坝师专计科系 C 语言程序设计实验报告第 13 页 共 50 页average=sum/i;printf(“the overall average miles/gallon was %f”,aveerrage);getch();程序编写注意事项:(4)编写一个程序读入一个 5 位数,并判断该整数是否是回文。 (回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。 )提示:使用除法运算符和求模运算符把该数分解成单位个
21、数。程序清单:#include viod main()long int a,b,a1,a2,a3,a4,a5;printf(“Enter a num:”);scanf(“%1d”,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%1d is A”,a);elseprintf(“n%1d is notA”,a);getch();程序编写注意事项:教师评语:阿坝师专计科系 C 语言程序设计实验报告第 14 页 共 50 页实
22、验四 循环结构程序设计(二)实验时间: 2012, 11.18 实验地点: 公共机房 3 实验成绩: (验证性实验 2 学时)(一) 、实验目的1熟练掌握循环语句。2较灵活地运用三种不同循环语句实现循环程序设计。3熟练掌握 break 语句、continue 语句及循环的嵌套使用。(二) 、实验内容1 写出下列程序的运行结果(1)#include void main() int 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;阿坝师专计科系 C 语言程序设
23、计实验报告第 15 页 共 50 页printf(“x=%d,y=%dn”,x,y);运行结果为:X=10,y=6 分析:X 的变化过程为:6,3,8,5,10,循环执行了五次,故 y=6 (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 ( “%dt“,i );填空: ivoid main() int m,i,k
24、;scanf(“%d”,for(i=2;i=m)printf(“%d 是一个素数n”,m);else printf(“%d 不是一个素数n”,m);运行结果为: 阿坝师专计科系 C 语言程序设计实验报告第 17 页 共 50 页分析: 3 编写程序(1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。程序清单:#include viod main()long int a100,min;int i,n;printf(“Enter a num:”);scanf(“%d”,for(i=0;iviod main()程序编写注意事项:教师评语:阿坝师专计科系 C 语言
25、程序设计实验报告第 19 页 共 50 页实验五 函数实验时间: 实验地点: 实验成绩: (验证性实验、综合性实验 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;运行结果为:分析: (2) #include fun(int a);void main() int a=
26、3;fun(a);printf(“%dn“,a);fun(int a) a=a+3;printf(“%d,“,a);阿坝师专计科系 C 语言程序设计实验报告第 20 页 共 50 页运行结果为: 分析: (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,float y);v
27、oid 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,j;for(
28、i=m;i=n;i-)ai+1=ai;阿坝师专计科系 C 语言程序设计实验报告第 25 页 共 50 页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);运行结果为: 分
29、析:两个函数的作用, 。2.程序填空(1)将 Fibonacci 数列前 15 项放入一个一维数组中(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;ivoid main()char a10= “abcdefg“,b =“abcdefg“;a3=0;b3=0; printf(“%d,%d“,sizeof(a),strlen(a);printf(“%d,%d“,sizeof(b),strlen(b);运行结果: 结果分析: (2)#include void main()char ch25=“6937“,“8254“;int i,j,s=0;for(i=0;i0j+=2)s=10*s+chij-0;printf(“%dn“,s);运行结果: 结果分析: (3)下列程序的输出结果是: