1、C程序设计实验教学大纲一、适用范围大纲适用信息管理专业本科教学使用。二、课程名称C程序设计三、学时数与学分总学时:90总学分:4实验学时:28实验学分:1四、教学目的和基本要求目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解C语言的特点,熟练掌握C语言程序设计的基本方法和编程技巧。基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入
2、程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。五、实验项目与学时分配序号实验项目名称实验实验类型学时1C程序的运行环境和运行一个C程序的方法2验证性实验2数据类型、运算符和表达式3验证性实验3最简单的C程序设计3验证性实验4选择结构程序设计4设计性实验5循环控制4设计性实验6数组4设计性实验7函数4设计性实验8指针4设计性实验总计28注:带*的实验项目为选做实验项目六、教材、讲义及参考书C程序设计题解与上机指导谭浩强主编七、实验成绩评定办法清华大学出版社实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。实验成绩以等级形式给出,评定等级分优、良、中、
4、境和运行一个C程序的方法一、实验目的18学其1.了解VisualC+6.0编译系统的基本操作方法,学会独立使用该系统。2.了解在该系统上如何编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序,初步了解C源程序的特点。二、实验内容1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的?2.编写一个C程序,输出以下信息:*verygood!*3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。实验二数据类型、运算符和表达式一、实验目的1.掌握
5、C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+)和自减(-)运算符的使用。二、实验内容1.输入并运行以下程序:main()charc1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);在此基础上将第三行、第四行改为:c1=321;c2=353;再使之运行,分析其运行结果。将第二行改为:intc1,c2;再使之运行,分析其运行结果。
6、2.输入并运行以下程序:main()inti=8,j=10,m,n;m=+i;n=j+;printf(“%d,%d,%d,%dn”,i,j,m,n);分别作以下改动并运行:程序改为:main()inti=8,j=10;printf(“%d,%dn”,i+,j+);在的基础上,将printf语句改为:printf(“%d,%dn”,+i,+j);再将printf语句改为:printf(“%d,%d,%d,%dn”,i,j,i+,j+);程序改为:main()inti=8,j=10,m=0,n=0;m+=i+;n-=-j;printf(“i=%d,j=%d,
7、m=%d,n=%dn”,i,j,m,n);3.请将下列给出的两个程序段分别输入计算机后,分析其运行结果:main()intnum;num=32767;printf(“num=%dn”,+num);main()inta=-2;printf(“%d,%dn”,a,a-);实验三最简单的C程序设计一、实验目的1.掌握C语言中使用最多的一种语句赋值语句的使用。2.掌握数据的输入输出的方法,能正确使用各种格式转换符。二、实验内容1.上机输入以下程序:main()inta,b;floatc;scanf(“%d%d%f”,&a,&b,&c)
8、;printf(“a=%-4d,b=%4d,c=%f,c=%.2fn”,a,b,c,c);要使a=3,b=4,c=12.3456,在键盘上应如何输入?有几种方式?2.若将输入函数改为scanf(“%d,%d,%f”,&a,&b,&c);应该如何输入数据?3.上机输入以下程序:main()inta;floatb;charc;scanf(“%4d%5f%3c”,&a,&b,&c);printf(“a=%d,a=%o,a=%x,b=%8.3f,b=%4.0f,c=%cn”,a,a,a,b,b,c);要使a=77,b=
9、4.56,c=A,在键盘上应如何输入?4.输入两面整型变量a、b的值,输出下列算式以及运算结果。a+b、a-b、a*b、a/b、(float)a/b、a%b每个算式占一行。如a等于10,b等于6,a+b应输入为:10+6=165.编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。上机运行程序,比较用printf和putchar函数输出字符的特点。实验四选择结构程序设计一、实验目的1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”);2.学会正确使用逻辑运算符
10、和逻辑表达式;3.熟练掌握if语句和switch语句。二、实验内容先编程序,解以下问题,然后上机调试运行程序。1.有一个函数xx1y2x11x103x11x10用scanf函数输入x的值(分别为x<1、110、10三种情况),求y值。2.给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。要求分别用if语句和switch语句实现3.输入一个三位数,若此数是水仙花数输出“Y”,否则输出“N”,若输入值不是三位数输出“
11、dataerror”。提示:水仙花数是一个三位数,组成这个三位数的三个数字的立方和与这个三位数相等。如:153=13+53+33。判断是否是水仙花数需把构成三位数的三个数字分离出来并存入变量。实验五循环控制一、实验目的1.熟悉用while语句,do-while语句和for语句实现循环的方法。2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。二、实验内容编程序并上机调试运行。1.输入两个正整数,求其中最大公约数和最小公倍数。2.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。3.打印出以下图案:*4.编程求1!+2!+3!++20!。
12、5.编写程序输出乘法表实验六数组一、实验目的1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;2.掌握字符数组和字符串函数的使用。3.掌握与数组有关的算法(特别是排序算法)。二、实验内容编程序并上机调试运行。1.编写程序,用scanf函数输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。2.有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则输出“无此数”,并且可以实现连续查找。15个数用赋初值的方法在程序中给出,要找的数用scanf函数输入。3.将
13、以下二维数组中数按列的顺序存放到一个一维数组中。二维数组的内容是112233441122334411223344则一维数组中的内容是1111112222223333334444444.将两个字符串连接起来,不要用strcat函数。5.从键盘输入5个字符串,找出最长的字符串和最大的字符串。实验七函数一、实验目的1.掌握定义函数的方法;2.掌握函数实参与形参的对应关系,以及“值传递”的方式;3.掌握函数的嵌套调用和递归调用的方法;4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。二、实验内容编程序并上机调试运行之。1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信
14、息。2.两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。3.已知二阶Fibonacci数列:0若n=0Fib(n)=1若n=1Fib(n-1)+Fib(n-2)其他情况定义递归函数求Fib(n)。104.编写函数,求n!1实验八指针一、实验目的1.掌握指针的概念,会定义和使用指针变量;2.学会使用数组的指针和指向数组的指针变量;3.学会使用字符串的指针和指向字符串的指针变量;
15、4.学会使用指向函数的指针变量;5.了解指向指针的指针的概念及其使用方法。二、实验内容编程序并上机调试运行程序(都要求用指针处理)。1.定义函数voidfun(intx,int*max,int*min),找出数组x中的最大值和最小值,最大值和最小值通过形参指针max和min传回。2.编写一个函数comp(s1,s2)实现两个字符串的比较。如果s1=s2,则函数返回值为0;如果s1s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如s1<
17、行。1.有3个学生,每个学生的数据包括学号、三门课的成绩,要求用input函数实现从键盘输入学生数据,用average函数求每个人的平均分,用output函数打印学生数据及平均成绩。2.建立一个带有头结点的单链表,每个结点包括:学号、年龄,并输出链表中所有结点的数据。在链表中查找年龄最大的结点,并将链表中等于此年龄的结点删除(年龄最大的结点可能不止一个)。*3.将一个链表按逆序排列,即将链头当链尾,链尾当链头。4.上机输入如下程序:main()unionbtintk;charc2;a;a.k=-7;printf(“%o,%on”,a.c0,a.c1);分析其运行
18、结果。实验十位运算一、实验目的1.掌握按位运算的概念和方法,学会使用位运算符;2.学会通过位运算实现对某些位的操作。二、实验内容编写程序,上机调试并运行。1.编一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value,n1,n2)value为该16位数的值,n1为欲取出的起始位,n2为欲取出的的结束位。如:getbits(0101675,5,8)表示对八进制数101675,取出其从左面起的第5位到第8位。要求把这几位数用八进制数打印出来。注意,应当将这几位数右移到最右端,然后用八进制形式输出。2.利用位
19、运算操作,实现交换两个变量的值。3.将一个十六进制整数的各位循环左移4位,然后用十六进制形式输出。实验十一文件一、实验目的1.掌握文件以及缓冲文件系统、文件指针的概念;2.学会使用文件打开、关闭、读、写等文件操作函数。3.学会用缓冲文件系统对文件进行简单的操作。二、实验内容编写程序并上机调试运行。1.编程序求100以内的素数,分别将它输出到显示器屏幕和x.txt文件中,要求每行5个数。2.从键盘输入几本书的数据,每本书的数据包括条形码、书名和价格,将每项数据分别写入文本文件s.txt和二进制文件s.dat。*3.从上题的文本文件s.txt或二进制文件s.dat中读入每本书的
20、数据,计算所有书的平均价格。要求用input函数读入,average函数求平均价格。统计与信息学院C程序设计实验报告(一)学号:姓名:班级:成绩:实验名称:C程序的运行环境和运指导教师:实验日期:行一个C程序的方法实验地点:实验软件(主要仪器设备):VisualC+6.0实1.了解VisualC+6.0编译系统的基本操作方法,学会独立使用该系统。验2.了解在该系统上如何编辑、编译、连接和运行一个C程序。要3.通过运行简单的C程序,初步了解C源程序的特点。求实验:1、打开VisualC+6.0。printf("*n");2、
21、新建文件C+SourceFile,文件名.cprintf("Verygood!n");并更改位置后确定。printf("*n");3、编辑return0;#include"stdio.h"实intmain()验过printf("ThisisaCprogram.n");实验:程return0;#include"stdio.h"与intmain()步4、编译,无错误无警告后执行骤printf("ThisisaCprogram.n");retu
22、rn0;实验:#include"stdio.h"intmain()实验总结统计与信息学院C程序设计实验报告(二)学号:姓名:班级:成绩:实验名称:数据类型、运算符和表达式指导教师:实验日期:实验地点:实验软件(主要仪器设备):VisualC+6.0实1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,验了解以上类型数据输出时所用格式转换符。要2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+)和自减(-)运求算符的使用。实验2、编译,无错误、无警告后运行,结果如下:1、运行Visu
23、alC+6.0并新建工作区2、输入#include
24、:实printf(“%d,%dn”,+i,+j);验4、在步骤2的基础上将第三行、第四行改为:6、编译,无错误、无警告后运行,结果如下:过c1=321;c2=353;程5、编译,无错误、无警告后运行,结果提示:与aa.obj-0error(s),2warning(s)步6、在步骤2的基础上将第二行改为:骤intc1,c2;7、编译,无错误、无警告后运行,结果如下:7、在步骤3的基础上,将printf语句改为:printf(“%d,%d,%d,%dn”,i,j,i+,j+);8、编译,无错误、无警告后运行,结果如下:9、将步骤2程序
25、改为:#include
26、)inta=-2;intnum;printf("%d,%dn",a,a-);num=32767;printf("num=%dn",+num);4、编译,无错误、无警告后运行,结果如下:2、编译,无错误、无警告后运行,结果如下:实验总结统计与信息学院C程序设计实验报告(三)学号:姓名:班级:成绩:实验名称:最简单的C程序设计指导教师:实验日期:实验地点:实验软件(主要仪器设备):VisualC+6.0实验1.掌握C语言中使用最多的一种语句赋值语句的使用。要2.掌握数据的输入输出的方法,能正确使用各种格式转换符。求实验1、运行V
27、isualC+6.0并新建工作区2、输入#include
28、mp;b,&c);过5、编译,无错误、无警告后运行,结果如下:程与步骤实验1、输入#include
29、stdio.h>main()main()inta,b,c;inta,b,c;scanf("%d,%d",&a,&b);scanf("%d,%d",&a,&b);c=a/b;c=a+b;printf("%d/%d=%dn",a,b,c);printf("%d+%d=%dn",a,b,c);2、编译,无错误、无警告后运行,结果如下:2、编译,无错误、无警告后运行,结果如下:(2)a-b1、输入#include
30、t)a/b1、输入#include
31、clude
32、)getchar输出1、输入1、输入#include
33、四)学号:姓名:班级:成绩:实验名称:选择结构程序设计指导教师:张雄实验日期:实验地点:实验软件(主要仪器设备):VisualC+6.0实1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”);验2.学会正确使用逻辑运算符和逻辑表达式;要3.熟练掌握if语句和switch语句。求实验实验1、运行VisualC+6.0。(1)if语句2、输入1、输入#include
34、;%d",&x);scanf("%f",&x);if(x<1)if(x>=90)ch="A"y=x;elseif(x>=80)ch="B"elseif(x>=10)elseif(x>=70)ch="C"y=3*x-11;elseif(x>=60)ch="D"实elseelsech="E"y=2*x-1;printf("%cn",ch);验printf("x=%d,y=
35、%dn",x,y);过return0;2、编译,无错误、无警告后运行,结果如下:程与3、编译,无错误、无警告后运行,结果如下:步骤X<1时,1=
37、quot;,ch);printf("Yn",m);return0;return0;2、编译,无错误、无警告后运行,结果如下:elseprintf("Nn",m);return0;2、编译,无错误、无警告后运行,结果如下:实验总结统计与信息学院C程序设计实验报告(五)学号:姓名:班级:成绩:实验名称:循环控制指导教师:实验日期:实验地点:实验软件(主要仪器设备):VisualC+6.0实验1.熟悉用while语句,do-while语句和for语句实现循环的方法。要2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、
38、递推等)。求实验:输入两个正整数,求其中最大公约i=m;数和最小公倍数。while(1)(1)求最大公约数if(i%m=0&&i%n=0)break;i+;1、输入#include 39、reak;i-;验过printf("它们的最大公约数是:%dn",i);程return0;与步2、编译,无错误、无警告后执行,结果如下:骤(2)求最小公倍数1、输入#include 40、"%d*%d=%-3d",j,i,i*j);printf("n");system("pause");2、编译,无错误、无警告后运行,结果如下:实验:输入一行字符,分别统计出其中的for(j=1;j<=2*i+1;j+)英文字母、空格、数字和其它字符的个数。printf("*");1、输入printf("n");#include 43、=20;n+)实验:打印出以下图案:7行7列菱形m=n*m;1、输入sum=sum+m;#include 44、lC+6.0实1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;验2.掌握字符数组和字符串函数的使用。要3.掌握与数组有关的算法(特别是排序算法)。求实验:编写程序,用scanf函数输入10个整数t=ni;的数列,先将整数按照从大到小的顺序进行排序,ni=ni-1;然后输入一个整数插入到数列中,使数列保持从ni-1=t;大到小的顺序。1、输入for(i=0;i<=N-1;i+)#include 45、,intn);inti,j,k;2、编译,无错误、无警告后运行,运行结果如下:intn11;for(i=0;i<10;i+)scanf("%d",&ni);Rank(10,n);实scanf("%d",&k);验if(k>n9)实验:将两个字符串连接起来,不要用strcat函过n10=k;数。程else1、输入与for(i=0;ni<=k;i+);#defineM50步for(j=9;j>=i;j-)#defineN20骤nj+1=nj;main()ni=k;charaM,bN;inti,j;