《程序设计与问题求解I》实验指导书.docx
- 文档编号:9347140
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:18
- 大小:29.03KB
《程序设计与问题求解I》实验指导书.docx
《《程序设计与问题求解I》实验指导书.docx》由会员分享,可在线阅读,更多相关《《程序设计与问题求解I》实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
《程序设计与问题求解I》实验指导书
程序设计与问题求解I
实验指导书
计算机科学与工程学院
刘洪波唐麟
实验一熟悉上机环境和顺序结构编程
一、实验目的
1.熟悉VC6编程环境
2.掌握C语言中的输入输出
3.掌握顺序结构程序设计
二、实验内容和步骤
1.键盘输入与屏幕输出练习
问题1要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的。
#include
main()
{
chara,b;
intc;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A)1234B)1,2,34
C)’1’,’2’,34D)1234
问题2在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示
1234(注:
数字1、2之间用空格分开,2跟34之间也有空格,3、4之间没有任何分隔符),则应修改程序中的哪条语句?
怎样修改?
问题3要使上面程序的键盘输入数据格式为1,2,34(注:
逗号隔开),输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?
怎样修改?
问题4要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为
'1','2',34,则应修改程序中的哪条语句?
怎样修改?
[提示:
利用转义字符输出字符单引号字符。
]
问题5要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1','2',34,则程序应修改程序中的哪条语句?
怎样修改?
第1种输入方式:
1,2,34↙(以逗号作为分隔符)
第2种输入方式:
1234↙(以空格作为分隔符)
第3种输入方式:
1234↙(以Tab键作为分隔符)
第4种输入方式:
1↙
2↙
34↙(以回车符作为分隔符)
提示:
使用scanf("%c%*c%c%*c%d",&a,&b,&c);
其中,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
#include
#include
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)
一、实验目的
1.学习循环语句的使用方法
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
rand
ANSI,Win98,WinMe,WinNT,Win2000,WinXP
Generatesapseudorandomnumber.
intrand(void);
ReturnValue
randreturnsapseudorandomnumber,asdescribedabove.Thereisnoerrorreturn.
Remarks
Therandfunctionreturnsapseudorandomintegerintherange0toRAND_MAX.Usethesrandfunctiontoseedthepseudorandom-numbergeneratorbeforecallingrand.
Requirements
Routine
Requiredheader
Compatibility
rand
ANSI,Win98,WinMe,WinNT,Win2000,WinXP
Example
//crt_rand.c
/*Thisprogramseedstherandom-numbergenerator
*withthetime,thendisplays10randomintegers.
*/
#include
#include
#include
intmain(void)
{
inti;
/*Seedtherandom-numbergeneratorwithcurrenttimesothat
*thenumberswillbedifferenteverytimewerun.
*/
srand((unsigned)time(NULL));
/*Display10numbers.*/
for(i=0;i<10;i++)
printf("%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 { 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中较大的数 (2)求 ,其中n的值由键盘输入。 要求: 定义和调用函数doublefact(inta);求取a! 并返回结果。 注: 此题仅作为自定义函数练习使用,这个程序用函数实现效率会很低。 2.给小学生出加法考试题 编写一个程序,给学生出加法运算题,然后判断学生输入的答案对错与否,可以按下列要求以循序渐进的方式编程。 程序1通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right! ”,否则显示“Notcorrect! Tryagain! ”,程序结束。 程序2通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right! ”,否则显示“Notcorrect! Tryagain! ”,直到做对为止。 程序3通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right! ”,否则提示重做,显示“Notcorrect! Tryagain! ”,最多给三次机会,如果三次仍未做对,则显示“Notcorrect! Youhavetriedthreetimes! Testover! ”,程序结束。 程序4连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right! ”,否则显示“Notcorrect! ”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。 编程要求: 1.较好的用户输入输出提示 2.使用子函数实现两个数相加的测试。 此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。 在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。 intAddTest(inta,intb) ; 3.仅仅要求完成程序4的编写调试运行工作,程序1至程序3是对编写程序4的引导。 若可以直接编写出程序4,可以直接编写,如果不能一步编写成功,可以根据引导一步步编写。 选做附加题 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right! ”,否则显示“Notcorrect! ”,不给机会重做,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,存放学生学号 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值: 不及格人数 */ intGetFail(longnum[],floatscore[],intn); /*函数功能: 计算全班平均分 函数参数: 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值: 平均分 */ floatGetAver(floatscore[],intn); /*函数功能: 统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单 函数参数: 长整型数组num,存放学生学号 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值: 成绩在全班平均分及平均分之上的学生人数 */ intGetAboveAver(longnum[],floatscore[],intn); /*函数功能: 统计各分数段的学生人数及所占的百分比 函数参数: 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值: 无 */ 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值 三、实验结果与分析 将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计与问题求解I 程序设计 问题 求解 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)