zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言函数及数组的综合应用——儿童数学运算 and 递归求最大公约数

C语言应用数组递归 函数 and 运算 数学
2023-09-11 14:19:58 时间

最全C系列题目!从0到管理系统

一、C语言数据类型及输出——体重是否正常、球的体积、计算存银行利息and浮点数长度与精度

二、C语言运算符与表达式——输出逆序数and二进制包含0和1的数量and判断是否为2的整数次幂的两种办法

三、C语言基本输入输出程序设计——计算当前时间and转换大写姓名and工资信息表

四、C语言顺序结构程序设计——对调数字and判断三角形

五、C语言选择结构程序设计——“21点”(BlackJack)游戏and一元二次方程and能否被3,5,7,9整除

六、C语言函数、指针应用程序设计——回文数判断and检验子串and仓库库存管理程序

七、C语言输入输出及选择结构程序设计的综合应用——简单超级战士游戏and 取牙签游戏

八、C语言循环结构及数组排序的综合应用——冒泡、插入、选择排序棒图显示and两个超长数相乘

九、C语言函数及数组的综合应用——儿童数学运算 and 递归求最大公约数

十、C语言函数及复杂数据结构的综合应用——简单户籍管理系统


一、实验目的:

(1) 学习和掌握 C 语言函数的定义与调用。
(2) 进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法。
(3) 进一步掌握 C 语言中的数组定义和引用方法。
(4) 学习和掌握根据流程图进行模块化程序设计的思想。

二、实验要求

一、儿童数学运算
(1)定义一个函数。该函数有两个整型的输入参数 randNum1 和 randNum2,其 中,randNum1<=randNum2。该函数的功能是生成 randNum1 到 randNum2 之间 均匀分布的随机整数,该函数的返回值类型是整型。每调用一次该函数,函数返 回一个 randNum1 至 randNum2 之间的随机整数。
(2)定义一个函数。该函数没有输入参数,函数的返回类型是整型。该函数内 部调用上述(1)函数。每调用一次本函数,返回一个 1 至 5 之间的随机整数。
(3)定义一个函数。该函数没有输入参数,函数的返回类型是整型。该函数内 部调用上述(1)函数。每调用一次本函数,返回一个 0-99 之间的随机整数。
(4)定义一个函数。该函数有两个整型的输入参数 num1 和 num2;函数返回值 类型为整型。该函数的功能是:在屏幕上列出一个算式 num1 + num2 =,然后接 受一个键盘输入的计算答案 answer。若结果正确,则屏幕输出一句赞扬的语句, 然后返回函数值 1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案, 然后返回函数值 0。
(5)定义一个函数。该函数有两个整型的输入参数 num1 和 num2;函数返回值 类型为整型。该函数的功能是:在屏幕上列出一个算式 numM1 - numM2 = ,其 中:numM1 是 num1 和 num2 中较大的一个数,numM2 是 num1 和 num2 中较 小的一个数;然后接受一个键盘输入的计算答案 answer。若结果正确,则屏幕 输出一句赞扬的语句,然后返回函数值 1;若结果错误,则屏幕输出一句鼓励的 语句,并输出正确答案,然后返回函数值 0。
(6)定义一个函数。该函数有两个整型的输入参数 num1 和 num2;函数返回值 类型为整型。该函数的功能是:在屏幕上列出一个算式 num1×num2 =,然后接 受一个键盘输入的计算答案 answer。若结果正确,则屏幕输出一句赞扬的语句, 然后返回函数值 1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案,然后返回函数值 0。
(7)定义一个函数。该函数没有输入参数;函数返回值类型为整型。该函数的 功能是:首先调用函数(3)生成两个随机整数 num1 和 num2,并判断 num1 是 否可以被 num2 整除,若不能整除,则判断 num2 是否可以被 num1 整除;否则 调用函数(3)函数重新生成两个新的 num1 和 num2,然后再进行整除性判断; 直到生成的 num1 可以被 num2 整除,或者 num2 可以被 num1 整除;在 num1 可以被 num2 整除的情况下,在屏幕上列出一个算式 num1÷num2=;在 num2 可以被 num1 整除的情况下,在屏幕上列出一个算式 num2÷num1=;然后接受 一个键盘输入的计算答案 answer。若结果正确,则屏幕输出一句赞扬的语句, 然后返回函数值 1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案, 然后返回函数值 0。要求在实验报告中画出该函数的流程图。
(8)定义一个函数。该函数有两个整型的输入参数 num1 和 num2;函数返回值 类型为整型。该函数的功能是:在屏幕上列出一个算式 num1%num2 =,然后接 受一个键盘输入的计算答案 answer。若结果正确,则屏幕输出一句赞扬的语句, 然后返回函数值 1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案, 然后返回函数值 0。
(9)主函数的功能如下:在主函数中调用上面定义的函数,在屏幕上随机循环 出一道 100 以内的数学运算题。另外,定义整型数组 problemNum[5]和整型数组 answerNum[5],这两个数组中分别存储在上述循环过程中加、减、乘、除、求余 等五种类型的题出现的次数,以及这五种类型的题被答对的次数。在用户不想继 续而退出时,在屏幕上显示本次游戏中的加、减、乘、除、求余等五种类型题出 现的数量,以及每一种题被答对的次数。要求在实验报告中画出主函数的流程图。
二、递归法求最大公约数 从键盘输入两个正整数,用递归方法计算输出它们的最大公约数。 提示:假设两个整数分别为 x 和 y,如果 x>y,则 x 和 y 的最大公约数与 x-y 和 y 的最大公约数相同;如果 x<y,则 x 和 y 的最大公约数与 x 和 y-x 的最大公约数 相同;如果 x=y,则 x 或 y 就是最大公约数。

三、代码部分

1.儿童数学运算

/*
 * 文件名称:   综合实验3第一题
 * 作者:       不知何人
 * 完成日期:   2021.5.29
 * 内容摘要:   无
 * 注意:       无
*/

#include<stdio.h>
#include<string.h>
#include<time.h>

int flag=0;		//定义flag作为函数返回值 
int randNUM(int randNum1,int randNum2)
{
	int randnum;

	randnum=rand()%(randNum2-randNum1+1)+randNum1;
	return(randnum);
}
//返回一个 randNum1 至 randNum2 之间的随机整数

int randNUM0()
{
	int randNUM(int randNum1,int randNum2);
	int a;
	a=randNUM(1,5);
	return a;
}
//返回一个 1 至 5 之间的随机整数。

int randNUM1()
{
	int randNUM(int randNum1,int randNum2);
	int a;
	a=randNUM(0,99);
	return a;
}
//返回一个 0-99 之间的随机整数

int count1(int num1,int num2)
{
	int	num,answer;
	flag=0;
	num1=randNUM1();
	num2=randNUM1();	
	num=num1+num2;	

	printf("%d + %d=",num1,num2);
	scanf("%d",&answer);
	
	if(answer==num)
	{
		printf("你答对了!\n");
		flag++;
	}
	else
	{
		printf("加油,下次要答对哦!正确答案是%d\n",num);
	}
	
	return flag;
}
//加法运算 

int count2(int num1,int num2)
{
	int num,answer,temp;
	flag=0;
	num1=randNUM1();
	num2=randNUM1();	

	if(num1<num2)
	{
		temp=num1;
		num1=num2;
		num2=temp;
	}
	
	num=num1-num2;
	
	printf("%d - %d=",num1,num2);
	scanf("%d",&answer);
	
	if(answer==num)
	{
		printf("你答对了!\n");
		flag++; 
	}
	else
	{
		printf("加油,下次要答对哦!正确答案是%d\n",num);
	}
	
	return flag;
}
//减法运算 

int count3(int num1,int num2)
{
	int num,answer;
	flag=0;
	num1=randNUM1();
	num2=randNUM1();
	num=num1*num2;
	
	printf("%d ×%d=",num1,num2);
	scanf("%d",&answer);
	
	if(answer==num)
	{
		printf("你答对了!\n");
		flag++; 
	}
	else
	{
		printf("加油,下次要答对哦!正确答案是%d\n",num);
	}
	return flag;
}
//乘法运算 

int count5(int num1,int num2)
{	
	flag=0;
	int	num,answer;
	num1=randNUM1();
	num2=randNUM1();
	printf("%d %% %d=",num1,num2);
	num=num1%num2;
	scanf("%d",&answer);
	if(answer==num)
	{
		printf("你答对了!\n");
		flag++; 
	}
	else
	{
		printf("加油,下次要答对哦!正确答案是%d\n",num);
	}
	
	return flag;
}
//求余数运算 

int count4()
{
	int randNUM1();
	int num1,num2,num,answer;
	
	do{
		num1=randNUM1();
		num2=randNUM1();	
	}while((num1%num2!=0)&&(num2%num1!=0));
//仅当num1与num2为倍数关系时才显示题目
	if(num1>=num2)
	{
		flag=0;
		num=num1/num2;
		printf("%d ÷%d=",num1,num2);
		scanf("%d",&answer);
		if(num==answer)
			{
			printf("你答对了!\n");
			flag++;
			}
		else
			{
			printf("加油,下次要答对哦!正确答案是%d\n",num);
			}
	}
	else if(num2<num1)
	{
		flag=0;
		num=num2/num1; 
		printf("%d ÷%d=",num2,num1);
		scanf("%d",&answer);
		if(num==answer)
			{
			printf("你答对了!\n");
			flag++;
			}
		else
			{
			printf("加油,下次要答对哦!正确答案是%d\n",num);
			}
	}
	
	return flag;
}
//除法运算 

void main()
{
	srand((unsigned)time(NULL));
	int problemNum[5]={0};		//存放函数出现次数数组 
	int answerNum[5]={0};		//存放正确次数数组 
	int randnumber,i;
	
	printf("请按下回车键开始数学运算。\n");
	while(getchar()=='\n')
	{
		randnumber=randNUM0();		//生成1-5分别对应一种运算 
		int num1=randNUM1();
		int num2=randNUM1();		//调用函数,生成两个0-99的数 
		
		switch(randnumber)
		{
			case 1:
			flag=count1(num1,num2);		//flag为函数返回值 
			problemNum[0]+=1;		//没出现一次该种运算的题目,加一记录 
			answerNum[0]=flag;		//每次答对的时候将flag的值存入answerNum对应元素 
			break;
		
			case 2:
			flag=count2(num1,num2);
			problemNum[1]+=1;
			if(flag==1)
			answerNum[1]=flag;
			break;	
		
			case 3:
			flag=count3(num1,num2);
			problemNum[2]+=1;
			if(flag==1)
			answerNum[2]=flag;
			break;
		
			case 4:
			flag=count4();
			problemNum[3]+=1;
			if(flag==1)
			answerNum[3]=flag;
			break;
		
			case 5:
			flag=count5(num1,num2);
			problemNum[4]+=1;
			if(flag==1)
			answerNum[4]=flag;
			break;
		}

		printf("如果想继续请按回车键,不想继续,请按下其他键退出。"); 
		getchar();
	}
	
	printf("统计结果:\n");
	printf("运算类型   加   减   乘   除  求余\n"); 
	printf("题目数量");
	for(i=0;i<5;i++)
	{
		printf("%4d ",problemNum[i]); 
	}
	
	printf("\n答对次数");
	for(i=0;i<5;i++)
	{
		printf("%4d ",answerNum[i]); 
	}	
	
}

2.求最大公约数

/*
 * 文件名称:   综合实验3第二题
 * 作者:       不知何人
 * 完成日期:   2021.5.30
 * 内容摘要:   无
 * 注意:       无
*/


#include<stdio.h>

int MCD(int x,int y)
{
	int n;

	if(x>y)
	{
		MCD(x-y,y);	
	//输入x>y时,让x-y,直至x<y,进入第二种判断,或者x=y,返回x值,即为最大公约数 
	}
	else if(x<y)
	{
		n=MCD(x,y-x);
	//输入x>y时,让y-x,直至x>y,进入第二种判断,或者x=y,返回x值,即为最大公约数 
	}
	else
	return x;
}
void main()
{
	int MCDnum;
	int x,y;
	
	printf("请输入两个数(空格隔开)");
	scanf("%d%d",&x,&y);
	MCDnum=MCD(x,y);
	printf("最大公约数为%d",MCDnum);
}

总结

我把去年刚学C语言时的代码发出来供新人们参考,别嫌弃啊哈哈(虽然确实很烂!实验报告我也都发了,在主页,我发的全是免费下载)

非常感谢您的观看