《程序设计与问题求解I》实验指导书Word文档格式.docx

上传人:b****8 文档编号:22483204 上传时间:2023-02-04 格式:DOCX 页数:18 大小:29.03KB
下载 相关 举报
《程序设计与问题求解I》实验指导书Word文档格式.docx_第1页
第1页 / 共18页
《程序设计与问题求解I》实验指导书Word文档格式.docx_第2页
第2页 / 共18页
《程序设计与问题求解I》实验指导书Word文档格式.docx_第3页
第3页 / 共18页
《程序设计与问题求解I》实验指导书Word文档格式.docx_第4页
第4页 / 共18页
《程序设计与问题求解I》实验指导书Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

《程序设计与问题求解I》实验指导书Word文档格式.docx

《《程序设计与问题求解I》实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《《程序设计与问题求解I》实验指导书Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

《程序设计与问题求解I》实验指导书Word文档格式.docx

逗号隔开),输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?

问题4要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为

'

1'

'

2'

34,则应修改程序中的哪条语句?

[提示:

利用转义字符输出字符单引号字符。

]

问题5要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'

34,则程序应修改程序中的哪条语句?

第1种输入方式:

1,2,34↙(以逗号作为分隔符)

第2种输入方式:

1234↙(以空格作为分隔符)

第3种输入方式:

1234↙(以Tab键作为分隔符)

第4种输入方式:

1↙

2↙

34↙(以回车符作为分隔符)

提示:

使用scanf("

%c%*c%c%*c%d"

其中,scanf后的*表示本输入项在读入后不赋给相应的变量。

简单的说可以利用%*c跳过任意的字符而不读入

2.计算定期存款本利之和

设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。

要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入

提示1:

银行定期存款为复利,计算公式为:

提示2:

使用函数pow,具体见如下从帮助文档中的摘录

doublepow(

doublex,

doubley

);

Parameters

x:

Base.

y:

Exponent.

Example

//crt_pow.c

math.h>

intmain(void)

doublex=2.0,y=3.0,z;

z=pow(x,y);

printf("

%.1ftothepowerof%.1fis%.1f\n"

x,y,z);

Output

2.0tothepowerof3.0is8.0

三、实验结果与分析

将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上。

实验二选择结构程序设计

1.正确使用关系表达式和逻辑表达式表示条件

2.掌握选择语句if和switch语句的使用方法

3.学会用选择语句构成的选择结构程序设计

二、实验内容

1.身高预测

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。

小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,身高预测公式为

男性成人时身高=(faHeight+moHeight)×

0.54cm

女性成人时身高=(faHeight×

0.923+moHeight)/2cm

此外,如果喜爱体育锻炼,那么可增加身高2%;

如果有良好的卫生饮食习惯,那么可增加身高1.5%。

编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。

编程要求:

有用户输入输出提示信息。

2.简单的计算器

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:

操作数1运算符op操作数2

计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

程序能进行浮点数的算术运算,有用户输入输出提示信息。

因为除法中的除数不能为0,因此关键在于如何比较浮点变量data2和常数0是否相等。

作为整型变量跟0的比较,简单的==就可以解决。

而浮点型等实型变量需要用

if(fabs(data2)<

=1e-7)

进行判断(即判断其是否足够小)。

若使用函数fabs,需要包含头文件math.h

实验三循环结构程序设计

(1)

1.学习循环语句的使用方法

2.学习用循环语句编写程序

(1)请用三种结构实现从1到100之间的偶数累加,奇数相乘,并将偶数累加的结果输出,奇数相乘的结果输出。

(2)求

,n的值从键盘输入

(3)编写程序,打印99乘法表

实验四循环结构程序设计

(2)

2.学习用循环语句编写实际应用程序

猜数游戏

在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。

那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,……

程序1编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!

”,否则提示“Wrong!

”,并告诉人所猜的数是大(Toohigh)还是小(Toolow),然后结束游戏。

要求每次运行程序时机器所“想”的数不能都一样。

程序2编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;

否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。

程序3编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;

否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

程序4编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;

否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。

每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

1.有用户输入输出提示

2.仅仅需要编写出程序4的代码并上机调试运行成功,前面的程序1至程序3是引导如何编写出程序4的代码。

在程序4中要用到二重循环,如果实在无法直接编写出程序4,可按上面的步骤循序渐进的进行代码的编写。

编程提示:

随机数序列的生成

在这个程序的编写中,需要产生随机数。

附录中是一个生成随机数的帮助文档,需要自己看懂。

简单提一下,生成一个从1到100的随机数的代码如下:

magic=rand()%100+1;

但要注意,在一段程序使用rand()函数前,需要有且仅仅有一条语句进行随机数初始值的设置。

比如使用srand(time(NULL));

这里是用系统时间进行随机数初始值的设置。

函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子。

作为一个随机数实际上是一个伪随机数,并不是实际意义上的随机,仅仅是通过一定的数学方法(不同的数学方法产生满足不同分布的随机数序列),从一个初始值生成的一个序列,因此这个初始值如果雷同的话,生成的随机数也是相同的。

因此在第一次使用rand函数前,需要使用srand函数。

rand

Requirements

Routine

Requiredheader

Compatibility

<

stdlib.h>

ANSI,Win98,WinMe,WinNT,Win2000,WinXP

Generatesapseudorandomnumber.

intrand(void);

ReturnValue

randreturnsapseudorandomnumber,asdescribedabove.Thereisnoerrorreturn.

Remarks

Therandfunctionreturnsapseudorandomintegerintherange0toRAND_MAX.Usethesrandfunctiontoseedthepseudorandom-numbergeneratorbeforecallingrand.

//crt_rand.c

/*Thisprogramseedstherandom-numbergenerator

*withthetime,thendisplays10randomintegers.

*/

time.h>

inti;

/*Seedtherandom-numbergeneratorwithcurrenttimesothat

*thenumberswillbedifferenteverytimewerun.

srand((unsigned)time(NULL));

/*Display10numbers.*/

for(i=0;

i<

10;

i++)

%6d\n"

rand());

SampleOutput

19430

28222

9710

12070

7513

9501

1767

26041

11872

4097

实验五控制结构综合程序设计

1.熟练掌握分支结构、循环结构的综合应用。

2.掌握结构化程序设计的思想及方法。

1.输入一行字符(以#结束),统计其中英文字母、空格、数字和其它字符的个数。

2.输入2个1—1000之间的正整数m和n,输出m—n之间的所有完数,完数就是因子和与它本身相等的数。

例如,factorsum(12)的返回值是16(1+2+3+4+6)。

输入输出示例

Inputm:

1

Inputn:

100

Output:

1,6,28

2.输入一行字符,统计其中单词的个数。

各单词之间用空格分隔,空格数可以是多个。

输入输出示例

Inputwords:

Thesumoftheoddnumbers

Count=6

实验六数组的使用

1.掌握数组的定义、赋值和输入输出方法

2.学习使用数组实现相关算法

1.编写程序,

输入一个正整数(

),再输入n个整数(存入数组a中),输出a中的最大值,最小值及平均值(保留两位小数)

注释:

这里要定义数组中的元素个数至少为10个,即inta[10];

2.餐饮服务质量调查打分

在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来。

例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。

如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。

下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。

假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。

GradeCountHistogram

15*****

210**********

37*******

...

–定义数组score存放打的分数

–定义数组count为计数器(count[0]不用)

–计算统计结果:

设置一个循环,依次检查数组元素值score[i],是1则将数组元素count[1]加1,是2则将数组元素count[2]加1,依此类推

for(i=0;

i<

STUDENTS;

i++)

{

count[score[i]]++;

}

–打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号’*’

输入40个数据太多,进行测试的时候,可以让计算机生成随机数代替手工输入数据。

3.检验并打印魔方矩阵

在下面的5×

5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。

17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

实验七函数的使用

1.掌握函数的定义和调用方法

2.掌握通过参数在函数间传递数据的方法

1.编写简单程题

(1)输入两个数,输出其中较大的数。

要求定义和调用函数intmax(inta,intb);

找出并返回a,b中较大的数

,其中n的值由键盘输入。

要求:

定义和调用函数doublefact(inta);

求取a!

并返回结果。

注:

此题仅作为自定义函数练习使用,这个程序用函数实现效率会很低。

2.给小学生出加法考试题

编写一个程序,给学生出加法运算题,然后判断学生输入的答案对错与否,可以按下列要求以循序渐进的方式编程。

程序1通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!

”,否则显示“Notcorrect!

Tryagain!

”,程序结束。

程序2通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!

”,直到做对为止。

程序3通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!

”,否则提示重做,显示“Notcorrect!

”,最多给三次机会,如果三次仍未做对,则显示“Notcorrect!

Youhavetriedthreetimes!

Testover!

程序4连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!

”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。

1.较好的用户输入输出提示

2.使用子函数实现两个数相加的测试。

此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。

在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。

intAddTest(inta,intb) 

;

3.仅仅要求完成程序4的编写调试运行工作,程序1至程序3是对编写程序4的引导。

若可以直接编写出程序4,可以直接编写,如果不能一步编写成功,可以根据引导一步步编写。

选做附加题

通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!

”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。

将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上。

实验八数组和函数综合编程练习

1.复习数组和函数的相关知识

2.掌握利用数组存储数据和进行编程的方法

3.进一步掌握函数的编写

1.学生成绩统计

从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:

(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;

(3)统计各分数段的学生人数及所占的百分比。

将成绩分为六个分数段,60分以下为第0段,60~69为第1段,70~79为第2段,80~89为第3段,90~99为第4段,100分为第5段。

1.较好的用户输入输出提示信息

2.使用子函数来实现上述各个功能

3.最好不要使用全局变量

1.用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。

设置计数器count,当score[i]<

60分时,计数器count计数一次,并打印num[i]和score[i]。

2.先计算全班平均分aver,当第i个学生的成绩score[i]>

=aver时,打印num[i]和score[i]。

3.各分数段的学生人数保存在数组stu中,用stu[i]存放第i段的学生人数。

对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。

供参考的函数原型如下:

/*函数功能:

从键盘输入一个班学生某门课的成绩及其学号

当输入成绩为负值时,输入结束

函数参数:

长整型数组num,存放学生学号

实型数组score,存放学生成绩

函数返回值:

学生总数

*/

intReadScore(longnum[],floatscore[]);

统计不及格人数并打印不及格学生名单

长整型数组num,存放学生学号

整型变量n,存放学生总数

不及格人数

intGetFail(longnum[],floatscore[],intn);

计算全班平均分

实型数组score,存放学生成绩

平均分

floatGetAver(floatscore[],intn);

统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单

成绩在全班平均分及平均分之上的学生人数

intGetAboveAver(longnum[],floatscore[],intn);

统计各分数段的学生人数及所占的百分比

voidGetDetail(floatscore[],intn);

2.成绩排名次

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。

考试后要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数

1.良好的用户输入输出提示信息

2.使用子函数实现各个功能

用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。

a)用函数编程实现计算每个学生的总分;

b)用函数编程实现按总分由高到低对学生成绩排序,注意:

排序时,一维数组sum元素的变化应连同二维数组score和一维数组num和aver一起变化;

c)用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找不到时返回-1值

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

当前位置:首页 > 解决方案 > 解决方案

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

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