四川师范大学计算机科学学院《C语言程序设计》实验手册2012年2月1年级:2011级专业:电子商务班级:04班姓名:罗桂清学号:2009110438指导教师:廖雪花2《C语言程序设计》实验课程简介课程名称:C语言程序设计实验课程性质:专业必修课课程属性:专业必修课学时学分:学时32学分1开课实验室:软件实验室面向专业:网络工程、软件工程、计算机科学与技术一、课程的任务和基本要求C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。二、实验项目【实验一】最简单的C程序---顺序程序设计【实验二】逻辑运算和判断选取控制【实验三】循环结构程序设计(一)【实验四】循环结构程序设计(二)【实验五】函数【实验六】数组(一)【实验七】数组(二)【实验八】指针【实验九】结构体、共用体和文件【实验十】C程序综合性实验三、有关说明1、与其它课程和教学环节的联系:先修课程:计算机文化后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程2、教材和主要参考书目:(1)教材:《C程序设计习题解答与上机指导》,谭浩强吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目:《C语言程序设计》谭浩强主编,清华大学出版社,2003年。3三、实验内容实验一最简单的C程序---顺序程序设计(验证性实验2学时)(一)、实验目的1.熟悉win-tc程序运行环境2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法3.掌握C语言中使用最多的一种语句——赋值语句4.掌握数据的输入输出方法,能正确使用各种格式控制符(二)、实验内容1.写出下列程序的运行结果(1)#includestdio.hvoidmain(){printf(“*****************\n”);printf(“Thisisacprogram.\n”);printf(“****************\n”);}运行结果及分析:运行结果:*****************Thisisacprogram*****************分析:1.c程序中的#includestdio.h是指一个标准输入输出文件,它包含了标准输入输出函数。2.一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;3.这个程序中的prinft函数是用来显示输出的,这三条命令全都会显示输出。将程序中的\n去掉后,运行结果及分析:运行结果:************************Thisisaprogram***************************分析:1.一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;2.c程序支持一些特殊的反斜杠字符常量,这些常量常用于输出函数中,\n是指换行输出,所以将\n去掉后,printf中的三条语句就不会换行输出,只显示在一排。(2)#includestdio.hvoidmain(){inta=100,b=20,sum,sb;sum=a+b;4sb=a/b;printf(sum=%d,sb=%d,sum,sb);}运行结果及分析:运行结果:sum=120.sb=5分析:1.这是一个关于数的简单加法计算和除法计算并显示出结算结果的c程序;一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;2.用int将变量定义成了整型变量;3.在定义变量时就将a和b初始化了值用于后面计算;4.将a和b的和赋值到了sum中,将a和b的商赋值到了sb中,并显示输出;5.%d是指输出的时候是输出整数型(3)#includestdio.hvoidmain(){charc1,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);}运行结果及分析:运行结果:ab97,98c,d分析:1.一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;2.用char将c1和c2定义成字符变量,并给其赋值;所以;3.用printf(%c,%c\n,c1,c2)输出c1和c2所对应的字符,而97、98所对应的ASCII值是a和b4.用printf(%d,%d\n,c1,c2)输出所对应的值;5.printf(%c%c\n,c1+1,c2+2)是指将c1和c2中的值加上1和2后所对应的字符值输出。(4)#includestdio.hvoidmain(){inti=8,j=10,m,n;m=++i;n=j++;printf(%d,%d,%d,%d,i,j,m,n);}5运行结果及分析:运行结果:9,11,9,10分析:1.一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;2.用int将i,j,m,n定义成整型变量;3.m=++i是指将i加1后赋值给m和i,n=j++是指先将j的值赋给n,然后j=j+1;4.用printf(%d,%d,%d,%d,i,j,m,n)显示输出各变量所对应的值。再将本程序的第3行改为m=i++;n=++j;运行结果及分析:运行结果:9,11,8,11分析:1.一个c程序中必须只能有一个main函数,voidmain()是指子最后不给程序返回任何值;2.用int将i,j,m,n定义成整型变量;3.m=i++是指先将i的值赋给m,然后i=i+1的值;n=j++是指将j+1的值赋给j和m;4.用printf(%d,%d,%d,%d,i,j,m,n)显示输出各变量所对应的值。2.程序填空任意输入一个有五位数字的正整数x,分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1表示),请将程序补充完整。#includestdio.hmain(){intb1,b2,b3,b4,b5;longintx;Scanf(“%ld”,&x);b5=(x/10000)%10;b4=(x/1000)%10;b3=(x/100)%10;b2=(x/10)%10;b1=x%10;printf(“thenumberis%ld\n”,x);printf(“itsbitis:%d,%d,%d,%d,%d\n”,b5,b4,b3,b2,b1);}程序分析:1.由于此程序要输出一个五位数,所以应将变量的类型定义成longint,以免超出范围后导致乱码输出;2.scanf函数用于键盘输入,此命令将用户输入的值赋给x;3.将输入的五位数的每一位的值通过运算公式转换成数,并用prinft函数显示输出。3.程序改错(注意:题中的编号为行序号,并非程序本身)计算任意一个半径为r的圆的面积和周长(结果保留两位小数)(1)#includestdio.h6(2)main(){(3)floatr;p=3.14,c,area;(4)printf(“inputr:”);(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)改正后的语句全行:floatr,p=3.14,c,area;错误语句的行号:(5)改正后的语句全行:scanf(“%f”,&r);错误语句的行号:(6)改正后的语句全行:c=2*p*r;错误语句的行号:(7)改正后的语句全行:area=p*r*r;改错分析:1.在c程序中,一个语句中声明多个变量是需要用“,”隔开;2.用scnf函数时,变量前面必须加操作符&,指明该变量的地址;3.乘法表示要用*号表示;4.每一个执行语句结束后必须用分号“;”结束。7实验二逻辑运算和判断选取控制(验证性实验2学时)(一)、实验目的1.了解逻辑量在C语言中的表示方法2.学会使用逻辑运算符和逻辑表达式3.熟练掌握if语句和switch语句(二)、实验内容1.写出下列程序的运行结果(1)#includestdio.hvoidmain(){inta,b,x=10,y=9;a=(--x==y++)?--x:++y;b=y;printf(“%d,%d\n”,a,b);}运行结果及分析:运行结果:8,10分析:1.此程序是关于逻辑运算符、递增和递减运算符以及条件运算符的应用;2.voidmain()是指程序结束后不返回任何值;3.inta,b,x=10,y=9;是定义int类型的整数变量及给想x和y初始化值;4.a=(--x==y++)?--x:++y;是指当x-1的值等于y的值时x=x-1,否则x=++y,因为—x=9=y,所以条件成立,a的值就等于—x,而在前面的运算中x=9、y=10,因此—x=8;b=y=9;5.printf函数显示输出所运算出来的结果。(2)#includestdio.hvoidmain(){inta=2,b=-1,c=2;If(ab)if(b0)c=0;elsec+=1;elseprintf(“%d\n”,c);}运行结果及分析:运行结果:2分析:81.此程序时关于if函数和c+=1类型的复合函数语句的应用;2.当if条件成立时就执行if下面的语句,不成立时则直接执行else语句,此程序中的if(ab)不成立,所以直接执行elsec+=1;3.c+=1;是指c=c+1,(3)#includestdio.hvoidmain(){inta=0,b=0,c=0;if(++a0||++b0)++c;printf(“\na=%d,b=%d,c=%d”,a,b,c);}运行结果及分析:运行结果:a=1,b=0,c=1;分析:1.此程序是关于if函数和递增运算符的应用;2.inta=0,b=0,c=0;是定义整形变量并给其赋值;3.if(++a0||++b0)++c;是值当++a0和++b0同时满足时,执行后面的++才,因为前面条件满足,所以执行++c;因此a=1,c=1,而因为在逻辑条件成立时,值进行前面的运算,所以b还是等于0;4.Printf输出运算结果。(4)#includestdio.hvoidmain(){intx=-1;switch(x){default:printf(“a”);case1:printf(“b”);case2:printf(“c”);}}运行结果及分析:运行结果:abc分析:1.此程序是关于switch语句的应用,在C语言中它经常跟Case一起使用,是一个判断选择代码。其功能是控制业务流程流转的;2.voidmain()是指程序结束后不返回任何值;intx=-1,是指定义整形变量并给其赋值;93.在switch()开始时,从default处开始执行,输出a,在往下执行,不满足case1,输出b,再执行case2,也不满足,因此输出c。在case1:printf(“b”);后加上break;语句,结果如何?修改程序并上机调试。运行结果及分析:运行结果:ab分析:1.此程序是关于switch语句的应用,在C语言中它经常跟Case一起使用,是一个判断选择代码。其功能是控制业务流程流转的;2.voidmain()是指程序结束后不返回任何值;intx=-1,是指定义整形变量并给其赋值;3.在switch()开始时,从default处开始执行,输出a在往下执行,不满足case1出c.在遇到break时退出执行。2.程序填空输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“islarger”。如果这两个数相等,显示“T