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

C博客作业03--函数的更多相关文章

  1. C博客作业03——函数

    0.展示PTA总分 截图展示: 1.本章学习总结 1.1学习内容总结 (a)函数的定义 1)函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种,scanf(),printf()等为库函数 ...

  2. C博客作业03—函数

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...

  3. DS博客作业03——栈和队列

    1.本周学习总结 谈谈你对栈和队列结构的认识及学习体会. 栈和队列的本质就是线性表.所以,相应的栈跟队列都有两种存储结构:顺序存储结构.链式存储结构. 栈的特点是后进先出,根据栈时进时出的规则,出栈的 ...

  4. DS博客作业03—栈和队列

    1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...

  5. C语言I博客作业03

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...

  6. C语言1博客作业03

    这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 (https://edu.cnblogs.com) 我在这个课程的目标是 掌握函数运算 我在这个作业哪个具体方面帮助实现目标 编译一些基本生 ...

  7. c语言l博客作业03

    问题 答案 这个作业属于哪个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8727 我在这 ...

  8. C语言I 博客作业03

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...

  9. C语言Ⅰ博客作业03

    一. 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8718 我在这个课 ...

  10. xc语言l博客作业03

    问题 答案 这个作业属于那个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/8719 我在 ...

随机推荐

  1. __http原理__03__content-type 对照表

    HTTP content-type Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个文件, ...

  2. JS-函数声明 和 函数表达式

    问题: 1, function foo() {}; 2, var foo = function () {}; 1,上面的语法是声明,可以提升,因此在函数定义的上方也可以调用 2,下面的语法是函数表达式 ...

  3. springmvc 学习资料

    https://github.com/brianway/springmvc-mybatis-learninghttps://www.bilibili.com/video/av18288362?from ...

  4. Error creating bean with name 'dataSource' defined in class path resource 报错解决办法

    在学习spring boot 的数据库操作的时候,报了一串错误

  5. robotframework RF使用中需要安装的工具和库

    确保 Python 3.6.2 安装成功 安装 如下 RF使用中需要的工具和库 1. RF 在两个Python中安装 robotframework执行命令 pip install robotframe ...

  6. VUE 安装&创建一个项目

    1,安装node.js vue依赖nodejs,所以首先要安装node.js 然后打开cmd,输入命令, node -v.正常出现版本号,说明你已经安装成功了 下载地址:http://nodejs.c ...

  7. mysql 字符集

    mysql -u root -p 输入密码进入mysql show variables like 'character%'; --显示字符集,像这样 \q退出mysql, 更改mysql配置文件 vi ...

  8. js获取浏览器和设备的 width和height,

    获取宽高参考: 方法: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  9. 友金所招聘Java工程师面试题

    友金所是一家位于深圳南山科技园的P2P网贷公司,用友集团控股.该公司采用渐进式的问答面试,没有笔试题.比如面试者说熟悉多线程,面试官就问哪些方式解决并发:面试者说采用Synchronized或者Ree ...

  10. [LeetCode] 139. Word Break_ Medium tag: Dynamic Programming

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...