版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 C 语言程序设计实验指导书课程编号:课程名称: C 语言程序设计实验学时:44一、本实验课的性质、任务与目的本实验课目的是使学生掌握 C 语言编程的常用方法, 熟悉该语言中的语法、词法规则,为以后进行软件开发和学习后继专业课程打下基础。 通过学习能够运用 C 语言中的各个知识点编写能完成一定功能的程序。 训练学生进行复杂程序设计的技能和培养良好程序设计的习惯, 其重要程度决不亚于知识的传授。 把高级语言的学习与程序设计、 上机实践紧密地结合起来, 以提高学生能灵活运用新的知识分析问题和解决问题的能力。二、本实验课所依据的课程基本理论本实验课基于 C 语言的语法和词法规则、数据的表示及算法的处
2、理,而语法及算法正是高级语言程序设计的主要研究对象。 C 语言程序设计的主要任务是: C 语言是一种应用广泛结构化程序设计语言,本课程介绍 C 语言的基本概念、基本语法和编程方法,重点描述 C 语言的结构化的特征,并通过本课程的学习,使学生掌握一定的结构化程序设计的知识,以及用 C 语言编写程序的能力。三、实验类型与要求在做每个实验之前,让学生对本次实验相关的内容进行预习、算法设计、流程图的设计、编写程序,做好实验的准备工作;写出预习报告,画出流程图,要求独立完成。说明: 1、实验类型:设计性;2 、实验要求:必做。四、每组人数与实验学时数每组 1 人,实验学时数44 学时。五、考核方式与评分
3、办法实验总成绩 =出勤情况 *10%+ 实验报告 *20%+ 平时 *30%+实验表现 *40%六、本实验课配套教材或实验指导书谭浩强 . C 程序设计 . 北京:清华大学出版社,2006年 3月第 3版谭浩强 . C 程序设计题解与上机指导 . 北京:清华大学出版社, 2006 年3月第 3版谭浩强 . C 程序设计试题汇编. 北京:清华大学出版社,2006 年 3 月第2版夏宽理 . C 语言程序设计 .北京:中国铁道出版社, 2006 年 2月第 1版夏宽理 . C 语言程序设计上机指导与习题解答. 北京:中国铁道出版社, 2006 年 2 月第 1 版王士元 . C 高级实用程序设计.
4、 北京:清华大学出版社,1996年1月第 1版七、实验报告要求在机器上交作业,每次实验成绩分为优、良、及格、不及格,未参加的为认真书写实验报告。实验报告编写要求:1实验题目2实验要求3程序流程图4调试过程(实验过程出现的问题、解决的方法)5程序代码及运行结果。0 分。要求八、实验内容实验一 : C语言运行环境的认识与简单的C 程序【目的与要求】1、了解 TC环境下 C语言的运行环境,熟悉编译系统的操作环境。2、了解在该系统上如何编辑、编译、连接和运行一个C程序。3、通过运行简单的C 程序,初步了解C 源程序的特点。4、掌握和理解C 程序中最基本的C 语句。【实验内容】1、题目:由键盘输入两个整
5、数,计算并输出两个数之和。2、程序如下:#include“ stdio.h”void main()int 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)输入程序, 然后进行编译连接。 若在编译中有词法或语法错误,则根据提示进行修改,再进行调试,直到没有语法错误。( 2)运行程序,依下列不同的方式输入数据,查看程序执行结果。12_34 12 34 1234 【实验分析与讨论】1 、总结 C程序的
6、基本结构和书写规则。2、分析调试过程中常见的错误提示和解决策略。实验二 :C语言程序的单步调试实验三 :选择结构的程序设计【目的与要求】1、了解三种基本数据类型的定义。2、掌握各种不同运算符及其对应的表达式的使用。3、熟练掌握if语句和 switch语句的使用【实验内容】一、判断方程ax 2+bx+c=0 有几个解,若有,则输出其解。1、算法分析:对于方程ax 2+bx+c=0 的解,存在以下情况:a=0, 不是一元二次方程;b2-4ac=0,有两个相等的实根;b2-4ac0,有两个不等的实根;b2-4ac0) x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a)
7、else x1=(-b+sqrt(-d)i)/(2*a) x2=(-b-sqrt(-d)i)/(2*a)2、程序代码:#include“ stdio.h ”#include“ math.h ”void main()float a,b,c,x1,x2,d;printf(“请输入 ax2+bx+c=0 方程三系数值:” ) ;scanf(“ %f%f%f” ,&a,&b,&c);if (abs(a)=1e-6)/a=0printf(“该方程非一元二次方程.n ” ) ;elsed=sqr(b)-4*a*c;if (abs(d)1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqr
8、t(d)/(2*a);printf( “该方程的两个不等实根为: x1=%4.2f,x2=%4.2f ” ,x1,x2); else / sqr(b)-4*a*c0printf(“该方程的两个复数根为:x1=%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、程序代码:
9、#include“ stdio.h”void main()int i;printf(“ nnn= 主菜单n”);printf(“(中国)”)printf(“1-汉字n”);printf(“2-拼音n”);printf(“3-英文n”) ;printf(“请选择:” ) ;scanf(“ %d” ,&i);switch(i)case 1:printf(“中国 n ” ) ; break;case 2:printf(“Chinan”);break;case 3:printf(“Zhong guon” );break;【课后练习】1、判断一年份是不是闰年。2、从键盘上输入1-7 之间的数字,输出表示
10、一个星期中对应某一天的英文单词。【实验分析与讨论】1 、总结分支选择结构的设计方法与技巧。2、掌握简单菜单的设计。实验四 :循环结构的程序设计【目的与要求】1、掌握三种循环语句在编程中的使用。2、理解 break 语句和 continue语句在循环结构中的不同作用。3、了解循环的嵌套,学会穷举算法与迭代算法。【实验内容】一、输入两个正整数,求出它们的最大公约数与最小公倍数。1、算法分析: 辗转相除法 对于两个数 m和 n,将大数放在 m中,小数放在 n 中,用 n 去除 m,若余数为 0,则 n 为最大公约数,否则将 n 作为 m,余数作为 n,再用 n 去除 m,直到余数为0,则 n 为最大
11、公约数。2、程序代码:#include“ stdio.h”#include“ math.h ”void main()int m,n,t,max,min;printf(“请输入两个正整数:”) ;scanf( “ %d%d”,&m,&n);min=m*n;if (mn) 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、算法分析运用穷举算法实现:考虑到三
12、种零钱各种可以不出现,则各自的张数范围如下:10元 -0张到10张20元 -0张 到 5张50元 -0张 到 2张并且要考虑到共数只有一张100 元票子。2、程序代码:#include stdio.hvoid main()int Tencount,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)p
13、rintf(第 %d种换法为: 10 元 %d 张 20 元 %d 张 50 元 %d 张 n,+i,Tencount,Twecount,Fifcount);【课后练习】*1、求1 100 之间,能被5 整除的数之和。* * *2、判断任一个数是否是质数。*3、输出一有规则的图形,如右图。* * *【实验分析与讨论】1、分析总结for语句, while语句,do-while语句的用法。2、巧用 break 语句和 continue语句。实验五:数组及其应用【目的与要求】1、掌握一维数组与二维数组的使用。2、掌握字符数组与字符串的区别与使用。3、熟练掌握与数组有关的算法(选择排序与冒泡排序、查找
14、与插入)。【实验内容】一、输入一个整数,将其插入一含有9 个数的有序序列中,确保插入后其仍然有序,。1 、算法分析:将待插入的数与序列中的每个数进行比较,找到其插入的具体位置i ;将从第i 个数组元素开始,一直到原数组中的最后一个元素,整体往后移,空出一空间来存储待插入的整数。2 、程序代码:#include stdio.h void main()int a10=2,5,7,11,14,19,21,33,67,i,k,m; printf( “原数组为:” ) ;for(i=0;i9;i+) printf(“%4d” ,ai);printf(“ n请输入待插入的整数:”) ;scanf(“ %d
15、”,&m);for(i=0;i9;i+)if (m=i;k-)ak=ak-1;/ai=m;printf(for(i=0;i10;i+) printf(移位,准备插入新的整数“新数组为:”) ;“%4d” ,ai);二、编程实现:将字符串str2连接到字符串str1后,构成新的字符串str1。1 、算法分析:本程序即实现字符串处理函数strcat()的功能。两字符串str1和 str2进行连接,要注意的是字符串的结束标志。2 、程序代码:#include stdio.h #include string.hvoid main()char str140,str220,i,j,len1,len2;pr
16、intf(请输入字符串str1:);gets(str1);len1=strlen(str1);printf(请输入字符串str2:);gets(str2);len2=strlen(str2);for(i=len1,j=0;jlen2;i+,j+)str1i=str2j;str1i=0;printf(新的字符串str1为: ); puts(str1);【课后练习】1、 判断一方阵是不是对称矩阵。2、 实现两个字符串拷贝的功能。3、 运行折半查找法,在一个有序序列中查找某一特定的数。【实验分析与讨论】1、 分析两种基本排序算法的核心与两者的不同之处。2、 在实现字符串处理函数时的一些注意事宜及其实
17、现方法。3、 讨论二维数组解决矩阵与行列式。实验六:函数及其应用【目的与要求】1、掌握 C中函数的定义、调用及设计。2、掌握函数嵌套调用、递归调用的设计。3、掌握变量、函数的作用域及存储类。【实验内容】一、设计一个子函数对n 个整数进行排序,由主函数从键盘接收若干个数,调用子函数进行排序,并在主函数中进行输出显示。1、算法分析:子函数的设计以两个参数来实现,一个是接收主函数传来的数组首地址,另一个是持排序的整数个数,如fun(int a,int n);主函数的实现定义一整型数组,从键盘上接收若干个整数,调用子函数fun ,再将最后的结果输出。2、程序代码:#include stdio.hvoi
18、d 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(i=0;i10;i+)printf(%4d,ai);二、输入任意两数m,n 的值,输出下列表达式的值。S=m!( mn )! n!1 、算法分析编写一
19、函数 fac(n),返回 n! 的值。编写主函数,从键盘输入m,n 的值,调用上述fac() 函数,计算表达式的值,并将其输出。2 、程序代码#include“ stdio.h”long fac(int n)if (n=1) return 1;else return n*fac(n-1);void main()int 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(m)/(fac(m-n)fac(n);【课后练习】
20、1、 若正整数A 恰好出现在其平方数的右侧,则称A 为一个同构数。如:5, 6, 76。求 100以内的所有同构数。要求:( 1)编写一子函数intfun (intn),判断给定正整数n 是不是同构数,若是,返回 1,否则,返回0。( 2)编写主函数,调用函数 fun() ,寻找并输出 100 以内的所有同构数。( 3)在输出同构数的同时,要输出其平方的值。2、 运用递归,求任一个字符串的长度。【实验分析与讨论】1、 被调函数的实现及调用过程。2、 简单递归问题的实现。实验七 :指针及其应用【目的与要求】1、了解指针的定义与应用。2、掌握使用指针变量的程序设计。3、 了解使用函数指针的程序设计
21、。4、 了解使用指针数组的程序设计。【实现内容】一、设计一程序,将两个变量的值进行交换。1、 算法分析:(1)编写一个函数swap(int *p,int *q),交换两个参数指针所指的数据。( 2)编写主函数,调用函数swap, 将两个变量的值进行交换。2、 程序代码:#include“ stdio.h”void swap(int *p,int *q);void main()int a,b;printf(“请输入两个整数:”) ;scanf( “%d%d” ,&a,&b);printf(“两个数交换前顺序为:a=%d,b=%d” ,a,b);swap(&a,&b);printf(“两个数交换后
22、顺序为:a=%d,b=%d” ,a,b);void swap(int *p,int *q)int t;t=*p;*p=*q;*q=t;二、编程实现:运用指针将字符串str2连接到字符串str1后,构成新的字符串str1 。1 、算法分析:本程序即实现字符串处理函数strcat()的功能。两字符串str1和 str2进行连接,要注意的是字符串的结束标志,并运用指向字符串的指针来实现。2 、程序代码:#include stdio.h #include string.h void main()char str120 ,str210,*p=str1,*q=str2 ,j,len1,len2;print
23、f(请输入字符串 str1:); gets(str1);len1=strlen(str1); p=p+len1-1;printf(请输入字符串str2:);gets(str2);len2=strlen(str2);for( j=0;jlen2; j+)*(+p)=*(q+);str1len1+len2=0;printf(新的字符串str1为: ); puts(str1);【课后练习】1、运用指向数组的指针,求一数组中所有元素之和。2、【实验分析与讨论】实验八 :结构体及其应用【目的与要求】1、了解结构体类型的定义。2、掌握结构体类型变量的使用。【实验内容】有 10 个学生,每个学生包括学号、姓
24、名、三门课的成绩,从键盘输入10 个学生数据,要求输出三门课中每一门课的平均成绩,以及最高分学生的数据。1、算法分析:定义一个结构体类型,其中含有学号、姓名、三门课的成绩、总分数据;先后根据要求解决上述问题。2、程序代码:#include stdio.htypedef struct stuint number;char name4;float len1,len2,len3;float score;student;void main()student stu10;int i,flag;float ave3,sum3=0,0,0,max=0;printf(请输入 10 位同学的所有信息:);for
25、(i=0;i=max) max=stui.score; flag=i;sum0+=stui.len1; sum1+=stui.len2; sum2+=stui.len3;for(i=0;i3;i+)avei=sumi/3;printf(三门课的平均成绩分别为);for(i=0;i3;i+)printf(%6.2f,avei);printf(n最高分是: %d%s %6.2f %6.2f %6.2f,stuflag.number,,stuflag.len1,stuflag.len2, stuflag.len3);【实验分析与讨论】13个人围成一圈,从第1 个人开始顺序报号
26、1、 2、 3。凡报到“ 3”者退出圈子,找出最后留在圈子中的人原来的序号。实验九 :链表的处理【目的与要求】1、了解键表的相关概念。2、掌握单向键表的创建、编历、插入、删除等简单处理。【内容】创建一个链表。#include stdio.h#include stdlib.htypedef struct listint data;struct list *next;list;void main()list *head,*ptr;int num,i;ptr=(list *)malloc(sizeof(list); head=ptr;printf(Please input 5 numbers:);for(i=0;idata=num;ptr-next=(list *)malloc(sizeof(list);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026维信电子面试题及答案大全
- 2026县医院口腔面试题及答案
- (2026年)正规个人租房合同简单版
- 2025-2026学年河南省信阳市潢川县数学三年级下学期期中模拟试题(含解析)
- 《水泥生产防尘技术规程》
- 2025-2026学年河北省唐山市丰润区数学三年级下学期期末学业水平测试模拟试题(含答案解析)
- 2025-2026学年河北省保定市安新县三年级数学下学期期末教学质量检测试题(含答案解析)
- 2025-2026学年江西省抚州市崇仁县三年级数学下学期期末复习检测试题含解析
- 阜阳颍上县县直机关选调公务员笔试真题2025
- 成都市双流区医务社会工作服务岗位考试真题2025
- 八大特殊作业监护人员安全手册
- 2026秋北师大版四年级数学上册第4单元我们生活的空间(二)第1课时观察的范围课件
- 北师大版四年级下册数学题每日一练
- 生物质循环流化床气化装置项目可行性研究报告
- xx区加强生物多样性保护实施方案
- 后勤部管理制度培训
- 2026年扬州市市场监督管理系统事业单位人员招聘考试备考试题及答案详解
- DLT 572-2021 电力变压器运行规程
- 电力网电能损耗管理规定
- 防洪防汛风险评估报告
- 闽教版英语四年级上学期第一单元测试卷
评论
0/150
提交评论