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