程序思想入门: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\n",i);
    printf("How old are you?\n");
}

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标准就行。

结语

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

posted @ 2020-11-13 23:05  Conan-jine  阅读(278)  评论(0编辑  收藏  举报