c语言程序设计实验指导学生用.docx

上传人:b****5 文档编号:8142076 上传时间:2023-01-29 格式:DOCX 页数:39 大小:361.99KB
下载 相关 举报
c语言程序设计实验指导学生用.docx_第1页
第1页 / 共39页
c语言程序设计实验指导学生用.docx_第2页
第2页 / 共39页
c语言程序设计实验指导学生用.docx_第3页
第3页 / 共39页
c语言程序设计实验指导学生用.docx_第4页
第4页 / 共39页
c语言程序设计实验指导学生用.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

c语言程序设计实验指导学生用.docx

《c语言程序设计实验指导学生用.docx》由会员分享,可在线阅读,更多相关《c语言程序设计实验指导学生用.docx(39页珍藏版)》请在冰豆网上搜索。

c语言程序设计实验指导学生用.docx

c语言程序设计实验指导学生用

C语言程序设计

实验指导

(学生用)

 

计算机基础教研室

《C语言程序设计》课程组

2012年9月

 

前言

《C语言程序设计》是计算机科学技术系面向全校理工科开设的一门专业平台课程。

通过这门课程的学习,可以让学生了解程序设计的思想和方法,掌握高级语言程序设计的基本知识,提高问题求解和程序语言的应用能力。

《C语言程序设计实验指导书》是《C语言程序设计》的配套指导书。

本指导书本着“厚基础,重实践,以专业为导向”的原则,其中程序设计基础、数组、函数这三个实验项目是所有学科专业都必须掌握的,其他实验项目根据专业特点,设计了不同的要求:

对于普通专业侧重循环、数组、函数、结构体等,生化类专业包含数据文件的处理,机械电子类专业包含位运算,数理类专业包含数值计算等内容。

每个实验本着循序渐进的原则,由简到难,逐步深化,另外配有相应的实验练习,学生可根据自己的情况选择完成。

本指导书所有程序代码均在VisualC++环境下调试通过。

本指导书在编写过程中得到了系领导的大力支持,王海燕主任在百忙中多次参加我们的课程研讨,庄波老师、宫锋老师在大纲编写、指导书任务设计方面给出了切实可行的意见和建议,在此深表感谢。

本指导书由计算机基础教研室《C语言程序设计》课程组全体人员共同编写,谢玉华老师负责统筹安排,实验一、实验二、实验三、实验七由张志芬老师编写,实验四、实验六由陈春华、薛红芳老师编写,实验五由陈庆燕老师编写,最后由张志芬老师统稿,在此一并感谢。

由于水平有限,本指导书难免存在疏漏和不足之处,望各位老师在使用过程中多提宝贵意见,有利于我们进一步改进。

《C语言程序设计》课程组

2012年9月

 

实验一基本控制结构的应用

1.1熟悉编程环境

一、实验目的

1.了解C语言程序的开发环境,掌握C语言源程序的编辑、编译、连接及运行过程;

2.通过运行简单的C程序,初步了解C语言源程序的特点及基本结构。

二、实验内容

1.在TC或VC++环境下,编辑如下所示的简单C语言程序:

#include

main()

{

printf(“helloworld!

\n”);

}

对其进行编译、连接及运行,观察程序的运行结果。

2.编程在显示器上输出如下信息:

****************

HowAreYou!

****************

三、实验练习

1.编程在显示器上输出如下信息:

*

***

*****

2.求一个三位数的各位上数字之和并输出该和。

1.2顺序结构程序设计

一、实验目的

1.掌握运算符的使用;

2.正确定义程序中的变量;

3.掌握C语言中数学公式的表示;

4.熟练使用输入、输出语句;

5.能够利用顺序结构进行程序设计。

二、实验内容

已知三角形的三边长分别为3,4,4,求三角形的面积。

三、分析

三角形三边边长已知,根据公式:

面积=s(s-a)(s-b)(s-c),其中s=(a+b+c)/2即可求得面积。

四、算法描述

1.定义三个边长a,b,c为float型,其初值为3,4,4;

2.计算s=(a+b+c)/2;

3.计算area=sqrt(s*(s-a)*(s-b)*(s-c)),求得三角形的面积并输出。

五、程序

#include

#include

main()

{

/*定义变量*/

/*计算面积*/

/*输出面积*/

}

六、实验练习:

1.从键盘上输入一个大写字母,将其转换成相应的小写字母并输出。

2.把560分钟换算成小时和分钟表示并输出。

3.求解方程2x2+3x+1=0的解。

1.3选择结构程序设计

一、实验目的

1.掌握关系运算及逻辑运算;

2.掌握if语句;

3.掌握switch语句;

4.能够利用选择结构进行程序设计。

二、实验内容

根据输入的三角形的三条边,判断是否能组成三角形,若可以则输出它的面积及三角形的类型。

三、分析

1.首先判断是否能构成三角形,如果满足a,b,c三条边大于0,并且满足a+b>c,b+c>a,a+c>b则能构成三角形;否则不能构成三角形;

2.若能构成三角形时,计算三角形的面积。

再判断三角形的类型,如果三边都相等时等边三角形;如果任意两边相等则为等腰三角形;如果两边平方之和等于第三边平方则为直角三角形;其他为一般三角形。

四、算法描述

1.定义三个边长a,b,c为float型,从键盘输入三个边长值;

2.判断三边是否能构成三角形,条件是a,b,c三条边大于0,并且a+b>c,b+c>a,a+c>b,不满足条件则不能构成三角形;

3.如果能构成三角形时,计算三角形的面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2);再判断三角形的类型,如果三边都相等时等边三角形;如果任意两边相等则为等腰三角形;如果两边平方之和等于第三边平方则为直角三角形;其他为一般三角形。

五、程序

#include

#include

main()

{

/*定义变量*/

/*输入边长*/

/*判断能否构成三角形,能则计算面积判断类型*/

{

/*计算三角形的面积*/

/*输出三角形的面积*/

/*判断三角形的类型(等边、等腰、直角或一般三角形)*/

}

else

printf(“三边不合适,不能构成三角形!

\n”);

}

六、实验练习

1.编程实现从键盘输入四个整数,把这四个数由小到大输出。

2.编程判断从键盘输入的整数的正负性及奇偶性。

3.根据键盘输入x的值求y值,其公式如下:

5x+110<=x<20

sinx+cosx20<=x<40

y=ex-140<=x<60

ln(x+1)60<=x<80

0其他值

4.输入一个字符,如果这个字符是小写字母将这个字符转换成大写字母输出,否则输出原字符。

5.编程实现如下功能的简单计算器:

从键盘输入两个运算数及算术运算符,最后输出计算结果。

6.求解方程ax2+bx+c=0的解。

1.4循环结构程序设计

一、实验目的

1.掌握while语句;

2.掌握do-while语句;

3.掌握for语句;

4.能够利用循环结构进行程序设计;

5.能够综合利用顺序结构、选择结构及循环结构进行程序设计。

二、实验内容

根据输入的三角形的三条边,判断是否能组成三角形,若不能则重新输入三边,直到能构成三角形为止;若能则计算三角形的面积,并判断三角形的类型,重复输入三角形的边长,使每种类型的三角形都出现一次。

三、分析

1.首先判断是否能构成三角形,如果满足a,b,c三条边大于0,并且满足a+b>c,b+c>a,a+c>b则能构成三角形;否则不能构成三角形;

2.若能构成三角形时,计算三角形的面积。

再判断三角形的类型,如果三边都相等时等边三角形;如果任意两边相等则为等腰三角形;如果两边平方之和等于第三边平方则为直角三角形;其他为一般三角形。

当为某一类型,其计数加1,若有没出现过的类型,再循环输入各边,直到每种类型都出现过。

四、算法描述

1.定义三个边长a,b,c为float型,从键盘输入三个边长值;

2.判断三边是否能构成三角形,条件是a,b,c三条边大于0,并且a+b>c,b+c>a,a+c>b,不满足条件则不能构成三角形;

3.如果能构成三角形时,计算三角形的面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2);再判断三角形的类型,如果三边都相等时等边三角形;如果任意两边相等则为等腰三角形;如果两边平方之和等于第三边平方则为直角三角形;其他为一般三角形。

4.当为某一类型的三角形时,其计数加1,若有没出现过的类型,再循环输入各边,直到每种类型都出现过。

其中输入各种类型三角形边长为外循环,输入合适边长为内循环。

五、程序

#include

#include

main()

{

floata,b,c,s,area;

inti=0,j=0,k=0,l=0;/*i,j,k,l分别用来统计每种类型的三角形出现的次数*/

do

{

/*输入三角形的边长*/

while()/*循环输入三边直到能构成三角形*/

{}

/*计算三角形的面积*/

/*判断三角形的类型(等边、等腰、直角或一般三角形),并统计各种类型三角形出现的次数*/

}while((i&&j&&k&&l)==0);

}

六、实验练习

1.鸡兔问题:

假设鸡兔共有30只,脚数共有90只,利用循环编写一个程序求出鸡和兔各有多少只。

2.从键盘输入若干学生某门课程的成绩,计算出平均成绩并输出低于60分的学生成绩,当输入负数时结束输入。

3.判断从键盘输入的数m是否为素数(素数:

只能被1和本身整除的数)。

4.利用循环从键盘输入100个数,找出其中的最小值。

5.编程求1-

+

-

+……+

-

的值。

6.编程求s=1+(1+2)+(1+2+3)+……+(1+2+3+……+n)的值。

7.输入n个整数,求这n个数之中的偶数平均值,并输出。

8.编程打印一下图形(行n的值由键盘输入)。

*******

******

*****

****

***

**

*

9.输出100-999之间的所有水仙花数,每行输出5个(水仙花数:

三位数的各位数字的立方之和等于这个三位数本身,如153=1*1*1+5*5*5+3*3*3)。

10.编写一个程序,打印如下乘法“九九表”。

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

3*3=93*4=123*5=153*6=183*7=213*8=243*9=27

4*4=164*5=204*6=244*7=284*8=324*9=36

5*5=255*6=305*7=355*8=405*9=45

6*6=366*7=426*8=486*9=54

7*7=497*8=567*9=63

8*8=648*9=72

9*9=81

11.从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。

实验二数组的应用

2.1一维数组的应用

一、实验目的

1.掌握一维数组的定义及初始化;

2.掌握一维数组元素的引用;

3.掌握几种常见的排序方法;

4.能够利用一维数组进行程序设计。

二、实验内容

从键盘输入10个学生的一门课程的成绩,从高到低排序后输出每个学生的成绩。

方法1:

选择排序

三、分析

选择排序方法通过选择最大值的方法,依次将最大、第2大、第3大……的数挑选出来,顺序调换到数组的第1个、第2个、第3个……元素中。

四、算法描述

1.定义n个长度的数组用来存放n个元素;

2.第1趟将第1个元素和它后面的元素逐个进行比较,有更大的则与第1个元素进行交换,再继续和后面的元素比较。

经过若干次比较和交换,从n个元素中找出了最大数并交换到第1个元素中;

3.第2趟用同样的方法,在剩下的n-1个元素中找出第2大的数,并把它调换到第2个元素中;

4.第i趟再用同样的方法,在剩下的n-i+1个元素中找出第i大的数,并把它调换到第i个元素中。

i不断增加,一趟趟重复此过程,直到i=n-1最后一趟比较完为止;

5.程序用双重循环实现,外循环用i控制趟数,找第i个元素。

内循环让第i个元素和它后面的元素逐个进行比较,有更大的则交换到第i个元素。

五、程序

#include

#defineN10

main()

{

/*定义数组*/

/*通过循环输入n个成绩,保存在数组中*/

/*变量i用来控制比较的趟数,需进行N-1趟*/

/*第i个元素和其后各元素进行N-(i+1)次比较,变量j用来控制其后元素*/

/*如果逆序则交换*/

printf(“排序后的成绩:

\n”);

/*通过循环输出排好序的数组中的元素*/

}

方法2:

插入排序

三、分析

插入排序方法通过将要插入的元素从有序数组的最后元素开始逐个进行比较,如果逆序则后移数组元素,直到找到合适为止插入。

如正序则直接插入。

四、算法描述

1.定义n个长度的数组用来存放n个元素;

2.第1个数直接存在数组第1个位置,再输入新数m;

3.从数组最后一个元素开始,逐个将数组元素与数m进行比较,如果逆序则将数组元素后移一个单元,直到找到合适正序位置并插入;如果第一次比较正序,则将数m插入到数组最后。

再输入新数m;

4.重复第3步,直到n个数全部有序插入。

五、程序

#include

#defineN6

main()

{

/*定义数组*/

/*先输入一个数*/

/*就一个数时必是有序的,直接存到数组第零个元素中*/

/*通过循环利用i控制输入的元素个数*/

{

/*再输入一个新数,和数组中已有元素进行比较*/

/*利用循环从现有数组的最后一个元素开始往前逐个比较*/

/*如果逆序,则把数组中元素逐个后移*/

/*如果正序,则退出循环*/

/*把该数放在数组中第j个元素之后*/

}

printf("排序后的成绩:

\n");

/*通过循环输出排好序的数组中的元素*/

}

方法3:

冒泡排序

三、分析

冒泡排序方法每趟顺序比较相邻的两个数,如果两数逆序,则交换两数,最多进行n-1趟,即完成n个数由高到低顺序排列。

四、算法描述

1.定义n个长度的数组用来存放n个元素;

2.第1趟比较第1个和第2个元素,逆序则交换,再依次比较第2个和第3个、第3个和第4个……,每次比较中若是逆序则交换。

经过这趟比较和交换,最小的数到最后一个元素中;

3.第2趟用同样的方法,在前面n-1个元素中依次进行比较和交换,第2小的数到倒数第2个元素中;

4.第i趟再用同样的方法,在剩下的n-i+1个元素中依次进行比较和交换,第i小的数到倒数第i个元素中。

一趟趟重复此过程,直到i=n-1最后一趟比较完为止;

5.程序用双重循环实现,外循环用i控制趟数,找第i个元素。

内循环j比较两个相邻元素,若逆序则交换。

五、程序

#include

#defineN10

main()

{

/*定义数组*/

/*通过循环输入n个成绩,保存在数组中*/

/*变量i用来控制比较的趟数*/

/*依次比较相邻的两个数,共比较n-i个*/

/*如果逆序则交换*/

printf(“排序后的成绩:

\n”);

/*通过循环输出排好序的数组中的元素*/

}

六、实验练习

1.从键盘输入10个学生的成绩存储在数组中,求成绩最高者的序号和成绩。

2.从键盘输入n个数到数组中,统计其中的正数个数,并计算它们的和。

3.将整型数组中的所有元素镜像对调(第一个与最后一个对调,第二个与倒数第二个对调),按对调后的结果输出。

2.2二维数组的应用

一、实验目的

1.掌握二维数组的定义及初始化;

2.掌握二维数组元素的引用;

3.能够利用二维数组进行程序设计。

二、实验内容

从键盘输入10个学生的三门课程的成绩,求每个学生各门课程的平均分,并按平均分从高到低的顺序输出每个学生各门课程的成绩和平均成绩。

三、分析

要存储10个学生三门课程的成绩需要定义二维数组,要存储10个学生的平均成绩需要定义一维数组,利用循环输入成绩、计算平均分,再利用循环选用一种排序方法按平均成绩进行排序,最后利用循环按要求输出。

四、算法描述

1.定义数组ints[N][3]存储N=10个学生三门课程的成绩,数组floata[N]存储10个学生的平均成绩;

2.用for循环从键盘按行输入每个学生三门课的成绩;

3.用for循环计算出每个学生的平均成绩并存入数组a中;

4.按照平均成绩从高到底的顺序排序(可选用选择排序、冒泡排序、插入排序、快速排序等多种排序方法用选择排序);

5.按要求输出。

五、程序

#include

#include

#defineN10

main()

{

/*定义二维数组用来保存n个学生的3门成绩*/

/*定义一维数组用来保存n个学生的平均成绩*/

/*通过循环输入n学生的三门课成绩*/

/*通过循环计算n个学生的平均成绩*/

for(i=0;i

for(j=i+1;j

/*比较平均成绩,高则平均成绩高者进行交换*/

{

/*通过循环交换三门课的成绩*/

/*交换平均成绩*/

}

printf("按平均分排序后的成绩为:

\n");

printf("课程一课程二课程三平均分\n",i+1);

/*通过循环输出排好序的n个学生的三门课成绩及平均成绩*/

}

六、实验练习

1.从键盘输入矩阵A的值,将A的转置矩阵存入矩阵B,输出矩阵B。

2.找出6*6矩阵每列绝对值最大的元素,并与同列对角线元素交换。

3.输出杨辉三角形(行数由键盘输入)。

1

11

121

1331

14641

4.矩阵求积。

2.3字符数组的应用

一、实验目的

1.掌握字符数组的定义及初始化;

2.掌握字符数组元素的引用;

3.掌握字符串处理函数;

4.能利用字符数组及字符串处理函数进行程序设计。

二、实验内容

从键盘输入N个学生的姓名存储在字符数组中,并按字典顺序输出。

三、分析

因为姓名为字符串,要存储N个学生姓名需要定义二维字符数组,每行存储一个学生的姓名,用选择排序法按字典顺序比较大小时用strcmp()函数,交换时赋值用strcpy()函数。

四、算法描述

1.定义数组ints[N][12]存储N个学生的姓名,数组str[N]用于交换时的中间变量;

2.用for循环从键盘按行输入每个学生三门课的成绩;

3.用for循环计算出每个学生的平均成绩并存入数组a中;

4.按照平均成绩从高到底的顺序排序(可选用选择排序、冒泡排序、插入排序、快速排序等多种排序方法用选择排序);

5.按要求输出。

五、程序

#include

#include

#defineN10

main()

{

/*定义二维数组保存n个学生的姓名*/

/*定义一维数组保存在交换时一个学生的姓名*/

/*通过循环输入n个学生姓名*/

/*通过选择排序对n个学生姓名进行排序*/

for(j=i+1;j

/*调用strcmp函数进行比较*/

{

/*交换时调用strcpy函数进行赋值*/

}

printf(“排好序的成绩为:

\n”);

/*通过循环输出排好序的姓名*/

}

六、实验练习

1.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

2.输入一行字符,删除字符串中的空格。

实验三函数的应用

一、实验目的

1.掌握函数的定义;

2.掌握函数的调用方法;

3.掌握函数之间的值传递方式;

4.能够利用函数进行综合程序设计。

二、实验内容

求两位的所有绝对素数,并输出(一个素数经过任意次调换位,仍然为素数,则为绝对素数,例如:

13(31)就是一个绝对素数)。

三、分析

求所有两位数的绝对素数,可定义一个判断这个数是否为绝对素数的函数,在实现该函数时需要判断该数是否为素数及换位后是否为素数,所以还应定义一个函数判断一个数是否为素数的函数。

四、算法描述

1.定义素数函数判断一个数是否为素数,判断时需考虑数小于2、等于2及大于2的情况,大于2时需用循环进行判断。

是素数返回1,不是则返回0;

2.定义绝对素数函数判断一个数是否为绝对素数,判断时需调用已定义的素数函数来判断原数及换位后的数是否为素数。

是绝对素数返回1,不是则返回0;

3.在main函数中对10至99的数调用绝对素数函数,如果是绝对素数则输出这个数。

五、程序

#include

#include

/*定义sushu函数用来判断一个数是否为素数*/

intsushu(intn)

{

/*如果小于2,不是素数返回0*/

/*如果是2,是素数返回1*/

/*大于2的需要判断是不是素数,是则返回1,不是返回0*/

}

/*定义jueduisushu函数用来判断一个数是否为绝对素数*/

intjueduisushu(intm)

{

/*得到m各位交换后的数*/

/*调用sushu()判断原数和交换后的数是否为素数,是则返回1,不是返回0*/

}

main()

{

inti;

for(i=10;i<100;i++)/*判断10到99的数是否为绝对素数*/

/*调用jueduisushu()判断是否为绝对素数,是则输出*/

}

六、实验练习

1.编写一个程序,已知一个圆筒的半径、外径和高,计算该圆筒的体积。

2.编写一个判断某数是否为水仙花数的函数,在main函数中求100到999之间的全部水仙花数。

3.编写一个函数,输入整数m的全部素数因子(例如:

m=120,因子为:

2,2,2,3,5。

)。

4.编写一个函数,求10000以内所有的完数(完数是指一个数正好是它的所有约数之和。

例如6就是一个完数,6的因子有1,2,3,并且6=1+2+3)。

5.编写一个函数,求10000以内的所有互满数(如果有两个数,每一个数的所有约数(除它本身以外)的和正好等于对方,则称这两个数为互满数)。

实验四位运算的综合应用

一、实验目的

单片机又称为微控制器,由于其具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉等特点,因此在工业控制、智能仪器仪表、数据采集和处理、通信系统、汽车工业、国防工业、家用电器等领域有着十分广泛的应用。

位运算在单片机、ARM等硬件程序设计中有着较为广泛的应用,通过设计C语言程序,模拟单片机操纵相关器件,实现流水灯、串行通信等效果,激发学生学习C语言课程的热情,使其熟练掌握位运算知识,提高其分析问题与解决问题的能力,以及将C语言程序设计技能运用于专业领域的意识,为学生后续相关专业课程的学习打下坚实的基础。

同时,通过实验,培养学生的算法描述能力以及养成良好的编码风格。

二、实验内容

1.流水灯效果模拟

2.串行通信模拟

三、项目分析

1.流水灯效果模拟

1)背景知识

根据单片机的型号以及任务要求的不同,线路接法会有所不同,下面以AT89S52单片机为例进行说明。

图中,将8个LED灯接在了P2口上,P2口的每个引脚对应着一个LED灯,当P2口有低电平输出时,就会点亮相应的LED灯,而将低电平转为高电平后,相应的灯会熄灭。

利用这个特点,就很容易操纵图中的8个LED灯,如向P2口输送01100011(即0x63)时,P2_0=P2_3=P2_4=P2_5=0,就会点亮D1、D4、D5、D6。

如果在暂停一段时间后,令P2的各个位向左或向右移位,再点亮相应的灯,就会给人一种灯在流动的感觉,即所谓的流

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1