函数

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



0.展示PTA总分

1.本章学习总结

1.1 函数定义、调用、声明

🌙函数定义、调用、声明格式

int prime(int n);
int n,p;
n=prime(p);
int prime(int n)
{
    函数体
    return ret;
}
  • int返回值的类型,它可以是C语言中任意的一种数据类型,如:double float char 等等。若没有返回值,则写为void
  • prime 是函数名,是标识符的一种,命名规则和标识符相同。函数名后面的括号( )一定要有,括号内可以看是否传入变量选择是否书写变量,若要传入变量,需写清传入变量的数据类型
  • body函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{ }包围
  • 如果有返回值,在函数体中使用 return 语句返回。return后传出的数据类型要和 prime 一样。
  • 声明;结尾,而定义没有;改为了{}


🌙简单案例

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

  • 全局变量:全局变量也称外部变量,既可以是某对象函数创建,也可以是在本程序任何地方创建。
  • 全局变量可以被本程序所有对象或函数引用。

  • 局部变量:局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。
  • 局部变量的作用域是定义该变量的函数或定义该变量的复合语句,其生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

  • 静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部量始终存在着,也就是说它的生存期为整个源程序。
  • 但是静态局部变量的作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。 

1.3 C数据类型及注意点

🌙整型

没有小数部分的数据。
可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。

  • 短整型short--占据内存大小为2个字节(byte)
  • 整型int--占据内存大小为4个字节(byte)
  • 长整型long--占据内存大小为4个字节(byte)
  • 无符号型unsigned--各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。
    unsigned为类型说明符,由于省去了符号位,故不能表示负数,所以其永远为非负的整型变量。

| 数据类型 | 范围 |
| ---- | ---- | ---- |
| 短整型short | -32768~32767 |
| 整型int | -32768~32767 |
| 长整型long | -2147483648~2147483647 |

  • 它们都是数据类型的一种,区别就在与取值范围,和bit大小不一样。针对不同取值,可以选用不同的数据类型变量。其中,int最为常用。


🌙浮点型

利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。

  • 单精度型float--占据内存大小为4个字节(byte)
  • 双精度型double--占据内存大小为8个字节(byte)

| 数据类型 | 范围 |
| ---- | ---- | ---- |
| 单精度型float | 3.4E–38~3.4E+38 |
| 双精度型double | 1.7E–308~1.7E+308 |

  • 当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。
  • 而当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。


🌙字符型

字符型(Character)数据是不具计算能力的文字数据类型,用字母C表示。

  • 字符型char--占据内存大小为1个字节(byte)

| 数据类型 | 范围 |
| ---- | ---- | ---- |
| 字符型char | 0x00至0xFF |

  • 字符型char包括中文字符、英文字符、数字字符和其他ASCⅡ字符

1.4 C运算符

在一个表达式中可能包含多个不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

  • 优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同
  • 相同优先级中,按结合性进行结合。
  • 大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符(! +(正号) -(负号))、条件运算符(?:)、赋值运算符(=)。

🌙学习体会

  • 函数不能嵌套定义,必须在所有函数之外定义另外一个函数main也是一个函数定义,所以要将定义函数放在main大括号的外面。
  • 函数必须先声明使用,所以要在开头写出函数的声明(即头文件)。
  • 如果函数不接收用户传递的数据,那么定义时可以不带参数,例:
int answer()
{
      int answer=0;
      for(int i=0;i<10;i++)
      {
            answer*=i;
      }
  return answer;
}
    tip:
          ①int是返回类型,可以是int、double、char等;
          ②answer是函数名,后面的`()`一定要有;
  • 在开头处定义函数时不用写大括号,参数间用隔开,例:
#int sum(int a,int b,int c);


2.综合作业(6分):小学生口算表达式自动生成系统

2.1.模块流程图

🌙一年级模块流程图

🌙二年级模块流程图

🌙三年级模块流程图

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

介绍用到核心函数接口及全局变量。

🌙2.2.1.全局变量

char option;//储存用户想进入的页面所对应的数字字符
int incorrectCount = 0;//储存用户回答错误的个数
int correctCount = 0;//储存用户回答正确的个数
double accuracy;//储存用户正确率
int num1, num2;//储存算式中的两个操作数的值
char symbol;//储存随机的操作符
int temp;//交换两个数的值
char ch;//储存判断是否继续答题时用户输入的字符
int RightAnswer;//储存算式的正确答案
int UsersAnswer;//储存用户输入的答案

🌙2.2.2 菜单相关函数

void OperateMenu();//游戏操作界面
void OperateMenu()//游戏操作界面
{
	char option;//储存用户想进入的页面所对应的数字字符
	system("cls");//清屏

	do
	{
		system("cls");
		printf("******************************************\n");
		printf("1.一年级口算\n");
		printf("2.二年级口算\n");
		printf("3.三年级口算\n");
		printf("4.退出系统\n");
		printf("******************************************\n");
		printf("请输入您的选择:");
		scanf(" %c", &option);
		switch (option)//判断用户想进入的对应页面
		{
		case '1':
			system("cls");
			GradeOneMenu();
			break;
		case '2':
			system("cls");
			GradeTwoMenu();
			break;
		case '3':
			system("cls");
			GradeThreeMenu();
			break;
		case '4':
			printf("\n谢谢您的参与!\n");
			Sleep(500);
			exit(0);
		default:
			printf("您输入不对,只能输入1,2,3,4,请重输!\n");
			Sleep(500);
		}
	} while (!(option >= '1' && option <= '4'));
}

🌙2.2.2 出题相关函数

int BuildNum(int grade);//生成操作数
char BuildSymbol(int grade);//生成操作符
int BuildNum(int grade)//生成操作数
{
	int num=0;
	//rand(time(0));
	switch (grade)
	{
	case 1: num = 1 + rand() % 9; break;
	case 2:
	case 3: num = 1 + rand() % 99; break;
	}
	return num;
}
char BuildSymbol(int grade)//生成操作符
{
	int temp=0;
	char symbol;
	switch (grade)
	{
	case 1:temp = 1 + rand() % 2; break;
	case 2:
	case 3:temp = 1 + rand() % 4; break;
	}
	if (temp == 1)
		symbol = '+';
	else if (temp == 2)
		symbol = '-';
	else if(temp == 3)
		symbol = '*';
	else if(temp == 4)
		symbol = '/';

	return symbol;
}

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







2.4.大作业中编程技巧总结

🌙随机数的生成:

①在头文件处需写上#include <time.h>与#include <stdlib.h>
②用srand(time(0))或srand(time(NULL))来生成随机种子
③生成随机数的主体部分1+rand()%9---生成19的随机数;1+rand()%99---生成199的随机数

🌙运算符的生成:

①利用随机数来生成不同的运算符
②如1对应+,2对应-,3对应*,4对应/

🌙执行挂起(Sleep()函数的使用):

①头文件处要写上#include <windows.h>
②函数使用格式Sleep(500)---括号内为挂起(休眠)的时间,单位为ms

🌙答案正误的判断:

①定义一个变量储存正确答案
②定义另一个变量储存用户输入的变量
③比较两者是否相同,若不同则错误

🌙正确率的计算:

①计算终止前用户回答正确的题数
②计算终止前用户回答正确的题数
③用正确的题数除以回答的总题数,即可算出用户本次回答正确率

posted @ 2020-11-30 20:36  noyiie  阅读(141)  评论(1编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css