• 函数


    这个作业属于哪个班级 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("*********************三年级小朋友好!********************************
    ");
    		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
    		printf("**如果您不想做,输入n退回主菜单。
    ");
    		printf("***************************************************************
    ");
    		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 = 
    ", value1, opre, value2);//输出表达式
    
    		printf("是否继续答题y/n:");
    		scanf("
    %c", &ch);
    		if (ch == 'n')
    		{
    			Sleep(1000);
    			OperateMenu();
    			return;
    		}
    		else//选择答题
    		{
    			printf("请输入你的答案:
    ");
    			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("你太棒了!
    ");
    		break;
    	case 1:
    		printf("恭喜你答对了!
    ");
    		break;
    	case 2:
    		printf("你太强了!
    ");
    		break;
    	case 3:
    		printf("继续保持好成绩!
    ");
    		break;
    	}
    }
    
    void Incorrect()//错误提示函数
    {
    	switch (rand() % 4)
    	{
    	case 0:
    		printf("答错了,继续努力!
    ");
    		break;
    	case 1:
    		printf("别灰心,继续加油!
    ");
    		break;
    	case 2:
    		printf("再接再厉!
    ");
    		break;
    	case 3:
    		printf("再试一次!
    ");
    		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大作业中编程技巧总结

    • 分装函数
      将使用多次的函数分装成函数,更方便简洁
    • 注释
      有注释能更加清楚的知道每一部分的作用
    • 多文件编程
      将不同作用的函数分到不同文件中,使得主函数更加简洁
  • 相关阅读:
    [转]谈谈技术原则,技术学习方法,代码阅读及其它
    ImageMagick 详细安装使用 linux (jmagick)
    Sql Server中的表访问方式Table Scan, Index Scan, Index Seek
    在SQL Server中创建用户角色及授权
    LINQ to SQL:创建你的第一个程序
    Sql Server Statement Output
    内置系统账户:Local system/Network service/Local Service 区别
    SQL Server的备份
    SQL Server 使用Agent自动备份数据库
    将sql server 2000的备份文件导入到sql server 2012中
  • 原文地址:https://www.cnblogs.com/ww-yy/p/14010327.html
Copyright © 2020-2023  润新知