学习C语言详细笔记完整版.docx
- 文档编号:5189985
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:139
- 大小:2.62MB
学习C语言详细笔记完整版.docx
《学习C语言详细笔记完整版.docx》由会员分享,可在线阅读,更多相关《学习C语言详细笔记完整版.docx(139页珍藏版)》请在冰豆网上搜索。
学习C语言详细笔记完整版
C语言视频教程
第一讲:
(1-13)C语言概述
一、为什么学习C语言
1)C的起源和发展
2)C的特点
3)C的应用领域
4)C的重要性
二、怎样学习C语言
三、学习目标
四、常见问题答疑
(1)学习JAVA为什么建议先学C语言
(2)没学过计算机专业课程能够学懂C语言
(3)英语和数学不好能学好C语言么?
五、课程计划
六、举例子:
一元二次方程
一、为什么学习C语言
1)C的起源和发展(ppt)
在第三代语言中,以1980年为分水岭,分为结构化和面向对象语言。
Fortran语言主要用于科学计算。
Basic语言是vb的前生,pascal语言一般是用于教学。
C语言是最重要的,其他的语言一般很少用了。
结构化的代表语言是c语言。
结构化语言的数据和操作是分离的,导致在写大项目的时候,会出现各种各样莫名其妙的问题。
在面向对象的语言中c++是最复杂的语言。
由于c++语言太复杂,sun公司对c++进行了改装,产生了java语言。
而c#是由微软开发的,和java相似,几乎一模一样。
在高级语言的执行速度上,c是最快的,c++其次,而java和c#是最后的。
Java和c#流行,主要的一个原因是可以跨平台。
C语言的发展和过程:
2)C语言的特点:
·优点:
代码量小,速度快,功能强大。
金山公司最主要是靠wps办公软件来发展的。
Wps是c语言开发的,其安装包比Office少了10多倍。
三大操作系统:
windows,unix,linux
Windows内核是c语言写的,而外壳是c++写的。
Java永远不可能写操作系统。
因为java运行速度太慢了。
而linux和unix都是纯c写的。
操作系统控制了硬件,如果说操作系统的运行速度慢,那么当我们在运行软件的时候,运行速度会更慢。
为什么使用c语言写操作系统呢,首先是因为c的运行速度快,然后是因为c可以直接控制硬件,而其他语言不可以。
没有指针的语言是不能直接访问硬件的。
·缺点:
危险性高,开发周期长,可移植性弱。
危险性高:
写同一个程序,在java中会报错,而在c中不会报错,为什么呢,因为c认为程序你想怎么写就怎么写,c语言认为你写的程序不是很离谱,他都认为你写的这个程序有特殊的含义。
可以直接通过,而java则不可以。
开发周期长:
c语言是面向过程的语言,面向过程的语言的特点就是在开发大项目的时候,很容易崩溃,好比盖大楼,C语言还要造大量的砖块、钢筋等结构原材料,而C++C#JAVA则进行了一定的继承封装等操作,相当于原材料直接给你,你只需要用它盖楼即可。
现在市场上的语言分三块:
C/c++:
单纯的学习c是什么都做不了的。
Java
C#
可移植性不强:
这是针对java来说的,因为java的可移植性太强了,所以就感觉说c的可移植性不强。
3)C语言的应用领域:
驱动一般是用c和汇编来写的。
数据库一般是用c和c++来写的
4)C语言的重要性:
虽然应用场合相对较窄,但贴近系统内核,较底层。
病毒最基本的是要感染系统,
数据结构,c,c++这三门语言是必须要学习的。
牛人牛语:
梁肇新:
编写的超级解霸播放器软件,被暴风影音收购。
编写的书《编程箴言》
二、怎样学习C语言(ppt)
1、要将编程当成一项事业来经营,而不是糊口的工具。
2、途径:
多思考,多上机。
目标:
不能光看,光听,而要排错,能看懂程序,能调试程序,自学能力要很强。
3、在犯错误中成长。
参考资料:
王爽写的c++也很不错
三、学习的目标(ppt)
掌握简单的算法--解决问题的方法和步骤。
熟悉语法规则。
能看懂程序并调试程序。
四、常见问题答疑(ppt)
(1)学习JAVA为什么建议先学C语言
(2)没学过计算机专业课程能够学懂C语言
(3)英语和数学不好能学好C语言么?
C语言的关键字:
五、课程计划
六、举例子:
一元二次方程
C语言程序的格式:
#include
#include
intmain(void)
{
//把三个系数保存在计算机中,定义三个变量。
inta=1;//=不表示相等,表示赋值
intb=2;
intc=3;
floatdelta;//delta存放的是b*b-4*a*c//float改double
floatx1;//存放一元二次方程的其中一个解
floatx2;//存放一元二次方程的其中一个解
delta=b*b-4*a*c;
if(delta>0)
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);//两个解
printf(“该一元二次方程有两个解,x1=%f,x2=%f\n”,x1,x2);
}
elseif(delta==0)
{
x1=(-b)/(2*a);//唯一解
x2=x1;//右边值赋给左边
printf(“该一元二次方程有一个唯一解,x1=x2=%f\n”,x1);
}
else
{
printf(“无解\n”);//无解
}
return0;
}
一定要养成良好的习惯:
代码规范,边写边保存,括号成对出现,应用空格。
VC6.0软件操作:
新建保存关闭(关闭空间)
.cpp是原始文件,可单独拷贝到其它电脑。
第二讲:
(14-25)C语言编程必备知识
1、Cpu,内存条,硬盘,显卡,主板,显示器之间关系。
Cpu不能直接处理硬盘上的数据,必须要先调入内存。
2、Helloword程序是如何运行起来的。
3、什么是数据类型
数据类型--数据的分类,对编程而言,首要考虑问题是数据的输入和存储。
可以分为
A:
基本数据类型:
(整数、浮点数、字符)
(1)整型
整型int--4字节一字节byte=8位bit
短整型shortint--2字节
长整型longint--8字节
(2)浮点型【实数】
单精度浮点数float:
存储范围小--4字节
双精度浮点数double:
存储范围大--8字节
Float和Double都不能保证将小数完全准确保存。
(3)字符char:
c语言中是没有字符串string--1字节
(区别于JAVA、C#中有string且C#中char为2字节)
B:
复合类型:
就是把基本类型拼凑在一起
结构体
枚举---实用
共用体—基本淘汰
4、什么是变量
变量的本质是内存中一段存储空间。
inti;i=5;i是变量,程序向系统申请了一个内存单元,在程序运行中,i的值可以改变,但程序结束后,其所占的空间不是释放,而是被系统收回权限。
5、Cpu,内存条,vc++6.0,操作系统之间的关系。
6、变量为什么必须的初始化(即赋值)
软件运行与内存关系(垃圾数据-9868598658)
内存是在操作系统的统一管理下使用的!
(1)软件在运行前需要向操作系统申请存储空间,在内存空间足够空闲时,操作系统将分配一段内存空间并将该外存中软件拷贝一份存入该内存空间中,并启动该软件运行。
(2)在软件运行期间,该软件所占内存空间不再分配给其他软件。
(3)当该软件运行完毕后,操作系统将回收该内存空间(注意:
操作系统并不清空该内存空间遗留下来的数据),以便再次分配给其他软件使用。
《操作系统》一门课中系统分配表中会讲到,用1标记表示内在是被占用的,用0标记表示是空闲的。
综上所述,一个软件所分配到的空间中极可能存在着以前其他软件使用过后的残留数据,这些数据被称之为垃圾数据,所以通常情况下我们为一个变量,为一个数组,分配好存储空间之前都要对该内存空间初始化。
7、如何定义变量
数据类型变量名称=赋予的值;
等价于
数据类型变量名;
变量名=要赋予的值;
举例子:
inti=3;等价于intI;i=3;
inti,j;等价于inti;intj;
inti,j=3等价于inti;intj;j=3;
inti=3,j=5;等价于inti;intj;i=3;j=5;
inti,j;i=j=5;等价于inti,j;i=5;j=5;
8、什么是进制(逢几进一)看ppt
我们规定八进制前面加0(零),十六进制前面加0x。
常用计数制对照表:
Printf的基本用法:
9、常量在c中是如何表示的
单个字符使用单引号括起来,多个字符串使用双引号括起来(指针、数组)。
‘A’表示字符A
‘AB’错误“AB”正确(字符串要用双引号括起来)
“A”正确,因为“A”代表了‘A’‘\0’的组合
在c中,默认是double类型的。
在后面加F表示当做float来处理,否则会有警告提示--丢失部分字节。
10、常量以什么样的二进制代码存储在计算机中?
编码:
整数是以补码的形式转换为二进制代码存储在计算机
浮点数是以ieee754标准转换为二进制代码存储
字符本质实际是与整数的存储方式相同,ASCII码标准。
第三讲:
(26-46)
一、代码规范化
·可以参考林锐《高质量c/c++编程》
·代码的规范化非常的重要,是学习一门编程语言的基础,代码可以允许错误,但不能不规范。
例如:
成对敲括号{}()
加空格于运算符和数字之间i=1+2;
加缩进分清上下级地位。
换行--进行功能区域分隔or{}括号单独成一行。
·代码规范化的好处
1:
整齐,别人和自己都容易看懂。
2:
代码规范了,代码不容易出错。
3:
一般的程序可以分为三块:
a:
定义变量
b:
对变量进行操作
c:
输出值
二、什么是字节
·存储数据的单位,并且是硬件所能访问的最小单位。
内存中存储的最小单位是位bit(0或1),但是硬件控制的时候不能精确到位,只能精确到字节(8位),是通过地址总线来控制的,而精确到位是通过软件来控制的,叫做位运算符来精确到位的。
1字节=8位
1K=1024字节
1M=1024K
1G=1024M
1T=1024G
2G的内存条的总空间:
2*1024*1024*1024*8=4*1032
三、不同类型数据之间相互赋值的问题
不同数据类型之间最好不要相互转换。
如果需要明白这个知识点,那么需要明白补码。
四、什么是ASCII码
在上图中注释的最后一样是重复定义了ch的值,是错误的,而下面的ch=‘c’是指把c赋值给ch,是正确的。
以char定义变量的时候,只能使用单引号括起一个字符才是正确的。
上图中输出的值是98(将字符以整数%d的形式输出)
Ascll码规定了ch是以哪个值去保存。
Ascll码不是一个值,而是一种规定,
规定了不同的字符是以哪个整数值去表示。
它规定了:
‘A’--65‘B’--66
‘a’--97‘b’--98
‘0’--48
五、字符的存储
字符本质上与整数的存储方式相同
基本的输入和输出函数的用法:
Printf()
------将变量的内容输出到显示器上。
四种用法:
输什么是输出控制符,什么是非输出控制符
输出控制符包含如下:
Printf为什么需要输出控制符:
·01组成的代码可以表示数据也可以表示指令。
必须要有输出控制符告诉他怎么去解读。
·如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果,所以必须要有输出控制符。
在上图中,intx=47,如果前面加0(零)048表示的是八进制,如果前面加0x(零x)0X47则表示的是十六进制,而在输出的时候,则是o(字母o)表示八进制,ox(字母o,x)表示十六进制。
非输出控制符:
非输出控制符在输出的时候会原样输出。
Scanf()------通过键盘将数据输入到变量中
有两种用法:
示例:
非输入控制符:
在输入的时候也会原样输入。
但是强烈建议:
在使用scanf的时候,不使用非输入控制符。
给多个变量赋值:
#include
intmain(void)
{
inti,j;
scanf(“%d%d”,&i,&j);
printf(“i=%d,j=%d\n”,i,j);
return0;
}
需要记住,非控制符需要原样输入。
如何使用scanf编写出高质量代码
运算符:
(1)算术运算符:
加(+)减(—)乘(*)除(/)取余(%)
(2)关系运算符:
>>=<<=!
=
(3)逻辑运算符:
!
(非)&&(并且)||(或)
(4)赋值运算符:
=+=*=/=
例如:
a+=3是等价于a=a+3,a/=3等价于a=a/3
其优先级别是算术>关系>逻辑>赋值。
取余的结果的正负只和被除数有关。
第四讲(47-96)
流程控制(第一个重点):
1、什么是流程控制
程序代码执行的顺序。
2、流程控制的分类
①顺序执行
②选择执行
定义:
某些代码可能执行,也可能不执行,有选择的执行某些代码。
③循环执行
分类:
if、switch
if最简单的用法:
如果想控制多个语句的执行或者不执行,那么需要使用{}括起来。
3.if…else…的用法:
4、if…elseif…else的用法:
(格式)
C错误的if…elseif…else语句:
在上图中,当执行到哈哈那句时,下面的else将会被算作另外一个语句来执行,而在我们的c语言中,没有以else开头的语句。
所以会出错。
5、C语言对真假的处理
非零是真(真用1表示)
零就是假(假用0表示)
6、if实例(举例----求分数的等级):
(1)变量的替换:
(互换两个数字)
(2)对任意三个数字进行排序:
(3)C语言常见误区:
①素数:
只能被1和自己整除的数,如1,5,9等。
②回文数:
正着写和倒着写一样的数。
如1221,121,等。
③编程实现求一个十进制数字的二进制形式。
④求一个数字的每位是奇数的数字取出来组合形成的新数字。
⑤求一个数字倒过来的数字。
算法:
解题的方法和步骤。
如何看懂一个程序,分三步:
1、流程:
也就是程序执行的顺序;
2、每个语句的功能;
3、试数:
找一个数带入程序验证。
如何学习一些需要算法的程序(如何掌握一个程序):
1、尝试自己编程解决它,但要意识到大部分人都是自己无法解决的,这时不要气馁。
如果十五分钟还想不出来,此时我建议您就可以看答案了。
2、如果解决不了,看答案。
3、关键是把答案看懂,这个要花很大的精力,也是我们学习的重点。
看懂一个程序要分三步:
流程、每个语句的功能、试数。
4、看懂之后尝试自己修改程序,并且知道修改之后程序的不同输出结果的含义。
不建议看懂程序之后就立即自己敲程序。
5、照着答案去敲
6、调试错误
7、自己不看答案,自己独立把答案敲出来。
8、如果程序实在是彻底无法理解,就把他背会。
(很少有这种程序)
7、if常见的问题解析:
1、空语句的问题:
if(3>2);
等价于
if(3>2)
;//这是一个空语句
在上图中,最终的结果会是AAAA,BBBB,程序也不会报错,为什么呢,因为在程序执行的时候,会在;哪里认为是一个空语句。
也就是说,如果if成立,那么执行空语句。
2、If常见错误解析(重点)
上面这个程序是错误的,为什么呢,在该程序中,总的有4个语句,而在以else开头的那个语句中是有错误的,因为在c语言中是没有以else开头的这种语法。
3、If常见错误解析
if(表达式1)
A;
elseif(表达式2)
B;
elseif(表达式3)
C;
else
D;
即便表达式1和2都成立,也只会执行A语句。
程序测试:
在上面这个程序中,最终的值是AAAA,虽说后面的3>1也满足条件,但是当3>2满足条件后,该if语句就会终止,后面的语句是不会在执行的。
4、If常见错误解析(用成绩等级程序验证)
5、If常见错误解析(用成绩等级程序验证)
这样写是不对的,正确的写法是:
要么去掉第7行的(表达式4)
要么在第7行的else后面加if
6、If常见错误解析(if常见问题解析_5.cpp)
③循环的定义、分类。
定义:
某些代码会被重复执行。
分类:
for(重点)
while
do……while
(1)格式:
for(1;2;3)
语句A;
(2)执行的流程(重点)
单个for循环的使用
多个for循环的嵌套使用(具体附后)
(3)范围问题:
{}
(4)举例:
1+2+3+……+100
1+1/2+1/3+……+1/100
在上图中,先执行1,在执行2,2如果成立,标志着循环成立,那么在执行4,最后在执行3,3执行完后代表一次循环完成,然后在执行2.以此类推。
1永远只执行一次。
++i等价于i+1
例1:
求1-10的所有奇数的和:
for所控制的语句:
在上图中,for默认只能控制一个语句,但是如果要控制多个语句时候,那么需要使用{}把语句括起来。
例2:
求1-12之间的所有能被3整除的数字之和:
例3:
求1+1/2+1/3….1/100的和。
在上图中,重点是强制数据类型转换也就是(float)(i)那句:
如果把print那句换为下面这句会怎么样呢:
也是错的,为什么呢,因为i是整型,1也是整型,所以不管你怎么转换也是整型啊,如果想要这样写的话,那么我们需要把1改成1.0也可以的。
也就是:
更简单的写法是:
sum=sum+1.0/i;
试数详细步骤举例:
浮点数存取的问题:
浮点数的存错所带来的问题
float和double都不能保证可以把所有的实数都准确的保存在计算机中。
例子:
floatI=99.9;
prinf(“%f\n”,i);
最终在Vc++6.0中的输出结果是:
99.900002
因为浮点数无法准确存储,所以就衍生出来两个编程问题:
有一个浮点型变量x,如何判断x的值是否是零
if(|x-0.000001|<=0.000001)
是零
else
不是零
为什么循环中更新的变量不能定义成浮点型
for循环和if的嵌套使用四个习题练习:
①求1-100之间所有奇数的和
②求1-100之间的奇数的个数
③求1-100之间奇数的平均值
④求1-100之间的奇数之和,在求1-100之间的偶数之和。
例①求1-100之间所有奇数的和:
#include
intmain(void)
{
inti;
intsum=0;
for(i=1;i<101;++i)
{
if(i%2==1)
sum+=i;//sum=sum+i;
}
printf("sum=%d\n",sum);
return0;
}
例②求1-100之间的奇数的个数:
#include
intmain(void)
{
inti;
intcnt=0;//个数一般用cnt表示
for(i=1;i<101;++i)
{
if(i%2==1)
++cnt;
}
printf("cnt=%d\n",cnt);
return0;
}
例③求1-100之间奇数的平均值:
#include
intmain(void)
{
inti;
intsum=0;
intcnt=0;
floatavg;//average的缩写
for(i=1;i<101;++i)
{
if(i%2==1)
{
sum+=i;
++cnt;
}
}
avg=1.0*sum/cnt;//1.0默认是double类型
printf("sum=%d\n",sum);
printf("cnt=%d\n",cnt);
printf("avg=%f\n",avg);
return0;
}
例④求1-100之间的奇数之和,在求1-100之间的偶数之和:
#include
intmain(void)
{
inti;
intsum1=0;//奇数和
intsum2=0;//偶数和
for(i=1;i<101;++i)
{
if(i%2==1)
{
sum1+=i;
}
else
{
sum2+=i;
}
}
printf("奇数和=%d\n",sum1);
printf("偶数和=%d\n",sum2);
return0;
}
多个for循环的嵌套使用:
整体是两个语句。
上图中,先执行1,在执行2,如果2成立,执行4,在执行5,如果5成立执行A,在执行6,在执行5,如果5不成立,意味着里面的循环结束,然后执行3,在执行2,如果2成立又执行4,在执行5,如果5成立在执行6,在执行5,如果5不成立,在执行3,在执行2,如果2不成立,意味着本次循环结束,在执行B,在上图中,需要注意的是,如果2成立的话,那么每次4都需要执行。
【复习进制的知识】
进制之间的转换:
1、什么叫n进制
逢n进一
2、把r进制转成十进制
如234为5进制,那么转换成10进制是多少?
2x5x5+3x5+4的值就是转换成的10进制。
234e是16进制,转换成10进制是多少?
2x16x16x16+3x16x16+4x16+12的值就是转换成10进制的值。
注意上面的规律。
3、十进制转成r进制
4、不同进制所代表的数值之间的关系(例2)
十进制的3981转化成十六进制是F8D
十进制的3981和十六进制的F8D所代表的本质上都是同一个数字。
那么把十进制转换成r进制呢,其实很简单,就是把10进制数除以r,直到商是0的时候。
然后取余数,余数倒序排列:
例1:
十进制转二进制
例2:
十进制转十六进制
【复习运算符的知识】
复习前面的运算符知识:
一些琐碎的运算符知识:
1、自增[或者自减]
举例:
为什么会出现自增
1、代码更精炼
2、自增的速度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 语言 详细 笔记 完整版