《郝斌C语言自学视频》笔记(word文档83页)

上传人:晟*** 文档编号:5459052 上传时间:2022-06-27 格式:DOCX 页数:83 大小:2.72MB
返回 下载 相关 举报
《郝斌C语言自学视频》笔记(word文档83页)_第1页
第1页 / 共83页
《郝斌C语言自学视频》笔记(word文档83页)_第2页
第2页 / 共83页
《郝斌C语言自学视频》笔记(word文档83页)_第3页
第3页 / 共83页
《郝斌C语言自学视频》笔记(word文档83页)_第4页
第4页 / 共83页
《郝斌C语言自学视频》笔记(word文档83页)_第5页
第5页 / 共83页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上郝斌C语言自学视频笔记v1.1作者:星辰变71目录的编号对应视频的编号,专为懒得打字做笔记的吧友所著!再次感谢郝斌老师,带我们装逼带我们飞(_)目录1.所用编程软件视频中用的编程软件是VC+6.0,本笔记用的编程软件是VS2010和Dev C+5.11。要求变量定义写在最前面,不能中途定义,否则编译时会出错。17.什么是数据类型整型:整型int-4字节 长整型long int-8 短整型short int-2浮点型:float-4 double-8字符char-1所占字节数不一定都是这样,但是比如长整型所占一定大于等于整型。复合数据类型:结构体 枚举 共用体18.什么是变量int i; /VC+6.0请求操作系统把内存条中的一个空闲单元和i产生关联i=3; /3最终是存放在内存中,程序终止之后3所站的空间被释放如果不使用变量,要自己去找内存中的空闲单元,有了变量就不用考虑了。变量的本质就是内存中一段存储空间20.变量为什么必须初始化所谓初始化,就是赋值。当软件运行完毕后,操作系统将回收该内存空间,以便再次分配给其他软件使用。(注意:操作系统并不清空该内存空间中遗留下来的数据)综上,一个软件所分配的空间中极可能存在着以前其他软件使用过后的残留数据(垃圾数据)。所以通常我们为一个变量,为一个数组,分配好存储空间之后都要对该内存空间初始化!21.如何定义变量int i=3;等价于int i; i=3;int i,j;等价于int i; int j;int i,j=3;等价于int i; int j; j=3;int j=3,j=5;等价于int i; int j; i=3; j=5;int i,j;i=j=5;等价于int i,j; i=5; j=5;22.什么是进制N进制就是指逢N进1。我们计算机只识别二进制。C语言规定八进制前要加0(注意是零不是字母O),十六进制前要加0x或者0X,十进制前什么都不加。在汇编中:在数字后加字母B表示二进制,加O表示八进制,加D表示十进制,加H表示十六进制。例如:1011B也记为(1011)2 1357O也记为(1357)8 2049D也记为(2049)10 3FB9H也记为(3FB9)16printf中,%d表示以十进制输出;%x或%X(决定输出字母的大小写)以十六进制输出;%O(这次是字母不是零了!)表示以八进制输出。23.常量在C语言中是如何表示的A整数:八进制前要加0(注意是零不是字母O),十六进制前要加0x或者0X,十进制前什么都不加。B浮点数:传统的写法float = 3.2;科学计数法float x = 3.2e3; /x的值是3200float x =123.45e-2; /x的值是是1.2345编译时会有个警告,如图为什么呢?C语言中,无论是传统写法还是科学计数法,默认是double型。double赋给float会丢失精度。可以选择忽略警告,也可以选择加个F变成123.45e-2F。这样编译时就没有警告了。注意一个问题,为了解决上述窗口一闪而过,我们要加上头文件(如图)并在main函数结尾前加上(如图)。C字符:单个字符用单引号括起来,如A。AB错误,”AB”正确。字符串用双引号括起来。A正确,因为A代表了A 0的组合。可以想成一个字符串就一个字符。24.常量是以什么样的二进制代码存储在计算机中整数是以补码的形式转换为二进制代码存储在计算中的。实数是以IEEE754标准转换为二进制代码存储在计算中的。字符本质上与整数的存储方式相同。26.代码的规范化A. 括号一敲敲一对(),敲完括号再写内容B注意加空格。比如if ()/if要敲空格再加括号比如Int a = 1; /等号两边要加空格比如x1 = (-b + sqrt(delta) / (2*a); /这些运算之间要加空格C注意从属关系要进行缩进。选中要缩进的多行代码按Tab,就一起右移了,Shift+Tab就一起左移回来了。D代码之间要适当的空行。相同功能的写在一起,然后空一行再写下一部分相对独立功能的代码。27.什么是字节字节是存储数据的单位,并且是硬件所能访问的最小单位。1字节=8位,这是固定不变的。CPU只能直接处理内存里面的数据,硬盘的数据必须调入内存才能处理。硬件上最小的单位是位,不是0就是1。但是CPU只能到字节上,不能准确控制到某一位。控制到位上可通过位运算符。下面是内存条28.不同类型数据之间相互赋值的问题这个问题是C和C+所独有的,如果想深入了解C和C+必须搞清楚。如果想搞清楚必须懂补码。29Char使用常见问题A. char ch = A; /正确 char ch =”AB”; /错误,不能把字符串赋给单个字符char ch =”A” ; /错误char ch =AB; /错误B以下写法是错误的! 下面这么写就对了。30.什么是ASCII码 ASCII不是一个值,是一种规定。它规定不同的字符是使用哪个整数值去表示。比如A-65 /A这个字符在ASCII中是用65来表示的a-97,0-48所以说字符本质上与整数的存储方式相同。33.printf();将变量的内容输出到显示器上四种用法:A.printf(”字符串”);B.printf(”输出控制符”,输出参数);C.printf(”输出控制符1 输出控制符2”,输出参数1,输出参数2);要是想让35之间有空格要是想让35之间有逗号还有更清楚的,写上i = 3,j = 5如下图注意一个问题,下面写法是错误的,虽然编译时没有问题。因为输出控制符和输出参数的个数不一一对应。D. printf(”输出控制符 非输出控制符”,输出参数); 输出控制符包括%d %ld %c %f %lf %o %s %x(或%X或%#X或%#x)这么看还是%#X比较好!非输出控制符原样输出,在上面C中就是例子。34.如何让程序更有保存价值在开头加上时间,功能,目的等。在末尾加上在某款软件中的输出结果和总结。补充:怎么复制.exe黑窗口中的数据右键标记或者全选,标记完了再点右键,然后就不是被选中状态了。这时到目标处ctrl+V就OK了。36.为什么需要输出控制符A.0和1组成的代码可以表示数据也可以表示指令。一串01代码本身没有实际含义,关键是看怎么用输出控制符去解读。B. 0和1组成的代码表示的是数据的话,那么用不同的输出格式输出就会有不同的结果。38+39.scanf();用法:通过键盘将数据输入到变量中scanf(”输入控制符”,输入参数);/当然可以含有非输入控制符功能:将从键盘输入的字符,转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中。解析:A.读着云里雾里。在键盘输入123不是整型数字123,而是字符1字符2字符3,操作系统就是这么规定的。%d的作用就是把字符1字符2字符3转换成一个十进制整数。B.输入参数是&i,就是存入以i的地址为地址的变量,就是i变量!就像把我的家作为家的人,就是我这个人!服了下面是含有非输入控制符的例子。 注意:A.不要忘了加上取地址符&。B.如果scanf();中含有非输入控制符,那么输入时要把它对着输一遍,非输入控制符不会和printf();一样显示在黑窗口上!C.因为是%d输入,所以输入m123n时自动把n屏蔽了。D.有了scanf了就不需要在定义变量时赋初值了,当然附了无影响。E.scanf中不要加非输入控制符,用户并不知道你加的是什么,没法照着再输一遍!40.一次给多个键盘变量赋值就算我把%d%d连在一起写,我输入12按回车也不会i = 1,j = 2,他会一直换行光标闪烁等我我输入j的值。还是%d%d连在一起写,我输入1,空格/回车,输入2,输完后回车就i = 1,j = 2。A.就是我%d%d不管之间连在一起还是加几个空格,我都可以在黑窗口中用空格把输入的三个数分开。B.但是我要是之间加逗号和若干空格,那我输入的两个值需要以逗号(或逗号加若干空格)相隔。如果仍然以空格相隔,那么只能是第一个值正确。41.第一部分:如何优雅地使用scanfA.上面先加一条提示信息,例如printf(”请输入两个值中间以空格/逗号分隔:”);B.scanf尽量不使用非输入控制符,尤其是n!有时候莫名其妙的不好用就是随手加了个n引起的!不过加空格没事(_)scanf(%dn,&i); / n加进来后你想输出123就要输入123n总结:一个取地址符&,一个换行符n,scanf和printf不要弄混了!C.(难点!)scanf对用户非法输入的处理() C-1. i和j都是%d输出,i在前面,输入123m,它找到了123作为合法的%d字符,然后j开始从m开始读,开始就出错了。但是我要是定义char j; 然后scanf和printf都用%c那就i = 123,j = m,当然这也是错误的输入方式。 然后还有一个问题,我要是输入123mn呢?j = mn?别忘了char 只能存放一个字符啊!所以只能放m啊!C-2. 如果输入m123,开始读就错了,往后都错了,如下图。注意啊,这个地方要好好的理解一下啊!上面的例子是说输入错误的情况下是输一次值回车就报错了。因为出错的部分不会自动丢弃,等待下一次输入时再把出错的部分赋给下一个变量!直接就不用你给下一个变量输入了!然后往后就全错了!好贱啊!上句话不理解可以看C-6,C-7。C-3. 我再次输错值,我输入123空格456还是一次输入,按回车就这个结果。C-4. 我要是输入123空格456空格789,结果如图。个人猜测应该是检测到123遇到空格就把123给i,但是空格不影响往下检测,检测到456遇到空格就把456给了j,再没有输入的值了就停了。C-5. 我要是输入123(可以加一堆空格),他会继续光标闪烁提醒我输入第二个值,我输入456(可以加一堆空格)再按回车结果如下 C-6. 正确的输入方式也就是按照流程的意思就是C-5中输入123回车输入456回车。所以编写程序时可以按照下图,这样就引导用户按照正确的输入方式输入。 C-7. 按照上面的引导出错的话,结果如下图。41.第二部分:保证前面输入的垃圾值不会被接受这样就出现一个问题,当我需要对变量键盘赋值时,前面的输入可能会遗留一些垃圾的输入值,就像上面例子以前有些值没有放进去,而是放进这次输入了,然后往后就全错了。真不知道为什么设计者不直接自动丢弃错误部分呢?!所以我们需要这样一个功能,输入值时要保证前面输入的垃圾值不会被接收。两个scanf之间加入两行代码while(ch = getchar()!= n) continue;如图,这样在输入时前面输入的垃圾值就没有影响了,好神奇啊(_)ch是char类型的! 另外很多编好的代码拿过来就能用,不必自己再绞尽脑汁的去想!42.运算符的分类算数运算符:+ - * /(除) %(取余)关系运算符: = 关系逻辑赋值43.除法与取余除法/的运算结果和运算对象的数据类型有关,两个都是int,则商就是int,若商有小数,则去除小数部分;被除数和除数中有一个或两个是浮点型,那结果就是浮点型,不去除小数部分。如16/5=3 16/5.0=3.2 -13/4=-3 -13/-3=4 3/5=0 有一个常用的计算:m = 1234; m /= 10;第1次m = 123 第2次m = 12 第3次m = 1 第4次m = 0取余%的运算对象必须是整数,结果是整除后的余数,余数的符号与被除数相同。13%3=1 13%-3=1 -13%3=-1 -13%-3=-1 3%5=3 44.逻辑运算符 &:真&真为真,其余都是假 |:假|假为假,其余都是真A. C语言对真假的处理:非零是真,零是假。真用1表示,假用零表示。分析:m的值不是0就是1。32是真,k = 8也是真,所以m是1。B. 要是k = 0结果为 C. k的值不是想得那么简单! 我擦,k = 20!为什么k = 5没有被执行!&左边的表达式为假的时候,右边的表达式就不执行了!因为一个是假的肯定就是假的了!同样啊,对于|,左边的表达式为真的时候,右边的表达式就不执行了!45.初学者学习运算符的一些建议。A忘了的话就查运算符和结合性表。B. 为了让别人更好清楚,把想让它优先级高的用括号括起来。附:谭浩强 著C程序设计(第四版)P378运算符和结合性表运算符与结合性优先级运算符含义要求运算对象的个数结合方向1( )圆括号左-右 下标-指向结构体成员.结构体成员2!逻辑非1(单目运算符)右-左按位取反+自增-自减-负号(类型)类型转换*指针&取地址sizeof长度3*乘法2(双目运算符)左-右/除法%求余4+加法2左-右-减法5右移6 =关系2左-右7=等于2左-右!=不等于8&按位与2左-右9按位异或2左-右10|按位或2左-右11&逻辑与2左-右12|逻辑或2左-右13 ? :条件3(三目运算符)右-左14= += -= *= /= %= = . 单目 算术(先乘除,后加减) 关系 逻辑(不包括!)条件 赋值 逗号以上优先级从高到低。位运算符的优先级比较分散:有的在算术之前如,有的在关系之前如,有的在关系之后如&、|。为了容易记忆,使用位运算符时可加圆括号。46.黑窗口不要重复打开和其属性修改注意一个问题:经常已经打开.exe的黑窗口了,还去点击启动调试(F5)又打开第二个黑窗口了。要把前一个黑窗口关了,再修改再打开第二个!要是已经有黑窗口了,再点击编译(Ctrl+F7)就会弹出一个对话框,这时候别困惑啥意思,就是把已经打开的黑窗口关了!在黑窗口的边框上右键-属性,可以修改光标大小,字体,布局,颜色等,不过默认的挺好的。52.if最简单用法流程控制的分类:顺序、选择(if和switch)、循环 53.if的范围A. if (表达式) 语句A;语句B;if默认只能控制语句A是否执行,语句B一定会执行。它正确的格式应该是if (表达式) 语句A;语句B;B. if (表达式) 语句A;语句B; 此时if 可以控制语句A和语句B。综上所述,if默认只能控制一个语句是否执行。如果想控制多个语句是否执行,就要把它们用括起来。54.ifelse的用法注意一个问题啊,在新建的时候起名叫ifelse会有问题,因为else后面有三个点,加上.c作后缀就是ifelse.c,这样命名不行!新建命名的时候不要加点!(附:.cpp是C+的源程序。在国内,C+读作”C加加”,在国外读作”C Plus Plus”,即”.cpp”。C的源程序后缀就是.c。) else后面也是默认只能控制一个语句是否执行。如果想控制多个语句是否执行,就要把它们用括起来。 55-1.ifelse ifelse的用法格式:if (1) A;else if (2) B;else if (3) C;else /注意!最后一个else后面没有括号了!D;说明:(1)成立A执行;如果(1)不成立(2)成立B执行;如果(1)(2)都不成立执行C;(1)(2)(3)都不成立就执行D了。 注意啊!有个容易犯的错误用法! 55-2. if中容易犯的错误这是1个语句,不是3个!要是3个都会执行那是3个语句,可是只会执行一个所以是1个语句。下面的写法就是错误的!加了哈哈这个语句之后把这个整体分成了3个语句,语句1没问题,语句2也没问题,但是语句3就错了!因为没有语句以else开头()当然,编译(Ctrl + F7)时会提示错误:57.if 举例求分数的等级注意:一种错误的表达式写法!90 = score = 100是XX的()这式子一看觉得是没啥问题,但是是XX的!因为从45节运算符表可以看出关系运算符是自左至右执行的,就是先算90 = score,这就出问题了!90 = score的值是个逻辑值,要不是真要不是假,就说结果不是1就是0,不管是1还是0 小于等于100一定成立()综上,90 = score = 90 & score b则a与c比较 ac则输出a ac则输出b b 再每个语句的功能 - 试数(最后一步尤其重要)试数两个原则:一个是把自己当计算机,一步一步来。一个是写整齐。就一些小算法的程序:A. 尝试自己去编程解决它,基本不太可能()B. 如果解决不了,就看答案C. 关键要把答案看懂,这个要花很大的精力,也是我们学习的重点D. 看懂之后尝试自己去修改程序,并且知道修改后不同输出结果的含义E. 照着答案去敲,调试错误F. 不看答案,自己独立敲出来G. 如果程序实在无法彻底理解,就把它背下来62.if空语句的问题有时候犯错误在if后面加了个分号,如下图 上面两种都一样,就是如果1大于2就执行这个空语句。上述就是3个语句了。语法上虽然没有问题,但是达不到效果了。63.if常见问题A. 上述语法没有问题,但是加了else语言就错了,因为没有单独以else开头的语句。B. 同样,else if和else后面也别加上分号!C. if (表达式1) A;else if (表达式2) B;else if (表达式3) C;elseD;即使表达式1和2都成立,也只会执行A语句。因为表达式1成立了,就没有否则了(_)D. 能不能没有最后一个else?if (表达式1) A;else if (表达式2) B;else if (表达式3) C;/最后的else没有了,语法不会出错,但是逻辑上有漏洞。如下例子:漏洞就是我要是输入分数是70,就没有对应的输出了!E. 更加郁闷的错误O(_)O哈哈if (表达式1) A;else if (表达式2) B;else if (表达式3) C;else (表达式4)/ 最后一个else后面没有括号了!D;不过这个错误还好,语法错误,编译时会提醒你表达式4后面缺少分号。可以这样理解,else后面都是一个语句,但是没有(表达式4)D;这种类型的语句。F. 上述错误我要是表达式4后面加上分号呢?if (表达式1) A;else if (表达式2) B;else if (表达式3) C;else (表达式4);/ 表达式4后面加上分号D;和第E条相比语法上没有错误,编译OK。它就等价于else (表达式4); D;语法上虽然OK,但是只会导致错误结果()67.初
展开阅读全文
相关资源
相关搜索

最新DOC

最新PPT

最新RAR


当前位置:首页 > 教育培训 > 综合教案


黔ICP备20002965号-1  客户服务热线:0857-3221888

Copyright © 2020-2021 www.xinwenku.com All rights reserved 新文库网 版权所有