目录
引言
我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。
一.实验目的:
- 掌握函数的定义和调用方法;
- 掌握通过参数在函数(模块)间传递数据的方法。
二、实验内容和步骤: |
1.改正下列程序错误,使之完成规定的功能
输入两个数,输出其中较大的数,错误代码如下:
int max(int a, b);
{
if(a>b)
max=a;
else
max=b;
return max;
}
int main()
{
int max,x,y;
printf("输入两个整数,用空格隔开:");
scanf("%d%d",&x,&y);
max=max(x,y);
printf("max=%d\n",max);
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
2. 编写程序实现以下功能
(1)求1!+2!+3!+...+n!,其中n的值由键盘输入。
要求:定义和调用函数double fact(int a);求取a!并返回结果。
注:此题仅作为自定义函数练习使用,这个程序用函数实现效率会很低。
编译环境中正确代码、运行结果截图如下:
(2)编写程序,给小学生出加法运算题,然后判断学生输入的答案对错与否,并统计得分。
功能:连续出10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分和错误题数,然后输出总分和做错的题数。
编程要求:
- 较好的用户输入输出提示
- 使用子函数实现两个数相加的测试。此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。
int AddTest(int a, int b) ;
编译环境中正确代码、运行结果截图如下:
(3)假设一个班级人数不超过40人,请定义一个一维数组用于存放学生成绩。其中,用户输入学生人数,学生成绩随机生成,求班级平均分。
要求:(a)学生人数由用户输入,用户输入的人数数量不超过40。
(b)随机生成学生成绩(成绩为百分制,即大于等于0,小于等于100);
注:该功能用一个函数实现,函数原型为void initClass(int score[], int num);函数原型中score为存放学生成绩的一维数组,num为学生人数
(c)统计班级中平均分;
注:该功能用一个函数实现,函数原型为float avgClass(int score[], int num);函数返回值为平均分,num为学生人数,保留两位小数
编译环境中正确代码、运行结果截图如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 40
void inputScore(float score[],int N);
float avgScore(float score[],int N);
int main()
{
float score[MAXNUM],avg;
int N;
scanf("%d",&N);
/******添加对N的合法性检查的代码,若N不在2-40范围,则输出:输入错误,并退出程序******/
if(N<2||N>40)
{
printf("输入错误");
exit(0);
}
/*******end*************************************************************************/
inputScore(score,N);
avg=avgScore(score,N);
printf("平均成绩为%.2f",avg);
return 0;
}
/******请根据任务要求在下面添加定义上面两个函数的代码*******/
void inputScore(float score[],int N)
{
int i;
for(i=0;i<N;i++)
{
scanf("%f",&score[i]);
if(score[i]<0||score[i]>100)
{
printf("请重新输入\n");
i--;
continue;
}
}
}
float avgScore(float score[],int N)
{
int i;
float sum=0,avg;
for(i=0;i<N;i++)
{
sum=sum+score[i];
}
avg=sum/N;
return avg;
}
三、实验小结
本次实验难度较小,主要难的地方在于不懂随机数的生成,然后上网搜索,最终找到了解法。