1. 本章学习总结

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

这几周学习了函数,题目还是原样只是多了种做题的方法。一开始看书感觉声明,定义啊,还有全局变量那些,文绉绉的,都看不太下去,还不如直接做题。但是在做课堂派时,发现没有看书除了简答题填不出来,连选择题都可能会做错。可能实践都需要理论支撑吧。几周学习下来觉得掌握的还是可以,可以分得清不同变量的作用范围和生存周期,函数返回值该如何设定,函数该如何设计。

1.2.2 代码累计

2. PTA总分

2.1 截图PTA中函数题目集的排名得分

2.2 我的总分:145

3. PTA实验作业

3.1 PTA题目1

6-8 使用函数验证哥德巴赫猜想
哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。
其中函数prime当用户传入参数p为素数时返回1,否则返回0;
函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。
又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

3.1.1 算法分析

  • 判断素数函数
  • if p<2
    • 返回0
  • else
    • 定义i
    • for i=2 to i<p do
      • if p%i==0 then

        • 返回0
        • end if
          -返回1
    • end for
  • 输出哥德巴赫数函数
  • 定义i
  • for i=2 to i<=n/2 do
    • if prime(i)&&prime(n-i) then

      • 输出 n=i+(n-i)
      • break
    • end if
  • end for

3.1.2 代码截图

3.1.3 测试数据

测试数据1

测试数据2

测试数据3

3.1.4 PTA提交列表及说明

Q1:编译错误???
A1:觉得编译错误实在很不应该,在dev试过在copy过去都能错误掉,,,
Q2:部分正确
A2:一开始没有用break结束if语句导致连一个数有多种方法输出和题目要求不符,后来加了个break,就可以了

4.大作业

4.1函数关系图

4.2.函数功能介绍

1.函数1

void Screen();
int Menu(int n);
功能:生成界面让整个游戏看起来友好,比较有体验感

void Screen()
{printf("----------------------------------------------\n");printf("            欢迎来到我们的游戏 ^_^            \n");printf("        输入1进来游戏菜单,输入0退出游戏      \n");
}
int Menu(int n)
{scanf("%d",&n);while(n!=0&&n!=1)  {printf("操作错误哦,重新再输入吧\n");scanf("%d",&n); }//让输入是0或1 if(n==1){printf("                  菜单                        \n");printf("         1.等级1:1位数的一步加减乘除计算     \n");printf("         2.等级2:2位数的2步加减运算          \n");printf("         3.等级3:3位数的2步加减运算          \n");printf("            清选择等级进入游戏吧              \n");}else{printf("希望你玩得愉快,下次再来哦");exit(0);}
}

2.函数2

void LevelChoose();
void TitieNumber(int n);
功能:等级选择,然后这个等级选择将会是后续游戏的起点,并且在选择等级后让用户输入想做的题数

void LevelChoose()
{scanf("%d",&level);while(level!=1&&level!=2&&level!=3){printf("你选择的等级不在我们的范围内,清重新输入哦\n");scanf("%d",&level); }//确保选择的等级在范围内 TitieNumber(level);//调用TitieNumber函数,实参为level传入到该函数中作为输出
}
void TitieNumber(int n)
{printf("欢迎来到%d级的游戏,清选择想做的题目数量:\n",n);  scanf("%d",&number);
}

函数3

void Number();
void Operation();
功能:利用srand()函数随机生成数字,运算符,来组成算式供给用户做题,并且各个等级不同

void Number()
{switch(level){case 1:srand(time(NULL));num1=rand()%10;num2=rand()%10;break; case 2:srand(time(NULL));num1=rand()%100;num2=rand()%100;num3=rand()%100; break;case 3:srand(time(NULL));num1=rand()%1000;num2=rand()%1000;num3=rand()%1000; break;}
}
void Operation()
{int operation_1,operation_2;srand(time(NULL));operation_1=rand()%4;operation_2=rand()%2;if(level==1){switch(operation_1){case 0:ch1='+';break; case 1:ch1='-';break; case 2:ch1='*';break; case 3:ch1='/';break; }}else{switch(operation_2){case 0:ch2='+';ch3='+';break; case 1:ch2='-';ch3='-';break; }}} 

函数4

void GameBegin();
double Gameresult();
功能:游戏开始了,根据选择的等级随机生成题目,并且调用Gameresult()函数来判断对错,并且统计正确和错误题数

void GameBegin(){int response;if(level==1){printf("你的题目是%.0f %c %.0f =\n",num1,ch1,num2); } else if(level==2){printf("你的题目是%.0f %c %.0f %c %.0f =\n",num1,ch2,num2,ch3,num3);}else{printf("你的题目是%.0f %c %.0f %c %.0f =\n",num1,ch2,num2,ch3,num3);}scanf("%d",&response);if(response-Gameresult()<0.00001)//调用Gameresult()函数来判断对错 {printf("太棒了,你做对啦\n\n"); printf("你还想继续做题吗?是的话选1,不继续按任意键哦\n\n");right++; }else{printf("啊哦,做错了呢\n\n");printf("正确答案是%d\n\n",Gameresult());printf("别气馁,再来一题吗?是的话选1,不继续按任意键哦\n\n");wrong++;}int n;scanf("%d",&n);printf("\n");if(n!=1) //如果用户想提前退出按任意键即可 {printf("希望你玩得愉快,下次再来哦");exit(0); }if(right+wrong>number)//如果用户做的题数超过了一开始输入的题数给出提示语 {printf("你的做题数目到了呢\n");Accuracy();exit(0);}}
double Gameresult(){double result;switch(ch1)//j一级难度的一步运算i {case '+':result=num1+num2;break;case '-':result=num1-num2;break;case '*':result=num1*num2;break;case '/':result=num1/num2;break;}switch(ch2)//二,三级难度的两步运算 {case '+':result=num1+num2;break;case '-':result=num1-num2;break;}switch(ch3){case '+':result=result+num3;break;case '-':result=result-num3;break;}return result;}

函数4

void Accuracy();
功能:根据之前统计的正确题数和错误题数计算正确率,正确率大于百分之75才输出正确率

void Accuracy(){if(right/(right+wrong)>0.75) {printf("你的正确率有%d%%呢\n欢迎下次再来玩游戏呀\n",100*right/(right+wrong));}else {printf("你的正确率有点低啊,不过没关系,多加练习\n");}}

4.3 运行结果截图

测试结果1

测试结果2

测试结果3

测试结果4

4.4 调试碰到问题及解决办法

Q1:一开始值的传递想用函数调用,没有想到全局变量,然后整个代码的思路都乱七八糟的
A1:在大佬的提醒下,想到了还可以用全局变量,就不用函数调用来传值了
Q2:在随机产生运算符这里愣了一下
A2:想用数组解决来着,但是运算符也不多,于是用来switch
Q3:在测试数据时,发现除法像5/2这种情况就会出错,因为一开始定义的随机数都是int型
A3:于是把它们都改成了double型,并且在判断是否正确时,让它们的误差在一定范围里是正确的

4.5 大作业总结

  • 我的编写过程

    • 先输出个界面让整个游戏比较友好
    • 进入主题,选择等级,随机得到算式
    • 然后判断用户输入的数是否正确
    • 这是大概的思路,然后在函数里面完善各个分支
  • 遇到的问题
    • 值的传递卡住了,后来用了全局变量
    • 代码量一大,有的这个地方错了改一下,另一个相对的地方会忘记改,老是编译错误
    • 产生随机数这个函数不常用,有些不熟悉,只好靠百度了
    • 直接要退出游戏的话,原本想用return 0;的,后来我的函数返回型都是void,就用了exit(0);来退出游戏
    • 整个游戏的代码打了挺久的,都是bug

转载于:https://www.cnblogs.com/hyj-/p/9919788.html

C博客作业03--函数相关推荐

  1. C语言程序设计博客作业03

    C语言程序设计博客作业03 这个作业要求在哪里 C语言程序设计作业03:第十周作业 我在这个课程的目标是 掌握二维数组和字符串的使用方法 这个作业在那个具体方面帮助我实现目标 PTA作业和日常练习 参 ...

  2. c语言|||博客作业03

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17328 这个作业要求在哪里 https://bbs.csdn.net/topi ...

  3. C语言博客作业--函数

    C语言博客作业--函数 一,PTA实验作业 6-2 简单实现x的n次方 1.本题PTA提交列表 2.设计思路 double mypow( double x, int n )函数 (1)定义y=1,i用 ...

  4. C语言第二次博客作业---分支结构

    C语言第二次博客作业---分支结构 一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值 1.代码 double x, result;scanf("%lf&quo ...

  5. OO第三次博客作业——规格

    OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  6. [BUAA OO]第三次博客作业

    OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...

  7. DS博客作业03--栈和队列

    DS博客作业03--栈和队列 1.本周学习总结(0--1分) 谈谈你对栈和队列结构的认识及学习体会. 这章有认真预习,但做题还要依靠书,记不住,可能还需要多加练习,在PTA上的题只做了栈的,队列的做得 ...

  8. C语言|博客作业06

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17321 这个作业要求在哪里 https://bbs.csdn.net/topi ...

  9. C博客作业00--我的第一篇博客

    这个作业属于哪个班级 C语言–网络2011/2012 这个作业的地址 C博客作业00–我的第一篇博客 这个作业的目标 学习Makdown语法,对本专业及C语言课程有个简单了解,记录自学慕课视频的笔记. ...

  10. 2022北航敏捷软件工程 第二次博客作业

    2022北航敏捷软件工程 第二次博客作业 项目 内容 这个作业属于哪个课程 2022年北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 了解软件工程的方法论.在实践 ...

最新文章

  1. java实现单词替换_java – 正则表达式将空格和单词替换为单词的toFirstUpper
  2. FileReader (三) - 网页拖拽并预显示图片简单实现
  3. 微软等数据结构+算法面试100题全部答案集锦
  4. java多线程init,Java多线程 - 线程 - 初识
  5. c 自动生成html文件,webpack4系列教程(三):自动生成项目中的HTML文件
  6. 《统计学习方法》P59决策树绘制-sklearn版本
  7. leetcode-345-翻转字符串中的元音字母
  8. array_column php什么版本可以用,array_column兼容php5.5以下版本
  9. 【转】java反射--注解
  10. python中0o10_Python基础10—I/O编程
  11. MongoDB学习笔记(查询)
  12. OpenCore黑苹果引导配置说明-基于OpenCore-0.7.0-06-08正式版
  13. 【Paddle 入门打卡】用Paddle做MINIST手写数据集识别
  14. python中func函数_Python 函数(func)学习
  15. 准备给ubuntu18.04安装杀毒软件
  16. aid learning安装应用_Aid Learning
  17. PIoU Loss: Towards Accurate Oriented Object Detection in Complex Environments
  18. ADB Interface驱动安装[Android Studio开发]
  19. html压缩包怎么打开,展示电脑rar压缩包文件怎么打开?教你正确打开方式
  20. BIG6——解决问题时收集、利用资料的思路

热门文章

  1. 你知道JVM内存的那些事吗?
  2. Robotframework与unittest对比
  3. CentOS6.5下搭建SVN服务器
  4. 阿里云Elasticsearch的X-Pack:机器学习、安全保障和可视化
  5. mysql 5.7.12 修改密码
  6. 02 如何使用Git
  7. 选择or不选择苹果的理由
  8. redis install note
  9. Dependence Injection
  10. Bound Services