C语言笔记.docx
- 文档编号:2395151
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:45
- 大小:31.31KB
C语言笔记.docx
《C语言笔记.docx》由会员分享,可在线阅读,更多相关《C语言笔记.docx(45页珍藏版)》请在冰点文库上搜索。
C语言笔记
郝斌
学习顺序:
C语言,SQL,JavaSE,HTML,JavaWeb.
1-1020160210
计算机专业课程。
microsoftvisualc++6.0
为什么要学习c语言?
c语言,高级语言,结构化语言(缺陷,数据和操作的分离)。
Java(运行最慢,简单,容易上手,可移植性强),c++(最难)(面向对象语言,学其一)
发展历史:
ALGOL60—CPL—BCPL—B—C(1972-1973)—C++—JAVA(贝尔实验室)
C语言的特点:
优点:
代码量小,速度快,功能强大
缺点高:
危险性高(编写过程中无法检测出错误),开发周期长,可移植性不强
C语言的应用领域:
系统软件开发(操作系统windows,linux,unix;驱动程序:
主板驱动,显卡驱动;数据库:
DB2,oracle,)
应用软件开发(办公软件:
Wps;图形图像多媒体:
ACDSee,photoshop;嵌入式软件开发:
只能手机,掌上电脑;游戏开发:
2D、3D游戏)
C语言的重要性:
有史以来最重要的语言,大企业外企招聘程序员必考的语言,为学习数据结构、C++、Java、C#奠定基础。
怎么学习C语言:
途径:
多思考,多上机。
目标:
能看懂程序,能调试程序,掌握语法规则,掌握简单的算法,自学能学要很强。
学Java为什么建议要先学C.学C就是学Java,因为C语言中至少80%的语法知识都被Java继承过来了。
C是面向过程语言的代表,学好C有助于学习Java中的面向对象的思想。
学好C中的指针是理解Java中的引用的基础。
如果不懂指针就不可能对Java中的引用有深刻的理解,而引用是Java中一个最基本但又十分重要的知识。
32个关键字:
autobreakcasecharconstcontinuedefaultdodouble
elseenumexternfloatforgotoifintlongregister
returnshortsignedsizeofstaticstructswitchtypedef
unsignedunionvoidvolatilewhile
数学和哲学有助于高深的程序。
11-25
ultraedit(屏幕画笔)
举例子:
一元二次方程的编程
visualc++的使用,编程的规范
20160217星期三
C语言编程预备知识:
1.cpu(英特尔,cpu不能处理硬盘上的数据,只能处理内存条上的数据。
)内存条硬盘显卡主板(传输,中间介质)显示器之间的关系
(通过双击硬盘上的文件这个命令,使得其数据文件进入到内存条被cpu处理,后经显卡,声卡,再经过显示器或喇叭播放出来。
)
内存在运行前需要向操作系统申请存储空间,在内存空间足够时,操作系统将分配一段内存空间并将外存中软件拷贝一份存入内存空间,并启动该软件的运行。
在软件运行期间,该软件所占空间不再分配给其他软件。
当软件运行完毕后,操作系统将回收该内存空间(注意:
操作系统并不清空该内存空间中遗留下来的数据,这些残留数据为垃圾数据),以便再次分配给其他软件使用。
2、HelloWorld程序是如何运行起来的
通过编译和链接会生成一个exe文件的可移植文件,点感叹号时软件会请求操作系统去运行这个文件。
3、什么是数据类型:
数学上的数据分类:
整数,实数,有理数,无理数,字符,
编程数据分类:
基本类型数据(不能再分割):
整数(整型——int(4个字节)(一个字节八位),短整型——shortint(2个字节),长整型——longint(8个字节));
实数(浮点数)(有小数位的数)(单精度浮点数——float(4个字节);双精度浮点数——double(8个字节));
字符(char(1个字节))
复合类型数据:
(把基本类型拼接到一起)
结构体:
可忽略
枚举:
主要的(以后讲)
公用体:
可忽略(单片机应用的)
4、什么是变量:
把变量字母和内存条里面的空闲单元产生联系,
变量的本质:
就是内存中一段存储空间。
5、cpu内存条(单元填充01代码)vc++6.0操作系统之间的关系
软件是通过操作系统运行的,那么在没有操作系统之前,是怎么编写操作系统的?
*6、变量为什么要初始化!
很重要
所谓初始化,就是赋值的意思。
如果没有赋初值,v++软件就会放一个填充字(-8…60垃圾值)在里面。
variable变量,initialied初始化
7、如何定义变量
数据类型变量名=要赋的值;
等价于
数据类型变量名;
变量名=要赋的值;
举例:
inti=3;等价于inti;i=3;
inti,j;等价于inti;intj;
inti,j=3;等价于inti;intj=3;
inti=3,j=5;等价于inti;intj;i=3;j=5;
inti,j;i=j=5;等价于inti,j;i=5;j=5;
8、什么是进制
十进制就是逢十进一(0~9),二进制就是逢二进一(0~1)冯诺依曼(计算机之父),图灵。
N进制就是逢N进一。
计算机只能识别二进制。
在数字后加B表示二进制,加O表示八进制(0~7),加D表示十进制,加H表示十六进制(0~9,A~F)。
进制转化:
取余。
如果十进制转八进制,则对八取余。
总之,十进制转N进制,对N取余至商为零,余数倒序排列。
不同进制多代表的数值之间的关系。
十进制的3981转化成十六进制是F8D。
两者本质上是一个意思。
printf用法:
%d表示以十进制输出,%x或%X表示以十六进制输出,%o:
八进制输出。
9、常量在C语言中是如何表示的
常量分为整数(十进制,传统的写法;十六进制,前面加字母ox或字母OX,八进制前面加零。
);浮点数(传统的写法floatx=3.2,科学计数法floatx=3.2e3,(即3.2*10^3=3200));字符(单个字符用单引号括起来,'A'表示字符A,'AB'错误,"AB";字符串用双括号括起来,"A"表示‘A’和‘\0’的组合)
10、常量是以什么样的二进制代码存储在计算机中的
编码
整数是以补码的形式转化为二进制代码存储在计算机中的。
实数是以IEEE754标准转化为二进制代码存储在计算机中的。
字符的本质实际上与整数的存储相同。
每个字符有对应Ascii码值,例如A对应65.
201602180900星期四
26-30
*11、代码规范化
目的和作用:
可以更清楚的看懂程序,即可读性强。
是程序不容易出错。
书:
林锐《高质量C/C++编程》
代码敲写规则:
成对的敲。
内部代码要缩进。
功能与功能间要换行。
注释要写的详细。
程序分为三部分:
定义变量,对变量进行操作,输出值。
12、什么是字节
字节是存储数据的单位,并且是硬件所能访问的最小单位。
内存条里面分很多小格,放置0和1。
1字节=8位1K=1024字节1M=1024K1G=1024M
*13、不同类型数据之间相互赋值的问题
补码:
指针。
(C/C++用的多,Java没有)以后讲,
*14、什么是ASCII吗
ASCII不是一个值,而是一种规定,
ASCII规定了不同的字符是使用了哪个整数值去表示
它规定了,‘A’---65,'B'---66‘a’---97'b'---98
字符串不能赋给单个字符。
charch='A'//ok定义变量
//charch="AB"//error因为“AB”是字符串,不能赋给单个字符变量
//charch="A"//error
//charch='AB';//‘AB’是错误的
//charch=‘B'//error因为ch变量已经在之前定义了,这样会导致变量名被重复
ch='C'将'C'赋值给ch
15、字符的存储【字符本质上与整数的存储方式相同】
31-49
如何编写出有保存价值和学习价值的程序。
注释齐全,注明时间,功能,目的,在那个软件的输出结构。
总结。
基本的输入和输出函数的用法
printf()---将变量的内容输出到显示器上。
四种用法:
1、printf("字符串\n")//\n表示换行
2、printf("输出控制符%d",输出参数)
控制符决定二进制代码以什么形式输出。
3、printf("输出参数1输出参数2…\n",输出参数1,输出参数2,…)
4、printf("输出控制符非输出控制符",输出参数)
%开头的是输出控制符(%d%ld%c%f%lf%x%X%#X(输出是数值会自动在前面加0X,推荐))
为什么需要输出控制符:
1、01组成的代表可以表示数据也可以表示指令。
通过输出控制符去解读01代码。
2、如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式就会有不同的输出结果。
越往后学越简单。
前六节课最难,因为很枯燥。
这里面,没有个人的思想,只有笔记。
记住,总结很重要,要记录下你当时学习后的心得。
时间。
书---王爽汇编。
scanf()【在Java里面没有】---通过键盘将数据输入到变量中。
两种用法:
1、scanf(“输入控制符”,输入参数);scanf(“%d”,&i)&i表示i的地址,&是一个取地址符。
功能:
将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中。
2、scanf(“非控制输入符控制输入符”,输入参数)
非输入控制符必须原样输入。
scanf(‘m%d’,&i);//m123正确的输入,123m123n非法的输入
printf(‘i=%d’,i);
scanf(“%d,%d,%d\n”,i,j,k)//输入时为1,2,3(逗号作为非输入控制符得输入。
)
如何使用scanf编写高质量代码。
1、使用scanf之前最好先使用printf提示用户以什么样的方式输入。
2、scanf中尽量不要使用非输入控制符,尤其不要使用\n.
3、应该编写代码对用户的非法输入做适当的处理。
while((ch=getchar())!
='\n')
continue;
运算符
1、算数运算符
+-*/(除)%(取余数)
除法/的运算结果和运算对象的数据类型有关,两个数都是int,则商是int,若有小数,则截取小数部分。
被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型数据,不截取小数部分。
取余%的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。
2、关系运算符
>>=<=!
===
3、逻辑运算符
!
(非)&&(并且)||(或)
!
真——假!
假——真
真&&真——真真&&假——假假&&真——假假&&假——假
真||真——真真||假——真假||真——真假||假——假
C语言对真假的处理:
非零是真,零是假。
真用1表示,假用零。
&&左边表达式为假时右边表达式肯定不会执行。
intk=20;
intm;
m=(1>2)&&(k=5);
printf(“m=d%,k=d%\n”,m,k);
结果为m=0,k=20
||左边表达式为真时右边表达式肯定不会执行。
intk=20;
intm;
m=(1>2)||(k=5);
printf(“m=d%,k=d%\n”,m,k);
结果为m=1,k=5
4、赋值预算符
=+=(a+=3等价于a=a+3)*=/=-=
5、优先级别
算术>关系>逻辑>赋值
编写运算长的算式时,用括号括起来高级别的。
6、其他的运算符
1、自增自减
分类:
前自增(++i)后自增(i++)
区别:
相同:
都是使i的值加1
不同:
前自增整体表达式的值是i加1之后的值,
后自增整体表达式的值是i加1之前的值。
#include
intmain(void)
{
inti,j,k,m;
i=j=3;
k=i++;
m=++j;
printf("i=%d,j=%d,k=%d,m=%d\n",i,j,k,m);
return0;
}
//结果是i=4,j=4,k=3,m=4
为什么会出现自增:
代码更精炼,
自增的速度更快(在cpu的内存运行,即在寄存器运行)
学习自增要明白的几个问题。
1、编程时应该尽量屏蔽掉前自增和后自增的区别。
2、自增表达式最好不要作为一个更大的表达式的一部分来使用。
或者说:
i++和++i单独成一个语句,不要把它作为一个完整复合语句的一部分来使用。
如:
intm=i+++++i+i+i++;//这样写是不规范的,
printf("%d%d%d\n",i,j,k);//不好
2、三目运算符
A?
B:
C等价于
if(A)
B;
else
C;
举例:
inti;i=(3>2?
5:
1)
3、逗号表达式
格式:
(A,B,C,D)
功能:
从左到右执行。
最终表达式的值是最后一项的值。
举例:
i=(4,5,6,3);//最终i=3
**?
j=2,i=(j++,++j,j+2,j-3);//运算顺序j=3,j=4.j+2=6,j-3=1,//i=1
50-60
**流程控制(图灵)
1、什么是流程控制(得彻底掌握,否则很难看懂程序)
程序代码执行的顺序。
自学编程之前要看懂一个程序的执行流程,每个语句的功能,。
要明白程序为何会编译出错。
2、流程控制的分类。
(SQLOracle思想是一样的,语法不同而已)
顺序
选择
定义:
某些代码可能执行,也可能不执行,有选择的执行某些代码
分类:
if
1、if最简单的用法
格式:
if(表达式)
语句
功能:
如果表达式为真则执行语句,
否则就不执行。
2、if的范围问题
1、if(表达式)
语句1;
语句2;
解释:
if默认只能控制语句A的执行或不执行
if无法控制语句B的执行或不执行
或者说:
语句B一定会执行。
2、if(表达式)
{语句1;
语句2;
}
if默认只能控制一个语句的执行,如果想控制多
个语句,要用括号括起来。
3、if…else…的用法
if(表达式)
语句1;
else
语句2;
4、if…elseif…else的用法
if(表达式1)
语句1;
elseif(表达式2)
语句2;
elseif(表达式3)
语句3;
……
else
语句n;
5、C语言对真假的处理
非零是真,零就是假。
真用1表示,假用0表示。
,
6、if举例---求分数的等级
举例:
———————————————————————————————————
#include
intmain(void)
{
inta,b,c;
intt;
printf("请输入三个整数(中间一空格隔开):
");
scanf("%d%d%d",&a,&b,&c);
//编写代码完成a是最大值,b是中间值。
c是最小值
if(a
{
t=a;
a=b;
b=t;
}
if(a { t=a; a=c; c=t; } if(b { t=b; b=c; c=t; } printf("a=%d,b=%d,c=%d\n",a,b,c); return0; } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7、if的常见问题解析 1、空语句的问题 1、一个分号一个语句。 if(3>2); 等价于if(3>2) ;//这是一个空语句。 2、if(表达式1) A; else B;是正确的 if(表达式1); A; else B;是错误的。 //没有else开头的语句,要和if搭配。 3、if(表达式1) A; elseif(表达式2) B; elseif(表达式3) C; else//else后面不能加表达式。 D; //即使表达式1和2成立,也只会执行A语句。 4、if(表达式1) A; elseif(表达式2) B; elseif(表达式3) C; //语法没有错误,但有逻辑上的漏洞。 初学者容易犯的错误。 (小算法程序,可看可不看) 判断一个数字是否为素数(1,3,5,7,11。 。 )回文数(1221,4334,) 编程实现求一个十进制数字的二进制形式。 把一个数字的每位是奇数的数字取出来组合形成新数字。 求一个数字倒过来的数字。 如何看懂一个程序。 1、流程 2、每个语句的功能。 3、试数。 ***对一些小算法的程序 尝试自己去编程解决它,(其实大部分人都自己无法解决。 ) 如果解决不了,就看答案。 关键是把答案看懂,这个要花很大的精力。 看懂之后尝试自己去修改程序,并且知道修改之后程序的不同输出结果的含义 照着答案去敲。 几天敲一次,敲到熟为止。 调试错误 不看答案,自己独立把答案敲出来。 如果程序实在无法彻底理解,就把它背会。 对于算法,要多看,多想,多记。 模仿的多了自然而然就会了。 强制类型转换 格式: (数据类型)(表达式) 功能: 把表达式的值强制转化为前面所执行的数据类型。 (主要是数据类型的运用) 举例: (int)(4.5+2.2)最终值是6 (float)(34)最终值是34.000000 浮点数的存储所带来的问题 float和double都不能保证把所有的实数都准确的保存在计算机中。 例子 floati=99.9; printf("%f\n",i);//结果输出的是99.900002 有一个浮点型变量x,如何判断x的值是否为零。 if(|x-0.000001|<0.000001) 是零; else 不是零 为什么循环中更新的变量不能定义成浮点型? ——————————————————————————————————— switch switch是选择不是循环,break在该语句中是退出作用。 不能出现continue。 举例: #include intmain(void) { intval; printf("请输入你要进入的楼层: \n"); scanf("%d",&val); switch(val) { case1: printf("1楼! \n"); break; case2: printf("2楼! \n"); break; case3: printf("3楼! \n"); default: printf("没有这一层! "); break; } return0; } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2016021823: 00收 2016021910: 00星期五 循环 定义: 某些代码会被重复执行。 求1到100之间的奇数之和。 与偶数之和 求1到100之间奇数的个数 —————————————————————————————————————— 求1到100之间奇数的平均值 #include intmain(void) { inti; intsum=0; intcnt=0;//个数一般用cnt表示 floatavg;//avrage for(i=1;i<101;++i) { if(i%2==1) { sum+=i; ++cnt; } } avg=sum/cnt; printf("cnt=%d\n",cnt); printf("sum=%d\n",sum); printf("avg=%f\n",avg); return0; } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 循环分类: forwhiledo…whilebreak和continue /**\这些东西都是以前学过的,现在就当是复习了。 /**\学一遍后能静下心来去调试一个程序。 C语言的算法可以不去看他,数据库的算法才是重要的。 for 1、格式: for(1;2;3)————for(i=0;i<=10;++i) 语句A;————sum=sum+i; 2、执行的流程: 单个for循环的使用 多个for循环的使用 ———————————————————————————————————— for(1;2;3) for(4;5;6) A; B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔记