zoukankan      html  css  js  c++  java
  • 程序思想入门:C/C++学习心得,学习基础

    前言

    C/C++的学习貌似被人称为是入门较难的,以我过来人来说,即使难,但学习之后的好处是明显的,我的C语言老师说,把C学好了,学其他的程序语言都不会困难,我亲身经历了这一点。

    对于C和C++来说,他俩还是有一些区别的,本文将稍稍提出一些C与C++的区别,希望读者能清楚的认识C和C++,规则语法万万不可混淆!

    本文仅为笔者在学习了C/C++之后,总结出一些程序思想方面的内容,望知。本文毫无顺序逻辑,望知。

    何为表达式?

    认真看书或者听课的同学都知道,计算机只知道0和1,我们所写的程序中的表达式是给计算机(或者说编译器)看的,编译器最终还是要给计算机交差,交一份内容全是0和1的作文。所以,在我看来任何的表达式都将表达1和0。我习惯性将他们称之为真和假。在C/C++里,真和假true and false1-0真和假true and false,本质上是有区别的,这个区别靠敲代码中的体会,我表达不出来(真菜)。

    值得注意的是,在C/C++的语法规则中,0是假非0即真
    如何区别呢?

    0 == 假
    1 == 真
    -1 == 真

    这个例子很简短,但信息已经很明显了,假如你是OJ选手,就要有这种强大的逻辑推理能力(或许吧)。
    再拓展一些:

    5-5 == 假
    9-0 == 真
    4-9 == 真
    !(5-5) == 真
    !1 == 假 ?
    !-1 == 假 ?

    除了逻辑推理,还要有逻辑判断,如上所说非0即真,反过来不是非1即假,而是非真即0。那上例中的两个你能解答吗?对于我来说,记住非0即真已经是我的极限了,我不想记任何东西了,辅助我们完善我们逻辑判断的手段,就是不断的试错,没有任何代价的试错,为何不试?至于到底是啥我也不知道,当我需要知道的时候,我会去尝试。

    实际敲代码的过程中,表达式的样子不会都是如上两种例子那么简单的,表达式会比较长,还会有逻辑关系参杂,&&,||,等等,但只需要知道一点,表达式只表达真或者假(1或者0)。

    怎么记忆C/C++标准?

    我的方法是记一些好记的,很基本的东西,比如,int对应%d,非0即真。然后通过不断的做题,其实C的重要的内容还是比较少的(指完成期末考试的要求),大部分其实考试不考,你学会了简单编程,通过不断的练习题目,关于C的内容自然就在做题的过程中学会了。至于更深的一些东西,可以看C Primer Plus,C++看C++ Primer Plus。看当然不能只是看,要试错,试着理解书本说的,把自己的疑问用代码尝试一下。

    怎么做OJ题(Online Judge)?

    做OJ题最直接的目的是参加编程比赛,可以获奖,拿证书充实一下大学生活。做OJ题有很多附加效果,锻炼程序思想是必然的,程序设计期末考试编程题无压力是应该的,锻炼逻辑思维是绝对会的,加强审题能力是肯定的。如果对自己有要求的同学还会养成谨慎、思考全面的思维。网络上有这么一个段子,在程序员岗位上,老手完成一项任务的时间比新手用的多就是这么一个道理。

    回归正题,怎么做OJ题?我总结为一下几点。

    • 题目给出的数据范围不需要我们去判断,我们是被题目要求写出的程序能完美的接受这些输入的数据。
    • 根据题目给出的数据范围确定使用正确类型的变量。
    • 根据题目给出的数据范围确定编写或使用正确的算法,避免超时。
    • 当发现Wrong Answer的时候,重新审题,把关键的地方在看看,再逻辑上审查一遍自己的代码。
    • 发现题目毫无思路的时候,不妨问问同学或者学长,有时候真的没法自己想出来。
    • 可以百度自己需要的工具,而不是答案。
    • 即使搜到了答案,也要把答案吃透了。
    • 提交代码之前,把测试样例通过了是基本要求,但这只是基本要求,还需要自己想一些可能的数据,进行测试,测试完毕改完代码再提交。
    • 每次改完代码都要测试一遍再提交,即使改的内容微不足道。
    • 一道题可能会有多种解法,能有效提高自己的是,去学习使用自己不会的方法;意思是你可以用你知道的方法去做,但是可以尝试使用另外的方法去做,做完了你就又收获了一种思路。
    • 学会正确的读入单行、多行、一行多个的数据,甚至不知道长度的数据。

    我自我感觉做OJ题蛮有成就感的,特别是打榜。这就是虚荣心吧。

    for循环的形式

    C语言中for循环的形式为:for(i=0;i<n;i++)
    C++中for循环的形式为:for(int i=0;i<n;i++)
    这两者的区别是C语言中的i必须事先定义,而C++可以在for循环内直接定义一个作用于本循环内的变量。
    为什么编译的时候不报错呢?一方面是因为你的文件后缀名 是 .cpp。而且因为C++兼容大部分的C,所以你写的C程序使用.cpp后缀在大多数情况下是完全没问题的。
    .cpp 是C++文件的标志。
    .c 才是C文件的标志。
    另一方面的话,自己感兴趣的就去查。

    这里就C中的for进行详细讨论。

    for(;;)  
    for(i=1;;)  
    for(;1;)  
    for(;0;)  
    for(;;i++)  
    

    如上5种形式都是适用的,都是符合C标准的,C标准要求的是什么呢?要求for的括号里面必须有两个';'分号。
    这里我给for循环编个号for( (1) ; (2) ; (3) ),分别有3个位置,1只执行一次;2和3每次循环都执行一次(但不是同时执行,试具体代码而定),2为表达式,表达式可以是任何表达真或者假的东西;3一般是递增或者递减的语句,规则上允许是任何东西,一般是递增递减语句而已,完全不妨碍你写其他的。for()后面如果没有花括号{},将只作用于接下来第一个分号前的语句。习惯上我要求自己for循环只有单条语句的话,直接在for()的右边写,多条语句另起一行加{},如下:

    for(i=0;i<10;i++)
    {
        printf("Now, my age is %d
    ",i);
        printf("How old are you?
    ");
    }
    

    while 和 do while

    while 和 do while 可以互相转换,我就单拿while来说事了。

    while同for一样都是循环,他俩也是可以相互转换的,一般来说,for用于知道次数的循环,while用于不知道次数的循环,这句话可有可无,知道就好,我偏爱于for,几乎所有的情况我都会使用for,但是有的时候用while会更简单,反正用啥都是我们自己决定,这也是程序语言吸引我的地方,我可以写自己想写的。

    与for一样,while我习惯于单条语句写右边,多条语句花括号。

    while的形式一般有两种,这思想同样适用于for,只不过while更好表达而已。
    其一:

    while(判断退出循环的条件)
    {
        需要执行的内容。
    }
    

    其二:

    while(1)    //代表死循环,一直执行的循环,当然我不会那么智障,~~虽然偶尔也会~~。
    {
        需要执行的内容。
        中间穿插判断语句if+break。
    }
    

    if else

    这个太简单了,直接上代码:

    /* 1 */
    if( )
    {
    
    }
    else if( )
    {
    
    }
    else if( )
    {
    
    }
    else
    {
    
    }
    
    /* 2 */
    if( )
    {
    
    }
    else
    {
    
    }
    
    /* 3 */
    if( )
    {
    
    }
    
    /* 4 */
    if( )
    {
    
    }
    else if( )
    {
    
    }
    

    以上四种都是可以的,还是那句话,用什么随你,你想干啥就干啥,符合C标准就行。

    结语

    一时脑子发热想着写下来这些东西,以后可能还会更新这篇文章或者有后续,看情况吧,希望对你有帮助。
    最重要的一点:养成良好的缩进习惯!!!,否则说难听一点你写代码就是拉鸡。

  • 相关阅读:
    Com组件的两种复用方式:包容与集合的区别
    LAPACK/CLAPACK超级无敌算法库
    转:.h头文件 .lib库文件 .dll动态链接库文件关系
    python中类的变量与对象的变量
    重温:Martin Fowler的持续集成
    转:OOD的五个设计原则
    文章资源分享
    代码奔腾 Code Rush
    非ie6、ie7和ie8中iframe在dom中位置改变会引起iframe的指向重新加载
    前端开发利器webStorm
  • 原文地址:https://www.cnblogs.com/Conan-jine/p/13971820.html
Copyright © 2011-2022 走看看