函数(二)
实验目的
1.掌握模块化程序设计方法
2.掌握函数的设计
3.掌握函数的嵌套调用
4.掌握循环程序的编写
实验条件:
PC 计算机,Windows7 或 Windows10 操作系统,Office2010 及以上版本,
Dev-C++5.11 及以上版本或 Code Blocks16.01 及以上版本。
实验内容
1 程序调试
计算两个复数之积:分别输入两个复数的实部与虚部,用函数实现计算两个
复数之积。
若两个复数分别为:c1=x1+(y1)i,c2=x2+(y2)i,则
c1c2 = (x1x2-y1y2)+ (x1y2+x2*y1)i
源程序(有错误)
#include<stdio.h>
double result_real, result_image;//全局变量,用于存放函数结果
int main()
{
double image1, image2, real1, real2; //两个复数的实部和虚部
printf("Enter 1st complex number (real and imaginary):");
scanf("%lf%lf", &real1, &image1);
printf("Enter 2nd complex number (real and imaginary):");
scanf("%lf%lf", &real2, &image2);
complex_prod(real1, image1, real2, image2);
printf("product of complex is %f + %fi \n", result_real, result_image);
return 0;
}/*定义求复数之积函数*/
void complex_prod(double x1, y1, x2, y2);
{
double result_real, result_image;
result_real=x1*x2-y1*y2;
result_image=x1*y2+x2*y1;
return result_real,result_image;
}
程序清单如下:
#include<stdio.h>
void complex_prod(double x1,double y1,double x2,double y2);
double result_real, result_image;
int main()
{
double image1, image2, real1, real2;
printf("Enter 1st complex number (real and imaginary):");
scanf("%lf%lf", &real1, &image1);
printf("Enter 2nd complex number (real and imaginary):");
scanf("%lf%lf", &real2, &image2);
complex_prod(real1, image1, real2, image2);
printf("product of complex is %f + %fi \n", result_real, result_image);
return 0;
}
/*定义求复数之积函数*/
void complex_prod(double x1,double y1,double x2,double y2)
{
result_real=x1*x2-y1*y2;
result_image=x1*y2+x2*y1;
}
该程序的运行结果如图 1 所示:
图一
2 基础编程
小学生计算机辅助教学系统
计算机在教育中的应用常被称为计算机辅助教学(CAI)。请编写一个程序来
帮助小学生学习乘法,按照下列任务要求以循序渐进方式编程,要求使用函数完
成程序的功能,实现程序设计的模块化。任务 1:程序首先随机产生两个 1~10 之间的正整数,在屏幕上显示出问题,
如:
6*7=?
然后让学生输入答案。程序检查学生输入的答案是否正确。若正确,则显示
“Right!”, 否则显示“Wrong! Try again.”,然后提示学生重做,直到答对为
止。
程序清单如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int calculate(int x,char op,int y);
int create_random_numbers(void);
int main()
{
int x,y,answer;
srand(time(NULL));
x=create_random_numbers();
y=create_random_numbers();
printf("%d%c%d=?\n",x,'*',y);
printf("Please input your answer\n");
do
{
scanf("%d",&answer);
if(answer==calculate(x,'*',y))
{
printf("Right!\n");
return 0;
}
else if(answer!=calculate(x,'*',y))
{
printf("Wrong! Try again.\n");
}
}while(answer!=calculate(x,'*',y));
}
int calculate(int x,char op,int y)
{
switch(op)
{
case'+':return x+y;
case'-':return x-y;
case'*':return x*y;case'/':return x/y;
}
}
int create_random_numbers(void)
{
return rand()%10+1;
}
该程序的运行结果如图二所示:
图二
任务 2:在任务 1 基础上,当学生回答错误时,最多给 3 次重做机会,3 次
仍未做对的,显示“Wrong! You have tried three times! Test over”, 结
束程序。
程序清单如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int calculate(int x,char op,int y);
int create_random_numbers(void);
int main()
{
int x,y,answer,count;
count=0;
srand(time(NULL));
x=create_random_numbers();
y=create_random_numbers();
printf("%d%c%d=?\n",x,'*',y);
printf("Please input your answer\n");
do
{
scanf("%d",&answer);
if(answer==calculate(x,'*',y))
{
printf("Right!\n");
return 0;
}else if(answer!=calculate(x,'*',y))
{
printf("Wrong! Try again.\n");
}
count++;
}while(answer!=calculate(x,'*',y)&&count<3);
printf("Wrong! You have tried three times! Test over");
return 0;
}
int calculate(int x,char op,int y)
{
switch(op)
{
case'+':return x+y;
case'-':return x-y;
case'*':return x*y;
case'/':return x/y;
}
}
int create_random_numbers(void)
{
return rand()%10+1;
}
该程序的运行结果如如三所示:
图三
任务 3:在任务 1 基础上,连续做 10 道乘法题,不给机会重做,若学生回
答正确,则显示“Right!”, 否则显示“Wrong!”。10 道题全部完成后按每题 10
分统计并输出总分,同时为了记录学生能力提高的过程,输出学生回答正确率(答
对题数占总题数量的百分比)。
程序清单如下:
#include<stdio.h>
#include<time.h>#include<stdlib.h>
int calculate(int x,char op,int y);
int create_random_numbers(void);
int main()
{
int x,y,answer,count,sum,r,ret;
srand(time(NULL));
do
{
x=create_random_numbers();
y=create_random_numbers();
printf("%d%c%d=?\n",x,'*',y);
printf("Please input your answer\n");
scanf("%d",&answer);
if(answer==calculate(x,'*',y))
{
printf("Right!\n");
count++;
}
else if(answer!=calculate(x,'*',y))
{
printf("Wrong!\n");
}
r++;
}while(r<10);
sum=count*10;
ret=sum;
printf("%d,%d%%",sum,sum);
return 0;
}
int calculate(int x,char op,int y)
{
switch(op)
{
case'+':return x+y;
case'-':return x-y;
case'*':return x*y;
case'/':return x/y;
}
}
int create_random_numbers(void)
{ return rand()%10+1;
}
该程序的运行结果如图四所示:
图四
任务 4:在任务 3 基础上,通过计算机随机产生 10 道四则运算题,两个操
作数为 1~10 之间的随机数,运算类型为随机产生的加减乘除中的任一种,不给
重做机会,若学生回答正确,则显示“Right!”, 否则显示“Wrong!”。10 道题
全部完成后按每题 10 分统计并输出总分,同时输出学生回答正确率(答对题数
占总题数量的百分比)。
程序清单如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int calculate(int x,char op,int y);
int create_random_numbers(void);
char createop(void);
int main()
{
int x,y,answer,i,count=0,ret;
char op;
srand(time(NULL));
for(i=1;i<=10;i++)
{
x=create_random_numbers();
y=create_random_numbers();
op=createop();
printf("%d%c%d=?\n",x,op,y);
printf("Please
input your answer\n");
scanf("%d",&answer);
if(answer==calculate(x,op,y)){
printf("Right!\n");
count++;
}
else if(answer!=calculate(x,op,y))
{
printf("Wrong!\n");
}
}
ret=10*count;
printf("%d,%d%%\n",count,ret);
return 0;
}
int calculate(int x,char op,int y)
{
switch(op)
{
case'+':return x+y;
case'-':return x-y;
case'*':return x*y;
case'/':return x/y;
}
}
int create_random_numbers(void)
{
return rand()%4+1;
}
char createop(void)
{
int o;o=rand()%4+1;
switch(o)
{
case 1: return '+';
case 2: return '-';
case 3: return '*';
case 4: return '/';
}
}
图五
任务 5:在任务 4 基础上,为使学生通过反复练习熟练掌握所学内容,在学
生完成 10 道题后,若回答正确率低于 75%,则重新做 10 道题,直到回答正确率
高于 75%时才退出程序。
程序清单如下:
该程序的运行结果如图六所示:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int calculate(int x,char op,int y);
int create_random_numbers(void);
char createop(void);
int main()
{
int x,y,answer,i,count=0,ret;
char op;
srand(time(NULL));
do
{
count=0;
for(i=1;i<=10;i++)
{
x=create_random_numbers();
y=create_random_numbers();
op=createop();printf("%d%c%d=?\n",x,op,y);
printf("Please
input your answer\n");
scanf("%d",&answer);
if(answer==calculate(x,op,y))
{
printf("Right!\n");
count++;
}
else if(answer!=calculate(x,op,y))
{
printf("Wrong!\n");
}
}
ret=10*count;
printf("%d,%d%%\n",count,ret);
}while(ret<=75);
return 0;
}
int calculate(int x,char op,int y)
{
switch(op)
{
case'+':return x+y;
case'-':return x-y;
case'*':return x*y;
case'/':return x/y;
}
}
int create_random_numbers(void)
{
return rand()%4+1;}
char createop(void)
{
int o;
o=rand()%4+1;
switch(o)
{
case 1: return '+';
case 2: return '-';
case 3: return '*';
case 4: return '/';
}
}
图六