《C语言程序设计》实验指导书.docx
- 文档编号:10030394
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:19
- 大小:23.27KB
《C语言程序设计》实验指导书.docx
《《C语言程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》实验指导书.docx(19页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》实验指导书
《C语言程序设计》实验指导书
课程编号:
课程名称:
C语言程序设计•实验学时:
44
一、本实验课的性质、任务与tl的
本实验课目的是使学生掌握C语言编程的常用方法,熟悉该语言中的语法、词法规则,为以后进行软件开发和学习后继专业课程打下基础。
通过学习能够运用c语言中的各个知识点编写能完成一定功能的程序。
训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,其重要程度决不亚于知识的传授。
把高级语言的学习与程序设计.上机实践紧密地结合起来,以提高学生能灵活运用新的知识分析问题和解决问题的能力。
二、本实验课所依据的课程基本理论
本实验课基于C语言的语法和词法规则、数据的表示及算法的处理,而语法及算法正是高级语言程序设计的主要研究对象。
《C语言程序设计》的主要任务是:
C语言是一种应用广泛结构化程序设计语言,本课程介绍c语言的基本概念.基本语法和编程方法,重点描述C语言的结构化的特征,并通过本课程的学习,使学生掌握一定的结构化程序设计的知识,以及用C语言编写程序的能力。
三、实验类型与要求
在做每个实验之前,让学生对本次实验相关的内容进行预习、算法设计、流程图的设计、编写程序,做好实验的准备工作;写出预习报告,画出流程图,要求独立完成。
说明:
1>实验类型:
设计性;
2、实验要求:
必做。
四、每组人数与实验学时数
每组1人,实验学时数44学时。
五、考核方式与评分办法
实验总成绩二出勤情况"0%+实验报告*20%+平时*30%+实验表现*40%
六、本实验课配套教材或实验指导书
谭浩强.C程序设计.北京:
清华大学出版社,2006年3月第3版
谭浩强.C程序设计题解与上机指导.北京:
清华大学出版社,2006年3月第3版
谭浩强.C程序设计试题汇编.北京:
清华大学出版社,2006年3月第2版
夏宽理.C语言程序设计.北京:
中国铁道出版社,2006年2月第1版
夏宽理.C语言程序设计上机指导与习题解答.北京:
中国铁道出版社,2006年2月第1版
王士元・C高级实用程序设计.北京:
清华大学出版社,1996年1月第1版
七、实验报告要求
在机器上交作业,每次实验成绩分为优、良、及格、不及格,未参加的为0分。
要求认真书写实验报告。
实验报告编写要求:
1.实验题目
2.实验要求
3.程序流程图
4.调试过程(实验过程出现的问题、解决的方法)
5.程序代码及运行结果。
八、实验内容
实验一:
C语言运行环境的认识与简单的c程序
【目的与要求】
1>了解TC环境下C语言的运行环境,熟悉编译系统的操作环境。
2、了解在该系统上如何编辑、编译、连接和运行一个C程序。
3、通过运行简单的C程序,初步了解C源程序的特点。
4、掌握和理解C程序中最基本的C语句。
【实验内容】
1、题目:
由键盘输入两个整数,计算并输出两个数之和。
2、程序如下:
#include"stdio.h"
voidmain()
{inta,b,sum;
printff^Pleaseinputtwointegernumbers:
*");
scanf(//%d%d/;&a/&b);
sum=a+b;
printf(//%d+%d=%d/\a/b/sum);
}
3、具体操作:
(1)输入程序,然后进行编译连接。
若在编译中有词法或语法错误,则根据提示进行修改,再进行调试,直到没有语法错误。
(2)运行程序,依下列不同的方式输入数据,査看程序执行结果。
112.34/
212/
34/
312
【实验分析与讨论】
总结C程序的基本结构和书写规则。
2、分析调试过程中常见的错误提示和解决策略。
实验二:
C语言程序的单步调试
实验三:
选择结构的程序设计
【目的与要求】
1、了解三种基本数据类型的定义。
2、掌握各种不同运算符及其对应的表达式的使用。
3、熟练掌握if语句和switch语句的使用
【实验内容】
一、判断方程ax2+bx+c=0有几个解,若有,则输出其解。
1、算法分析:
对于方程ax2+bx+c=0的解,存在以下情况:
①a=0,不是一元二次方程;②b2-4ac=0,有两个相等的实根;③bMaOO,^两个不等的实根;④bMac<0,<两个共轨复根。
⑴定义变量:
a,b,c,xl,x2,d
(2)输入a,b,c
(3)if(a==0)不是一元二次方程elsed=b2-4ac
根据d的取值,输出方程根的情况:
if(b2-4ac==0)xl=x2=-b/(2*a)
elseif(b2-4ac>0)xl=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)
elsexl=(-b+sqrt(-d)i)/(2*a)x2=(-b-sqrt(-d)i)/(2*a)
2、程序代码:
#include"stdio.h"
#include"math.h"
voidmain()
{floataQcpc:
L,x2,d;
prints请输入ax4bx+c=0方程三系数值:
");
scanf(z/%f%f%f;&巧&b,&c);
if(abs(a)<=le-6)〃a==0
printf(-该方程非一元二次方程・\『):
else
{d=sqr(b)-4*a*c;
if(abs(d)<=le-6)//sqr(b)-4*a*c==0
printf(“该方程的两个相等实根为:
xl/x2=%4.2f;-b/(2*a));
elseif(abs(d)>le-6)
{xl=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf(“该方程的两个不等实根为:
x空%4・2f,x2=%4・2f”川应);}else//sqr(b)-4*a*c<0
printfC该方程的两个复数根为:
xl=%4.2f+%4.2fi/x2=%4.2f-%4.2fiw#・b/(2F,sqrt(・d)/(2"),・b/(2F,sqrt(・d)/(2"));
}
}
二、简单的菜单程序设计。
假设要求设计一菜单如下:
主菜单
1汉字
2——拼音
3——英文
1、算法分析:
(1)根据要求使用输出语句将上述菜单输出,提示按要求选择。
(2)运用if语句或switch语句,编写分支结构。
2、程序代码:
#include"stdio.h"
voidmain()
{inti;
printf(//\n\n\n========主菜单========\n");
printf(“仲国门
printf(“1••―汉字\「);
printf(-2一・・拼音\「);
printf(-3……英文\「);
printf(“请选择:
”);
scanf(“%d",&i);
switch(i)
{casel:
printf("中国\n");break;
case2:
printf(“China\n");break;
case3:
printf(/zZhongguo\n");break;
【课后练习】
1.判断一年份是不是闰年。
2、从键盘上输入1・7之间的数字,输出表示一个星期中对应某一天的英文单词。
【实验分析与讨论】
1、总结分支选择结构的设计方法与技巧。
2、掌握简单菜单的设计。
实验四:
循环结构的程序设计
【目的与要求】
1、掌握三种循环语句在编程中的使用。
2、理解break语句和continue语句在循环结构中的不同作用。
3、了解循环的嵌套,学会穷举算法与迭代算法。
【实验内容】
一、输入两个正整数,求出它们的最大公约数与最小公倍数。
1、算法分析:
[辗转相除法]对于两个数m和n,将大数放在m中,小数放在n中,用n去除m,若余数为0,则n为最大公约数,否则将n作为m,余数作为n,再用n去除m,直到余数为0,则n为最大公约数。
2、程序代码:
#include"stdio.h"
#include"math.h"
voidmain()
{intm^^max^in;
printf(“请输入两个正整数:
”);
scanf("%d%d",&m,&n);min=m*n;
if(m while(n! =0) {t=m%n;m=n;n=t;} printf("最大公约数为: %d\nM/m); printf("最小公倍数为: %d\n,\min/m); } 二、将一张100元钱,换成10元,20元,50元零钱,问有多少种不同的换法(假设三种零钱每种都可不出现)。 1、算法分析 运用穷举算法实现: 考虑到三种零钱各种可以不出现,则各自的张数范围如下: 10元0张到10张 20元0张到5张 507U0张到2张 并且要考虎到共数只有一张100元票子。 2、程序代码: #include"stdio.h" voidmain() {intTencount,Twecount,Fifcount,i=0; for(Tencount=0;Tencount<=10;Tencount++)for(Twecount=0;Twecount<=5;Twecount++) for(Fifcount=0;Fifcount<=2;Fifcount++) if(Tencount*10+Twecount*20+Fifcount*50==100) printf(”第%d种换法为: 10元%d张20元%d张50元%d张\n”,H^+^Tencoun^Twecoun^Fifcount); } 【课后练习】* 1、求1一100之间,能被5整除的数之和。 *** 2、判断任一个数是否是质数。 ***** 3、输出一有规则的图形,如右图。 *** ♦ 【实验分析与讨论】 1、分析总结for语句,while语句,do-while语句的用法。 2、巧用break语句和continue语句。 实验五: 数组及其应用 【目的与要求】 1、掌握一维数组与二维数组的使用。 2、掌握字符数组与字符串的区别与使用。 3、熟练掌握与数组有关的算法(选择排序与冒泡排序、査找与插入)。 【实验内容】 一、输入一个整数,将其插入一含有9个数的有序序列中,确保插入后其仍然有序,。 1、算法分析: ①将待插入的数与序列中的每个数进行比较,找到其插入的具体位置i; ②将从第i个数组元素开始,一直到原数组中的最后一个元素,整体往后移,空出一空间来存储待插入的整数。 2、程序代码: #include"stdio.h" voidmain() {inta[10]={2/5J/ll/14/19/21/33/67}Ak/m; printf(“原数组为: ”); for(i=0;i<9;i++)printf("%4d〃,a[i]); printf(An请输入待插入的整数: ”); scanf("%d〃,&m); for(i=0;i<9;i++) if(m<=a[i])break;//査找待插入的位置 for(k=9;k>=i;k-) a[k]=a[k.l];〃移位,准备插入新的整数 a[i]=m;printf(“新数组为: ”); for(i=0;i<10;i++)printf("%4d",a[i]); } 二、编程实现: 将字符串str2连接到字符串strl后,构成新的字符串strl。 1、算法分析: 本程序即实现字符串处理函数strcat()的功能。 两字符串strl和str2进行连接,要注意的是字符串的结束标志。 2、程序代码: #include''stdio.h" #include"string.h" voidmain() {charstrl[40],str2[20],iJ,lenl,len2; printf(”请输入字符串strl: “);gets(strl); lenl=strlen(strl); printf("请输入字符串str2: ");gets(str2); Ien2=strlen(str2); for(i=lenlj=0;j strl[i]=str2[j];strl[i]='\0'; printfC噺的字符串strl为: ”);puts(strl); } 【课后练习】 1、判断一方阵是不是对称矩阵。 2、实现两个字符串拷贝的功能。 3、运行折半查找法,在一个有序序列中査找某一特定的数。 【实验分析与讨论】 1、分析两种基本排序算法的核心与两者的不同之处。 2、在实现字符串处理函数时的一些注意事宜及其实现方法。 3、讨论二维数组解决矩阵与行列式。 实验六: 函数及其应用 【目的与要求】 1、掌握C中函数的定义、调用及设计。 2、掌握函数嵌套调用、递归调用的设计。 3、掌握变量、函数的作用域及存储类。 【实验内容】 一、设计一个子函数对n个整数进行排序,由主函数从键盘接收若干个数,调用子函数进行排序,并在主函数中进行输出显示。 1、算法分析: 1子函数的设计以两个参数来实现,一个是接收主函数传来的数组首地址,另一个 是持排序的整数个数,如fun(inta[],intn); 2主函数的实现定义一整型数组,从键盘上接收若干个整数,调用子函数f",再 将最后的结果输出。 2、程序代码: #include''stdio.h" voidfun(inta[],intn)//选择排序算法 {int for(i=0;i for(j=i+l;j if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} } voidmain() {inta[10],i; for(i=0;i<10;i++)scanf("%cT: &a[i]); printf(”输入的数值序列为: ”); for(i=0;i<10;i++)printf(”%4cT,a[i]); printf(,,\n,');fun(a,10); printf(”输入的数值序列为: “); for(i=0;i<10;i++)printf("%4d,,/a[i]); } 二、输入任意两数m,n的值,输出下列表达式的值。 S= 1、算法分析 ①编写一函数fac(n),返回n! 的值。 ②编写主函数,从键盘输入m,n的值,调用上述阳c()函数,计算表达式的 值,并将其输出。 2、程序代码 #include"stdio.h" longfac(intn) {if(n==l)return1; elsereturnn*fac(n-l); } voidmain() {intfloats; printff^pleaseinput2integernumbers/'); scanf(//%d%d,\&m/&n); if(m printf(/ } 【课后练习】 1、若正整数A恰好出现在其平方数的右侧,则称A为一个同构数。 如: 5,6,76。 求100以内的所有同构数。 要求: (1)编写一子函数intfun(intn),判断给定正整数n是不是同构数,若是,返回1,否则,返回0。 (2)编写主函数,调用函数fun(),寻找并输出100以内的所有同构数。 (3)在输出同构数的同时,要输出其平方的值。 2、运用递归,求任一个字符串的长度。 【实验分析与讨论】 1、被调函数的实现及调用过程。 2、简单递归问题的实现。 实验七: 指针及其应用 【目的与要求】 1、了解指针的定义与应用。 2、掌握使用指针变量的程序设计。 3、了解使用函数指针的程序设计。 4、了解使用指针数组的程序设计。 【实现内容】 一、设计一程序,将两个变量的值进行交换。 1、算法分析: (1)编写一个函数swap(int*P/int*q),交换两个参数指针所指的数据。 (2)编写主函数,调用函数swap,将两个变量的值进行交换。 2、程序代码: #include"stdio.h" voidswap(int*pjnt*q); voidmain() {inta,b; printf(“请输入两个整数: ”); scanf(//%d%d/;&a/&b); printf(“两个数交换前顺序为: a=%d,b=%d”,a,b); swap(&a,&b); printf("两个数交换后顺序为: a=%d/b=%dw風b); voidswap(int*pjnt*q) {intt; t=*p;*p=*q;*q=t;} 二、编程实现: 运用指针将字符串str2连接到字符串strl后,构成新的字符串strl。 1、算法分析: 本程序即实现字符串处理函数strcat()的功能。 两字符串strl和str2进行连接,要注意的是字符串的结束标志,并运用指向字符串的指针来实现。 2、程序代码: #include"stdio.h" #include"string.h” voidmain() {charstrl[20]/str2[10]/*p=strl/*q=str2JJenlJenZ; printf(”请输入字符串strl: ");gets(strl); lenl=strlen(strl);p=p+lenl-l; printf("请输入字符串str2: ");gets(str2); Ien2=strlen(str2); for(j=0;j *(++p)=*(q++);strl[lenl+len2]=,\0,; printf「新的字符串strl为: ”);puts(strl); 【课后练习】 1、运用指向数组的指针,求一数组中所有元素之和。 2、 【实验分析与讨论】 实验八: 结构体及其应用 【目的与要求】 1、了解结构体类型的定义。 2、掌握结构体类型变量的使用。 【实验内容】 有10个学生,每个学生包括学号、姓名、三门课的成绩,从键盘输入10个学生数据,要求输出三门课中每一门课的平均成绩,以及最高分学生的数据。 1、算法分析: 定义一个结构体类型,其中含有学号、姓名、三门课的成绩、总分数据;先后根据要求解决上述问题。 2、程序代码: #include"stdio.h" typedefstructstu {intnumber; charname[4]; floatIenl,len2,len3; floatscore;}student; voidmain() {studentstu[10]; inti/lag; floatave[3bsum[3]={0O0},max=0; printf("请输入10位同学的所有信息: ”); for(i=0;i<10;i++) {scanf(,,%d%s%f%f%f,/&stu[i].number,stu[i].name, &stu[i]・lenl>p&stu[i].len2,&stu[i].len3); stu[i].score=stu[i].lenl+stu[i].len2+stu[i].len3; if(stu[i].score>=max){max=stu[i].score;flag=i;} sum[0]+=stu[i].lenl;sum[l]+=stu[i].len2;sum[2]+=stu[i].len3; } for(i=0;i<3;i++) ave[i]=s呃[i]/3;printf(”三门课的平均成绩分别为“); for(i=0;i<3;i++) printf(”%6・2化ave[i]); printf(H\n最高分是: %d%s%6.2f%6.2f%6・2化 stufflag].numbe^stulflagl.name^ufflag].lenl, stu[flag].len2,stu[flag].len3); } 【实验分析与讨论】 13个人围成一圈,从第1个人开始顺序报号1、2、3。 凡报到“3”者退出圈子,找 出最后留在圈子中的人原来的序号。 实验九: 链表的处理 【目的与要求】 1、了解键表的相关概念。 2、掌握单向键表的创建、编历、插入、删除等简单处理。 【内容】 创建一个链表。 #include"stdio.h" #include"stdlib.h" typedefstructlist {intdata;structlist*next;}list; voidmain() {list*head/ptr; intnumj; ptr=(list*)malloc(sizeof(list));head=ptr; printf(HRleaseinput5numbers: "); for(i=0;i<5;i++) {scanf("%cT;&num); ptr->data=num; ptr->next=(list*)malloc(sizeof(list)); if(i==4)ptr->next=NULL;elseptr=ptr->next; } ptr=head; printf("Thevalueis: "); while(ptr! =NULL) {printf(,,->%d,,/ptr->data);ptr=ptr->next;} getchar(); } 【实验分析与讨论】 实验十: 文件及其应用 【目的与要求】 1、了解运用于文件操作的库函数。 2、掌握对文件进行简单的处理。 【实验内容】 有5个学生,每个学生包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,计算每个人的平均成绩,并将原有数据及平均成绩存放于磁盘文件“stud.txt”中。 1、算法分析: 先将5个学生的相关信息从键盘上输入,并求出各自的平均成绩;再次以写方 式打开一个文件“stud.txt”,将5个学生的信息全存入文件中。 2、程序代码: #include"stdio.h" typedefstructstu {intnumber; charname[4]; floatlen[3],ave;}student; voidmain() {studentstu[5];FILE*fp; inti; printf(”请输入5位同学的所有信息: ”); for(i=0;i<5;i++) {scanf(,,%d%s,,/&stu[i].number/stu[i].name);stu[i].ave=O; for(intj=0;j<3;j++) {scanf("%F;&stu[i].len[j]);stu[i].ave+=stu[i].len[j];} stu[i].ave/=3;} fp=fopen(,,stud.txt,,/,w+,'); for(i=0;i<5;i++) fprintf(fp「%d%s%5.2f%5.2f%5.2f%5.2f,,/ stu[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 实验 指导书