郝斌老师C语言学习笔记(一)
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值。当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常规的数而使程序员误以为自己已给变量进行过初始化),这个“85”开头的数叫“填充字”,提醒程序员没有初始化变量。
- #include<stdio.h>
- int main(void)
- {
- int i;
- printf("i = %d\n", i);
- }
运行后:
变量对应于内存中的一个存储单元,变量的本质是 "内存中一段存储空间"
简单一元二次方程示例:
C代码
# include <stdio.h>
# include <math.h> int main(void)
{
//声明变量
int a = ; // = 是赋值的意思
int b = ;
int c = ;
double delta; //保存解的个数
double x1,x2; //保存解 delta = b*b - *a*c; if(delta>) {
x1 = (-b + sqrt(delta)) / (*a);
x2 = (-b - sqrt(delta)) / (*a);
printf("该一元二次方程有两个解, x1 = %f, x2 = %f\n", x1, x2);
}else if(delta==){
x1 = x2 = (-b) / (*a);
printf("该一元二次方程有一个解, x1 = x2 = %f\n", x1);
}else{
printf("无解");
}
return ;
}
大纲笔记:
C语言概述
1、为什么学习C语言
1)C的起源和发展
第一代语言:机器语言01代码
第二代语言:汇编语言就是简单的助记符ADD
第三代高级语言:结构化语言(面向过程)C,Fortran用于
科学计算Basic演变为VB,Pascal
用于教学。
面向对象(OO)C++,java(SUN改造过),
C#(微软改造的),后两种都是针
对C++改造的。因为C++比较复杂。
结构化语言有缺陷:数据和操作分离。如果你学会C++
那么剩下都不用学了。因为它都包括了面向过程和对象
2)C的特点
优点:
代码量小(WPS) 速度快 功能强大(写操作系统)
缺点:
危险性高:(同样的程序java中就会报错)可以随便写
开发周期长:因为它是面向过程语言,10万行代码以上容易崩溃
可移植性不强:因为java的可移植性太强了。C的话两台机器跑
起来可能不一样。
3)C的应用领域
系统软件开发:
操作系统:三大
驱动程序:主板驱动、显卡驱动、摄像头驱动
数据库:DB2,Oracle,Sql server
应用软件:
办公软件:WPS
图形图像多媒体:ACDSee,PS,MediaPlayer
嵌入式软件开发:智能手机,掌上电脑
游戏开发:2D,3D游戏(CS整个引擎都是纯C。魔兽不是
4)C的重要性
有史以来最重要的语言
所有大学工科理科学生必修课程
系统软件都是用它开发
合格黑客必须掌握
程序员必须熟练
大企业、外企招聘必考
为数据结构,C++,java,c#做准备
2、怎样学习C语言
每一讲分四次课
前两节课为理论课,讲授理论知识
后两节课为上机课,在机房完成当堂练习
要去:
当堂练习必须在两节上机课中完成
机房随时有辅导老师辅导
老师检查后方可离开
途径:多思考,多上机
目标:能看懂程序,能调试程序,自学能力要很强
其实就是犯错误的过程,肯定会有错误,全都出完了,就学好了。
参考资料:
谭浩强《C语言程序设计》清华 绝对入门经典(就是自己能看懂)
《C Primer Plus》人民邮电 60元 语法
《C和指针》 人民邮电 65元
在想变成高手看:
《C专家编程》 绝版
《C陷阱与缺陷》人民邮电 30元
3、学习的目标
了解程序语言及发展历史
熟练掌握C语言的语法规则
掌握简单的算法
理解面向过程的思想,这非常有助于将来对面向对象思想的学习
能看懂程序
会调试程序
掌握将大问题转化为一系列小问题来求解的思想
为将来学习C++,数据结构,C#,java打下良好的基础
4、常见问题答疑
1、学习java为什么建议先学C语言
a)学习C就是学java,因为C语言至少80%的语法知识都被
java继承过来了。
b)C是面向过程语言的代表,学好C有助于学习java中面向
对象的思想
c)学好C中的指针是理解java中引用的基础!如果不懂指针
就不可能对java中的引用由深刻的理解,而引用是java中
一个最基本但又十分重要的概念。
2、没学过计算机专业课程能够学懂C语言
有郝斌老师在怕什么?
3、英语和数学不好能学好C么?
如果懂更好,如果不懂不影响对其的学习。数学知识只有在你
研究高深算法的时候才需要。
5、课程计划
共23讲
C语言简介
第一讲 基本编程知识 1讲
第二讲 数据类型 1讲
第三讲 运算符和表达式 1讲
第四讲 流程控制 4讲
第五讲 函数 2讲
第六讲 数组 1讲
第七讲 指针 4讲
第八讲 变量的作用域和存储方式 1讲
第九讲 扩展数据类型 1讲
第十讲 专题:
字符串的处理 1讲
进制转换 1讲
补码 1讲
动态内存分配 1讲
综合应用:链表的使用 2讲
6、举例子:一元二次方程
C语言编程预备知识
1、cpu 内存条 硬盘 显卡 主板 显示器之间的关系
2、HelloWorld程序如何运行起来的
3、什么是数据类型
编程受限就要考虑数据,怎样去保存它,就和数学上的数字一样
基本数据类型:
整数:
整型int 4 短整型short int 2, 长整型long int 8
【浮点数(计算机内不能定点存储)】实数
单精度浮点数float 4
双精度浮点数double 8
字符
char
复合类型数据:(把基本类型复合起来)
结构体
枚举
共用体
4、什么是变量
方便找到一个和空闲内存单元一一对应的代码。
避免了程序员自己去找空闲单元的编号,由操作
系统完成。
变量的本质就是内存中的一段存储空间。
5、cpu 内存条 VC6 操作系统之间的关系
VC6向操作系统请求在内存中开辟一段内存,VC在使用这些内存
完成程序运行
6、变量为什么要初始化
所谓初始化就是赋值的意思。那个很大的值其实是填充字很大
真实的值是随机值,是上一个软件使用过遗留下的,这个很大
的填充值就是为了提醒你这个值未被初始化。
7、如何定义变量
8、什么是进制
9、常量在C语言中是如何表示的
10、常量是以什么样的二进制代码存储在计算机中的
tips:
1、html是借助于浏览器运行的
2、C语言编写好的代码是借助于VC6运行的
3、要想改变dos框的属性,右键单击标题栏
4、机器语言速度最快,最慢高级语言,C又比java,C#快
5、Basic在计算机中有简化的意思
6、B语言写出了世界上第一个操作系统UNIX,光盘就有十几张很大
主要用在大型机、商务机。因为其稳定,不可能用Windows,因
为容易挂,不稳定。
7、B语言的创始人的同事扩充了B得到了C语言并且用此写了UNIX第五版
这个系统流行了起来所以C语言也流行了起来。UNIX开源的,你要改
就要学习C语言。
8、C语言中必学的是函数和指针。94年C99标准一直用到今天
9、金山公司一直最挣钱的就是WPS。政府订购。他的一个强大功能是可以
转成pdf格式的,microoffice没有此功能。
10、WPS安装包很小,因为它是用C语言写的内核。
11、三大操作系统windows(内核用C外壳用C++),unix和linux都是用
C写的。因为它很快。硬件由操作系统控制。以前在dos下可以直接
控制硬件,现在必须通过操作系统。
12、C可以访问硬件,指针。java没有指针。
13、招聘现在基本分三块:c/c++,java,c#.前者工资最高。
14、蠕虫病毒,C语言有个gets()函数,他是向硬盘写东西,无长度限制
后来就改用fgets()有了限制,这样就不上了漏洞。
15、世界上绝大多数病毒都只能破换软件,只有一个能破换硬件的。
16、也可以用C语言编一个木马,它是背地里运行的,慢慢地就死机了
17、学数据结构最好用C语言学习
18、入门最基本的方法就是C语言入手。
当你成为C语言的高手,那么你就很容易进入到操作系统的平台里面去;
当你进入到操作系统的平台里面去实际做程序时,就会懂得进行调试;
当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。
这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得
出你的手掌心。
-----《编程箴言》梁肇新,超级解霸作者
19、王爽写的汇编的入门书也不错
20、C语言32个关键字作为保留。不能重做其他定义。
21、哲学是你对于世界的思考,数学又是其他一切学科的计算基础。
22、函数可以体现出面向对象和面向过程的区别。
23,任何语言的流程都是一样的。
24、动态内存分配学过之后才能理解数据结构。
25、VC6完全兼容C,所以你就选C++ Source File
26、先把硬盘上的数据存放在内存条上然后cpu在处理,因为它不能
直接处理硬盘数据。
27、主板就相当于为大家提供了一个怎样互相配合的环境
28、点感叹号的那个标志是运行.exe,这个是有cpu运行的。所有的运行都是cpu
29、在VC6中输入的字符和在记事本中是无区别的,通过编译链接产生exe
30、win98 winme是可以直接控制硬件的(编程序)。2000以后就只能操作系统控制
31、C的一个核心思想就是不限制程序员编写他想编写的内容。
32、C里面是没有这样一个数据类型来直接存放字符串的,C++和java都有
33、出错的位置和原因不一定就是真的,有可能在上下行找
34、我们硬件上的状态肯定是0、1不可能存在第三种状态,重启就是全0.
35、内存释放是指使用权限被收回
36、软件在运行期间,该软件所占空间不再分配给其他软件,当软件运行完毕
之后,操作系统将收回该内存空间,以便在分配给其他软件使用。
该文转载至http://duchengjiu.iteye.com/blog/1826488
郝斌老师C语言学习笔记(一)的更多相关文章
- 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 郝斌老师的SQL教程
时隔两年,重拾数据库编程.郝斌老师的sql教程通俗易懂,用作复习简直不能太赞.
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
随机推荐
- C - A Plug for UNIX - poj 1087(最大流)
题目大意:这个题意有些蛋疼,看了很大会才明白什么意思,有N个插座,这些插座都是有类型的只能给这种类型的电器充电,下面接着给了M种电器,和电器的插头类型,还有K种转换器,可以把一种类型转换成另一种,转换 ...
- stm32开发笔记一:使用固件库在RealView-MDK中新建工程(上)
很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE.虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末, ...
- @Resource 和 @Autowired注解的异同
@Resource 和 @Autowired注解的异同 @Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false 例 ...
- 在SQL Server 中启用 FileStream
最近在研究在数据库中存储大数据文件,看到了FileStream 这个功能,记录下来以备后用 FileStream 一般在安装的时候默认是不启用的,如果你留意的话,在选择数据库文件路径那个窗口,有一个标 ...
- Android使用GridView实现日历功能(详细代码)
代码有点多,发个图先: 如果懒得往下看的,可以直接下载源码吧(0分的),最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下 http://download.csdn ...
- 05-图2. Saving James Bond - Easy Version (25)
1 边界和湖心小岛分别算一个节点.连接全部距离小于D的鳄鱼.时间复杂度O(N2) 2 推断每一个连通图的节点中是否包括边界和湖心小岛,是则Yes否则No 3 冗长混乱的函数參数 #include &l ...
- 通过分析 JDK 源代码研究 Hash 存储机制--转载
通过 HashMap.HashSet 的源代码分析其 Hash 存储机制 集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象 ...
- STL之set && multiset
一.set 在了解关联容器set之前,让我们先来看看下面这个例子,并猜测该例子输出什么: // stl/set1.cpp #include <iostream> #include < ...
- SparseArray HashMap 稀疏数组 二分法
简介 HashMap是java里比较常用的一个集合类,我们常用其来缓存一些处理后的结果,但是在Android项目中,Eclipse却给出了一个 performance 警告.意思就是说用SparseA ...
- 属性动画 LayoutTransition AnimatorInflater Keyframe 新特性
LayoutTransition设置动画 使用LayoutTransition可为布局的容器设置动画,当容器中的视图层次发生变化时产生相应的过渡的动画效果 过渡的类型一共有四种: LayoutTran ...