函数

这个作业属于哪个班级 C语言--网络2011/2012
这个作业的地址 C博客作业03--函数
这个作业的目标 学习如何设计函数、C语言基本数据类型
姓名 汪月月

0.展示PTA总分

1.本章学习总结

1.1 函数定义、调用、声明

定义

函数类型 函数名(形参类型 形参变量,...)
{
函数内容;
}

  • 函数类型即返回值类型,例如int double,不需要返回值时则用void。
  • 函数名尽量用驼峰命名法,除非指定函数名。
  • 形参与实参:函数定义的是形参,传给函数的是实参,将实参的值传给形参,类型要相同。
  • 如果需要返回值,记得return。
int numberSum(int n)
{
	int i,sum = 0;
	for (i = 1; i <= n; i++)//1--n求和
	{
		sum += i;
	}
	return sum;//返回求和结果
}

调用

变量=函数名(实参);
如果没有返回值就不需要等于变量。

声明

使用函数时要对其进行声明,才能更好使用。
在main函数前面对其进行声明
函数类型 函数名(形参类型 形参变量,...);
最后的分号不要忘记

1.2 全局变量、局部变量、静态局部变量

  1. 作用区域
  • 全局变量:作用于整个程序
  • 局部变量作用于本函数
  1. 存储区
  • 全局变量和静态局部变量在静态存储区
  • 局部变量在栈中
  1. 作用时间
  • 全局变量和静态局部变量分配一次内存,一直都在
  • 局部变量只在使用函数时会出现
  1. 初始值
  • 全局变量和静态局部变量为0
  • 初值不定

1.3 C数据类型及注意点

类型转换

  • 从int转换为float时, 不会发生溢出,但可能有效数字被舍入。
  • 从int或float转换为double时, 因为double的有效位数更多,故能保留精确值。
  • 从float 或double转换为int时,因为int没有小数部分且表示范围更小,故可能发生溢出。将大的浮点数转换为整数可能会导致程序错误。
    char-->short-->int-->unsighed int-->long-->unsighed long-->double<--float

double型相除

double型变量相除时,需要先转换成二进制,计算后再转化为十进制,因为存在小数,所以转化为十进制时,存在误差,
导致整除结果不准确,可以加上0.000001保证数据正确性。

1.4 C运算符

1. 赋值运算符

= ,+= ,-= ,*= ,/= ,%=
只有初始化后才能使用

2. 算术运算符

/ ,- ,+ ,* ,% ,++ ,--
a++为后增运算,++a为前增运算,最后结果都是a加了1.
不同的是,将其赋给某个变量时进行的操作不同。

3. 关系运算符

== ,< ,> ,<= ,>= ,!=
尤其注意==,不要少写

4. 逻辑运算符

&& ,|| ,!

5. 三元运算符

例如:int max=a>b?a:b;
判断a和b的值,如果a>b成立就让max=a,否则max=b;

6. 位运算

优先级

!> 算术运算符>关系运算符>&&>||>赋值运算符

2.小学生口算表达式自动生成系统

2.1模块流程图

2.2函数功能及全局变量介绍

void OperateMenu();//游戏操作界面
void GradeOneMenu();//一年级
void GradeTwoMenu();//二年级
void GradeThreeMenu();//三年级

int operandsNumber(int grade);//生成操作数函数
char opera(int grade);//生成随机运算符函数
int ComputerResult(int numberOne, int numberTwo, char b);//计算结果函数

void Correct();//回答正确函数
void Incorrect();//回答错误函数

列举一个年级的例子

#include"HeadfileCalculation.h"
void GradeThreeMenu()//三年级
{

	while (1)
	{
		system("cls");
		printf("*********************三年级小朋友好!********************************\n");
		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
		printf("**如果您不想做,输入n退回主菜单。\n");
		printf("***************************************************************\n");
		int value1, value2;
		int UserNumber, ComputerNumber;
		char opre;
		char ch;
		
		value1 = operandsNumber(3);/*生成操作数*/
		value2 = operandsNumber(3);/*生成操作数*/
		opre = opera(3 );/*生成随机运算符*/
		while (opre == '-' && value1 < value2)//结果不能是负数
		{
			value2 = operandsNumber(3);
		}
		while (value1 % value2 != 0)//判断整除
		{
			value2 = operandsNumber(3);
		}
		printf("%d %c %d = \n", value1, opre, value2);//输出表达式

		printf("是否继续答题y/n:");
		scanf("\n%c", &ch);
		if (ch == 'n')
		{
			Sleep(1000);
			OperateMenu();
			return;
		}
		else//选择答题
		{
			printf("请输入你的答案:\n");
			scanf("%d", &UserNumber);//用户计算的结果
			ComputerNumber = ComputerResult(value1, value2, opre);//计算机的结果
			if (UserNumber == ComputerNumber)
			{
				Correct();//正确提示
				Sleep(1000);
			}
			else
			{
				Incorrect();//错误提示
				Sleep(1000);

			}

		}
	}

}

其他功能函数

#include"HeadfileCalculation.h"

int ComputerResult(int numberOne, int numberTwo, char b)//计算结果函数
{
	int result = numberOne;
	if (b == '+') { result = result + numberTwo; }
	if (b == '-') { result = result - numberTwo; }
	if (b == '*') { result = result * numberTwo; }
	if (b == '/') { result = result / numberTwo; }
	return result;
}
void Correct()//正确提示函数
{
	switch (rand() % 4)
	{
	case 0:
		printf("你太棒了!\n");
		break;
	case 1:
		printf("恭喜你答对了!\n");
		break;
	case 2:
		printf("你太强了!\n");
		break;
	case 3:
		printf("继续保持好成绩!\n");
		break;
	}
}

void Incorrect()//错误提示函数
{
	switch (rand() % 4)
	{
	case 0:
		printf("答错了,继续努力!\n");
		break;
	case 1:
		printf("别灰心,继续加油!\n");
		break;
	case 2:
		printf("再接再厉!\n");
		break;
	case 3:
		printf("再试一次!\n");
		break;
	}
}

int operandsNumber(int grade)//生成操作数
{
	int num;

	switch (grade)
	{
	case 1:
		num = 1 + rand() % 9;
		break;
	case 2:
		num = 1 + rand() % 99;
		break;
	case 3:
		num = 1 + rand() % 999;
		break;
	}
	return num;
}

char opera(int grade)//生成随机运算符函数
{
	int selt;
	char op;

	if (grade == 1)
	{
		selt = rand() % 2;
	}
	if(grade==2||grade==3)
	{
		selt = rand() % 2+2;
	}
	switch (selt)
	{
	case 0:
		op = '+';
		break;
	case 1:
		op = '-';
		break;
	case 2:
		op = '*';
		break;
	case 3:
		op = '/';
		break;
	}
	return op;

}


2.3运行结果截图,测试用例

将代码分装






2.4大作业中编程技巧总结

  • 分装函数
    将使用多次的函数分装成函数,更方便简洁
  • 注释
    有注释能更加清楚的知道每一部分的作用
  • 多文件编程
    将不同作用的函数分到不同文件中,使得主函数更加简洁
posted @ 2020-11-29 19:18  w4  阅读(168)  评论(1编辑  收藏  举报