读了哪本入门书后可以看懂《c专家编程》、《c和指针》、《c陷阱与缺陷》、《c程序设计语言》

读了哪本入门书后可以看懂《c专家编程》、《c和指针》、《c陷阱与缺陷》、《c程序设计语言》,第1张

c程序设计语言,谭浩强版

这是C语言的最基础的一本书,讲的也不错。

然后就可以看《C和指针》了,C语言的重点就是指针的灵活利用。

至于《c专家编程》,《c陷阱与缺陷》,有时间看就行,没必要去认真学习,这两本书等你用C语言时间久了,用的熟练了,这两本书是教你如何写出更好更有效率的程序。

问题一:什么是代码,代码怎么写,怎样写入电脑 代码

code

A一组有序的数字或字母的排列,是代表客观实体及其属性的符号。

B记录计算机程序的符号。

代码设计的原则包括惟一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。

1理论上的概念

源代码是相对目标代码和可执行代码而言的。

源代码就是用汇编语言和高级语言写出来的地代码。

目标代码是指源代码经过编译程序产生的能被cpu直接识别二进制代码。

可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。

2最直观的概念

在这个网页上右键鼠标,选择查看源文件出来一个记事本,里面的内容就是此网页的源代码

===================================================

关于两者的区别联系:

1从字面意义上来讲,源文件是指一个文件,指源代码的 源代码则是一组具有特定意义的可以实现特定功能的字符(程序开发代码)

2源代码在大多数时候等于源文件

枫舞在上面说过2最直观的概念 在这个网页上右键鼠标,选择查看源文件出来一个记事本,里面的内容就是此网页的源代码这句话就体现了他们的关系,此处的源文件是指网页的源文件,而源代码就是源文件的内容,所以又可以称做网页的源代码

问题二:怎样写代码? 那就再看一本好一点的C书(国内很多书不敢恭维,可能是老师还要讲,所以全是框框条条)

可以看看下面的书:

两本入门书选一本:(我是看第二本入门,听说谭浩强的也不错,自己选吧)

《C程序设计》(谭浩强)

《C语言入门经典》(Ivor Horton )

进阶书:

《C缺陷与陷阱》

《C专家编程》

《C与指针》

《The C Programming Language》

如果你把进阶书都看完了(并理解),那你就可以算是高手了。

记住学编程最重要的两件事:实践和坚持不懈地博览群书。

祝你好运。

问题三:c++代码如何写 #includeusing namespace std;class Teacher{private: int num; char pName; int age;public: 构造 Teacher(int n,char p,int a) { num = n; pName = new char[sizeof(p)+1]; strcpy(pName,p); age = a; } 类型转换构造函数 这个方法我也不太会用 Teacher(int n) { num = n; strcpy(pName,0); age = 0; } void changeNum(int n) { num = n; } void changeName(char p) { pName = new char[sizeof(p)+1]; strcpy(pName,p); } 拷贝构造 Teacher(const Teacher &tea) { num = teanum; pName = new char[sizeof(teapName)+1]; strcpy(pName,teapName); age = teaage; } 析构 ~Teacher() { delete []pName; } void show() { cout 问题四:这样的DIV怎么写代码 ]@]@]

@

问题五:如何学会写代码? 我晕、兄弟你要是完全靠自己自学的话、估计这个还是有点难哈、我建议你先学习C语言哈、在百度上搜索到处都是教程的、C语言是最基础的东西、要学习它那种编程的思想哈、学习C语言就像是你学习认汉字要先学会拼音是一样的、你现在看不懂是因为你还没接触过、C#也是一门语言哈、是微软出的、最开始是C语言、然后有C++语言、而现在的C#就相当于是C++++哈、你先把C语言搞懂了、在进行学习C#吧、其实还有很多方向的、等你学到一定的程度你就懂了、代码和软件的关系我这样给你说嘛、比如一个软件的各种功能都是靠代码去实现功能的哈、给你举个例嘛、在你的电脑桌面上、当你双击“我的电脑”的时候、为什么就打开了一个窗口了呢、这畅是代码去实现的哈、希望对你有所帮助哈

问题六:HTML 视频编辑 超清 如何写代码 50分 这个或者要去视频网站,他们应该有引入的教学

但是其实你现在已经在相关设定 quality=high

应该把 high 改成其他就行了

应该素质是设了但他们家网站有什么选择,能填上什么,填上什么才是高清,只有他们才知道

要去他们官方网找找

问题七:怎样编写代码?要学习哪些方面的知识?? 20分 那你得学习编程,推荐《c语言程序设计》谭浩强版的,还有java编程思想第四版,想会编代码必须会程序语言才行,得下功夫,不是三两天几分钟的热情就能会的,学好了qq秀这些都是小意思,比如java你学会了多线程和网络编程,你自己都可以写一个聊天软件

问题八:输出你好用java语言编写代码怎么写 你是问hello world吗?

public Class MyClass {

public static void main() {

systemoutprintln(Hello World);

}

}

问题九:程序是如何编写的? 简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。

计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式――程序,这也是我们和计算机沟通的唯一方式。

那程序到底是什么呢?

程序也就是指令的 ,它告诉计算机如何执行特殊的任务。

打个比方说,它好比指导你烹调菜品的菜谱或指挥行驶一路到达目的地的交警(或者交通路标)。没有这些特殊的指令,就不能执行预期的任务。计算机也一样,当你想让计算机为你做一件事情的时候,计算机本身并不能主动为我们工作,因此我们必须对它下达指令,而它根本不会也不可能听懂人类自然语言对事情的描述,因此我们必须使用程序来告诉计算机做什么事情以及如何去做?甚至对最简单的任务也需要指令,例如如何取得击键,怎样在屏幕上放一个字母,怎样在磁盘中保存文件等等。

这么麻烦,连这些东西编程都要考虑!怪不得人家说编程好难!你错了,其实许多这样的指令都是现成的,包含在处理芯片中内置于 *** 作系统中,因此我们不必担心它们工作,他们都是由处理器和 *** 作系统来完成的,并不需要我们来干预这些过程。

上面讲到的计算机本身不会主动的做任何事情。因此我们要通过程序的方式来让计算机为我们“效劳”。而这个过程就是我们“编”出来的。编程可以使用某一种程序设计语言来实现,按照这种语言的语法来描述让计算机要做的事情。

我们这里所讲的语法和外语中的语法完全两码事,这里讲的语法只是读你的程序书写做出一写规定而已。

写出程序后,再由特殊的软件将你的程序解释或翻译成计算机能够识别的“计算机语言”,然后计算机就可以“听得懂”你的话了,并会按照你的吩咐去做事了。因此,编程实际上也就是“人给计算机出规则”这么一个过程。

随计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。

电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行,程序是计算机要执行的指令的 ,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。

计算机所能识别的语言只有机器语言,即由构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。

目前通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言的实质和机器语言是相同的,都是直接对硬件 *** 作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的 *** 作用命令的形式写出来。

汇编程序的每一句指令只能对应实际 *** 作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的 *** 作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体 *** 作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。由于省略了很多细节,所以编程者也不需要具备太多的专业知识。

高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法、>>

问题十:编写代码是在计算机哪里写 具体流程是怎样的 谢谢 你要先有一个编译器和一个文本编辑器

代码就在文本编辑器中写,写完后用编译器来编译,最后得到可执行程序,再运行程序。

IDE就是集成了编辑器和编译器的编程工具,建议你可以下载安装一个VS2012旗舰版,网上有密钥

教了多年《C程序设计》课程,大多学生觉的这门课程难学。其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,克服心理上畏难、不轻言放弃,是完全可以学好的。

《C程序设计》的内容很丰富,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?

学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。

那么,我们如何学好《C程序设计》呢?

一.学好C语言的运算符和运算顺序

这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。

先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。下面我们通过几个例子来说明:

(1) 58/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算5 8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表达式的最终结果为10%10 = 0;

(2)a = 3;b = 5;c =++ a b ;d =a + + b;

对于c=++ab来说,按表中所列顺序,+ +先执行,后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为45=20而不是35=15了;而对于d=a++b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20;

(3)(a = 3,b = 5,b+ = a,c = b 5)

例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。

(4)a=5;b=6;c=a>ba:b;

例中的a>ba:b是一个三目运算,它的功能是先做关系运算a>b部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if…else…语句的简单应用。

二.学好C语言的四种程序结构

(1)顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 314159rr,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。

(2) 分支结构

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。

学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。

①if(条件)

{

分支体

}

这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0) x=-x;

②if(条件)

{分支1}

else

{分支2}

这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根

分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:

d=bb-4ac;

if(d>=0)

{x1=(-b+sqrt(d))/2a;

x1=(-b-sqrt(d))/2a;

printf(“x1=%84f,x2=%84f\n”,x1,x2);

}

else

{r=-b/(2a);

i =sqrt(-d)/(2a);

printf(“x1=%84f+%84fi\n”r, i);

printf(“x2=%84f-%84fi\n”r,i)

}

③嵌套分支语句:其语句格式为:

if(条件1) {分支1};

else if(条件2) {分支2}

else if(条件3) {分支3}

……

else if(条件n) {分支n}

else {分支n+1}

嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。

④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。

(3)循环结构:

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。

在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的 *** 作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。

顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。

(4)模块化程序结构

C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因些,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。

三.掌握一些简单的算法

编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 *** 作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a)与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,代码如下:

for(i=1;i<=9;i++)

for(j=i+1;j<=10;j++)

if(a>a[j]

{temp=a;

a=a[j];

a[j]=temp;

}

结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学。

参考资料:

>

第一本C语言书籍,《C语言程序设计:现代方法》,网上对其评价非常的高,被誉为“近10年来最好的一部C语言著作”,书籍封面如下:

    书中包含了C语言的方方面面,对主要函数讲述的非常透彻,习题也非常丰富,对想通过编程习题来增强编程能力的朋友们,非常有帮助,对函数声明、指针等比较难的部分讲述的十分详细,推荐初学者可以看看这本书。

    第二本C语言书《C专家编程》。封面如下:

    国内已经有中文版了,该书具有一定的难度,对C语言的主要方面进行了非常深的研究,对于想提高C语言编程能力的朋友们,可以看一看,但是速度要慢,习题也非常经典,完成书的习题,会对C语言有更深入的了解。

    第三本:《C陷阱与缺陷》,封面如下:

    该书讲述了C程序员常常容易犯的错误,内容十分经典,从基本的数据类型到移植,都有涉及,朋友们也可以看看,肯定会有帮助的。

浅谈C语言学习方法

本人是一名windows程序写作员,使用的语言是C语言其他语言了解一点点,但并不擅长可能对于初学者来说,首先就是选择一门程序设计语言当然,今天我将要说的不是这方面每种语言都有它所擅长的领域与层面当然对于其他非C语言我是一名门外汗,我也不会站在C语言的立场去谈论其他任何一门语言好了,在开始进入正题之前,我想谈谈个人对C的一些看法:

C语言是一种早期的计算机语言,最初诞生目的是为了提供一种基于UNIX系统的工作语言但是,后来却被越来越多的人发现它的优点与潜力C本身比较接近底层,适合开发系统软件甚至是 *** 作系统我个人也认为它是界于高级语言与汇编语言之间的中级语言C语言是一门结构化语言(我认为主要是指它的控制结构如:if if-else while for等等)C程序设计上有提到"自顶向下,逐步深入"以函数为原子功能模块对于大型的程序来说模块化是很重要的,有一句话说的很好"优质的程序首先就是便与人们之间的相互讨论与交流,其次才是执行效率"当然我个人认为任何一名程序写作者,都应该养成一种特定的思维方式,以程序的思维方式来思考程序的实现前提就是要足够的来了解计算机底层技术要不我想就连学习都是很困难的,凡事都是一个思路的问题嘛标准的来衡量,C应该算是高级语言阵营的一份子可很多有C语言开发经验的程序写作者通常亲切的称C为界于底级语言与高级语言之间的中级计算机语言当然不是因为C比高级语言要差,之所以这么认为是因为C既具有高级语言的结构化与可理解性又具有低级语言的高效率同时C的移植性也是非常不错的,大家应该知道,越是接近硬件,接近底层的语言就越加的依赖硬件环境,也就是我们所说的设备相关性C这一点做的是非常棒的说了这些,在从另一个角度去分析C语言当然每种语言都有它自身的优缺点,C也一样比如在现在高级语言与顶层技术的角度来看的话,C最大的缺陷就是Data与算法的分离举一个例子: 对于一个拥有几千行甚至上万行Code的程序来说,如果修改Data,比如我在Structure中增加一个字段,可能为此我的整个程序都要改动,这使得程序的可重用性大大降低开发周期也大大的延长但是在底层的角度来看这也正是C的优点我为什么要这么说呢?我个人认为在求解与实现一个小问题的时候,我们可以写出一个通用的模块处理不同的Data当然比如某些经常用到的,基于数据结构的一些常用算法我们可以写出来在开发的时候我们可以直接把预先编写的模块插入到我们的程序中去,这不也是大大低了开发周期吗?初学者完全可以根据自己的需求来编写一个自定义库好了,说了这些,有些地方我理解错了,还请各位指出来,交流是很重要的,前提是要把自己的心态放平下面我将谈论本问的重点,也就是如何来学习C语言,是给那些初学者读的

正题部分:

有人可能会说:学习还用你教啊,谁没上过学啊其实我今天要说的只是,站在一个过来人的角度,来分析与解释学习C语言的过程中比较困难的地方当然我个人也会对比较具体的问题进行解释(个人看法)我一直在强调个人看法,我是想让大家明白,对于同一个问题大家可能都很难达成统一的意见,希望批评的时候客气点就好喽!

初学者该看哪些书来入门:

在学习C语言之前,首先就要选择一本教材,对于初学者,我个人并不建议去读电子书籍,最好是买纸质书来学习比如比较有名的"C程序设计"就很不错,尤其是第二版我也看过,比较适合中国人来初学整本书都在全面系统的讲解C的语法结构,构成C的语言元素包括:数据类型,支持的运算符,标识符(是由程序员按照命名规则起的名字,用于变量名,函数名,宏名等等),关键字(编译系统用于实现C内部功能的词,比如:转向goto和中断break等等)等看完这本书你基本上可以写一些简单的小程序,当然是DOS下的程序如果你想在进一步深入学习C的话,可以看"C陷阱与缺陷"这本书写这本书的作者是在Bell工作对C是非常精通的,应该算是大师级的人物了如果你暂时不想深入C的话,也没问题,因为此时你完全可以把C当作一种编程工具来使用,你要做的就是多写Code来让自己熟悉C语言经验是非常重要的,"经验是检验真理的唯一方法"当然你不会纸上谈兵,如果你有过多的开发经验的话,就知道在纸上或最初的设想的Code拿到计算机上来实现,最终会发现有很多地方都是不合理的,之前是没有办法想象到的在初学C的过程中,比如你会看"C程序设计"来初学C,当你学完每一章的时候要把习题来完成,这里就是考验你学到的知识了,看看你应用能力怎么样尤其是程序设计题目,比较有意思哪里不懂了可以翻回去看书中的解释如果没有解释或你还是不明白,可以去问别人,与其他人交流 bbs,QQ或Google直到你弄明白为止当你把问题最终解决的时候,我敢打赌,此时你一定很兴奋,或者是比较兴奋这个时候知识已经在你的大脑里了

下面我为你推荐几本不错的关于C语言籍:

C编程规范

C语言大全第四版 (个人感觉不错,里面有提及C标准方面的东西)

C和指针

The C programming Language (经典著作)

如果你要看电子书的话,以上几本书在Google上很容易就可以找到

关于C语言的初步理解:

对于初学者,会有太多的疑问,原因是你的知识面太小现在我为你解释一些C相关的东西目的是让你能够有一个大致清晰的方向,来给自己安排学习计划专业的来说,我们是或将是一名程序员,程序员当然就是要开发程序了对于软件开发方面我来解释下术语:

C,C++,ASM,Basic,Java 这些是计算机语言计算机语言很多,我就不多说了

Visual C++,Visual Basic, Microsoft研发的开发环境,开发环境包括:编译器,库函数(每种C语言编译器都支持标准库,同时它们也会扩展自己的库,所以很多比较以来库函数实现的程序员,在转向不同的开发环境的时候最初总是不使用的,会遇到很多问题),一些资源模板等等Visual 就是可视的意思,后面的就是语言Visual C++支持C与C++2种语言,是根据文件的扩展名来判断采用哪种编译内核

什么是"面向对象"与"面向过程" 其实是2种完全不同的程序设计思想,C语言是面向过程语言,而C++是面向对象语言在面向对象的语言中有"类(Class)"这个东西C中没有对象是由类来派生的一个实例,相反类就象是一个模板

什么是SDK SDK就是软件开发工具包(Software Development Kit)指的范围比较广,通俗的说,凡是能够与软件开发过程占上边的东西都属于比如:库文件,参考资料,接口函数,当然语言也应该属于

DDK就是设备驱动程序开发工具包

Turbo C: 这是一个比较精致的C语言编译器

理论上来说任何一门语言都可以在任何一种 *** 作系统上运行,前提是 *** 作系统要支持也就是我们所说的应用程序接口,比如Window API(Application Programming Interface),其实是Microsoft内部定义的接口函数用于实现一些Windows内部的功能一些对象的描述术语,在不同平台上是不同的,比如:Windows下的"调用",经常被称为"呼叫","返回"被称为"传回"

什么是"算法" 你最初只需要知道算法实际上就是对特定的Data进行运算的一段代码而已也可以认为在求解一道题目的时候,采取的方法与步骤的总称对于基本的C程序来说,实际上就是由Data与算法来组成的

什么是"数据结构" 如果要是系统的讲解,还需要一本书"数据结构",简单的说:是程序要处理的数据在内存中的存储与组织的方式,分为:物理结构与逻辑结构逻辑结构就是我们抽象化以后得到的大脑影象

什么是"函数库" 它们以文件的形式存储,是预先定义好的函数的集合,我们的程序可以直接调用当然前提是要包含它的头文件(库函数的原型声明)这些函数是在静态连接期间组成到exe文件中去的Windows又存在另一种库,叫做动态连接库(DLL)

GUI: 也就是"图形用户界面",就是我们在Windows上看到的,存在:菜单栏,滚动条与显示区域的窗口

GDI: 图形设备接口,从程序写作者的角度来看,其实GDI就是由上百个函数与数据形态和一些相关的数据结构所组成的

学习C语言的全过程:

仔细想想,实际上学习C语言,最初是应该先学习C语言的基础语法也就是学习C语言的组成部分一部分一部分的向下学知识要一点一点的巩固的本人假设你学习C语言是看"C程序设计"我认为你应该先把C程序设计仔细的看一便,这样你应该可以对整本书和C语言的整体组成结构有个大致的清晰了解不要认为学习只是在看书,看一便就可以了你应该学会记笔记,在记笔记的过程中,其实你就是在学习,从知识的分析,理解,归纳,到最后以自己的思维方式记下来,这整个过程就是把书中的知识抽象到你自己的脑袋里个人感觉学习效果非常好,不懂就问,要多多与人交流,要多思考,遇到问题自己先多想想,实在找不到问题出在哪,在去请教别人,不要有不懂的地方就直接去问别人,那样对你没太大的好处其实要学会给自己安排适合自己的学习计划,我大致来估计了一下,如果你每天能花4个小时安静的,用心去学习的话,30天之内你应该可以掌握C语言了其实在整个学习过程中你大多数时间都在看书,而不是面对电脑在调试你的代码之前,先在纸上把核心代码大致写出来,分析一下:程序的组成模块(可以是一个函数或多个),由几个函数来实现,接口的封装采用哪种数据结构更适合一些关键在于算法在你的最终程序发布之前,最好把你的代码行数减到最少不要只想着把代码写多过多的代码对程序来说是负担你可以在Internet上下载一个文件(C语言经典例题chm),里面大致包含了上百个经典的例题每一个例题都是C语言某部分的典型应用花时间把这个文件中的所有例题代码研究一下,最好能自己把代码改善,以自己的方式来求解以后你会发现你在写一些应用程序的时候经常会有一些算法会涉及到我之前提到的例题最后我认为你可以自己来写C语言标准函数,比如strcpy(); strlen();strcat();最好不要过分依赖库函数

C语言学习的难点:

现在应该是已经讲到一个重点的环节很多网友都说学习C语言很难,我认为C中有些部分是比较复杂,难理解的当然在你具有了丰富的开发经验以后,这以不在是问题了下面我个人会对我认为学习C的时候比较难学的地方进行我自己的阐述,如果哪里不正确,还请各位指出:

指针的出现:

我想有很多初学者学习到指针那一章都感觉很难,下面我就以自己的想法来解释下指针这个特殊的数据类型,

基本变量大家可能并不难理解,因为基本变量其内部存储了同类型的常量,事实上指针也是变量,不过呢,这个变量和基本变量有点不一样,那你又问了:是哪里不一样呢 我告诉你,简单的来理解其实普通的变量内部存储了同类型的常量,而指针变量内部存储的则是"同类型变量的首地址"这样你能够理解吗,是很简单的解释,但不失本质事实就是这样的如果你不理解"同类型变量的首地址"的话,我可以给你形象的来描述一下:

float Variable; //声明一个单精度实型的变量

此时,编译器已经给Variable分配了内存空间,结构如下:

__________

| |1001

|---------

| |1002

|---------

| |1003

|---------

| |1004

|---------

以上便是Variable的内存结构了,16位下的float占用4个字节,内存地址是线性编码的,我们可以很容易的看出Variable的首地址就是他第一个单元的地址1001,好的,继续向下看:

float Pointer=&Variable; //声明一个指向Variable的指针Pointer

_________

|1001 | 这是Pointer的内存结构

|_______|

我们的程序可以这样来执行:

Variable=10;

直接给Variable赋值,我们称为直接访问

也可以这样执行:

Pointer=10;

也可以通过指针变量来赋值,前面的是间接运算符号,意思是求Pointer内部存储地址所标识的内存单元也就是Variable此时,是赋值是通过间接访问来实现的可以这样形象的描述:

________ (指向Variable) __________

|Pointer|------------------------------------>|Variable|

--------- ----------

以上应该是指针实现的基本解释,很多优秀的程序写作者都说指针是C语言中的精华,的确如此,很多优秀的程序写作者写程序都非常依赖指针,因为它很方便,实际上指针所访问的对象是没有限制的,他可以指向任何类型的变量,前提是只要我们知道内存地址因此指针也并不安全,在开发网络程序的时候,尽量要少使用指针下面我们在来看一下指针在数组中的使用

数组中的指针:

简单的来解释下数组,数组结构在C中使用比较普遍,其实最常用的就是char 类型的数组,主要是用于字符串 *** 作实际上数组是"同类型变量的有限集合"我想这应该不难理解吧数组在内存中占用连续的内存单元(地址连续),来存储数组中的每一个元素数组是预先分配好指定长度的内存单元,供数组元素使用它并不支持动态内存分配在内存中想要唯一的确定数组,需要2个标识:入口地址(函数名)和结束标记('\0')有些语言并不向C语言这样支持字符串结束标记,它们必须要另外声明一个变量来标识尾元素的下标那数组名其实就是这一组内存单元的首单元,他的地址就是整个数组的入口地址此时应该明白了,数组名是一个指针,这样理解没有问题不错在具体 *** 作的时候不允改变数组名的地址,也不符合实际要求这样就可以明白数组名是一个什么 const Pointer(指针常量)我们可以这样做:

int Array[10];

int Pointer;

Pointer=Array;

for(i=0;i<10;++i)

Pointer==i;

以上代码应该是没问题吧,同类型的指针,完全可以胜任数组名的任务一点问题没有而且可以运行的很好当然,我们可以进一步把代码这样来写:

for(i=0;i<10;++i)

Pointer=i;

改成

for(i=0;i<10;++i,Pointer++)

Pointer=i;

不好意思,我记不清了,指针的++运算是地址+1还是向后移动一个元素的位置,如果是地址+1的话,以上代码在改成这样:

for(i=0;i<10;++i,Pointer+sizeof(int))

Pointer=i;

如果数组类型是char的话,那就更方便了,因为字符串存存在一个在尾元素之后的结束标记('\0'),下面给出一个简单的代码,应用char Pointer:

char my_strcpy(char dst, const char src)

{

char cp = dst;

while( cp++ = src++ ); // 注意运算符的优先级与结合性

return( dst ); //返回新传的指针

}

以上代码实现字符传Copy功能,代码是不是很简洁啊如果不需要移动内存块的话,我们完全可以通过交换指针(内存地址)来实现排序 *** 作,其效率应该是很客观的补充一句:千万要弄清楚,指针本身与指针所指向的变量不是一个单元

1、这个涉及到函数的调用约定

运行结果跟编译器有一定的关系,不同的编译器参数的入栈的顺序不同

一般的编译器是从右到左

如fun(a,b)这个函数调用,是先计算参数b,入栈,再计算参数a,入栈

2、printf("%d

%d",

a++,++a);

//先计算++a,先自增,a的值变为2,将2入栈

再来计算a++,将a的值2入栈,再使a自增,a的值变为3

printf("

%d\n",a);

//a的值已经变为3了

3、printf(%d

%d",

++aa++);//先计算a++,将a的值1入栈,再使a自增,a的值变为2,再来计算++a,先自增,a的值为3,将3入栈,输出3

1

printf("

%d\n",a);

//输出3

4、三种调用约定:

__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。

C调用约定(即用__cdecl关键字说明)和__stdcall调用约定有所不同,虽然参数传送方面是一样的,但对于传送参数的内存栈却是由调用者来维护的(也正因为如此,实现可变参数的函数只能使用该调用约定),另外,在函数名修饰约定方面也有所不同。

__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用CX和EDX传送前两个双字或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。

以上就是关于读了哪本入门书后可以看懂《c专家编程》、《c和指针》、《c陷阱与缺陷》、《c程序设计语言》全部的内容,包括:读了哪本入门书后可以看懂《c专家编程》、《c和指针》、《c陷阱与缺陷》、《c程序设计语言》、如何写代码、C语言学习等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10214476.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存