• 函数


    C语言博客作业03--函数](https://www.cnblogs.com/linli069/p/9837435.html)

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

    0.展示PTA总分(0----2)

    1.本章学习总结(4分)

    1.1 函数定义、调用、声明

    int function( int x, int y );//函数声明
    int main()
    {m=function(j);}//函数调用
    int function( int x, int y )//函数定义,其中函数中的变量与主函数无关,需从新定义
    {
    ...
    return a;//返回a的值给function,若函数头为void则不用写return
    }
    

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

    全局变量 定义在函数外面的变量,就叫全局变量。
    普通的局部变量定义的时候直接定义或者在前面加上auto

    void func1()
    {
     int i = 1;
     
     i++;
     
     printf("i = %d.
    ", i);
    }
    

    静态局部变量(static) 静态局部变量定义时前面加static关键字。
    1、静态局部变量和普通局部变量不同。静态局部变量也是定义在函数内部的,静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。

    2、静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时它不死亡,而是保持其值等待函数下一次被调用。下次调用时不再重新创造和初始化该变量,而是直接用上一次留下的值为基础来进行操作。

    3、静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同

    1.3 C数据类型及注意点

    运用浮点型字符进行相除时,由于可能会出现误差,所以可以+0.0000001保证数据准确性

    1.4 C运算符

    1. 赋值运算符

    = ,+= ,-= ,*= ,/= ,%=

    2. 算术运算符

    / ,- ,+ ,* ,% ,++ ,--

    3. 关系运算符

    == ,< ,> ,<= ,>= ,!=
    其中==,不要少写一个=!!!

    4. 逻辑运算符

    &&——同时 ,||——或 ,!——非

    5. 三元运算符

    int max=a>b?a:b;//如果a>b成立就让max=a,否则max=b;
    

    学习体会

    多写就多会,少写空流泪

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

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

    2.2.1.全局变量

    2.2.2 菜单相关函数

    初始菜单

    void OperateMenu()//游戏操作界面
    
    {
    
        char option;
        int i;
        int temp;
        system("cls");//清屏
        do
        {
            system("cls");
    
            printf("******************************************
    ");
    
            printf("1.一年级口算
    ");
    
            printf("2.二年级口算
    ");
    
            printf("3.三年级口算
    ");
    
            printf("4.退出系统
    ");
    
            printf("******************************************
    ");
    
            printf("请输入您的选择:");
    
            scanf("%c", &option);
    
            switch (option)
            {
    
            case '1':
    
                system("cls");
    
                GradeOneMenu();
    
                //GradeOneMenu();
    
                break;
    
            case '2':
                system("cls");
                GradeTwoMenu();
    
                break;
    
            case '3':
                system("cls");
                GradeThreeMenu();
                break;
    
            case '4':
    
                printf("
    谢谢您的参与!
    ");
    
                Sleep(500);
    
                exit(0);
    
            default:
    
                printf("您输入不对,只能输入1,2,3,4,请重输!
    ");
    
                Sleep(500);
    
            }
    
        } while (!(option >= '1' && option <= '4'));
    
    }
    

    一年级菜单

     system("cls");
            printf("*********************一年级小朋友好!********************************
    ");
            printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
            printf("**如果您不想做,输入n退回主菜单。
    ");
            printf("***************************************************************
    ");
    
            /*1.生成操作数函数*/
            /*2.生成随机运算符函数*/
            /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
            /*4.生成表达式函数,并输出展示*/
    
            printf("是否继续答题y/n:");
            char ch;
            int a, b, c, d, g, i = 0, t = 0, s;
            scanf("
    %c", &ch);
            if (ch == 'n')
            {
                Sleep(500);
                OperateMenu();
                return;
            }
    

    二年级菜单

    system("cls");
            printf("*********************二年级小朋友好!********************************
    ");
            printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
            printf("**如果您不想做,输入n退回主菜单。
    ");
            printf("***************************************************************
    ");
    
            /*1.生成操作数函数*/
            /*2.生成随机运算符函数*/
            /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
            /*4.生成表达式函数,并输出展示*/
    
            printf("是否继续答题y/n:");
            char ch;
            int a, b, c, d, g, t = 0, s, i;//自左到又分别是数字1,数字2,运算符,加法减法乘法的结果,题目数量,答对的题数,是否继续的判断,当前的题数,除法的答案
            float f;
            scanf("
    %c", &ch);
            if (ch == 'n')
            {
                Sleep(500);
                OperateMenu();
                return;
            }
    

    三年级菜单

    system("cls");
            printf("*********************三年级小朋友好!********************************
    ");
            printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
            printf("**如果您不想做,输入n退回主菜单。
    ");
            printf("***************************************************************
    ");
    
            /*1.生成操作数函数*/
            /*2.生成随机运算符函数*/
            /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
            /*4.生成表达式函数,并输出展示*/
    
            printf("是否继续答题y/n:");
            char ch;
            int a, b, c, d, g, t = 0, s, i;
            float f;
            scanf("
    %c", &ch);
            if (ch == 'n')
            {
                Sleep(500);
                OperateMenu();
                return;
            }
    

    2.2.2 出题相关函数

    数字的随机————先选择要答的题数,然后在相关范围随机数字一(a)的值,然后将数字二的值随机为数字一加一(a+1)来避免b会大于a以此避免a-b<0的情况,令b为0时b重新随机避免b为0的情况
    运算符的随机————随机一个数(c)为0到3的数(其中一年级为0到1)将四个数分别代表符号+-*/
    准确率的计算————在程序运行当中,计算其中答案为正确的个数以便在程序结束时可以计算准确率
    中途退出————设置一个标记函数(s)在第一题回答完时出现,输入这个标记函数的值来表示是否继续
    //二年级
    else//选择答题
            {
                /*答题模块*/
                printf("请输入你要做的题目数量:");
                scanf("%d", &g);
                for (i = 1; i <= g; i++)
                {
                    system("cls");
                    printf("第%d到题:
    ", i);
                    srand((unsigned int)time(NULL)); //以时间设置为随机生成 
                    c = rand() % 4;  //随机生成0-3的数 
    
                    if (c == 0)  //加法 
                    {
                        a = rand() % 100;   //随机生成100内的数 
                        b = rand() % 100;   //随机生成100内的数 
                        printf("需要中途退出则请答完这题按提示操作。
    ");
                        printf("%d+%d=", a, b);
                        scanf("%d", &d);
                        if (d == a + b)
                        {
                            printf("恭喜答对了。
    "); t++;
                            printf("退出按0,继续按1。
    ");
                            scanf("%d", &s);
                            if (s == 0)
                            {
                                printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                break;
                            }
                        }
    
                        else
                        {
                            printf("对不起你答错了,正确答案为:%d。
    ", a + b);
                            printf("退出按0,继续按1。
    ");
                            scanf("%d", &s);
                            if (s == 0)
                            {
    
                                printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                break;
                            }
                        }
    
                    }
                    else
                        if (c == 1)  //减法 
                        {
                            a = rand() % 100;//随机生成100内的数 
                            b = rand() % (a + 1);//随机生成a内的数 
                            printf("需要中途退出则请答完这天按提示操作。
    ");
                            printf("%d-%d=", a, b);
                            scanf("%d", &d);
                            if (d == a - b)
                            {
                                printf("恭喜答对了。
    "); t++;
                                printf("退出按0,继续按1。
    ");
                                scanf("%d", &s);
                                if (s == 0)
                                {
                                    printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                            else
                            {
                                printf("对不起你答错了,正确答案为:%d。
    ", a - b);
                                printf("退出按0,继续按1。
    ");
                                scanf("%d", &s);
                                if (s == 0)
                                {
    
                                    printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                        }
                        else if (c == 2)  //除法
                        {
                            printf("若答案为小数请输入三位小数");
                            a = rand() % 10;//随机生成10内的数 
                            b = rand() % 10;//随机生成a内的数
                            while (b == 0)   //除数不为零 
                            {
                                b = rand() % 10;//随机生成a内的数
                            }
                            printf("需要中途退出则请答完这题按提示操作。
    ");
                            printf("%d/%d=", a, b);
                            scanf("%f", &f);
                            if (((f - a / (b * 1.0) <= 0.001) && (f >= a / (b * 1.0))) || ((a / (b * 1.0) - f <= 0.001) && (f <= a / (b * 1.0))))   //因为float存在误差,得用误差算 
                            {
                                printf("恭喜答对了。
    "); t++;
                                printf("退出按0,继续按1。
    ");
                                scanf("%d", &s);
                                if (s == 0)
                                {
                                    printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                            else
                            {
                                printf("对不起你答错了,正确答案为:%.03f。
    ", a / (b * 1.0));
                                printf("退出按0,继续按1。
    ");
                                scanf("%d", &s);
                                if (s == 0)
                                {
    
                                    printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                        }
                        else
                            if (c == 3)   //乘法
                            {
                                a = rand() % 10;//随机生成10内的数 
                                b = rand() % 10;//随机生成a内的数
                                printf("需要中途退出则请答完这天按提示操作。
    ");
                                printf("%d*%d=", a, b);
                                scanf("%d", &d);
                                if (d == a * b)
                                {
                                    printf("恭喜答对了。
    "); t++;
                                    printf("退出按0,继续按1。
    ");
                                    scanf("%d", &s);
                                    if (s == 0)
                                    {
                                        printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                        break;
                                    }
                                }
                                else
                                {
                                    printf("对不起你答错了,正确答案为:%d。
    ", a * b);
                                    printf("退出按0,继续按1。
    ");
                                    scanf("%d", &s);
                                    if (s == 0)
                                    {
    
                                        printf("你做的题正确率是:%.02f%%
    ", t / (i * 1.0) * 100);
                                        break;
                                    }
                                }
                            }
                }
                if (s != 0)
                    printf("你做的题正确率是:%.02f%%
    ", t / ((i - 1) * 1.0) * 100);
                system("pause");
            }
        }
    }
    

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

    两个初始菜单


    输入答案

    题数上限

    中途退出

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

    第一个是通过数字的随机表示运算符的随机
    第二个是通过system("pause");让程序定住

  • 相关阅读:
    vue element-ui 动态上传
    vue element ui 导航刷新 is-active
    算法图解笔记
    简单操作的一些小技巧
    大话数据结构 -07-1 图的定义、抽象数据类型与存储结构
    ELO kernels 记录
    [2] day 02
    [1] first day
    大话数据结构 -04-3 队列
    大话数据结构 -04-2 栈的应用-递归
  • 原文地址:https://www.cnblogs.com/chenyaojia/p/14062862.html
Copyright © 2020-2023  润新知