#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main(){
srand(time(NULL));
int sum=,sum1,x,y;
float an[],a,b,c;
printf("请输入要随机几道计算题:");
scanf("%d",&sum1);
printf("1.不带乘除法 2.带乘除法 请输入你的选择:");
scanf("%d",&y);
if(y==){
while(sum<sum1){
a=rand()%;
b=rand()%;
c=rand()%;
switch(rand()%){
case :an[sum]=a+b+c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f+%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a+b-c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f+%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b-c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f-%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b+c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f-%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
}
}
printf("答案如下:\n");
for(int i=;i<sum;i++)printf("%d:%.1f\n",i+,an[i]);
}
if(y==){
while(sum<sum1){
a=rand()%+;
b=rand()%+;
c=rand()%+;
switch(rand()%){
case :an[sum]=a+b+c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f+%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a+b-c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f+%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b-c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f-%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b+c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f-%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a+b*c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f+%.1f*%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a+b/c;
if(an[sum]>||an[sum]<||c==)break;
else{
printf("%d:%.1f+%.1f/%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b*c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f-%.1f*%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a-b/c;
if(an[sum]>||an[sum]<||c==)break;
else{
printf("%d:%.1f-%.1f/%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a*b+c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f*%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a*b-c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f*%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a*b*c;
if(an[sum]>||an[sum]<)break;
else{
printf("%d:%.1f*%.1f*%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a*b/c;
if(an[sum]>||an[sum]<||c==)break;
else{
printf("%d:%.1f*%.1f/%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a/b+c;
if(an[sum]>||an[sum]<||b==)break;
else{
printf("%d:%.1f/%.1f+%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a/b-c;
if(an[sum]>||an[sum]<||b==)break;
else{
printf("%d:%.1f/%.1f-%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a/b*c;
if(an[sum]>||an[sum]<||b==)break;
else{
printf("%d:%.1f/%.1f*%.1f=\n",sum+,a,b,c);
sum++;
break;
}
case :an[sum]=a/b/c;
if(an[sum]>||an[sum]<||b==||b==)break;
else{
printf("%d:%.1f/%.1f/%.1f=\n",sum+,a,b,c);
sum++;
break;
}
} }
printf("答案如下:\n");
for(int i=;i<sum;i++)printf("%d:%.1f\n",i+,an[i]);
}
return ;
}

 

部分截图

刚开始我和我的搭档写的软件是一个简单的可以随机显示加减法题目的软件,这种简单的软件对于我和搭档这样写了一年半代码的人来说根本不是问题,不用分工合作,我的搭档一个人五分钟就写出来了,刚开始我们都十分自信,因为我们都认为逐渐改进程序,增加新的功能不过就是多添加几个循环而已。

  接下来我们尝试增加程序的几个功能,比如题目避免重复还有具体的定制,我们一人负责一部分,我的想法是创建两个数组来记录下生成的题目,在下一次生成题目之前和上一次进行比较,重复则另随机函数重新生成,于是我就开始我增加代码的工作。当我准备把我的代码和我的搭档的代码整合到一块儿时,我发现他的思路和我的思路,不一样,他为了程序可以具体选择是否可以加乘除法写了两个循环,这样的话我把我的循环套上去就会产生bug,无奈我们只能重新写。

  我们总结了经验,这一次我们事先彼此之间交换了对于这个程序的意见,最终确定了放弃循环,用switch,case方法来修改,最后我们花了比预期多出好几倍的时间才完成。

  在写程序的过程中,有一次电脑突然产生bug,我们没来得及备份,导致修改的代码完全被重置。如果应用程序需要修改系统设置,记着应用开始前先保存设置,应用结束后要恢复设置,千万别污染环境。

  我们发现其实写程序最困难的并不是写出无bug的代码,而是没有在编写程序之前确定编写程序的方向,在一开始我们写最基础的程序之前就应该构思好框架,这样以后就算是修改程序我们也可以有条不紊,我们应该养成这种写代码时的小习惯,同时也是好习惯。

  现在是模块化程序设计的天下,应用程序要实现的目标就是金字塔尖,进行程序设计规划的意义就在于,对构成金字塔的基础模块进行划分,规划得越详细,模块分工越明确,越容易明白下一步该做什么,这好比搭积木的游戏,我们可以把你的积木块组合成各种各样的形状,但首先要熟悉每个积木块的功能。中国人讲究对称之美,用在编程里也很合适,如果程序里用到A循环嵌套B判断,B判断又包含C循环之类的结构,我们最好是使用缩进法,让A:ENDDO对齐A:DO,B:ENDIF对齐B:IF……诸如此类,依次缩进,总之对称就等于美观加易读。

我的搭档:1759131 徐梓渊

关于我与小组成员逐步升级C代码时的一些感想【第二次作业】的更多相关文章

  1. gerrit设置非小组成员禁止下载代码

    对gerrit有所了解的同学,都知道gerrit 是我们常用的一个来做代码审核的工具,其中的权限管理,是一个非常重要的环节,关于每个权限的使用范围,可以参考博客https://blog.csdn.ne ...

  2. java类成员变量与代码块初始化

    首先根据下面的这个一段代码:引入关于java初始化顺序的问题public class InitationTest extends Person { public InitationTest() { S ...

  3. Confluence 6 如何让我的小组成员知道那些内容是重要的

    如果你的 Confluence 中已经有了很多内容,定义那些内容是重要看起是一件艰巨的任务 —— 但是下面的一些特性能够帮助你的小组确定那些内容是他们应该关心的. 我的空间(My Spaces) 添加 ...

  4. Java类的成员之四:代码块.

    3.2类的成员之四:代码块 ①初始化块(代码块)作用:对Java对象进行初始化 ②程序的执行顺序: ③一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ) ...

  5. 2017-2018-1 Java小组-1623 第二周作业

    2017-2018-1 Java小组-1623 第二周作业 关于游戏软件的问题 讨论结果 20162301张师瑜 20162305李昱兴 20162306陈是奇 20162308马平川 2016231 ...

  6. 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数

    我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...

  7. github提交代码时,报permission denied publickey

    在像github提交代码时,报permission denied publickey. 查找了一下,可能是因为github的key失效了. 按照以下步骤,重新生成key. ssh-keygen 一路默 ...

  8. git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode.

    git 提交代码是会遇到以下问题, git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode. If ...

  9. VS Bug 当获取其他项目的代码时, F5 无法进入调试模式. 也不报错....

    在64位的机子下, 被获用的项目使用X86时会出现. 就会出现   F5 无法进入调试模式. 也不报错.... 打断点也没有用. 在不加入X86项目的代码时, 又可以运行..   解决方案:   检查 ...

随机推荐

  1. springMVC控制器,处理器,映射器,适配器

    前端控制器DispatcherServlet <!--定义spring mvc 的前端控制器Servlet --><servlet> <!--Servlet的名称--&g ...

  2. 大数据面试题——如何找出访问最多的IP

    问题描述: 现有海量日志数据保存在一个超大的文件中,该文件无法直接存入内存,要求从 中提取某天访问BD次数最多的IP 分析解读: 由于这个题目只关心某一天访问次数最多的IP,因此可以首先对文件进行一次 ...

  3. Java——值传递与引用传递

    1.基本类型和引用类型在内存中的保存 (1)基本类型的变量保存原始值,即它代表的值就是数值本身:   基本类型在声明变量时就为它分配了空间:   基本类型在参数传递过程中属于值传递,也就是复制一份数据 ...

  4. vue项目使用前端框架开发,实现滑动效果,若不刷新页面则无法达到预期效果的问题及解决方法

    滑动等效果的初始化时机很重要,在vue项目开发中,需到mounted()钩子函数 (当组件中的DOM结构被渲染好并放到页面中后,会执行这个钩子函数,此时即可初始化滑动效果的js代码). 若组件未挂载到 ...

  5. java应用性能分析

    dump内存信息 通过jps -lm找到进程id jmap -dump:format=b,file=./heap.hprof <pid> 使用jprofile等分析内存占用情况 dump线 ...

  6. linux发布环境初始化脚本

    #参数配置 homeDir=$(pwd) tomcatDir=$homeDir/tomcat logDir=$homeDir/tomcat/logs backUpDir=$homeDir/backup ...

  7. java富文本编辑器KindEditor

    在页面写一个编辑框: <textarea name="content" class="form-control" id="content&quo ...

  8. gprinter佳博打印机androidSDK

    最近在用佳博的SDK做打印的功能,由于一直做的是.net,没有android的基础,这个功能我做了一个多月,包括前期调研佳博打印机的打印方式.佳博打印机有两种打印方式,一种是标签打印,要用到TscCo ...

  9. Blinn-Phong模型

    最近在看基础光照模型,比较感兴趣的是高光反射模型,有下列两种: 1.Phong模型 R = 2*N(dot(N, L)) - L specular = lightColor * SpecularCol ...

  10. JavaScript||什么是面向对象

    什么是对象&面向对象 对象 是一个整体,对外提供功能.例:一个手机 电脑. 面向对象 使用的时候只关注提供的功能不关注内部的细节. 面向对象有三大特点: 抽象:将问题需求抽象出来 例:一个员工 ...