C语言 函数(二)

函数(二)

实验目的
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 '/'; 
	} 
} 

图六
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xlorb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值