C语言学习大纲郝斌_第1页
C语言学习大纲郝斌_第2页
C语言学习大纲郝斌_第3页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言概述:熟练掌握c语言的语法规则1为什么学习C语言1) . C的起源和发展2) . C的特点优点代码量小速度快功能强大缺点危险性高开发周期长可移植性不强3) .c的应用领域主要是系统领域4) .c的重要性2、怎样学习C语言3、学习的目标掌握简单的算法理解面向过程的思想,这非常有助于将来对面向对象思想的学习能看懂程序会调试程序掌握将大问题转化为一系列小问题来求解的思想为学习C+、数据结构、c#、java打下良好的基础4、常见的学习问题1、学习java为什么建议先学习 C语言2、 没学过计算机专业的课程能够学懂C语言3、 英语和数学不好能学好C吗32个关键词:(有系统定义,不能重做其他定义)a

2、uto break case char constcon ti nue default do double elseenum exter n float for goto了解程序语言及发展历史if int long register retur n进制转换short sig ned sizeof static structswitch typedef un sig ned un sig nedunion void volatile while5、课程规划c语言简介第一讲、基本编程知识第二讲、数据类型第三讲、运算符和表达式第四讲、流程控制(所有语言都一样的)第五讲、函数(体现出面向过程和面向对象

3、的区别)第六讲、数组第七讲、指针(c语言的灵魂)第八讲、变量的作用域和存储方式第九讲、扩展数据类型第十讲、专题:字符串的处理补码动态内存分配(java、数据结构必学) 综合应用:链表的使用6、举例子:一元二次方程# in clude <># in clude <>int main (void)01组成的代码可以表示数据也可以表示指令2. 如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果sca nf ()Java中已经没有了两种用法:用法一:scanf ("输入控制符”,输入参数);功能:将从键盘输入的字符转化为

4、输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中。用法二:scanf(”非输入控制符输入控制符”,输入参数); 功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中非输入控制符必须原样输入如何使用scanf编写出高质量代码1. 使用scanf之前最好先使用printf 提示用户以什么 样的方式来输入2. Scanf中尽量不要使用非输入控制符,尤其是不要用n3. 应该编写代码对用户的非法输入做适当的处理【非重点】con ti nue;-13%23 = -13 3%5 = 3关系运算符>>=<<=!=(不等于)=(

5、等于)逻辑运算法!(非)&&( 并且)|( 或)!真假!假真真&&真真真&&假假假&&真假假&&假假真|假真假|真真真|真真while (ch=getchar() != 'n'运算符算术运算符+ - */(除)%(取余数)除法的运算结果和运算对象的数据类型有关,两个数都是int ,则商就是int,若商有小数,则截取小数部分;被除数和除数中只要 有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。女口:16/5 = 3 16/ =-13/4 = -4-13/-3 = 43/5 = 05/3 =

6、 1最经典的例题就是求s = 1 + 1/2 + 1/3 + 1/4 + 1/5+1/100的值。取余的运算对象必须是整数,结果是整除后的余数,其余数的符 号与被除数相等。女口:13%3 = 113%-3 = 1-13%3 = -1假II假C语言对真假的处理非零是真零是假真是1表示假使0表示&&左边的表达式为假右边的表达式肯定不会执行I I左边的表达式为真右边的表达式肯定不会执行赋值运算符=+= *= /=-=优先级别算术 > 关系 > 逻辑 > 赋值附录一些琐碎的运算符知识1. 什么是流程控制程序代码执行的顺序2. 流程控制的分类顺序选择定义某些代码可执行,

7、也可能不执行,有选择的执行某些代码分类if1. if最简单的用法格式:if (表达式)流程控制 (学习c语言的第一个重点)语句自增 自减 三目运算符 逗号表达式功能:如果表达式为真,执行语句如果表达式为假,语句不执行2. if的范围问题(重点)1.if (表达式)语句A;语句B;解释:if默认只能控制语句 A的 执行或不执行if无法控制语句B的执行或不执行或者讲:语句B 一定会执行语句A;语句B;此时if可以控制语句A和语句B由此可见:if默认只能控制一个 语句的执行或不执行,如果想控制多个语句的执行或不执行就必须把这些语句用括 起来。3. if.else. 的用法4. if.else if.

8、else.的用法格式:If (表达式)if ( 表达式1)if (3 > 2);等价于if (3 > 2)Jif (表达式1)A;elseB;是正确的if (表达式1);A;elseB;是错误的A;else if ( 表达式2)B;if ( 表达式3)C;elseD;5. C语言对真假的处理非零是真零就是假真用一表示假用零表示6. if举例-求分数的等级7. if的常见问题解析1.空语句的问题C;这样些语法不会错,但逻辑上有漏洞5.if ( 表达式1)A;else if ( 表达式2)B;if (表达式3)C;else(表达式4)什么是进制逢n进一2.把r进制转成十进制3.十进制转

9、成r进制十进制转r进制:除r取余,直至商为0,余数倒序4.不同进制所代表的数值之间的关系if ( 表达式1)A;else if ( 表达式2)B;if ( 表达式3)C;elseD;即便表达式1和2都成立,也只会执 行A语句4.if ( 表达式1)A;else if ( 表达式2)B;if ( 表达式3)十进制的3981转化成十六进制是 F8D十进制的3981和十六进制的F8D所代表的本质都是同一个数一些琐碎的运算符知识自增【或者自减】前自增 -+i后自增-i+前自增和后自增的异同:相同:最终都使i的值加1不同:前自增整体表达式的值是i加1之后的值后自增整体表达式的值是i加1之前的值为什么会出

10、现自增自增的速度更快学习自增要明白的几个问题1. 我们编程时应该尽量屏蔽掉前自增和后自 增的差别2. 自增表达式最好不要作为一个更大的表达 式的一部分来使用或者说i+ 和+i单独成一个语句,不要把它作为 一个完整的复合语句的一部分来使用三目运算符:A B : C等价于If (A)B;else代码更精练1. 格式:for (1; 2; 3)语句A;2. 执行的流程【重点】单个for循环的使用多个for循环的嵌套使用for ( 1; 2 ; 3). + 1001 + 1/ 2 + 1/3 + . + 1/100while1. 执行的顺序格式:while ( 表达式)语句;2. 与for的相互比较f

11、or和while可以相互转换C;逗号表达式格式:(a, B, C, D )功能:从左到右执行最终表达式的值是最后一项的值switch (很少用到,以后讲)把电梯程序看懂就行啦循环定义:某些代码会被重复执行分类for重点、用到最多、最难for (1; 2 ; 3 )A;等价于1;While (2)A;3;while和for可以相互转化但for的逻辑性更强,更不容易出错,推荐多使用for3. 举例从键盘输入一个数字,如果该数字是会文数,则返回yes,否则返回no回文数:正着写和倒着写都一样比如:121 12321 都是回文数试数:>m=121sum=0*10+121%10=1 m=m/10=

12、12;>m=12成立sum=1*10+12%10=12 m=12/10=1>m=1成立sum=12*10+1%10=121 m=1/10=0 >m=0不成立sum=valbreak如果用于循环是用来终止循环4什么时候使用 while,什么时候使用for没法说,用多了自然而然就知道了do.while格式:dowhile(表达式);do.while. 并不等价于for,当然也不等价于while主要用于人机交互一元二次方程举例break 禾口 continuebreak (很重要)break如果用于 switch,则是用于终止 switchbreak不能直接用于if,除了 if属于

13、循环内部的一个子句例子:for (i=0;i<3;+i)if (3 > 2)1. break; > 来实现形参和实参个数相同位置一一对应数据类型必须相互兼容如何在软件开发中合理的设计函数来解决实际问题一个函数的功能尽量独立,单一多学习,多模仿牛人的代码函数是C语言的基本单位,类是Java,C#, C+的基本单位常用的系统函数double sqrt (double x);求x的平方根int abs (int x)求x的绝对值double fabs (double x)求x的绝对值专题:递归(可以参见数递结构视频)变量的作用域和存储方式:按作用域分:全局变量在所有函数外部定义的变

14、量叫全局变量全局变量使用范围:从定义位置开始到整个程序结束局部变量在一个函数内部定义的变量或者函数的形参都统称为局部变量void f (int i)int j = 20;I和j都属于局部变量局部变量使用范围:只能在本函数内部使用注意的问题:全局变量和局部变量命名冲突的问题在一个函数内部如果定义的局部变量的名字和全局 变量名一样时,局部变量会屏蔽掉全局变量按变量的存储方式静态变量自动变量寄存器变量指针:指针的重要性表示一些复杂的数据结构快速传递数据,减少了内存的耗用【重点】使函数返回一个以上的值【重点】能直接访问硬件能够方便的处理字符串是理解面向对象语言中引用的基础总结:指针是c语言的灵魂指针的

15、定义地址内存单兀的编号从零开始的非负整数范围:4G【0 4G-1】指针指针就是地址,地址就是指针指针就越是内存单兀的编号指针变量是存放地址的变量指针和指针变量是两个不同的概念但是要注意:通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样指针的本质就是一个操作受限的非负整数指针的分类1. 基本类型指针int * p;果一个指针变量指向了某个普通变量,则*指针变量就完全等同于普通变量例子:如果p是个指针变量。并且p存放了普通变量i的地址,则p指向了普通变量i*p 就完全等同于i或者说:在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p*p就是以p的内容为地址的变量*/j

16、 = *p;.的方式就可以修改主调函数相关变量的值2. 指针和数组指针和一维数组一维数组名一维数组名是个指针常量它存放的是一维数组第一个元素的地址下标和指针如果p是个指针变量,则pi永远等价于*p(p+i)确定一个一维数组需要几个参数【如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息】需要两个参数:数组第一个元素的地址数组的长度指针变量的运算指针变量不能相加不能相乘也不能相除如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可 以相减。一个指针变量到底占几个字节【非重点】预备知识:sizeof(数据类型)功能:返回值就是该数据类型所占的字节 数例子:sizeo

17、f( int)= 4 sizeof(char)1sizet(double) = 8sizeof( 变量名)功能:返回值是该变量所占的字节数假设p指向char类型变量(1个字节)假设r指向double类型变量(8个字节) p q r本身所占的字节数是否一样答案:pqr本身所占字节数是一样的总结:一个指针变量,无论它指向的变量占几个 字节该指针变量本身只占四个字节一个变量的地址是用该变量首字节的地址 来表示指针和二维数组3. 指针和函数4. 指针和结构体假设q指向int类型变量(4个字节)5.多级指针专题:char sex;动态内存分配 【重点难点】 传统数组的缺点:1. 数组长度必须事现指定,且

18、只能是常整数,不能是变量例子:1. I nt a 5;员名2. 指针变量名一 >成员名(第二种方式更常用)指针变量名一 > 成员名在计算机内部会被转化成(*指针变量名)成员名的方式来执行所以说这两种方式是等价的例子:struct Stude nt int age;float score;int main (void)struct Student st = 80,,F'ge,没有什么为什么,这就是一 >的含义,这也是一种硬性 规定2. 所以pst >age等价于(*pst ) .age也等价 于3. 我们之所以知道 pst >age等价于,是因为 pst >age是被转化成了( *pst ) .age来执行>age的含义:pst所指向的那个结构体变量中的age这个成员结构体变量和结构体变量指针作为函数参数传递的问题结构体变量的运算结构体变量不能相加,不能相减,也不能互相乘除但结构体变量可以相互赋值例子:struct Stude ntint age;char s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论