#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. 简单的Java ee思维导图

  2. 关于基于LinphoneSDK通话项目开发中遇到的相关问题

    在之前小学期的项目开发当中,我们小组进行的是使用网上开源的LinphoneSDK来开发一款Android端的VOIP电话APP. 因为网上关于这个SDK在安卓端的开发文档相当少,所以我们只能根据少量的 ...

  3. CXF 简单创建Webserver 例子

    最近在弄webserver,因为公司需要用到,来说说,webserver的常用方式吧 1.什么是webservice 1.1   什么是远程调用技术 远程调用数据定义:是系统和系统之间的调用 先说一说 ...

  4. Python的基础语法

    一,编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: 1 # -*- coding: cp-1252 ...

  5. Scientific Toolworks Understand 软件教程

    系统:Ubuntu16.04 x64 安装 安装包 下载地址: part1:http://download.csdn.net/detail/p942005405/9711128 part2:http: ...

  6. YYY0.1YYY

    XXX0.2XXXZZZ目前提供免费下载和自动更新功能,由于自己的时间有限,就我一个开发,后期持续更新在线听歌.mp4转mp3.高音质下载.全球dj网站免费下载功能!ZZZ

  7. 2018-2019-2 20175224 实验一《Java开发环境的熟悉》实验报告

    实验报告封面 实验内容与步骤 Java开发环境的熟悉-1 1.建立“自己学号exp1”的目录 2.在“自己学号exp1”目录下建立src,bin等目录 3.javac.java的执行在“自己学号exp ...

  8. 微信小程序 拖动图片一边进行截取

    简单实现一个画布截取图片的功能 原始图片超出指定尺寸,会进行隐藏,利用短边的宽度截取长边的宽度,拖动生成指定内容的图片 横图 竖图 var box_width = 600; //截取框尺寸 var b ...

  9. Spring Factory

    BeanFactory和FactoryBean均为接口: BeanFactory为IOC容器的创建提供了一个最底层的规范,主要方法包括contains(bean), getBean(class, be ...

  10. web前端技术学习

    $.ajax() ajax数据请求方式,交互,跨域等相关问题 一.请求方式 1.$.ajax() $.ajax({ type:"get",//请求方式“get”和“post” ur ...