19 5/20-5/22

1.对于含有进制的 数据,如 金钱,时间 等,对这些数据进行 简单运算操作 时:
(1)如果以 int 定义,可以把 进制权级 高的全部换成 进制最小权级,再进行操作;
(2)或者直接以 double 或 float 定义;

2.一道简单的计算题也可以用 枚举 来做,如 2+x=10,求 x,我们完全可以直接 10-2,但也可以 枚举 1~?内的所有数,如果出现符合条件的数,就结束枚举,当然这样做更费时费力,在这里只是说明一下枚举思想的应用;

3.记住一个万能头文件: <bits/stdc++.h>

4.对于 for 循环
for循环语句可以 省略循环转化条件,当然省略后如果 不配合break语句 一起使用就会进入死循环,这样做可以在一定程度上比while语句和 do while语句 更加好用;
不过 省略后的简洁版for语句也不能省略了分号,即这种 for(int i=0;;i++);
另外备注一点:对于死循环,常见有两种生成方式,一种为利用for循环,一种为利用while循环,两者相比之下,for死循环每次执行语句的速度要比while死循环更快一点;

5.循环里面的 自加,自减 不是当等到当前循环结束后才进行 加或减 的操作;
例如,

a=1;
while(??){
    a++;
    r=a;
}//此时的r值为2,不是1;

6.利用 数组指针 也可以遍历数组元素,而且给出一个小思路,当你要倒序遍历的时候,可以不把指向数组首元素的头指针存值,这样数组名就可以作为一个结束循环的控制条件;
即:

int a[10],r;
int *p=a;
for(int i=0;i<5;i++){
    scanf("%d",&r);
    p++;
    *p=r;
}
while(p!=a){    //此时的指针p已经来到最后一个位置,通过 p-- 遍历输出
    printf("%d",*p);
    p--;
}

不过在这样用时要注意一点,即数组的大小一定要比你输入的总元素的个数大一点,因为你的数组首元素只是占了个地址,地址里面并没有存值。
这里要说明一点,我们定义一个数组,定义了多大的数组,就意味着 我们对多少的内存空间获得了 读和写 的权限,其实不仅仅是数组,也可以是单个变量,或者字符串等各种类型的数据,这一点都是一样的,比如,我们定义一条语句,int a; 在这条语句里面,我们定义了一个整型变量a,其实本质上是编译器为我们找到了一块地址,这块地址的大小是四个字节,这块地址以后可以用a来借指,方便我们操作,并且,编译器还赋予了我们 对这块地址的 读写权限;
但我们未定义的地址,原则上我们是不可以使用的,我们最多拥有对未定义的内存空间执行 读的权限,而无法执行写的权限,否则运行窗口就会异常退出,比如 int a[5];如果我们对a[5]赋值,运行之后就会崩溃,我们最多可以查看a[5]这块地址存储的数据,而不可以对它进行更改;
那么为了避免有时我们出现这种失误,即对未定义的内存空间执行 写操作,我们可以把要 用const修饰要定义的变量,const的作用是对它所修饰的变量,用户只能对其执行读的操作,而无法执行写的操作,编译器会在有const的时候只分配给我们读的权限,而不会分配写的权限;
利用const,也可以起到保护数据的作用;

7.对于计数
(1)常规计数,即 只要满足某个条件 则令 const++,一般题目直截了当;
(2)条件限制性计数,有可能面临的情况是 在计数了一段数据之后,有时需要重新计数,这时为了方便,不必再定义其它的计数变量,利用一个转出语句,然后令const=0,可以在这个选择结构里面套一层循环,以遍历所有数据;

if(){
    const++;
    //转出语句;
}
else{
    const=0;
}

(3)计数有时也可以用双重循环来做,目的是解决那种对数据的每一段都需要按某个条件计数,得出所有的count可能值;

for(int i=0;i<n;i++)
{
    int count=0;
    for(int j=i;j<n;j++)
    {
        if(条件)
            //转出count;
        else
            break;
    }
}

(4)对于计数问题,当然大部分也可以用 递归 来做,递归是一个很难去掌握好的东西,但是对于每一道题目,都应该积极尝试 用递归的方法去完成,这对理解递归并熟练使用它很有好处;

8.注意

if(5<n<10)
//这是错误的写法!!!
if(n>5&&n<10)
//这是正确的写法!!!

9.对于有多种情况时使用分支语句
这里有一个小技巧:if语句 或者 else if 语句 的判断体里面 尽量使用 边缘部分的情况,最后的else 语句 使用中间的情况,这样可以尽可能地避免代码错误;
比如:对于 n<150,150<=n<=400;n>400

//不要这样写
if(n<150) {}
else if(n>=150&&n<=400) {}
else {}
//下面这样写更不容易出错
if(n<150) {}
else if(n<150) {}
else {}

当然,对于我举的这个例子,其实怎样写都不应该出错,我之所以这样说,是对于那种需要根据题意,即语言描述的情况下写分支语句时,为了避免因题意理解不当而使用的小方法;

10.注意四舍五入的问题
有时我们可能会需要对我们的数据进行四舍五入的操作,特别是当题目要求说保留多少位小数时,很容易就会因忽略了这个问题导致结果出错,这里介绍一些有关四舍五入相关的知识:
(1)如果你的输入输出用的是 C 的基本输入输出函数,即printf,那么不用担心四舍五入的问题,因为 printf在处理浮点数据时会自动进行四舍五入的操作,不如 printf("%.1f",a); printf会自动四舍五入后并保留一位小数输出;
(2)对于C++里面,对于四舍五入有一个方法:

a=int((a*10)+0.5)/10.0;

对于+0.5,如果大于等于0.5就往前进一位,小于0.5就不往前进,然后强制转换到int会向下取整,正好四舍五入到整数;
如果需要四舍五入到某一位,那么就 * 多少多少然后再除就好了,比如小数点后一位就 *10/10.0 ,后两位 *100/100.0 ,跟一个 .0 代表是浮点运算;

ps:最近几天莫名烦的要命,翘了几节课,尽情打了几个小时的游戏,应该算是有了继续学下去的动力,本来我就不是那种爱学习的人,但却又深知不学习就只能当个废人,偏偏意志力又菜的要死,自控力又弱到爆,最开始是抱着加入Acm的想法来学c语言,我寻思着应该是自己也厌倦了这一期多来天天打游戏,上课睡觉的自己吧,想要让自己单调的生活变得忙起来,充实起来,可能最开始我就是这么想的吧,但学了几天还真是对c慢慢有了一点兴趣,我这个人,有时候就是飘的要命,自大的要命,哦对,有时候也自以为是的要命,学了一个月就感觉自己厉害的不像话,抱着只要认真起来就能创造奇迹这种幼稚到让人笑坏肚子的想法,这种幼稚的想法其实我多了去了,对,大一了,20了,还是没有一点成长。往往现实总不会让人满意,学院组织的编程竞赛让我有一种想要自己指着自己的鼻子笑死的冲动,大笑着说:你可真菜啊,你最开始口口声声说的什么?从小到大,你说过的那一句话不是放屁?又有哪一句话真的做到了? 心里郁结了太多的情绪,总不能释放出去,也是该好好调整一下自己了,有时候这样安安静静地打一些字,自言自语的说一些话真的不错,嗯。。。说起来高中暑假写了那么多的小说故事,本来在上大学之前还想着在大学里可以在业余试试 写作 这条路,看看能不能有点出息呢,,倒是也搁置了。
臭屁了这么多,却是停不下来了,我这个人,让我张嘴说话,我可能憋不出来几句,让我用笔写,用键盘敲,却是几千几万字也能给你搞出来,行了,不说了,最后,请以后每一个有机会看到这里的人,原谅我浪费了你的这一点时间,但我还是想厚颜无耻地麻烦你点开我的主页,看一看我最近几天是否缺了学习更新,如果缺了,劳烦评论让我 滚去刷题,大谢。
好了,睡觉,晚安,这个世界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值