函数

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.\n", 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("******************************************\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();

            //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'));

}

一年级菜单

 system("cls");
        printf("*********************一年级小朋友好!********************************\n");
        printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
        printf("**如果您不想做,输入n退回主菜单。\n");
        printf("***************************************************************\n");

        /*1.生成操作数函数*/
        /*2.生成随机运算符函数*/
        /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
        /*4.生成表达式函数,并输出展示*/

        printf("是否继续答题y/n:");
        char ch;
        int a, b, c, d, g, i = 0, t = 0, s;
        scanf("\n%c", &ch);
        if (ch == 'n')
        {
            Sleep(500);
            OperateMenu();
            return;
        }

二年级菜单

system("cls");
        printf("*********************二年级小朋友好!********************************\n");
        printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
        printf("**如果您不想做,输入n退回主菜单。\n");
        printf("***************************************************************\n");

        /*1.生成操作数函数*/
        /*2.生成随机运算符函数*/
        /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
        /*4.生成表达式函数,并输出展示*/

        printf("是否继续答题y/n:");
        char ch;
        int a, b, c, d, g, t = 0, s, i;//自左到又分别是数字1,数字2,运算符,加法减法乘法的结果,题目数量,答对的题数,是否继续的判断,当前的题数,除法的答案
        float f;
        scanf("\n%c", &ch);
        if (ch == 'n')
        {
            Sleep(500);
            OperateMenu();
            return;
        }

三年级菜单

system("cls");
        printf("*********************三年级小朋友好!********************************\n");
        printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
        printf("**如果您不想做,输入n退回主菜单。\n");
        printf("***************************************************************\n");

        /*1.生成操作数函数*/
        /*2.生成随机运算符函数*/
        /*3.根据年级判断生成的表达式是否合理的函数(选做)*/
        /*4.生成表达式函数,并输出展示*/

        printf("是否继续答题y/n:");
        char ch;
        int a, b, c, d, g, t = 0, s, i;
        float f;
        scanf("\n%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到题:\n", i);
                srand((unsigned int)time(NULL)); //以时间设置为随机生成 
                c = rand() % 4;  //随机生成0-3的数 

                if (c == 0)  //加法 
                {
                    a = rand() % 100;   //随机生成100内的数 
                    b = rand() % 100;   //随机生成100内的数 
                    printf("需要中途退出则请答完这题按提示操作。\n");
                    printf("%d+%d=", a, b);
                    scanf("%d", &d);
                    if (d == a + b)
                    {
                        printf("恭喜答对了。\n"); t++;
                        printf("退出按0,继续按1。\n");
                        scanf("%d", &s);
                        if (s == 0)
                        {
                            printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                            break;
                        }
                    }

                    else
                    {
                        printf("对不起你答错了,正确答案为:%d。\n", a + b);
                        printf("退出按0,继续按1。\n");
                        scanf("%d", &s);
                        if (s == 0)
                        {

                            printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                            break;
                        }
                    }

                }
                else
                    if (c == 1)  //减法 
                    {
                        a = rand() % 100;//随机生成100内的数 
                        b = rand() % (a + 1);//随机生成a内的数 
                        printf("需要中途退出则请答完这天按提示操作。\n");
                        printf("%d-%d=", a, b);
                        scanf("%d", &d);
                        if (d == a - b)
                        {
                            printf("恭喜答对了。\n"); t++;
                            printf("退出按0,继续按1。\n");
                            scanf("%d", &s);
                            if (s == 0)
                            {
                                printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                                break;
                            }
                        }
                        else
                        {
                            printf("对不起你答错了,正确答案为:%d。\n", a - b);
                            printf("退出按0,继续按1。\n");
                            scanf("%d", &s);
                            if (s == 0)
                            {

                                printf("你做的题正确率是:%.02f%%\n", 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("需要中途退出则请答完这题按提示操作。\n");
                        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("恭喜答对了。\n"); t++;
                            printf("退出按0,继续按1。\n");
                            scanf("%d", &s);
                            if (s == 0)
                            {
                                printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                                break;
                            }
                        }
                        else
                        {
                            printf("对不起你答错了,正确答案为:%.03f。\n", a / (b * 1.0));
                            printf("退出按0,继续按1。\n");
                            scanf("%d", &s);
                            if (s == 0)
                            {

                                printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                                break;
                            }
                        }
                    }
                    else
                        if (c == 3)   //乘法
                        {
                            a = rand() % 10;//随机生成10内的数 
                            b = rand() % 10;//随机生成a内的数
                            printf("需要中途退出则请答完这天按提示操作。\n");
                            printf("%d*%d=", a, b);
                            scanf("%d", &d);
                            if (d == a * b)
                            {
                                printf("恭喜答对了。\n"); t++;
                                printf("退出按0,继续按1。\n");
                                scanf("%d", &s);
                                if (s == 0)
                                {
                                    printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                            else
                            {
                                printf("对不起你答错了,正确答案为:%d。\n", a * b);
                                printf("退出按0,继续按1。\n");
                                scanf("%d", &s);
                                if (s == 0)
                                {

                                    printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
                                    break;
                                }
                            }
                        }
            }
            if (s != 0)
                printf("你做的题正确率是:%.02f%%\n", t / ((i - 1) * 1.0) * 100);
            system("pause");
        }
    }
}

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

两个初始菜单


输入答案

题数上限

中途退出

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

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

posted @ 2020-11-30 20:00  山高念做垚  阅读(119)  评论(1编辑  收藏  举报