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

下载本文档

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

文档简介

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

2、)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunsignedunionvoidvolatilewhile5、课程规划c语言简介第一讲、基本编程知识第二讲、数据类型第三讲、运算符和表达式第四讲、流程控制(所有语言都一样的)第五讲、函数(体现出面向过程和面向对象的区别)第六讲、数组第七讲、指针(c语言的灵魂)第八讲、变量的作用域和存储方式第九讲、扩展数据类

3、型第十讲、专题:字符串的处理进制转换补码动态内存分配(java、数据结构必学)综合应用:链表的使用x2=%fn,x1);elseprintf(无解n);Helloword程序举例#includeintmain(void)printf(欢迎大家学习C语言!);return0;6、举例子:一元二次方程# inelude# ineludeintmain(void)/把三个系数保存到计算机中inta=1;/=不表示相等,表示赋值intb=2;intc=3;doubledelta;/delta存放的是b*b-4*a*cdoublex1;/存放一元二次方程的其中一个解doublex2;/存放一元二次方程的

4、其中一个解delta=b*b-4*a*c;if(delta0)x1=(-b+sqrt(delta)/(2*a)x2=(-b-sqrt(delta)/(2*a)printf(”该一元二次方程有两个解,x仁f,x2=%fn,x1,x2);elseif(delta=0)x1=(-b)/(2*a);x1=x2;/右边赋给左边printf(该一元二次方程有一个唯一解,x1=C语言编写的病毒举例:1龌龊的程序:/*龌龊的程序!/*inelude# ineludeineludeintmain(void)intc;inti;elseif(2=c)printf(你太坏了for(j=O;j1O;+j)我要惩罚你!

5、n);elseSystem(start);return0;printf(你敲错了,gotonihao;请重新输入!n)intj;2、内存泄露(占满内存)程序导致死机实例# includeNihao:# includeprintf(1:死机n);printf(2:机房爆炸n);printf(请选择:);scanf(%d,&c);If(c=1)System(shutdown-s-t60)intmain(void)while(1)int*p=(int*)malloc(1000);return0;C语言编程预备知识1、cpu内存条硬盘显卡主板显示器之间的关系2、Helloworld程序如何运行起来的5

6、、cpu内存条VC+6.0操作系统之间的关系6、变量为什么必须初始化所谓初始化就是赋值的意思1字节3、什么是数据类型基本类型数据整数整型int4字节短整型shortint2字节长整型longint8字节浮点数【实数】单精度浮点数float4字节双精度浮点数一一double8字节字符char复合类型数据结构体枚举共用体(已淘汰)4、什么是变量变量的本质是内存中一段存储空间7、如何定义变量数据类型变量名=要赋的值;等价于数据类型变量名;变量名=要赋的值;举例子:inti=3;等价于inti;i=3;inti,j;等价于inti;intj;inti,j=3;等价于inti;intj;j=3;inti

7、=3,j=5;等价于inti,j;i=5;j=5;inti,j;i=j=5;等价于inti,j;i=5;j=5;8、什么是进制十进制就是逢十进一一二进制就是逢二进一生活中用到进制的例子:一周七天:七进制一年十二个月:十二进制一小时六十分钟:六十进制电脑中的数据:二进制进制转化:什么叫进制进制就是逢几进一我们说的N进制实际就是指逢N进一一我们的计算机只识别二进制人类最习惯使用的是十进制为了实际需要我们又建立了八进制和十六进制C语言规定八进制前要加0(注意是零不是字母o),十六进制前要加0X或0x,十进制前什么都不加!在汇编中:在数字后加字母B表示二进制数,加字母0表示八进制数,加字母D表示十进制

8、,加字母H表示十六进制。例:1011B为二进制数1011,也记为(1011)213570为八进制数1357,也记为(1357)82049D为十进制数2049,也记为(2049)1。3FB9H为十六进制数3FB9,也记为(3FB9)伍什么叫n进制十进制十个基数,逢10进一基数:0123456789二进制二个基数逢二进一基数:01八进制8个基数逢8进一基数:01234567卜六进制16个基数逢16进一基数:0123456789abcdef或0123456789ABCDEF十进制(D)二进制(B)八进制(0)十八进制(0x)00001234567891011121314159、常量在c语言中如何表示

9、的整数十进制:传统的写法十六进制:前面加Ox或0X,是数字0加x八进制:前面加数字0浮点数:传统写法floatx=3.2;/传统科学计数法floatx=3.2e3;/x的值是3200floatx=123.45e-2;/x的值是1.2345字符单个字符用单引号括起来A表示字符AAB是错误的AB是正确的字符串用双引号括起来A正确,因为A代表了A0的组合10、常量以什么样的二进制代码存储在计算机中整数是以补码的形式转化为二进制代码存储在计算机中的实数是以IEEE754标准转化为二进制代码储存在计算机中的具体可参见末尾的穿插在课堂中的零散知识笔记字符的本质实际也是与整数的存储方式相同11、代码规范化代

10、码的可读性更高【容易让别人和自己看懂】是程序更不容易出错林锐高质量C/C+编程代码要成对的敲12、什么是字节字节就是存储数据的单位,并且是硬件所能访问的最小单位1字节=8位1K=1024字节1M=1024K1G=1024M买硬盘时的换算是以1000为单位的13、不同类型的数据之间相互赋值的问题暂不考虑inti=45;longj=102345;i=j;printf(”d%dn,i,j);floatx=6.6;doubley=8.8;printf(%f%lfn,x,y);14、什么是ASCIIASCII不是一个值,而是一种规定,ASCII规定了不同的字符是使用哪个整数值去表示它规定了A-65B-6

11、6a-97b-98shortint%o-同上%s-字符串为什么需要输出控制符1. 01组成的代码可以表示数据也可以表示指令2. 如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果15、字符的存储【字符本质上与整数的存储方式相同】或longint或scanf()Java两种用法:用法一:功能:中已经没有了【非重基本的输入和输出函数的用法printf()-(重点讲)将变量的内容输出到显示器上四种用法1. printf(”字符串n)printf(输出控制符”,输出参数);2. printf(输出字符1输出字符2。,输出参数1,输出参数2,OOO);输出

12、控制符和参数的个数必须对应printf(”输出控制符非输出控制符”,输出参数);输出控制符包含如下%d-int(十进制)%ld-longint%c-char%f-float%lf-double%x(或者%X或者%#X)-intscanf(输入控制符”,输入参数);将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中。用法二:scanf(”非输入控制符输入控制符”,输入参数);功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中非输入控制符必须原样输入如何使用scanf编写出高质量代码1. 使用scanf之前最好先使用

13、printf提示用户以什么样的方式来输入Scanf中尽量不要使用非输入控制符,尤其是不要用n应该编写代码对用户的非法输入做适当的处理点】while(ch=getchar()!=ncontinue;假&真假假&假假运算符算术运算符+-*/(除)%(取余数)除法的运算结果和运算对象的数据类型有关,两个数都是int,则商就是int,若商有小数,则截取小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。女口:16/5=316/5.0=3.20000-13/4=-4-13/-3=43/5=05/3=1最经典的例题就是求s=1+1/2+1/3+1/4+1/5+1/100

14、的值。取余的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相等。真|假真假|真真真II真真假|假假如:13%3=1-13%23=13%-3=1-13%3=-133%5=3:-1关系运算符=关系逻辑赋值附录一些琐碎的运算符知识自增自减三目运算符逗号表达式流程控制(学习c语言的第一个重点)1. 什么是流程控制程序代码执行的顺序或不执行2.流程控制的分类顺序选择定义某些代码可执行,也可能不执行,有选择的执行某些代码分类if1.if最简单的用法格式:if(表达式)语句功能:如果表达式为真,执行语句如果表达式为假,语句不执行if的范围问题(重点)1.if(表达式)语句A;语句B;解释:if

15、默认只能控制语句A的执行或不执行if无法控制语句B的执行或者讲:语句B一定会执行2.If(表达式)语句A;语句B;此时if可以控制语句A和语句B由此可见:if默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行就必须把这些语句用括起来。2. if.else.的用法if.elseif.else.的用法格式:if(表达式1)A;elseif(表达式2)B;if(表达式3)C;elseD;3. C语言对真假的处理非零是真零就是假真用一表示假用零表示if举例-求分数的等级4. if的常见问题解析1. 空语句的问题if(32);等价于if(32);/这是一个空语句2.if(表达式1)Ae

16、lseB;是正确的if(表达式1);AelseB;是错误的3.if(表达式1)A;elseif(表达式2)B;if(表达式3)C;elseD;即便表达式1和2都成立,也只会执行A语句4.if(表达式1)A;elseif(表达式2)B;if(表达式3)C;这样些语法不会错,但逻辑上有漏洞5.if(表达式1)A;elseif(表达式2)B;if(表达式3)C;else(表达式4)/7行D;这样写是不对的,正确的写法是:要么去掉7行的(表达式4)要么在7行的else后面加if6.if(表达式1)A;elseif(表达式2)B;if(表达式3)C;else(表达式4);D;这样写语法不会错,但逻辑上是

17、错误的else(表达式4);D;等价于else(表达式4);D;对任意三个数字进行排序:如果ab则a与c比较ac则输出aac则输出bbc则输出c穿插在课堂中的零散知识笔记:如何看懂一个程序,分三步:1. 流程每个语句的功能2. 试数如何学习一些需要算法的程序【如何掌握一个程序】尝试自己去编程解决它但要意识到大部分人都是自己无法解决的,如果解决不了,这时不要气馁如果十五分钟还想不出来,此时我建议您就可以看答案了如果解决不了,就看答案关键是把答案看懂,这个要花很大的精力,也是我们学习的重点看懂一个程序要分三步:流程、每个语句的功能、试数float的看懂之后尝试自己去修改程序,并且知道修改之后程序的

18、不同输出结果的含义不建议看懂程序之后就立即自己敲程序照着答案去敲1. 调试错误不看答案,自己独立把答案敲出来2. 如果程序实在无法彻底理解,就把它背会,无法彻底理解的程序很少很少几乎没有强制类型转换格式:(数据类型)(表达式)功能:把表达式的值强制转换为前面所执行的数据类型例子:(int)(4.5+2.2)最终值是6(float)(5)最终值是5.0000000浮点数的存错所带来的问题和double都不能保证可以把所有实数都准确保存在计算机中例子:floati=99.9;printf(%fn,i);最终结果在VC+6.0中的输出的结果是:99.900002因为浮点数无法准确存储,所以就衍生出来

19、两个编程问题举例:有一个浮点型变量x,如何判断x的值是否是零if(|x-0.0000001|m=121sum=0*10+121%10=1m=m/10=12;m=12成立sum=1*10+12%10=12m=12/10=1m=1成立sum=12*10+1%10=121m=1/10=0m=0不成立sum=val4什么时候使用while,什么时候使用for没法说,用多了自然而然就知道了do.while格式:dowhile(表达式);do.while.并不等价于for,当然也不等价于while主要用于人机交互一元二次方程举例break禾口continuebreak(很重要)break如果用于循环是用来

20、终止循环break如果用于switch,则是用于终止switchbreak不能直接用于if,除了if属于循环内部的一个子句例子:for(i=0;i2)break;/break虽然是if内的语句,但break终止的却是外部的for循环printf(嘿嘿!n);/永远不会输出在多层循环中,break只能终止距离它最近的那个循环for(i=0;i3;+i)for(j=1;j4;+j)break;/break只能终止距离它最近的循环printf(同志们好!n);在多层switch嵌套中,break只能终止距离它最近的switch例子:intx=1,y=0,a=0,b=0;switch(x)/第一个sw

21、itchcase1:switch(y)/第二个switchcase0:a+;break;/终止的是第二个switchcase1:b+;break;b=100;break;/终止的是第一个switchcase2:a+;b+;break;printf(%d%dn,a,b);26行最终输出结果是:1100continue(用的很少)用于跳过本次循环余下的语句,转去判断是否需要下次循环for(1;2;3)A;B;continue;/如果执行该语句,则执行完该语句后,会执行语句3,C和D都不会执行C;D;while(表达式)A;B;continue;/如果执行该语句,则执行完该语句后,会执行表达式,C和

22、D都不执行。因为没有a5这个C;D;数组1. 为什么需要数组为了解决大量同类型数据的存储和使用问题。为了模拟现实世界2. 数组的分类一维数组怎么定义一维数组为n个变量连续分配存储空间所有的变量数据类型必须相同所有变量所占的字节大小必须相等例子:inta5;一维数组名不代表数组中所有的元素,一维数组名代表数组第一个元素的地址有关一维数组的操作初始化完全初始化inta5=1,2,3,4,5;不完全初始化,未被初始化的元素自动为零inta5=1,2,3;不初始化,所有元素是垃圾值inta5;清零inta5=0;错误写法:inta5;a5=1,2,3,4,5;/错误只有在定义数组的同时才可以整体赋值,

23、其他情况下整体赋值都是错误的inta5=1,2,3,4,5;a5=100;/error元素,最大只有a4inta5=1,2,3,4,5;intb5;如果把a数组中的值全部复制给b数组错误写法:b=a;/error正确的写法for(i=0;i5;+i)bi=ai;赋值排序求最大/小值倒置查找插入删除二维数组Inta34;总共是12元素看,可以当做3行四列看待,这12个元素的名字依次是:a00a01a02a03a10a11a12a13a20a21a22a23aij表示第i+1行第j+1列的元素intamn;该二维数组右下角位置的元素只能是am-1n-1初始化inta34=1,2,3,4,5,6,7

24、,8,9,10,11,12;inta34=1,2,3,4,5,6,7,8,9,10,11,12;操作输出二维数组的内容:inta34=1,2,3,4,5,6,7,8,9,10,11,12;inti,j;/输出数组内容for(i=0;i3;+i)for(j=0;j4;+j)printf(%-5d,aij);-表示左对齐,5表示占5个光标的位置printf(n);对二维数组排序求每一行的最大值判断矩阵是否对称矩阵的相乘多维数组是否存在多维数组不存在因为内存是线性唯一的n维数组可以当做每一个元素是n-1维数组的一维数组比如:inta34;该数组是含有3个元素的一维数组只不过每一个元素都是4行5列的二

25、维数函数【C语言的第二个重点】:为什么需要函数避免了重复性操作有利于程序的模块化什么叫做函数逻辑上:能够完成特定功能的独立的代码单元物理上:能够接受数据【当然也可以不接受数据】能够对接收数据进行处理能够将数据处理的结果返回【当然也可以不返回任何值前面定义成void】总结:函数是个工具,它是为了解决大量类似问题而设计的函数可以当做一个黑匣子如何定义函数函数的返回值函数的名字(函数的形参列表)函数的执行体1. 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法return表达式;的含义:1终止被调函数,向主调函数返回表达式的值2如果表达式为空,则只终止函数,不向主调函数返回任何值3b

26、reak是用来终止循环和switch的,return是用来终止函数的例子:voidf()return;/return只用来终止函数,不向被调函数返回任何值intf()return10;/第一:终止函数,第二:向主调函数返回102. 函数返回值的类型也称为函数的类型,因为如果函数名前的返回值的类型和函数执行体中的return表达式;中表达式的类型不同的话,则最终函数返回值的类型以函数名前的返回值类型为准例子:intf()return10.5;/因为函数的返回值类型是int所以最终f返回的是10而不是10.5函数的分类有参函数和无参函数有返回值函数和无返回值函数库函数和用户自定义函数值传递函数和地

27、址传递函数普通函数和主函数(main函数)一个程序必须有且只能有一个主函数主函数可以调用普通函数普通函数不能调用主函数普通函数可以相互调用主函数是程序的入口,也是程序的出口注意的问题函数调用和函数定义的顺序如果函数调用写在了函数定义的前面,则必须加函数前置声明函数前置声明:1. 告诉编译器即将可能出现的若干个字母代表的是一个函数告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况函数声明是一个语句,末尾必须加分号2. 对库函数的声明是通过#inelude来实现形参和实参个数相同位置一一对应数据类型必须相互兼容如何在软件开发中合理的设计函数来解决实际问题一个函数的功能尽量独立,

28、单一多学习,多模仿牛人的代码函数是C语言的基本单位,类是Java,C#,C+勺基本单位常用的系统函数doublesqrt(doublex);求x的平方根intabs(intx)求x的绝对值doublefabs(doublex)求x的绝对值专题:递归(可以参见数递结构视频)变量的作用域和存储方式:按作用域分:全局变量在所有函数外部定义的变量叫全局变量全局变量使用范围:从定义位置开始到整个程序结束局部变量在一个函数内部定义的变量或者函数的形参都统称为局部变量voidf(inti)intj=20;I和j都属于局部变量局部变量使用范围:只能在本函数内部使用注意的问题:全局变量和局部变量命名冲突的问题在

29、一个函数内部如果定义的局部变量的名字和全局变量名一样时,局部变量会屏蔽掉全局变量按变量的存储方式静态变量自动变量寄存器变量指针:指针的重要性表示一些复杂的数据结构快速传递数据,减少了内存的耗用【重点】使函数返回一个以上的值【重点】能直接访问硬件能够方便的处理字符串是理解面向对象语言中引用的基础总结:指针是c语言的灵魂指针的定义地址内存单兀的编号从零开始的非负整数范围:4G【04G-1】指针指针就是地址,地址就是指针指针就越是内存单兀的编号指针变量是存放地址的变量指针和指针变量是两个不同的概念但是要注意:通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样指针的本质就是一个操作受限的非负整

30、数指针的分类1. 基本类型指针int*p;p是变量的名字,int*表示p变量存放的int类型变量的地址/int*p;不表示定义了一个名字叫做*p的变量intt;/如果要互换p和q的值,则t必须是int*,不能是int,否则会出错/如果要互换*p和*q的值,贝Ut必须定义成int,不能定义成int*,否则语法会出错voidhuhuan(int*p,int*q)t=*p;/p*p=*q;*q=t;是int*,*p是intintmain(void)inta=3;intb=5;huhuan(&a,&b);/huhuan(*p,*q);是错误的,huhuan(a,b);也是错误的/int*p;应该这样理

31、解:p是变量名,p变量的数据类型是int*类型/所谓int*类型实际就是存放int变量地址的类型inti=3;intj;p=&i;/*p保存了i的地址,因此p指向i1. p不是i,i也不是p,更准确的说:修改p的值不影响i的值,修改i的值也不会影响p的值如果一个指针变量指向了某个普通变量,则*指针变量就完全等同于普通变量例子:如果p是个指针变量。并且p存放了普通变量i的地址,则p指向了普通变量i*p就完全等同于i或者说:在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p*p就是以p的内容为地址的变量*/j=*p;/等价于j=i;printf(i=%d,j=%dn,i,j);

32、经典指针程序_互换两个数:#ineludeprintf(a=%d,b=%dn,a,b);return0;附注:*的含义乘法1. 定义指针变量int*p;/定义了一个名字叫p的变量,int*表示只能存放int变量的地址2. 指针运算符该运算符放在已经定义好的指针变量的前面如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量如何通过被调函数修改主调函数普通变量的值1. 实参必须为该普通变量的地址形参必须为指针变量2. 在被调函数中通过*形参名=的方式就可以修改主调函数相关变量的值指针和数组指针和一维数组一维数组名一维数组名是个指针常量它存放的是一维数组第一个元素的地址下标和指针如果p是

33、个指针变量,则pi永远等价于*p(p+i)确定一个一维数组需要几个参数【如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息】需要两个参数:数组第一个元素的地址数组的长度指针变量的运算指针变量不能相加不能相乘也不能相除如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减。一个指针变量到底占几个字节【非重点】预备知识:sizeof(数据类型)功能:返回值就是该数据类型所占的字节数例子:sizeof(int)=4sizeof(char)1sizet(double)=8sizeof(变量名)功能:返回值是该变量所占的字节数假设p指向char类型变量(1个字节)假设

34、q指向int类型变量(4个字节)假设r指向double类型变量(8个字节)pqr本身所占的字节数是否一样?答案:pqr本身所占字节数是一样的总结:一个指针变量,无论它指向的变量占几个字节该指针变量本身只占四个字节一个变量的地址是用该变量首字节的地址来表示指针和二维数组2. 指针和函数指针和结构体3. 多级指针专题:动态内存分配【重点难点】传统数组的缺点:1. 数组长度必须事现指定,且只能是常整数,不能是变量例子:Inta5;0KIntlen=5;intalen;/error2传统形式定义的数组,该数组的内存程序员无法手动释放数组一旦定义,系统就为该数组分配的存储空间就会一直存在,除非数组所在的

35、函数运行结束或者说:在一个函数运行期间,系统为该函数中数组所分配的空间会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放3. 数组的长度不能在函数运行的过程中动态的扩充或缩小数组的长度一旦定义,其长度就不能再更改4. A函数定义的数组,在A函数运行期间可以被其它函数使用,但A函数运行完毕之后,A函数中的数组将无法再被其他函数使用传统方式定义的数组不能跨函数使用为什么需要动态内存分配内存动态数组很好的解决了传统数组的这4个缺陷传统数组也叫静态数组动态内存分配举例_动态数组的构造静态内存和动态内存的比较静态内存是有系统自动分配,由系统自动释放静态内存是在栈中分配的动态内存是由程序员手动分配

36、,手动释放动态内存是在堆中分配的跨函数使用内存的问题结构体为什么需要结构体为了表示一些复杂的事物,而普通的基本类型无法满足实际要求。什么叫结构体把一些基本类型数据组合在一起形成的一个新的复合数据类型,这个叫做结构体。如何定义结构体3种方式,推荐使用第一种:/第一种方式structStudentintage;floatscore;charsex;;/第二种方式structStudent2intage;floatscore;charsex;st2;/第三种方式structintage;floatscore;charsex;st3;怎么使用结构体变量赋值和初始化定义的同时可以整体赋初值如果定义完之后

37、,则只能单个的赋初值如何取出结构体变量中的每一个成员【重点】结构体变量名成员名1. 指针变量名一成员名(第二种方式更常用)指针变量名一成员名在计算机内部会被转化成(*指针变量名)成员名的方式来执行所以说这两种方式是等价的例子:structStudentintage;floatscore;charsex;;intmain(void)structStudentst=80,66.6,F;始化定义的同时赋初值structStudent*pst=&st;&st成st初不能改初不能改pst-age=88;/第二种方式st.age=10;/st.age=10;/第一种方式return0;1. pst在计算机

38、内部会被转换成(*pst).age,没有什么为什么,这就是一的含义,这也是一种硬性规定2. 所以pstage等价于(*pst).age也等价于st.age我们之所以知道pstage等价于st.age,是因为pstage是被转化成了(*pst).age来执行pstage的含义:pst所指向的那个结构体变量中的age这个成员结构体变量和结构体变量指针作为函数参数传递的问题推荐使用结构体指针变量作为函数参数来传递结构体变量的运算结构体变量不能相加,不能相减,也不能互相乘除但结构体变量可以相互赋值例子:structStudentintage;charsex;charname100;/分号不能省structStudentst1,st2;st1+st2st1*st2st1/st2都是错误的st1=st2或者st2=st1者E是正确的举例动态构造存放学生信息的结构体数组动态构造一个数组,存放学生的信息然后按分数排序输出链表:枚举什么是枚举把一个事物所有可能的取值一一列举出来怎样使用枚举枚举的优缺点代码更安全书写麻烦位运算符:&按位于&逻辑与也叫并且&与&的含义完全不同1&1=11&0=00&1=00&0=05&7=521&7=55&1=15&10=0I|逻辑或|按位或1|0=11|1=10|1=10|0=0按位取反i就是把i变量所有的二进制位取反A按位异或相同为零不同为11

温馨提示

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

最新文档

评论

0/150

提交评论