《C语言程序设计》实验指导书模板_第1页
《C语言程序设计》实验指导书模板_第2页
《C语言程序设计》实验指导书模板_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计实验指导书课程编号:课程名称:C语言程序设计实验学时:44一、本实验课的性质、任务与目的本实验课目的是使学生掌握 C语言编程的常用方法,熟悉该语言中的语法、 词法规则,为以后进行软件开发和学习后继专业课程打下基础。通过学习能够运用C语言中的各个知识点编写能完成一定功能的程序。 训练学生进行复杂程序设 计的技能和培养良好程序设计的习惯, 其重要程度决不亚于知识的传授。 把高级 语言的学习与程序设计、上机实践紧密地结合起来,以提高学生能灵活运用新的 知识分析问题和解决问题的能力。、本实验课所依据的课程基本理论本实验课基于C语言的语法和词法规则、数据的表示及算法的处理,而 语法及算法正

2、是高级语言程序设计的主要研究对象。C语言程序设计的主要任务是:C语言是一种应用广泛结构化程序设计语言,本课程介绍C语言的基本概念、基本语法和编程方法,重点描述 C语言的结构化的特征,并通过本课 程的学习,使学生掌握一定的结构化程序设计的知识,以及用C语言编写程序的能力。三、实验类型与要求在做每个实验之前,让学生对本次实验相关的内容进行预习、算法设计、 流程图的设计、编写程序,做好实验的准备工作;写出预习报告,画出流程图, 要求独立完成。说明:1实验类型:设计性;2 、实验要求:必做。四、每组人数与实验学时数每组1人,实验学时数44学时。五、考核方式与评分办法实验总成绩=出勤情况*10%+实验报

3、告*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分。要求认真书写实验

4、报告。实验报告编写要求:1 实验题目2 实验要求3 程序流程图4 调试过程(实验过程出现的问题、解决的方法)5 程序代码及运行结果。八、实验内容实验一 :C语言运行环境的认识与简单的C程序【目的与要求】1、了解TC环境下C语言的运行环境,熟悉编译系统的操作环境。2、 了解在该系统上如何编辑、编译、连接和运行一个C程序。3、通过运行简单的 C程序,初步了解 C源程序的特点。4、掌握和理解 C程序中最基本的 C语句。【实验内容】1、题目:由键盘输入两个整数,计算并输出两个数之和。2、程序如下:#i nclude “ stdio.h ”void mai n()int a,b,sum;printf(

5、“ Please in put two in teger nu mbers:n”);scanf( “ d%d,&a,&b);sum=a+b;printf( “ %d+%d=%d ,a,b,sum);3、具体操作:(1) 输入程序,然后进行编译连接。若在编译中有词法或语法错误,则根据提示进行修改,再进行调试,直到没有语法错误。(2 )运行程序,依下列不同的方式输入数据,查看程序执行结果。 12_ 34/ 12 /34/ 12<Tab>34 /【实验分析与讨论】1、总结C程序的基本结构和书写规则。2、分析调试过程中常见的错误提示和解决策略。实验二:C语言程序的单步调试实

6、验三:选择结构的程序设计【目的与要求】1、了解三种基本数据类型的定义。2、掌握各种不同运算符及其对应的表达式的使用。3、熟练掌握if语句和switch语句的使用【实验内容】一、判断方程ax2+bx+c=0有几个解,若有,则输出其解。1、算法分析:对于方程ax2+bx+c=0的解,存在以下情况:a=0,不是一元二次方程; b2-4ac=0,有两个相等的实根;b2-4ac>0,有两个不等的实根;b2-4ac<0,有两个共轭复根。(1) 定义变量:a,b,c,x1,x2,d(2) 输入 a,b,c2(3) if(a=0)不是一元二次方程else d= b -4ac根据d的取值,输出方程根

7、的情况:2if(b -4ac=0) x仁 x2=-b/(2*a)2else if(b-4ac>0) x仁(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a)else x1= (-b+sqrt(-d)i)/(2*a) x2=(-b-sqrt(-d)i)/(2*a)2、程序代码:#i nclude“ stdio.h ”#include“ math.h ”void mai n()float a,b,c,x1,x2,d;printf("请输入ax2+bx+c=0方程三系数值:”);scanf( “ f%f%f' ,&a,&b,&c

8、);if (abs(a)<=1e-6)/a=0printf("该方程非一元二次方程.n ”);elsed=sqr(b)-4*a*c;if (abs(d)<=1e-6) / sqr(b)-4*a*c =0printf(“该方程的两个相等实根为:x1,x2=%4.2f ”,-b/(2*a);else if(abs(d)>1e-6)x1= (-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);,x1,x2);printf(“该方程的两个不等实根为:x仁4.2f,x2=%4.2felse / sqr(b)-4*a*c<0printf(“该方程的

9、两个复数根为:x仁 %4.2f+%4.2fi,x2=%4.2f-%4.2fi” ,-b/(2*a),sqrt(-d)/(2*a), -b/(2*a),sqrt(-d)/(2*a);、简单的菜单程序设计。假设要求设计一菜单如下:主菜单1 汉字2 拼音3英文1、算法分析:(1) 根据要求使用输出语句将上述菜单输出,提示按要求选择。(2) 运用if语句或switch语句,编写分支结构。2、程序代码:#i nclude “ stdio.hprintf(“ nnn=主菜单printf(“(中国)”)printf(“ 1 - 汉字»Xn );printf(“ 2 -拼音n );printf(“3

10、- 英文n”);printf(“请选择:”);scanf(“ %d,&i);switch(i)case 1:pri ntf(“中国n ”case 2:pri ntf(“Chi nanaZhong guonvoid mai n() int i;case 3:pri ntf(n );break;); );break;” );break;【课后练习】1、判断一年份是不是闰年。2、从键盘上输入1-7之间的数字,输出表示一个星期中对应某一天的英文单词。【实验分析与讨论】1、总结分支选择结构的设计方法与技巧。2、掌握简单菜单的设计。实验四:循环结构的程序设计【目的与要求】1掌握三种循环语句在编程中

11、的使用。2、理解break语句和continue 语句在循环结构中的不同作用。3、了解循环的嵌套,学会穷举算法与迭代算法。【实验内容】一、输入两个正整数,求出它们的最大公约数与最小公倍数。1、算法分析:辗转相除法对于两个数m和n,将大数放在m中,小数放在n中,用n去除m若余 数为0,则n为最大公约数,否则将 n作为m余数作为n,再用n去除m直到余数为 0,则n为最大公约数。2、程序代码:#i nclude“ stdio.h ”#inelude“ math.h ”void mai n()int m,n ,t,max,mi n;printf("请输入两个正整数:”);scanf( “ d

12、%d,&m,&n); min=m*n;if (m<n) t=n;n=m ;m=t;while( n!=0)t=m% n;m=n;n=t;printf("最大公约数为:%dn” ,m);printf("最小公倍数为:%dn” ,min/m);二、将一张100元钱,换成10元,20元,50元零钱,问有多少种不同的换法(假设三种零 钱每种都可不出现)。1、算法分析运用穷举算法实现:考虑到三种零钱各种可以不出现,则各自的张数范围如下:10元一0张到10张20元一0张到5张50元0张到2张并且要考虑到共数只有一张100元票子。2、程序代码:#i nclude &

13、quot;stdio.h"void mai n()int Tencoun t,Tweco un t,Fifc oun t,i=0;for(Te ncoun t=0;Te ncoun t<=10;Te ncoun t+)for(Tweco un t=0;Tweco un t<=5;Tweco un t+)for(Fifcoun t=O;F ifcoun t<=2;Fifc oun t+)if (Te ncou nt*10+Twecou nt*20+Fifco un t*50=100)printf("第种换法为:10元%d张20元%d张50元%d张n"

14、;,+i,Te ncoun t,Tweco un t,Fifc oun t);【课后练习】*1、 求1 100之间,能被5整除的数之和。* * *2、 判断任一个数是否是质数。* * * * *3、 输出一有规则的图形,如右图。* * *【实验分析与讨论】1、分析总结for语句,while语句,do-while 语句的用法。2、巧用break语句和continue 语句。实验五: 数组及其应用【目的与要求】1、掌握一维数组与二维数组的使用。2、掌握字符数组与字符串的区别与使用。3、熟练掌握与数组有关的算法(选择排序与冒泡排序、查找与插入)。【实验内容】一、输入一个整数,将其插入一含有9个数的有

15、序序列中,确保插入后其仍然有序,。1、算法分析:将待插入的数与序列中的每个数进行比较,找到其插入的具体位置将从第i个数组元素开始,一直到原数组中的最后一个元素,整体往后 移,空出一空间来存储待插入的整数。2、程序代码:#i nclude "stdio.h"void mai n()int a10=2,5,7,11,14,19,21,33,67,i,k,m;printf("原数组为:”);for(i=0;i<9;i+) printf(“4d' ,ai);printf(“ n请输入待插入的整数:”);scanf(“ c” ,&m);for(i=0;

16、i<9;i+)if (m<=ai) break;/查找待插入的位置for(k=9;k>=i;k-)ak=ak-1; /ai=m; printf(for(i=0;i<10;i+) printf(移位,准备插入新的整数“新数组为:”);“%4d' ,ai);二、编程实现:将字符串str2连接到字符串strl后,构成新的字符串strl 。1、算法分析:本程序即实现字符串处理函数strcat ()的功能。两字符串strl和str2进行连接,要注意的是字符串的结束标志。2、程序代码:#i nclude "stdio.h"#i nclude "

17、stri ng.h"void mai n()char str140,str220,i,j,le n1,le n2;printf(" 请输入字符串 str1:"); gets(str1);len 1=strle n(str1);prin tf(" 请输入字符串 str2:"); gets(str2);le n2=strle n(st ;for(i=le n1,j=O;j<le n2;i+,j+)str1i=str2j;str1i='0:printf("新的字符串 str1 为:”);puts(str1);【课后练习】1、判

18、断一方阵是不是对称矩阵。2、实现两个字符串拷贝的功能。3、运行折半查找法,在一个有序序列中查找某一特定的数。【实验分析与讨论】1、分析两种基本排序算法的核心与两者的不同之处。2、在实现字符串处理函数时的一些注意事宜及其实现方法。3、讨论二维数组解决矩阵与行列式。实验六:函数及其应用【目的与要求】1、掌握C中函数的定义、调用及设计。2、掌握函数嵌套调用、递归调用的设计。3、掌握变量、函数的作用域及存储类。【实验内容】、设计一个子函数对 n个整数进行排序,由主函数从键盘接收若干个数,调用子函数进行排序,并在主函数中进行输出显示。 子函数的设计 持排序的整数个数,如 主函数的实现 最后的结果输出。2

19、、程序代码:1算法分析:另一个是fun,再将以两个参数来实现,一个是接收主函数传来的数组首地址,fun (i nt a,i nt n);定义一整型数组,从键盘上接收若干个整数,调用子函数#in elude "stdio.h"选择排序算法void fun (i nt a,i nt n) /int i,j,t;for(i=0;i< n-1;i+)for(j=i+1;j< n;j+)if (ai>aj) t=ai;ai=aj;aj=t;void mai n() int a10,i;for(i=0;i<10;i+)scan f("%d",

20、&ai);printf(”输入的数值序列为:");for(i=0;i<10;i+) prin tf("%4d",ai);prin tf("n");fun (a,10);printf(”输入的数值序列为:");for(i=0;i<10;i+) prin tf("%4d",ai);二、输入任意两数m,n的值,输出下列表达式的值。m!S=(m -n)! n!1、算法分析 编写一函数fac(n), 返回n!的值。 编写主函数,从键盘输入m,n的值,调用上述fac()函数,计算表达式的值,并将其输出。2、

21、程序代码#i nclude“ stdio.h ”long fac(i nt n)if (n=1) retur n 1;else return n *fac( n-1);void mai n()int m,n ,t; float s;printf( “ please in put 2 in teger nu mbers:” );scanf( “d%”,&m,&n);if(m<n) t=m ;m=n;n=t;printf(“s=%f' ,fac(m)/(fac(m_n)fac(n);【课后练习】1、 若正整数A恰好出现在其平方数的右侧,则称A为一个同构数。如:5, 6

22、, 76。求100 以内的所有同构数。要求:(1)编写一子函数int fun (int n),判断给定正整数 n是不是同构数,若是, 返回1,否则,返回0。(2) 编写主函数,调用函数fun(),寻找并输出100以内的所有同构数。(3) 在输出同构数的同时,要输出其平方的值。2、运用递归,求任一个字符串的长度。【实验分析与讨论】1、被调函数的实现及调用过程。2、简单递归问题的实现。实验七:指针及其应用【目的与要求】1、了解指针的定义与应用。2、掌握使用指针变量的程序设计。3、了解使用函数指针的程序设计。4、了解使用指针数组的程序设计。【实现内容】一、设计一程序,将两个变量的值进行交换。1、 算

23、法分析:(1)编写一个函数swap(i nt *p,i nt *q),交换两个参数指针所指的数据。(2)编写主函数,调用函数swap,将两个变量的值进行交换。2、程序代码:#i nclude“ stdio.h ”void swap(i nt *p,i nt *q);void mai n()int a,b;printf("请输入两个整数:");scanf( “%d%d ,&a,&b);printf("两个数交换前顺序为:a=%d,b=%d ,a,b);swap(&a,& b);printf("两个数交换后顺序为:a=%d,b

24、=%d ,a,b);void swap(i nt *p,i nt *q)int t;t=*p;*p=*q;*q=t;二、编程实现:运用指针将字符串str2连接到字符串strl后,构成新的字符串strl 。1、算法分析:本程序即实现字符串处理函数strcat ()的功能。两字符串 strl和str2进行连接,要注意的是字符串的结束标志,并运用指向字符串的指针来实现。2、程序代码:#i nclude "stdio.h"#i nclude "stri ng.h"void mai n()char str120 ,str210,*p=str1,*q=str2 ,j

25、,le n1,le n2;printf(”请输入字符串 str1:"); gets(str1);len 1=strle n( str1); p=p+le n1-1;prin tf("请输入字符串 str2:"); gets(str2);le n2=strle n(st ;for( j=0;j<le n2; j+)*(+p)=*(q+);str1le n1+le n2='0'printf(" 新的字符串 str1 为:”);puts(str1);【课后练习】1、运用指向数组的指针,求一数组中所有元素之和。2、【实验分析与讨论】实验八:

26、结构体及其应用【目的与要求】1、了解结构体类型的定义。2、掌握结构体类型变量的使用。【实验内容】有10个学生,每个学生包括学号、姓名、三门课的成绩,从键盘输入10个学生数据,要求输出三门课中每一门课的平均成绩,以及最高分学生的数据。1、算法分析:定义一个结构体类型,其中含有学号、姓名、三门课的成绩、总分数据;先后根据要 求解决上述问题。2、程序代码:#i nclude "stdio.h"typedef struct stuint nu mber;char n ame4;float le n1,le n2,le n3;float score;stude nt;void mai

27、 n()stude nt stu10;int i,flag;float ave3,sum3=0,0,0,max=0;prin tf("请输入10位同学的所有信息:”);for(i=0;i<10;i+)scanf("%d%s%f%f%f",&stui.number, ,& stui.le n1,& stui.le n2,& stui.le n3);stui.score= stui.le n1+stui.le n2+stui.le n3;if(stui.score>=max) max=stui.score;

28、 flag=i;sumO+=stui.le n1; sum1+=stui.le n2; sum2+=stui.le n3;for(i=0;i<3;i+)avei=sumi/3;pri ntf("三门课的平均成绩分别为”);for(i=0;i<3;i+)prin tf("%6.2f',avei);prin tf("n最高分是: %d %s %6.2f %6.2f %6.2f",stuflag. nu mber,stuflag. name,stuflag.le n1,stuflag.le n2, stuflag.le n3);【实验分析与

29、讨论】13个人围成一圈,从第 1个人开始顺序报号1、2、3。凡报到“ 3”者退出圈子,找出最 后留在圈子中的人原来的序号。实验九:链表的处理【目的与要求】1、了解键表的相关概念。2、掌握单向键表的创建、编历、插入、删除等简单处理。【内容】创建一个链表。#i nclude "stdio.h"#in clude "stdlib.h"typedef struct listint data;struct list *n ext;list;void mai n()list *head,*ptr;int nu m,i;ptr=(list *)malloc(sizeof(list); head=ptr;prin tf("Please in put 5 nu mbers:");for(i=0;i<5;i+)sca nf("%d",&n um);ptr->data=num;ptr->n ext=(list *)malloc(sizeof(list);if(i=4) ptr->next=NULL; else ptr=ptr->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论