《程序设计与问题求解I》实验指导书

时间:2024.4.9

程序设计与问题求解 I

实验指导书

计算机科学与工程学院

刘洪波 唐麟


实验一  熟悉上机环境和顺序结构编程

 

一、实验目的

1.       熟悉VC 6 编程环境

2.       掌握C语言中的输入输出

3.       掌握顺序结构程序设计

二、实验内容和步骤

1.键盘输入与屏幕输出练习

问题1  要使下面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的        

#include  <stdio.h>

main()

{

    char  a, b;

    int c;

    scanf("%c%c%d", &a, &b, &c);

    printf("%c,%c,%d\n", a, b, c);

}

A)1 2 34                              B)1, 2, 34

C)’1’,’2’,34                         D)12 34

问题2  在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示

1 2 34(注:数字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种输入方式:1 2 34↙(以空格作为分隔符)

第3种输入方式:1    2    34↙(以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 <math.h>

#include <stdio.h>

int main( void )

{

   double x = 2.0, y = 3.0, z;

   z = pow( x, y );

   printf( "%.1f to the power of %.1f is %.1f\n", x, y, z );

}

Output

2.0 to the power of 3.0 is 8.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!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。

程序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

Generates a pseudorandom number.

intrand( void);

Return Value

rand returns a pseudorandom number, as described above. There is no error return.

Remarks

The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

Requirements

Example

// crt_rand.c

/* This program seeds the random-number generator

 * with the time, then displays 10 random integers.

 */

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( void )

{

   int i;

   /* Seed the random-number generator with current time so that

    * the numbers will be different every time we run.

    */

   srand( (unsigned)time( NULL ) );

   /* Display 10 numbers. */

   for( i = 0;   i < 10;i++ )

      printf( "  %6d\n", rand() );

}

Sample Output

   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)。

输入输出示例

   Input  m: 1

   Input  n: 100

   Output: 1,6,28

2. 输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。

   输入输出示例

      Input words: The  sum  of  the odd numbers

      Count = 6

三、实验结果与分析

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


实验六 数组的使用

一、实验目的

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

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

二、实验内容

1.编写程序,

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

注释:这里要定义数组中的元素个数至少为10个,即int a[10];

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

在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来。例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。

Grade       Count          Histogram

1                    5              *****

2                   10              **********

3                    7              ******* 

...

提示:

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

三、实验结果与分析

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


实验七 函数的使用

一、实验目的

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

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

二、实验内容

1.编写简单程题

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

要求定义和调用函数int max(int a,int b);找出并返回a,b中较大的数

(2)求,其中n的值由键盘输入。

要求:定义和调用函数double fact(int a);求取a!并返回结果。

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

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

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

程序1  通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。

程序2  通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。

程序3  通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。

程序4  连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。

编程要求:

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

2. 使用子函数实现两个数相加的测试。此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。

int  AddTest(int a, int b) ;

3. 仅仅要求完成程序4的编写调试运行工作,程序1至程序3是对编写程序4的引导。若可以直接编写出程序4,可以直接编写,如果不能一步编写成功,可以根据引导一步步编写。

选做附加题

通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,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,存放学生成绩

  函数返回值:学生总数

*/

int ReadScore(long num[], float score[]);

/*函数功能:统计不及格人数并打印不及格学生名单

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

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

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

  函数返回值:不及格人数

*/

int GetFail(long num[], float score[], int n);

/*函数功能:计算全班平均分

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

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

  函数返回值:平均分

*/

float GetAver(float score[], int n);

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

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

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

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

  函数返回值:成绩在全班平均分及平均分之上的学生人数

*/

int GetAboveAver(long num[], float score[], int n);

/*函数功能:统计各分数段的学生人数及所占的百分比

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

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

  函数返回值:无

*/

void GetDetail(float score[], int n);

2.成绩排名次

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

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

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

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

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

编程要求

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

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

提示

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

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

b)         用函数编程实现按总分由高到低对学生成绩排序,注意:排序时,一维数组sum元素的变化应连同二维数组score和一维数组num和aver一起变化;

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

三、实验结果与分析

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

更多相关推荐:
C++程序设计实验报告

C++程序设计实验报告学号:姓名:班级:指导老师:实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循…

程序设计实验报告模板

C语言程序设计实验报告1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的值传递的方式;(3)掌握函数的嵌套调用及递归调用的设计方法;(4)在编程过程…

Java程序设计实验报告

学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指导教师:20XX20XX学年第二学期金陵科技学院教务处制实验报告书写要求实验报告…

程序设计综合实验报告册

西南交通大学程序设计综合实验实验地点实验学期学生班级学生学号学生姓名任课教师龚勋信息科学与技术学院20xx年4月实验一ATM机用户操作界面业务逻辑编写实验目的及内容1根据ATM的工作流程编写用户界面掌握文本用户...

C程序设计实验报告

C语言程序设计实验报告学号不告诉你哦班级信管一班姓名你猜猜哈哈一实验题目一编程实验猜数问题输入两个整数并求这两个整数的和输入所猜的结果如果输入数比正确的结果要大提示猜大了如果输入数比正确的结果要小提示猜小了当猜...

C程序设计实验报告5

工学院工业设计专业10级20xx至20xx学年度第1学期学号2104021638姓名杨芹芹20xx年9月22日第34节综合楼325教室

C程序设计实验报告2

院专业20xx级20xx至20xx学年度第1学期学号姓名20xx年9月22日第34节综合楼325教室

《高级语言程序设计》实验报告(必看)

高级语言程序设计实验报告

c++程序设计实验报告实验一

C实验报告课程名称C程序设计成绩评定实验项目名称几何形体练习1指导教师实验项目编号1实验项目类型实验地点学生姓名学号学院计算机与信息工程学院专业计算机科学与技术实验时间20xx年11月26日一实验目的熟悉掌握类...

C++程序设计实验报告

C实验报告实验一1实验要求1编写一个函数把华氏温度转换为摄氏温度转换公式如下CF32592编写重载函数Max1可分别求两个整数三个整数两个双精度数三个双精度数的最大值3使用系统函数powxy计算xy的值注意包含...

C程序设计实验报告3-

院专业20xx级20xx至20xx学年度第1学期学号姓名20xx年10月8日第34节综合楼325教室

C++描述程序设计实验报告

《程序设计基础》实验报告实验一面向过程的简单程序设计1.实验目的掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运算符和表达式的使用。掌握赋值语句的使用。掌握数据的输入输出方法。2.实…

程序设计实验报告(37篇)