《C语言实验指导书全教程.docx》由会员分享,可在线阅读,更多相关《C语言实验指导书全教程.docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一局部:C 语言程序设计试验教学大纲一、本试验课的性质、任务与目的本试验课目的是使学生把握C 语言编程的常用方法,以任务驱动教学法,重点培育学生的编程力气,为以后学习后继专业课程和进展软件开发打下根底。通过学习能够运用 C 语言中的各个学问点编写能完成确定功能的程序。训练学生进展简洁程序设计的技能和培育良好程序设计的习惯,试验教学是培 养应用型人才的重要环节,其重要程度决不亚于学问的传授。把高级语言的学习与程序设计、上机实践 严密地结合起来,以提高学生能灵敏运用的学问分析问题和解决问题的力气。二、本试验课所依据的课程根本理论本试验课基于C 语言的语法和词法规章、数据的表示及算法的处理,而语法
2、及算法正是高级语言程序设计的主要争论对象。C 语言程序设计的主要任务是:C 语言是一种应用广泛构造化程序设计语言,本课程介绍C 语言的根本概念、根本语法和编程方法,重点描述C 语言的构造化的特征,并通过本课程的学习,使学生把握确定的构造化程序设计的学问,以及用C 语言编写程序的力气。三、试验类型与要求每在做每个试验之前,让学生对本次试验相关的内容进展预习、算法设计、流程图的设计、编写程序, 做好试验的预备工作;写出预习报告,画出流程图,要求独立完成。序号实名验称内提容要组人试验时数试验要求试验类别备注数1生疏 C 语言运行环境简洁的 C 程序编译、运行12必做验证性2挨次构造程序设计含输入输出
3、语句的简洁程序14必做验证性3选择构造程序设计ifswitch 语句运用14必做验证性4循环构造程序设计whiledo-whilefor 语句的运用16必做验证性5数组的定义及其应用一维、二维、字符数组的定义与运用14必做验证性6函数的定义及其应用函数的定义、调用与使用14必做验证性7构造体的定义及其应用构造体类型及其变量、构造体数组14必做验证性8指针的定义及其应用指针变量的定义及多方面的应用12必做验证性9文件的应用磁盘文件的操作12必做验证性10综合性试验软件系统小程序18必做综合性四、每组人数与试验学时数每组 1 人,试验共 40 学时五、考核方式与评分方法试验总成绩=出勤状况*10%
4、+试验报告*20%+寻常*30%+试验内容*40%2六、本试验课配套教材或试验指导书教材:苏小红主编.C 语言大学有用教程,电子工业出版社,十一五国家级规划教材,2023 .7参考书:1何钦铭,颜晖主编.C 语言程序设计,高等教育出版社,十一五规划教材,2023 .1 2颜晖主编.C 语言程序设计试验指导,高等教育出版社,2023.13 张引,何钦铭等. C 程序设计根底课程设计,浙江大学出版社,2023.94 谭浩强. C 程序设计题解与上机指导.北京:清华大学出版社.2023 年 3 月第 3 版5谭浩强. C 程序设计试题汇编.北京:清华大学出版社.2023 年 3 月第 2 版6 夏宽
5、理. C 语言程序设计.北京:中国铁道出版社.2023 年 2 月第 1 版7 夏宽理. C 语言程序设计上机指导与习题解答.北京:中国铁道出版社.2023.2 8王士元. C 高级有用程序设计.北京:清华大学出版社.1996 年 1 月第 1 版 9谭浩强. C 程序设计.北京:清华大学出版社.2023 年 3 月第 3 版七、试验报告要求上机试验目的在于:通过验证课本中的内容及自己编写的程序,加深对课本中词法、语法的掌 握;生疏所用的C 语言开发环境;上机调试自己的程序,学会编程,重要是能上机调试通过,调试阅历是通过自己的直接实践来累积。上机试验的要求:课前预备好上机所要的程序源代码;上机
6、输入和调试自己的程序,努力独立完成调试过程,自行解决编译错误;试验完毕,认真编写试验报告在机器上运行程序代码,每次试验成绩分为优、良、及格、不及格,未参与的为0 分。要求认真编写试验报告。报告内容应包含以下内容:1. 试验题目2. 试验目的和要求3. 解题思路4. 调试过程试验过程消灭的问题及解决的方法或尚未解决的问题5. 程序代码及运行结果6. 试验结果分析7. 教师评语其次局部:C 语言程序设计的运行环境 VC+6.0-VC+ 6.0 集成开发环境的使用在众多的面对对象程序设计语言中,Microsoft 公司的VC+6.0 独树一帜,是一个集程序编辑、编译、连接和调试于一体的C 语言程序开
7、发环境。在Windows 环境下,操作便利。VC 环境中运行 C 语言源程序的步骤1、启动Visual C+6.0 开发环境2、创立一个工程1在Visual C+6.0 开发环境主窗口,单击File 菜单中的New 选项,显示一个New 对话框, 如下:(2) 单击 Projects,选择 Win32 Console Applocation,并在右侧相应的文本框中填入工程的路径和名称(3) 在弹出的Win32 Console Applocation-Step 1 of 1 对话框中选择An empty project 单项选择项,然后单击 Finish.(4)最终在New Project In
8、formation 对话框中单击OK。3、建立C 源程序文件(1) 选择菜单命令Project | Add to Project | New,弹出 New 对话框。3(2) 在New 对话框的Files 中选择C+ Source File ,并写入文件名,单击OK 4、编辑C 语言源程序(1) 在文件编辑窗口中输入源代码(2) 选择File | Save,保存程序5、建立并运行可执行程序(1) 选择菜单命令Build | Build Filename.ext 建立可执行文件(2) 选择菜单命令Build | Execute Filename.exe 运行程序,观看显示的内容6、关闭工作空间选择
9、菜单命令File | Close Workspace关闭工作空间。例:从键盘上输入两个整数,输出两者中的较大数。1、建一CPP 文件后,在编辑窗口输入源代码如下:2、编译、连接后,从键盘上输入12,34 ,则可查看程序运行结果:10第三局部:试验内容试验一:生疏 VC+6.0 运行环境【目的与要求】1、了解 VC 环境下 C 语言的运行环境,生疏编译系统的操作环境。2、了解在该系统上如何编辑和运行一个 C 程序。3、通过运行简洁的 C 程序,初步了解运行 C 语言程序的操作过程。【试验内容】1、题目:由键盘输入两个整数,计算并输出两个数之和。2、程序代码:#include “stdio.h”v
10、oid mainint a,b,sum;printf(“Please input two integer numbers:n”); scanf(“%d%d”,&a,&b);sum=a+b; printf(“%d+%d=%d”,a,b,sum);3、具体操作:(1) 输入程序,按 Ctrl+F9。假设在运行后有词法或语法错误,则依据提示进展修改, 再进展调试,直到没有语法错误。(2) 运行后,依以下不同的方式输入数据,查看程序执行结果。 1234 12 34 1234 【试验分析与争论】1、总结 C 程序的根本构造和书写规章。2、分析调试过程中常见的错误提示和解决策略。3、把握调试过程中问题解决
11、的方法和思路【DIY】一、改错:实现求三个数的平均值。#include void mainfloat a,b,c,sum; floataverage; a=10;b=20;c=35;average=sum/3;printf(“the average is %4d”,average);二、填空:实现从键盘中读取两个浮点型数据,相乘之后输出结果,要求结果须保存 4 位小数。#include“stdio.h” void main 1a,b,c;printf(“please enter two numbers”); scanf(“%f%f”,&a,&b);c=2;printf(“c=3”,c);三、编
12、程1、编写程序,实现对两个整数进展求和。2、编写程序,在屏幕上显示如以以下图案。* * * * * *3、菜单制作。请在屏幕上显示以下菜单信息。=Main Menu=1-Input2-Calculate3-Display Result试验二:挨次构造程序设计【目的与要求】1、把握三种根本数据类型int、float、char变量的定义。2、把握算术运算符、赋值运算符及其表达式的应用。3、把握 C 语言中的语句及挨次构造程序设计【试验内容】一、求出含有两个实根b2-4ac=0的一元二次方程 ax2+bx+c=0 的解。1、程序分析:(1) 定义变量:a,b,c,x1,x2,delta (2)输入
13、a,b,c(3)计算 delta= b2-4ac(设 delta=0) x1=(-b+sqrt(delta)/(2*a)x2=(-b-sqrt(delta)/(2*a) 2、程序代码:#include “stdio.h” #include “math.h” void mainfloat a,b,c,x1,x2; floatdelta;printf(“Please input the three coef.:n”); scanf(“%f%f%f”,&a,&b,&c);delta=b*b-4*a*c;x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a)
14、;printf(“The roots are:nx1=%4.2f,x2=%4.2f”,x1,x2);3、具体操作:(1) 输入程序,按Ctrl+F9。假设在运行后有词法或语法错误,则依据提示进展修改,再进展调试,直到没有语法错误。(2) 运行后,依据提示输入方程的三个系数值,键入回车,查看程序执行结果。注:输入浮点型系数方法同试验一。二、输出特别图案,请在 c 环境中运行,看一看,Very Beautiful! 1、程序分析:字符共有 256 个。不同字符,图形不一样。2、程序代码:#include “stdio.h“ void main( ) char a=176,b=219; printf
15、(“%c%c%c%c%cn“,b,a,a,a,b);printf(“%c%c%c%c%cn“,a,b,a,b,a);printf(“%c%c%c%c%cn“,a,a,b,a,a);printf(“%c%c%c%c%cn“,a,b,a,b,a);printf(“%c%c%c%c%cn“,b,a,a,a,b);/*运行程序,观看结果*/【试验分析与争论】1、总结 C 程序的挨次构造程序的编写及调试方法。2、分析调试过程中常见的错误提示和解决策略。【DIY】一、改错#include void mainint a,b,ab,ac,c;,printf(“pleasse enter 3 numbers:”
16、) scanf(“%d,%d,%f”;&a,&b,&c); ab=a+b;ac=a*c; printf(“a+b+c=%dn”,&ab+c); printf(“a*b*c=%dn”,&ac*b);二、请写出下面程序的运行结果#include “stdio.h“ void mainint a=10; long int b=10;float c=10.0;double d=10.0; printf(“%dn%ldn%fn%lfn“,a,b,c,d); printf(“%dn%ldn%fn%lfn“,b,a,d,c); printf(“%dn%fn%lf“,c,c,c);三、编程1、定义两个 flo
17、at 类型数据,求和并将结果分别以“sum=?”和”?+?=?”形式输出。如:floata=3.4,b=9.0;结果显示: (1)sum=12.40(2)3.4+9.0=12.402、输入两个数 num1 和 num2,计算并输出它们的和、差、积、商与余数。3、计算银行存款的本息。输入存款金额 money、存期 year 和年利率 rate,依据公式计算存款到期时的本息合计 sum税前,输出时保存 2 位小数。公式:sum = money ( 1 + rate)year提示:幂函数 ax 用库函数pow(a,x)来计算。试验三:选择构造程序设计【目的与要求】1、了解分支构造的两条语句 if 和
18、 switch 语法。2、把握关系运算符和规律运算符的运用3、娴熟把握 if 语句和 switch 语句的应用【试验内容】一、给出以下分段函数的计算程序代码。依据输入的 x 的值,计算出 y 的值,并输出。(x+5)2+3x(x0)y=0(x=0) (x-5)2-3x(x0)y=(x+5)*(x+5)+3*x; elseif(x=0)y=0;elsey=(x-5)*(x-5)-3*x;printf(“x=%.2fy=%.2fn”,x,y);二、推断方程 ax2+bx+c=0 有几个解,假设有,则输出其解。1、程序分析:对于方程 ax2+bx+c=0 的解,存在以下状况:a=0,不是一元二次方程
19、;b2-4ac=0, 有两个相等的实根;b2-4ac0,有两个不等的实根;b2-4ac0)x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a);elsex1=(-b+sqrt(-delta)i)/(2*a);x2=(-b-sqrt(-delta)i)/(2*a);2、程序代码:#include “stdio.h” #include “math.h” void mainfloat a,b,c,x1,x2,d; float q,p;printf(“Please input the three coef.:n”); scanf(“%f%f%f”,&a,&
20、b,&c);if (a=0)printf(“Error!n”); elsedelta=b*b-4*a*c; if (delta=0)printf(“The two equal roots are:x1,x2=%4.2f”,-b/(2*a); else if(delta0)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(“The two actual roots are:x1=%4.2f,x2=%4.2f”,x1,x2);else/* sqr(b)-4*a*cb)&(ac)if(bc)printf(“min=%dn”,b); elseprintf
21、(“min=%dn”,c);if(ab)&(ac)printf(“min=%dn”,a);二、程序填空#include void mainint year,month,days; printf(“enter year and month:”); scanf(“%d%d”,&year,&month); switch(1) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break;case 4: case 6: case 9: case 11:days=30;break;case 2: if2 days=29;e
22、lsedays=3;4; default:printf(“inputerror!n”);days=0;if(5)printf(“%d,%d is %d days n”,year,month,days);三、编程1、(1)输入一个数,推断其是否为 5 的倍数。(2)输入一个数,推断它的奇偶性。(3)输入一个数,显示它确实定值。2、输入 2 个数3 个数,按从小到大的挨次显示到显示器。3、输入 5 个数,找出其中最大的数,并输出到显示器。4、出租车收费。某城市一般出租车收费标准如下:起步里程 3 公里,起步费用 10 元; 超起步里程后 10 公里内,每公里租费 2 元;超过 10 公里以上的局部
23、加 50%的回空补贴费,即每公里租费 3 元。营运过程中,因路阻及乘客要求临时停车的,每 5 分钟按1 公里租费计收。运价计费尾数四舍五入,保存到元。编写程序,输入行驶里程公里 与等待时间分钟,计算并输出乘客应支付的车费元。5、输入学生的百分制成绩 score,按以下定义输出等级。等级划分:A90100、B7089、C6069、D059试验四:循环构造程序设计【目的与要求】1、把握三种循环语句在编程中的使用。2、理解 break 语句和 continue 语句在循环构造中的不同作用。3、了解循环的嵌套调用过程。4、把握分支、循环嵌套在程序设计中的应用。【试验内容】一、求以下表达式的值。1/3+
24、3/5+5/7+n/(n+2)/n 为任意一个奇数1、程序分析:从上述表达式的形式看,当n 确定下来之后,我们就从1/3 开头,依据式子中给出的规律,始终累加到 n/(n+2)2、程序代码:#include “stdio.h”void mainfloat i,n,sum=0.0;printf(“Please input an odd:n”); scanf(“%f”,&n); for(i=1;i=n;i=i+2)sum=sum+i/(i+2); printf(“%.2f”,sum);二、输入两个正整数,求出它们的最大公约数与最小公倍数。1、算法分析:辗转相除法对于两个数m 和 n,用 n 去除
25、m,假设余数为 0,则 n 为最大公约数,否则将 n 作为 m,余数作为 n,再用 n 去除 m,直到余数为 0,则 n 为最大公约数。2、程序代码:#include “stdio.h” #include “math.h” void mainint m,n,t,max,min;printf(“Please input two integer numbers:n”); scanf(“%d%d”,&m,&n);min=m*n; while(n!=0) t=m%n;m=n;n=t;printf(“最大公约数为:%dn”,m); printf(“最小公倍数为:%dn”,min/m);三、将一张 100
26、 元钱,换成 10 元,20 元,50 元零钱,问有多少种不同的换法假设三种零钱每种都可不消灭。1、算法分析运用穷举算法实现:考虑到三种零钱各种可以不消灭,则各自的张数范围如下:10 元-0 张 到 10 张20 元-0 张 到 5 张50 元-0 张 到 2 张并且要考虑到共数只有一张 100 元票子。2、程序代码:#include “stdio.h“ void mainint Tencount,Twecount,Fifcount,i=0; for(Tencount=0;Tencount=10;Tencount+)for(Twecount=0;Twecount=5;Twecount+) fo
27、r(Fifcount=0;Fifcount=2;Fifcount+)if(Tencount*10+Twecount*20+Fifcount*50=100) printf(“ No-%d:10%d20%d50%dn“,+i,Tencount,Twecount,Fifcount);【试验分析与争论】1、分析总结 for 语句,while 语句,do-while 语句的用法。2、巧用 break 语句和 continue 语句。3、三种构造的程序嵌套设计。4、多完成小综合性试验。【DIY】一、改错#include “stdio.h”void mainintt,s,i,n;scanf(“%d”,&n)
28、; for(i=1;i=n;i+) t=1/I;s=s+t; printf(“s=%fn”,s);二、程序填空有以下程序:s=1.0;for(k=1;k=n;k+) s=s+1.0(k+1);printf(“%fn”,s);填空完成下述程序,使之与上述程序的功能完全一样。s=0.0; 1 k=0;dos=s+d; 2 d=1.0/(k*(k+1);while(3) printf(“%fn”,s);三、编程1、输出 2100 之间的全部质数两种方法。*2、求 1100 之间,能被 5 整除的数之和。* * *3、输出一有规章的图形,如右图。* * * * *4、求以下表达式的值:* * *(1)
29、1/2-2/3+3/5-+n/(n+1) n 为奇数* 1/2-2/3+3/5-n/(n+1) n 为偶数(2)a+aa+aaa+aaaa+如:a=3,n=4 则表达式为:3+33+333+3333(3)1!+2!+3!+4!+n!5、Fibonacci 数列的输出,Fibonacci 数列中的每项数据定义的规章如下:即:1123581321 请输出前 20 项数据,并每行显示 5个数。6、(1)输入一个整数,输出它的位数。如:输入 126,输出 3。(2) 输入一个整数long,从高位开头逐位分割并输出或反序输出。例如:输入 123456,逐位输出:1、2、3、4、5、6。(3) 请输出全部
30、三位数中的“水仙花数”,“水仙花数”为每位数字的立方和等于它的本身。如:13+53+33=153(4) 将一个正整数分解质因数。如:输入 90,输出 90=2*3*3*5。7、一个球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?试验五:数组的定义及其应用【目的与要求】1、把握一维数组与二维数组的定义。2、把握一维数组的应用排序、查找、插入和删除3、把握字符数组与字符串的区分与使用。4、把握运用数组含菜单编写小系统【试验内容】一、定义一个一维数组,可以存放 10 位同学的成绩,对成绩进展初始化,计算出总分和平均成绩
31、,并输出到显示器上。1、程序分析:定义一个长度为 10 的数组 s10,运行循环对其进展初始化输入,定义另变量 sum 和 ave 存放总分和平均分。2、程序代码: #include “stdio.h“ void mainfloat s10,sum=0,ave; int i=0;printf(“Please input 10 studentsscore:n”); while(i10)scanf(“%f”,&si); sum+=si;i+;ave=sum/10;printf(“sum=%.2fave=%.2fn”,sum,ave);二、输入一个整数,将其插入一含有 9 个数的有序序列中,确保插入
32、后其照旧有序,。1、算法分析:将待插入的数与序列中的每个数进展比较,找到其插入的具体位置 i;将从第 i 个数组元素开头,始终到原数组中的最终一个元素,整体往后移,空出一空间来存储待插入的整数。2、程序代码:#include “stdio.h“ void mainint a10=2,5,7,11,14,19,21,33,67;inti,k,m; printf(“Array :”); for(i=0;i9;i+)printf(“%4d”,ai); printf(“nPlease input the keyword:”); scanf(“%d”,&m);for(i=0;i9;i+)if (m=i;
33、k-)ak=ak-1;/移位,预备插入的整数ai=m;printf(“The new array:”); for(i=0;i10;i+)printf(“%4d”,ai);三、编程实现:将字符串 str2 连接到字符串 str1 后,构成的字符串 str1。1、算法分析:本程序即实现字符串处理函数 strcat的功能。两字符串str1 和 str2 进展连接, 要留意的是字符串的完毕标志。2、程序代码: #include “stdio.h“ #include “string.h“ void mainchar str140,str220; int i,j,len1,len2;printf(“Ent
34、er a string:n“); gets(str1); len1=strlen(str1);printf(“Enter the other string:n“); gets(str2);len2=strlen(str2); for(i=len1,j=0;jlen2;i+,j+)str1i=str2j;str1i=”0”; printf(“The new string:“); puts(str1);【试验分析与争论】1、分析两种根本排序算法的核心与两者的不同之处。2、对有序数组进展插入、删除、查找操作的实现。3、在实现字符串处理函数时的一些留意事宜及其实现方法。4、争论二维数组解决矩阵与行列式
35、。【DIY】一、改错:往一个递增的数列中插入一个数。#include “stdio.h“ void mainint a11,i=0,key,j;printf(“please enter ten numbersn“); for(i=0;i10;i+)scanf(“%d”,ai); printf(“please enter a numbern”); scanf(“%f”,&key); for(i=0;iai-1|keyi;j-) aj=aj-1;ai=key;for(i=0;i11;i+) printf(“%d”,&ai);二、程序填空:下面程序的功能是将字符串 s 中的每个字符按升序的规章插到数
36、组 a 中, 字符串 a 已排好序。#include void mainchara20=“cehiknqtw”; chars10=“fbla”;int i,k,j; for(k=0;sk!=0;k+)j=0;while(sk=ai&aj!=0) j+;for(1) 2; puts(3);三、编程1、输入 10 位同学的成绩,输出其中的最高分 maxscore 和最低分 minscore。2、(1)输入一行文字含空格,统计其中的大写字母、小写字母、空格、数字以及其他字符的个数。(2) 编程推断输入的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如:level.(3) 实现两个
37、字符串拷贝(strcopy(str1,str2)的功能。 3、运行折半查找法,在一个有序序列中查找某一特定的数。4、推断一个(33)方阵是不是对称矩阵。试验六:函数的定义及其应用【目的与要求】1、把握 C 中函数的定义、调用及设计。2、把握函数嵌套调用、递归调用的设计。3、把握变量、函数的作用域及存储类。【试验内容】一、设计一个子函数对n 个整数进展排序,由主函数从键盘接收假设干个数,调用子函数进展排序,并在主函数中进展输出显示。1、算法分析:子函数的设计以两个参数来实现,一个是接收主函数传来的数组首地址,另一个是持排序的整数个数,如 fun(int a,int n);主函数的实现定义一整型数
38、组,从键盘上接收假设干个整数,调用子函数 fun,再将最终的结果输出。2、程序代码: #include “stdio.h“void fun(int a,int n)/ 选择排序算法int i,j,t; for(i=0;in-1;i+)for(j=i+1;jaj)t=ai;ai=aj;aj=t;void main int a10,i; for(i=0;i10;i+)scanf(“%d“,&ai); printf(“输入的数值序列为:“); for(i=0;i10;i+)printf(“%4d“,ai); printf(“n“);fun(a,10);printf(“输入的数值序列为:“); for
39、(i=0;i10;i+)printf(“%4d“,ai);二、输入任意两数 m,n 的值,输出以下表达式的值。m!S=( mn )!n!1、算法分析 编写一函数 fac(n), 返回 n!的值。 编写主函数,从键盘输入m,n 的值,调用上述fac函数,计算表达式的值,并将其输出。2、程序代码#include “stdio.h”long fac(int n) if (n=1)return1; elsereturn n*fac(n-1);void mainint m,n,t; float s;printf(“please input 2 integer numbers:”); scanf(“%d%d”,&m,&n);if(mn)t=m;m=n;n=t;printf(“s=%f”,fac(