1、b) 变量的定义方法以及如何进行正确赋值c) 数据类型的取值范围4、常用的C运算符及优先级顺序a) 赋值运算符:=b) 算术运算符:+、-、*、/、%,其中特别要注意/和%的用法i. /的右边不能为0,且当/的两端都是整数时做整除运算,否则执行实数除法ii. %为模运算符,要求%的两端都必须是整数c) 关系运算符:、=、=、!d) 逻辑运算符:!、&、|,!的优先级比&和|高e) 自增、自减运算符:+、i. +i是先将i的值加1后,再使用i的值ii. i+是先使用i的值,再将i的值加1f) 强制类型转换符:( 类型说明符 ) (表达式),如g) sizeof运算符:获得变量或数据类型所占内存的
2、大小(以字节为单位),如sizeof(int)、sizeof(a)h) 复合运算符,如sum+=i等价于sum=sum+ii) 逗号运算符,例如:a+3, b=4, b+。逗号表达式的求值顺序是从左向右依此计算用逗号分隔的各表达式的值,而最后一个表达式的值就是整个逗号表达式的值。j) 上述运算符的优先级顺序:强制类型转换符、sizeof运算符自增、自减运算符算术运算符关系运算符(,=,逻辑运算符(!高于&,|)复合运算符、赋值运算符逗号运算符5、数据的输入输出a) 头文件stdio.h,程序中的使用方法:#include b) 格式化输出函数:printf(“常规字符/格式控制符”,表达式1,
3、.,表达式n)i. 表达式的个数应与格式控制符的个数一致,若格式控制符的个数更多时,多出的格式控制符输出的内容是不确定的,若表达式的个数更多时,多出的表达式将不输出ii. 常用的格式控制符:int型(%d、%u、%o、%x)、short型(如%hd)、long型(如%ld)、char型(%c)、字符串(%s)、float型/double型(%f、%e,其中%m.nf,表示输出数据的宽度为m个字符宽度,并保留小数点后n位)iii. 根据表达式的类型选择正确的格式控制符,否则将导致后面的数据输出出错c) 格式化输入函数:scanf(“格式控制字符串”,变量1的地址,.,变量n的地址)i. 如何正确
4、输入数据?看格式控制字符串。若相邻两个格式控制符之间没有指定数据分隔符,则默认两个输入数据用一个空格或回车分隔,若格式控制字符串中出现常规字符,务必原样输入。ii. 格式控制符的个数必须与后面的变量地址个数一致iii. 常用的格式控制符:int型(%d、%ld、%hd、%u)、short型(如%hd)、long型(如%ld)、字符型(%c)、字符串(%s)、float型(%f)、double型(%lf)iv. 根据变量类型选择正确的格式控制符,否则将导致输入的变量值出错或内存溢出的错误d) 字符型数据的非格式化输入getchar( )、输出putchar( )i. getchar( )函数的功
5、能是从终端输入一个字符,如while(getchar()!=n);上述语句常用在两次scanf( )间清空输入的缓冲ii. putchar( )函数的功能是向终端输出一个字符,如putchar(n)语句的功能是输出一个换行符6、用if语句实现选择结构a) 基本格式:if (expr)语句1;else语句2;b) if语句后面的expr必须用括号括起来;c) expr非零时表示条件为真,表达式为零时表示条件为假;d) 语句1、语句2为多个语句时,必须把这一组语句用 括起来,且在之后不能再加分号;若为单条语句时, 可省略e) 在if的嵌套语句中,else总是与之前最近且尚未配对的if配对7、条件运
6、算符和条件表达式expr1?expr2:expr3b) 含义:若expr1为真,那么执行expr2,否则执行expr3举例:请写出“若ch是大写字母则将其转换成对应的小写字母”的条件表达式ch=(ch=A& ch=Z)?(ch+32):ch;8、用switch语句实现多分支选择结构switch ( 表达式) case E1:语句组 1;break; case E2:语句组 2; . case En:语句组 n; default:语句组 ; b) switch后面的“表达式”,只可以是int、char和枚举型中的一种。c) 每个case后面“常量表达式”的值,必须各不相同d) 每个case后面的
7、表达式中不能包含变量e) 每个case部分内容结束后必须加上break语句,以便结束switch语句f) 多个case子句,可共用同一语句(组)用switch语句编写下列程序:给出一百分制成绩,要求输出成绩等级A、B、C、D、E,90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。9、用while语句实现循环while (表达式) 循环体语句;当表达式为真时,执行循环体;循环的终止条件是当表达式为假时c) while后面的括号( )不能省d) 循环体若由多条语句组成,应用括起来,且后面不要加;号10、用do.while语句实现循环do while(表达式);先执行循
8、环体,然后再判断表达式,若表达式是否为真,则再执行循环体;c) 与while语句不同,如果do-while后的表达式的值一开始就为假,循环体还是要执行一次。11、用for语句实现循环for (表达式1;表达式2;表达式3)b) for后面的括号( )不能省。c) 表达式1:给循环变量设置初值,只执行一次。d) 表达式2:是循环条件表达式,用来判定是否继续循环。e) 表达式3:增加或减少循环变量的值,是在执行完循环体后才进行的。f) 表达式之间用分号分隔。语句部分称为循环体,当需要执行多条语句时,应用括起来,且后不加;号。12、break语句:用于提前终止循环a) 功能:在循环语句和switch
9、语句中,终止并跳出循环体或开关体b) break不能用于循环语句和switch语句之外的任何其它语句之中。 c) break只能终止并跳出最近一层的结构。13、continue语句:用于提前结束本次循环结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。b) 仅用于循环语句中c) 在嵌套循环的情况下,continue语句只对包含它的最内层的循环体语句起作用。14、一维数组的定义:数据类型符 数组变量名整型常量表达式;a) 数组定义时,必须指定数组的大小,数组大小必须是整型常量表达式,不能是变量或变量表达式b) 数组定义后,系统将给其分配一定大小的内存单元,其所占内存单元的
10、大小与数组元素的类型和数组的长度有关。15、一维数组的引用:数组变量名下标a) 下标可以是整型常量、整型变量或整型表达式。C语言规定,只能逐个引用数组元素,不能一次引用整个数组b) 数组引用要注意越界问题。数组下标的最小值是0,最大值则是数组大小减1 。16、一维数组的赋值a) 初始化赋值:数据类型符 数组变量名常量表达式 = 表达式1,表达式2,表达式n;i. “=”后面的表达式列表一定要用 括起来,被括起来的表达式列表被称为初值列表,表达式之间用“,”分隔;ii. 表达式的个数不能超过数组变量的大小;iii. 如果表达式的个数小于数组的大小,则未指定值的数组元素被赋值为0;b) 在程序中赋
11、值:除了在定义数组变量时用初值列表对数组整体赋值以外,无法再对数组变量进行整体赋值,只能通过C语句对数组中的数组元素逐一赋值。17、字符串与字符数组a) 字符串是一种以“0”结尾的字符数组b) 字符数组赋值:在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小,那么其大小至少要比字符串的长度大1(多定义一个单元用于存放0)。c) 字符串的输入函数:i. gets函数:从键盘输入一以回车结束的字符串放入字符数组中,并自动加ii. scanf函数:从键盘输入一以空格或回车结束的字符串放入字符数组中,并自动加d) 字符串的输出函数:i. puts函数:向显示器输出字符串(输出完,换行)ii.
12、 printf函数:依次输出字符串中的每个字符直到遇到字符e) 字符串的长度函数:f) strlen函数:返回字符串实际长度,不包括在内,应包含的.h文件为string.hg) strcpy函数:应包含的.h文件为string.hi. 基本格式:strcpy (字符数组1,字符串2)ii. 功能:将字符串2拷贝到字符数组1中去iii. 注意:不能使用赋值语句为一个字符数组赋值h) strcmp函数:strcmp (字符串1, 字符串2) 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或为止 a. 若字符串1 字符串2, 返回正整数 c. 若字符串1= 字符串2, 返回零字符串比较
13、不能用“=”,必须用strcmpi) strcat函数:i. 格式:strcat (字符数组1, 字符数组2) 把字符数组2连到字符数组1后面18、函数的概念:a) 函数其实就是一段可以重复调用的、功能相对独立完整的程序段b) C是函数式语言。c) C程序必须有且只有一个主函数main,C程序的执行总是从main函数开始,在main中结束。如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行d) 函数不能嵌套定义,但可以嵌套调用,但不能调用main函数,main函数是由操作系统调用的e) 函数直接或间接的调用自身叫函数的递归调用。例如,函数fun
14、A调用了函数 funB,函数funB又调用了函数funA,则称为函数的间接递归调用19、函数的分类:20、函数的定义和调用方法21、函数的参数传递:a) 值传递方式i. 方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。ii. 特点: 形参与实参占用不同的内存单元 单向传递b) 地址传递方式:(用数组和指针变量)i. 方式:函数调用时,将数据的存储地址作为参数传递给形参ii. 特点: 形参与实参占用同样的存储单元 双向传递 实参和形参必须是地址常量或变量22、局部变量和全局变量的作用域和生存期23、指针和指针变量a) 指针:一个变量
15、的地址b) 指针变量:专门存放变量地址的变量c) 指针运算符: 取变量的地址,* 取指针所指向变量的内容,两者互为逆运算例如,int *p=&a;那么以下关系成立:p = &i = &(*p)a = *p = *(&a)d) 指针变量的定义: 基类型 *指针变量名;e) 指针变量必须初始化后才能使用,否则,严重时会造成系统区破坏而死机。指针变量赋值有两种方式:用变量的地址为指针变量赋值,赋值后指针变量就指向该变量;用malloc动态分配内存,并将分配内存的起始地址赋给指针变量f) 指针变量p n (n0)表示p所指的数据存储单元之后(之前)的第n个数据存储单元:p n 的值 = p n * s
16、izeof(p所指内存单元存储数据的类型)24、指向一维数组的指针变量a) 数组的指针:数组在内存中的起始地址,即数组名,这是一个常量,它可以参与运算但不能改变它的值,例如,int a10; a+是错误的b) 数组元素的指针:数组元素的指针就是数组元素在内存中的起始地址c) 指向一维数组的指针变量:如果将数组的起始地址赋给某个指针变量,那么该指针变量就是指向数组的指针变量。例如,若有int a10, *p = a;,则下列关系式等价的:a+i = p+i = &ai = &pi*(a+i) = *(p+i) = ai = pip+i指向数组中单元下标为i的数组单元,而不是简单地使指针变量p的值
17、+i。其实际变化为p+i*size(size为一个元素占用的字节数)25、指向字符串的指针变量a) 用字符数组实现字符串b) 用字符指针实现字符串c) 注意两者实现上有一点区别d) 字符指针初始化:把字符串首地址赋给string用字符数组存储字符串“I love China!” char string14=”I love China!”(正确的,注意这里至少需要14个单元) char string=”I love China!”(正确的,由后面的字符串确定所需的单元个数) char string14; string = “I love China!”(错误的,string是数组名,不能用常量字符串“I love China!”的起始地址对其进行赋值) char *string=“I love China!”;(正确的,用常量字符串的起始地址对指针变量进行初始化,string指向该常量字符串) char *string;(正确的,这里的string是指针变量,其值是可以改变的,赋值结果是使得string指向常量字符串“I love China!”)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1