软件工程专业的“乐趣“

软件工程专业的“乐趣”


学号:16340072
数据科学与计算机学院


目录

1.Helloworld作业

“Helloworld”–最简单的程序。或者说是一个让初学者感受程序乐趣的程序。程序内容就是在显示器显示”Helloworld”的字幕。

在软件工程专业课第一次上机,作业就是“Helloworld”程序。当时老师给我们的代码模样就是这样。

# include <stdio.h>

int main()
{
    printf("Helloworld");
    return 0;
}

然后我很天真地把代码“复制”地打到中大的vmatrix,提交后让中大作业评分系统评分。我满怀自信,这样“复制”,肯定有100分。结果却事与愿违,80分。我想这怎么可能,肯定系统出错,然后我在提交了一次。结果一样是80分。“系统错误,肯定是系统错误”,于是我就什么代码都不打,直接提交。Feekback:0;好吧,系统没有错误。所以我只好问一下拿了100分的同学,答案是什么。看了看,噢,原来Hello与world之间有个逗号。

# include <stdio.h>

int main()
{
    printf("Hello,world");
    return 0;
}

于是我把这个提交,结果还是没有100分。我再问一下同学。。。当我听后,一脸懵B,坑。。。原来world前面还有空格。。

# include <stdio.h>

int main()
{
    printf("Hello, world");
    return 0;
}

经过辛苦的尝试,我终于拿了100分。。。
然后我得了个结论:
其实“Helloworld”,好“难”。


2.浮点数二进制表示

浮点数(其实是正数与小数的结合吧,例如3.14)。因为计算机只能识别0,1(机器语言)。所以数据的储存也是以二进制保存。
以十进制与二进制相互转化为例。
(01110001)2转化十进制。
根据公式:
ni=1diR(ni) =d1*R(n-1)+d2*R(n-2)+……+dn*R0;

(01110001)2=0*27+1*26+……1*20=113;

十进制转化为二进制,就是不断除2取余数。这里就不详细说了

而浮点数转化为二进制储存更为复杂。第一次听课时,因为老师讲得太快,根本听不懂。于是我就上网查,想弄明白。结果搞了一个晚上,还是一脸懵B。最后就把转化的步骤记住就算了。

浮点数二进制由符号位、阶码、尾数 。

类型 符号位长度 阶码长度 尾数长度
float 1 8 23
double 1 11 52

以下通过几个例子讲解浮点数如何转换为二进制数例一:已知:double类型38414.4。求:其对应的二进制表示。
分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
最高位63位是符号位,1表示该数为负,0表示该数为正;
62-52位,一共11位是指数位;
51-0位,一共52位是尾数位。

步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。
把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理:1
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……
实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。

如果你耐心的话:
38414.4(10)=1001011000001110.0110011001100110011001100110011001100(检查时会数数数到斗鸡眼)

或者可以如下理解:
1.001011000001110 0110011001100110011001100110011001100×2^15

于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023(2^10-1),在这里,阶码:15+1023=1038。二进制表示为:100 00001110;

符号位:因为38414.4为正对应 为0;
合在一起(注:尾数二进制最高位的1不要):
01000000 11100010 11000001 110 01100 11001100 11001100 11001100 11001100

就是这么“简单”。2


3.vmatrix作业评分系统

这节是我对学校vmatrix作业评分系统的吐槽。
这里写图片描述

这是vmatrix上的一道练习题。当时我遵循题目打了一套代码如下

# include <stdio.h>

int main()
{
    double p[10000];
    int N;

    int i,j,k,t;
    double M;
    double v;
    t=-1;

    scanf("%d %lf",&N,&M);
    int a =(N>=2 && N<=20);//&&表示"与",当括号内正确时,a==1.
    int b =(M>=0.5 && M<=1);

    if(a==1 &&b ==1)//判断M,N是否符合题目要求。
        for(i=2;i<=N;i++)
        {
            for(j=1;j<i;j++)
            {
                t++;
                p[t] = (double)j / (double)i;
                k = t-1;

                if(p[t] == p[0] && (t)!=0)
                    continue;

                while(p[t]!=p[k] && k>0)
                    {

                        k--;
                    }

                if(k!=0 && (t)!=0)
                    continue;


                if(p[t]<=M)
                    printf("%d/%d\n",j,i);

            }
        }




    return 0;
}

结果评分系统给了我99分。。。,说我的程序太复杂。于是我就删除了一些,改成如下。

# include <stdio.h>

int main()
{
    double p[10000];
    int N;

    int i,j,k,t;
    double M;
    double v;
    t=-1;

    scanf("%d %lf",&N,&M);
    for(i=2;i<=N;i++)
        {
            for(j=1;j<i;j++)
            {
                t++;
                p[t] = (double)j / (double)i;
                k = t-1;

                if(p[t] == p[0] && (t)!=0)
                    continue;

                while(p[t]!=p[k] && k>0)
                    {

                        k--;
                    }

                if(k!=0 && (t)!=0)
                    continue;


                if(p[t]<=M)
                    printf("%d/%d\n",j,i);

            }
        }




    return 0;
}

就是少了判断M,N的取值范围。结果评分为100分。汗。
这个网上交作业。。网上评分好像是我们师兄大牛们做出来的,我们是第一届使用的,可能问题多多。所以就钻了几个空子拿100分。哈哈!!
希望师兄能改善一下评分系统吧,这样就能规范我的代码了。


4.制作小游戏

软件导论课最有趣的作业就是制作游戏。Constuct 2软件,让一个小白也会做游戏。虽然游戏有点无聊,但做出来挺有成就感。因为不会导出,所以无法让读者尝试了。我只能用图片来描述一下:

首先是游戏画面,然而一个开始键的设计就有好多讲究。
这里写图片描述

接着就是游戏开始画面了,鼠标单击是射出一发子弹。
这里写图片描述

当分数达到10时。会出现小泡。然后吃了之后就变成了super plane..
鼠标单击会射出三发子弹。
这里写图片描述

最终就是boss的出现了。(哈哈 好中二)
这里写图片描述

制作这个游戏最烦就是收集素材,然后还要PS,弄flash。。。所以制作游戏其实要通才的。
几个小时才能完成一个无聊的小游戏。。(其中还有上网看视频看怎么做)

最后希望读者能评论一下,你懂的!!

(最后就是希望读者能评论一下,你懂的!!)


  1. IEEE,全称是Institute of Electrical and Electronics Engineers,电气电子工程师学会。
  2. 详细解析:
    http://zhidao.baidu.com/link?url=-qB9OpwMaFfwaclpMWb9KXRWMzTWgtYKaCPRE5zZVUNUnXYaeuRSOgrI_A0UO-pR2vmSdWo7eJzvtMyFtIah04L7W2Dd1lckT_O8nGrrdZ3

猜你喜欢

转载自blog.csdn.net/Howlyao/article/details/52723415