c语言知识点总结_第1页
c语言知识点总结_第2页
c语言知识点总结_第3页
c语言知识点总结_第4页
c语言知识点总结_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、01C语言基本结构一、C语言的特点:1、C语言源程序的基本组成单位是函数;一个C程序可由若干个函数组成,其中必须有且仅有一个以main命名的主函数。2、C程序的执行总是由main()函数的第一个可执行语句开始,到main()函数的最后一个可执行的语句结束;而其他函数都是在main()函数开始执行以后,通过其他函数的调用才得以运行。3、用户在C程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。二、C程序的书写格式:1、语句可分开放在任意多行内;如:printf(To C,);printf( or not to C:);与printf(To C , o

2、r not to C:);是等价的2、一行中可以有若干个语句;如:a=123;b=345;3、每个语句和数据定义的最后必须有一个分号;三、C语言程序的运行:1、编译(Compile):将C源程序文件翻译成能被计算机识别的二进制形式的目标文件。2、建造(Bulid): 将目标文件、系统库函数等文件结合起来,生成可执行的EXE文件。 C语言程序示例:显示Hello #include main() printf(Hellon); 说明:#include 是必不可少的,它包含了C语言标准输入输出库的相关信息; printf 函数来自标准输入输出库,可以产生格式化输出; n 告诉printf函数执行完信

3、息显示后要进行换行操作; 来标出main()函数的起始和结束。02数据类型一、标识符、常量和变量1、标识符:标识符是起标识作用的一类符号;一般用来标识用户或系统定义的变量名、符号常量名、函数名、类型名等。(1)标识符由字母、数字、下划线(_)组成,第一个字符必须是字母或下划线。(2)C语言区分大小写字母;如 sum和SUM 就是两个不同的标识符。(3)用户自己定义的标识符不得与关键字同名;2、常量:指在程序中已知的在程序中直接写出的数值。在程序运行过程中,常量的值不允许被改变。直接常量:用数值表示的量,如23,A,awq等;符号常量:用标识符表示的常量;符号常量在使用前必须加以定义;定义的格式

4、: #define 标识符 常量其中:#define是一条预处理命令,其功能是把该标识符定义为其后的常量值。 如:计算半径r为10时圆面积#define pi 3.1415926#includemain() double area,r; r=10.0; area=pi*r*r; printf(Area=%lf,area); 3、变量:在程序运行过程中,其值可以被改变的量(1)变量的三要素:变量名、数据类型和变量的值。(2)C语言规定:程序中用到的变量,必须先定义后使用;(3)变量定义的格式: 如:int a ,b; /* int 表明所定义变量储存的数值为整数 */(4)通常,对变量的定义放在

5、函数体的开头,也可以放在函数的外部或复合语句的开头。(5)C语言允许在定义变量的同时对变量进行初始化; 如: int a=3; /* 定义a为整形变量,初值为3 */ 二、简单数据类型在C语言程序中,不同数据类型的数据,在内存中所需的存储空间的大小是不同的,其能够支持的运算、相应的运算规则也是不同的。1、基本类型: (1)整型: 整型常量:即整型常数; 十进制表示法:如 123、-345; 八进制表示法:以0开头的数,如 0126; 十六进制表示法:前缀为0 x或0X,其数码取值为09,AF或af; 整型变量包括:基本型(int)、短整型(short int 或 short)、长整型(long

6、 int 或 long)、和无符号型(unsigned int、unsigned short、unsigned long)。 整型变量的定义:整型变量用来存放整数的,在使用之前使用标识符加以定义; 如 int a,b; /* 定义a、b为整型变量 */ unsigned short c,d; /* 定义c、d为无符号短整型变量 */ long ab,ef; /* 定义ab、ef为长整型变量 */ 【例】整型变量的定义与使用: #include main() int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(a+u=%d,

7、b+u=%dn,c,d); (2)实型(单精度、双精度): 实型数据类型分为:单精度型(float)、双精度型(double)和长双精度型(long double); 实型常量: 十进制小数形式:由数字和小数点组成,如 0.123、.23、23.0 指数形式:由尾数、e(E)和指数组成,如123e2 (等于123*102); 实型变量的定义:实型变量用来存放实型数据的,在使用前必须使用标识符加以定义; 如 float x,y; /* 定义x、y为单精度实型变量 */ double z; /* 定义z为双精度实型变量 */(3)字符型: 字符常量 普通字符常量是由单引号括起来的一个字符;如 a、

8、6、D 等; 字符常量的特点: 1)字符常量只能用单引号括起来,不能用双引号或其它括号。 2)字符常量只能是单个字符。 3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如5和5 是不同的,5是字符常量,不能以5为值参加数值运算。 转义字符:以反斜杠后跟一个或几个字符用来表示那些用一般字符不便于表示的控制代码。转义字符转义字符的意义ASCII代码n回车换行10t横向跳到下一制表位置9b退格8r回车13f走纸换页12反斜线符92单引号符39双引号符34a鸣铃7ddd13位八进制数所代表的字符xhh12位十六进制数所代表的字符 【例】转义字符的使用。#include ma

9、in() int a,b,c; a=5; b=6; c=7; printf( ab ctderfn); printf(hijktLbMn);字符变量:用字符类型标识符char来定义;字符变量占一个字节的存储单元,只能存放一个字符; 定义格式:char ; 如 char c1,c2; 字符变量赋值:字符变量只能存放一个字符; 如 c1=1;c2=d; 【例】向字符变量赋以整数。#include main() char a,b; a=120; /* x的ASCII码值 */ b=121; /* y 的ASCII码值 */ printf(%c,%cn,a,b); /* 输出字符x、y */ prin

10、tf(%d,%dn,a,b); /* 输出字符的ASCII值*/ 【例】字符的大小写转换 #include main() char a,b; a=m; b=n; a=a-32; /* A的ASCII码值 */ b=b-32; /* B的ASCII码值*/ printf(%c,%cn,a,b); /* 输出A、B 字符*/ printf(%d,%dn,a,b); /* 输出A、B的ASCII码值*/ 字符串常量:是一对双引号括起来的字符序列; 如 a 、 、 123 、 SDCF等都是合法的字符串常量;字符串常量和字符常量的区别:1)字符常量由单引号括起来,字符串常量由双引号括起来;2)字符常量

11、只能是单个字符,字符串常量则可以含一个或多个字符;3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量;4)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0 (ASCII码为0)。这是字符串结束的标志;如:字符串 C program 在内存中所占的字节为:Cprogram0字符常量a和字符串常量a虽然都只有一个字符,但在内存中的情况是不同的。a在内存中占一个字节,可表示为: aa在内存中占二个字节,可表示为:a003运算符与表达式1、算术运算符和表达式 +:加法运算符,如 35,结果为8; -:减法运算符,如 5

12、-3,结果为2; *:乘法运算符,如 5*8,结果为40; /:除法运算符,如 3/6;参与运算量均为整型时,结果也为整型,舍去小数;若运算量中有一个是实型,则结果为双精度实型。 %:模运算符,也称取余运算符,用于计算两数相除后的余数,如 5%3=2;2、赋值运算符和赋值表达式赋值运算符:,其作用是将一个表达式的值赋给一个变量; 其一般形式为: 变量=表达式如:x=a+b;赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此 a=b=c=5 可理解为 a=(b=(c=5);复合赋值运算符:+=、-=、*=、/=、%=、=、=、&=、=、|=构成复合赋值表达式的一般形式

13、为:变量 双目运算符=表达式它等价于:变量=变量 运算符 表达式如: a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7) r%=p 等价于r=r%p3、类型转换如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:1)实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。4、自增、自

14、减运算符:自增运算符:+,功能是将变量的值加1;自减运算符:-,功能是将变量的值减1;可有以下几种形式:+i i自增1后再参与其它运算。-i i自减1后再参与其它运算。i+ i参与运算后,i的值再自增1。i- i参与运算后,i的值再自减1。 注:(1)+、-的操作对象只能是变量;(2)+、-运算优先级相同,且结合方向自右向左;-i+应理解为-(i+),【例】自增、自减运算、#includemain() int i=8; printf(%dn,+i); /* i先加1,再输出i ,输出结果为9 */ printf(%dn,-i); /* i先减1,再输出i ,结果为8 */ printf(%dn

15、,i+); /* 先输出i ,输出结果为8,i再加1, */ printf(%dn,i-); /* 先输出i ,输出结果为9,i再减1, */ printf(%dn,-i+); /* 先加输出-i,输出结果为-8,i再加1 */ printf(%dn,-i-); /* 先输出-i ,输出结果为-9,i再减1 */ 5、求字节运算符 计算表达式的结果所占字节数或某种数据类型的定义字节数。 一般格式:sizeof(数据类型标识符) 或 sizeof(表达式)如: sizeof(float)的值为4,占4个字节; Sizeof(2*3)的值为2,占2个字节;6、关系运算符和关系表达式关系运算符:(小

16、于)、 (大于)、=(大于等于) 、=(等于)、 !=(不等于)关系表达式:若关系表达式成立,其值为真,否则为假;在C语言中,用0代表假,用非零值(常用1)代表真;7、逻辑运算符和逻辑表达式:逻辑运算符: ! (非)、 & (与)、 |(或);运算优先级: !&|逻辑表达式:用逻辑运算符将表达式连接起来的式子;逻辑表达式的结果仍然是逻辑量(真或假)8、条件运算符:一般格式: ?:先计算表达式1,若表达式1的值为真,则计算表达式2的值,且表达式2的值为整个条件表达式的值;否则,计算表达式3的值,且表达式3的值即为整个条件表达式的值。9、逗号运算符和逗号表达式逗号运算符:,作为运算符,其功能是将多

17、个表达式组成一个表达式;一般形式:表达式1,表达式2,表达式n 求解过程:先计算表达式1,再计算表达式2,依此计算表达式n,最终,表达式n的值即为整个表达式的值。04顺序结构一、概述: 顺序语句按照语法形式分为:表达式语句、函数调用语句、复合语句、流程控制语句和空语句。1、表达式语句:语法格式:表达式;如:a+4;其中赋值语句为最典型的表达式语句,如: a=5; a=b+3; 特别提示:分号(;)是表达式语句中不可缺少的一部分。2、函数调用语句:如:printf(I am a student!);其中:printf()为系统提供的函数,用于显示信息。3、复合语句:所谓复合语句即由一对括起来的一

18、组语句,也称块语句或分程序。一般形式为: 语句1 语句2 . 语句n 如: i+;j=a+3;printf(%d,j=,i,j); 特别提示:复合语句中的最后一条语句的分号不得缺少;复合语句的之后不得有分号。 二、数据的输入输出 C语言提供了一些输入输出函数,如printf()和scanf(),在程序中调用这些输入输出函数时,必须将标准输入输出头文件stdio.h包含到用户所编写的源程序中。 如:#include 其中:#include命令一般写在程序的开头位置。 1、格式输入输出 1、格式输出函数printf() (1)一般格式: printf(格式字符串,输出列表) 其中:格式字符串包括输

19、出字符和格式控制字符(由%和格式字符组成,指定输出项的输出格式)。 d格式符:用于输出十进制整数; %d:以十进制形式显示输出变量的值; %5d:以十进制形式显示变量的值,且至少占用5个字符的空间,若不够5位数字,则左侧补空格; %-5d:以十进制形式显示变量的值,且至少占用5个字符的空间,左对齐; %5.3d:以十进制形式显示变量的值,且至少占用5个字符的空间并至少有3位数字,若不够3位数字,则左侧补0; 如:#include main() int i; i=40; printf(%dn,i); printf(%5dn,i); printf(%-5dn,i); printf(%5.3dn,i

20、); f格式符:用于以小数形式输出实数; %10.3f:以定点十进制形式显示变量的值,且总共用10个字符,其中,整数位6位,小数位3位,小数点1位; 如:#include main() float x; x=839.21f; printf(%10.3fn,x); c格式符:用于输出一个字符; 如: x=a,y =b, 则 printf(%c %c,x,y)的输出结果为:a b 若变量的值为整数,则输出该整数值为ASCII码的字符: 如 x=65,y=98,则 printf(%c, %c,x,y)的输出结果为: A, b; 同理,一个字符的数据也可以以整数的形式输出; 如 x=a,y=B,则pr

21、intf(%d,%d,x,y)的输出结果为:97,66 s格式符:用于输出一个字符串。 如:printf(%s,I am a student !) e,E格式符:用于以指数形式输出实数。 如:printf(%e, 123.456),则输出结果为:1.234560e+002; g,G格式符:用于输出实数,根据数值的大小自动选择f格式或e格式。 2、格式输入函数scanf() (1)一般格式: scanf(格式字符串,变量地址表) 其中:格式字符串使用双引号括起来的字符串,包括普通字符(按原样输入)、格式控制字符(由%和格式字符组成,用来标定输入数据的格式)。 变量地址表是由若干个变量地址组成的表

22、列,可以是变量的地址,也可以使字符串的首地址。 d格式:用于输入十进制整数;如:scanf(%d,%d,&x,&y);则输入格式为:123 ,3456 u格式:用于输入十进制无符号整数; f格式:用于输入以小数形式的实数;如:scanf(%f,%f,&x,&y);则输入格式为:123.23,23.456 c格式:用于输入一个字符;如:scanf(%c,%c,&x,&y);则输入格式为:a,b s格式:用于输入一个字符串;如:scanf(%s,a);假定a为字符数组,则输入格式为:abcdef注:输入的字符串中间不能包含空格。 特别说明: 对于变量,&加变量名即为该变量的地址;如:&a、&b等分

23、别表示变量a和变量b的地址; 对于字符串数组或字符指针型变量,数组名和指针变量名本身即为其地址; 可以在%和格式字符之间加表示位数的数字;如:scanf(%5s,p);表示只能输入5个字符给字符串指针p;05选择结构一、if语句: 一般格式: if(表达式) 语句;表示:当表达式成立时,则执行语句;否则跳过语句;如:if (ab) printf(ab!);例:若用户输入的数为3的倍数,则显示OK #include main() int a; scanf(%d,&a); if(a %3=0) printf(OK); 二、if-else 语句:一般格式:if (表达式) 语句1;else 语句2;

24、例:给出用户输入的两个整数的较大者 #include main() int a,b; scanf(%d,%d,&a,&b); if(ab) printf(the max=%d,a); else printf( the max=%d,b); 三、if语句的嵌套1、if子句中嵌套: if(表达式1) if(表达式2) 语句1; else 语句2;else 语句3; if(表达式1) if(表达式2) 语句1; Else 语句2; 2、else子句中嵌套 if (表达式1) 语句1; else if(表达式2) 语句2; else 语句3; if(表达式1) 语句1; else if(表达式2) 语

25、句2;3、嵌套一般格式: if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3 ;else if(表达式n) 语句n;else 语句n+1; 例:将用户输入的成绩按以下规则转换成等级成绩: 分数: 90100 等级:优 分数: 8089 等级:良 分数: 7079 等级:中 分数: 6069 等级:及格 分数: 60以下 等级:不及格 # include main() int d; printf(输入分数:); scanf(%d,&d); if(d=90 ) printf(优); else if(d=80) printf( 良); else

26、 if(d=70) printf( 中); else if(d=60) printf( 及格); else printf( 不及格); 四、条件语句:表达式1 ? 表达式2 :表达式3执行的过程:若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;例:求一个整数的绝对值 #include main() int i,absi; scanf(%d,&i);absi=i0 ? i : -i;printf(%d绝对值是%dn,i,absi); 五、switch语句 switch (表达式) case 常量表达式1: 语句1 ; break; case常量表达式2: 语句2 ; break

27、; case常量表达式n:语句n ; break; default: 语句n+1; 例:商店卖货物,每一件3.5元,按购买的数量给与优惠: 购买100件,优惠5%; 购买200件以上,优惠6%; 购买300件以上,优惠8%; 购买400件以上,优惠10%; 购买500件以上,优惠15%; #include main() int n; float p,price; scanf(%d,&n); switch(n/100) case 1: p=0.05; break; case 2: p=0.06; break; case 3: p=0.08; break; case 4: p=0.10; brea

28、k; case 5: p=0.15; break; price=3.5*n*(1-p); printf(%应付款=%7.2fn,price); 06循环结构一、if语句: 一般格式: if(表达式) 语句;表示:当表达式成立时,则执行语句;否则跳过语句;如:if (ab) printf(ab!);例:若用户输入的数为3的倍数,则显示OK #include main() int a; scanf(%d,&a); if(a %3=0) printf(OK); 二、if-else 语句:一般格式:if (表达式) 语句1;else 语句2;例:给出用户输入的两个整数的较大者 #include mai

29、n() int a,b; scanf(%d,%d,&a,&b); if(ab) printf(the max=%d,a); else printf( the max=%d,b); 三、if语句的嵌套1、if子句中嵌套: if(表达式1) if(表达式2) 语句1; else 语句2;else 语句3; if(表达式1) if(表达式2) 语句1; Else 语句2; 2、else子句中嵌套 if (表达式1) 语句1; else if(表达式2) 语句2; else 语句3; if(表达式1) 语句1; else if(表达式2) 语句2;3、嵌套一般格式: if (表达式1) 语句1; el

30、se if (表达式2) 语句2; else if (表达式3) 语句3 ;else if(表达式n) 语句n;else 语句n+1; 例:将用户输入的成绩按以下规则转换成等级成绩: 分数: 90100 等级:优 分数: 8089 等级:良 分数: 7079 等级:中 分数: 6069 等级:及格 分数: 60以下 等级:不及格 # include main() int d; printf(输入分数:); scanf(%d,&d); if(d=90 ) printf(优); else if(d=80) printf( 良); else if(d=70) printf( 中); else if(

31、d=60) printf( 及格); else printf( 不及格); 四、条件语句:表达式1 ? 表达式2 :表达式3执行的过程:若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;例:求一个整数的绝对值 #include main() int i,absi; scanf(%d,&i);absi=i0 ? i : -i;printf(%d绝对值是%dn,i,absi); 五、switch语句 switch (表达式) case 常量表达式1: 语句1 ; break; case常量表达式2: 语句2 ; break; case常量表达式n:语句n ; break; defa

32、ult: 语句n+1; 例:商店卖货物,每一件3.5元,按购买的数量给与优惠: 购买100件,优惠5%; 购买200件以上,优惠6%; 购买300件以上,优惠8%; 购买400件以上,优惠10%; 购买500件以上,优惠15%; #include main() int n; float p,price; scanf(%d,&n); switch(n/100) case 1: p=0.05; break; case 2: p=0.06; break; case 3: p=0.08; break; case 4: p=0.10; break; case 5: p=0.15; break; pric

33、e=3.5*n*(1-p); printf(%应付款=%7.2fn,price); 07函数定义,调用一、if语句: 一般格式: if(表达式) 语句;表示:当表达式成立时,则执行语句;否则跳过语句;如:if (ab) printf(ab!);例:若用户输入的数为3的倍数,则显示OK #include main() int a; scanf(%d,&a); if(a %3=0) printf(OK); 二、if-else 语句:一般格式:if (表达式) 语句1;else 语句2;例:给出用户输入的两个整数的较大者 #include main() int a,b; scanf(%d,%d,&a

34、,&b); if(ab) printf(the max=%d,a); else printf( the max=%d,b); 三、if语句的嵌套1、if子句中嵌套: if(表达式1) if(表达式2) 语句1; else 语句2;else 语句3; if(表达式1) if(表达式2) 语句1; Else 语句2; 2、else子句中嵌套 if (表达式1) 语句1; else if(表达式2) 语句2; else 语句3; if(表达式1) 语句1; else if(表达式2) 语句2;3、嵌套一般格式: if (表达式1) 语句1; else if (表达式2) 语句2; else if (

35、表达式3) 语句3 ;else if(表达式n) 语句n;else 语句n+1; 例:将用户输入的成绩按以下规则转换成等级成绩: 分数: 90100 等级:优 分数: 8089 等级:良 分数: 7079 等级:中 分数: 6069 等级:及格 分数: 60以下 等级:不及格 # include main() int d; printf(输入分数:); scanf(%d,&d); if(d=90 ) printf(优); else if(d=80) printf( 良); else if(d=70) printf( 中); else if(d=60) printf( 及格); else pri

36、ntf( 不及格); 四、条件语句:表达式1 ? 表达式2 :表达式3执行的过程:若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;例:求一个整数的绝对值 #include main() int i,absi; scanf(%d,&i);absi=i0 ? i : -i;printf(%d绝对值是%dn,i,absi); 五、switch语句 switch (表达式) case 常量表达式1: 语句1 ; break; case常量表达式2: 语句2 ; break; case常量表达式n:语句n ; break; default: 语句n+1; 例:商店卖货物,每一件3.5元

37、,按购买的数量给与优惠: 购买100件,优惠5%; 购买200件以上,优惠6%; 购买300件以上,优惠8%; 购买400件以上,优惠10%; 购买500件以上,优惠15%; #include main() int n; float p,price; scanf(%d,&n); switch(n/100) case 1: p=0.05; break; case 2: p=0.06; break; case 3: p=0.08; break; case 4: p=0.10; break; case 5: p=0.15; break; price=3.5*n*(1-p); printf(%应付款=

38、%7.2fn,price); 08一维数组一、if语句: 一般格式: if(表达式) 语句;表示:当表达式成立时,则执行语句;否则跳过语句;如:if (ab) printf(ab!);例:若用户输入的数为3的倍数,则显示OK #include main() int a; scanf(%d,&a); if(a %3=0) printf(OK); 二、if-else 语句:一般格式:if (表达式) 语句1;else 语句2;例:给出用户输入的两个整数的较大者 #include main() int a,b; scanf(%d,%d,&a,&b); if(ab) printf(the max=%d

39、,a); else printf( the max=%d,b); 三、if语句的嵌套1、if子句中嵌套: if(表达式1) if(表达式2) 语句1; else 语句2;else 语句3; if(表达式1) if(表达式2) 语句1; Else 语句2; 2、else子句中嵌套 if (表达式1) 语句1; else if(表达式2) 语句2; else 语句3; if(表达式1) 语句1; else if(表达式2) 语句2;3、嵌套一般格式: if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3 ;else if(表达式n) 语句n;e

40、lse 语句n+1; 例:将用户输入的成绩按以下规则转换成等级成绩: 分数: 90100 等级:优 分数: 8089 等级:良 分数: 7079 等级:中 分数: 6069 等级:及格 分数: 60以下 等级:不及格 # include main() int d; printf(输入分数:); scanf(%d,&d); if(d=90 ) printf(优); else if(d=80) printf( 良); else if(d=70) printf( 中); else if(d=60) printf( 及格); else printf( 不及格); 四、条件语句:表达式1 ? 表达式2

41、:表达式3执行的过程:若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;例:求一个整数的绝对值 #include main() int i,absi; scanf(%d,&i);absi=i0 ? i : -i;printf(%d绝对值是%dn,i,absi); 五、switch语句 switch (表达式) case 常量表达式1: 语句1 ; break; case常量表达式2: 语句2 ; break; case常量表达式n:语句n ; break; default: 语句n+1; 例:商店卖货物,每一件3.5元,按购买的数量给与优惠: 购买100件,优惠5%; 购买20

42、0件以上,优惠6%; 购买300件以上,优惠8%; 购买400件以上,优惠10%; 购买500件以上,优惠15%; #include main() int n; float p,price; scanf(%d,&n); switch(n/100) case 1: p=0.05; break; case 2: p=0.06; break; case 3: p=0.08; break; case 4: p=0.10; break; case 5: p=0.15; break; price=3.5*n*(1-p); printf(%应付款=%7.2fn,price); 09字符数组一、if语句: 一

43、般格式: if(表达式) 语句;表示:当表达式成立时,则执行语句;否则跳过语句;如:if (ab) printf(ab!);例:若用户输入的数为3的倍数,则显示OK #include main() int a; scanf(%d,&a); if(a %3=0) printf(OK); 二、if-else 语句:一般格式:if (表达式) 语句1;else 语句2;例:给出用户输入的两个整数的较大者 #include main() int a,b; scanf(%d,%d,&a,&b); if(ab) printf(the max=%d,a); else printf( the max=%d,b

44、); 三、if语句的嵌套1、if子句中嵌套: if(表达式1) if(表达式2) 语句1; else 语句2;else 语句3; if(表达式1) if(表达式2) 语句1; Else 语句2; 2、else子句中嵌套 if (表达式1) 语句1; else if(表达式2) 语句2; else 语句3; if(表达式1) 语句1; else if(表达式2) 语句2;3、嵌套一般格式: if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3 ;else if(表达式n) 语句n;else 语句n+1; 例:将用户输入的成绩按以下规则转换成等

45、级成绩: 分数: 90100 等级:优 分数: 8089 等级:良 分数: 7079 等级:中 分数: 6069 等级:及格 分数: 60以下 等级:不及格 # include main() int d; printf(输入分数:); scanf(%d,&d); if(d=90 ) printf(优); else if(d=80) printf( 良); else if(d=70) printf( 中); else if(d=60) printf( 及格); else printf( 不及格); 四、条件语句:表达式1 ? 表达式2 :表达式3执行的过程:若表达式1的值为非0时,该条件语句的职

46、位表达式2,否则为表达式3;例:求一个整数的绝对值 #include main() int i,absi; scanf(%d,&i);absi=i0 ? i : -i;printf(%d绝对值是%dn,i,absi); 五、switch语句 switch (表达式) case 常量表达式1: 语句1 ; break; case常量表达式2: 语句2 ; break; case常量表达式n:语句n ; break; default: 语句n+1; 例:商店卖货物,每一件3.5元,按购买的数量给与优惠: 购买100件,优惠5%; 购买200件以上,优惠6%; 购买300件以上,优惠8%; 购买40

47、0件以上,优惠10%; 购买500件以上,优惠15%; #include main() int n; float p,price; scanf(%d,&n); switch(n/100) case 1: p=0.05; break; case 2: p=0.06; break; case 3: p=0.08; break; case 4: p=0.10; break; case 5: p=0.15; break; price=3.5*n*(1-p); printf(%应付款=%7.2fn,price); 10二维数组二、二维数组: 具有两个下标的数组为二维数组。1、定义格式: 类型说明符 数组

48、名常量表达式常量表达式如: int a32; /定义了一个二维数组,名称数组名为a,含有6个元素:a00、a01、a10、a11、a20、a21;说明:第一个常量表达式指出的是数组的行数;第二个常量表达式指出的是数组的列数;二维数组元素的顺序是:按行存放;即先顺序存放第一行的元素,再存放第二行的元素以此类推;其存储格式: a00a01a10a11a20a212、二维数组的初始化:同一维数组。分行为二维数组赋初值: int a32=1,2,3,4,5,6; 则该语句执行后,a00=1, a01=2, a10=3,a11=4, a20=5, a21=6;按数组在存储时的排列次序赋初值:int a3

49、2=1,2,3,4,5,6;对数组的部分元素赋初值: int a32=1,2,3,4;忽略第一维的长度,对二维数组赋初值: int a2=1,2,3,4,5,6; 该语句执行后,C语言系统自动计算出第一维的长度为6/2=3,同样有:a00=1, a01=2,a10=3,a11=4, a20=5, a21=6;例:将两个2行3列的矩阵相加,并显示结果。#include main() int a23=1,3,5,7,9,11;int b23=2,4,6,8,10,12;int c23,sum=0,i,j; for(i=0;i2;i+) /i 表示第1行到第3行 for(j=0;j3;j+) /j

50、表示第1列到第3列 cij=aij+bij; for(i=0;i2;i+) for (j=0;j3;j+) printf(%5d,cij); if(j+1)%3=0) printf(n); 11地址与指针指针是一个变量,其存储空间内存放的是一个地址,因此,指针是一个地址变量。C语言提供的指针运算符号: &:取地址运算符; *:取内容运算符;1、指针变量的定义:指针变量定义的格式: 类型说明符 *标识符; 如: int *p;2、指针变量的引用:指针变量是用来存放存储单元地址的,在赋值前,其所指向的存储单元是不定的,当赋完值后,指针变量才具体指向某一变量。如: int a,b, *p; /定义一

51、个真正变量p,其指向的变量类型为整型 a=10; p=&a; /指针变量p存储的是变量a的存储地址; 此时:*p的值即为指针p所指向的存储空间中保存的值,即 *pa。 12指针与一维数组一、数组元素的地址表示数组元素也是一般变量,所以数组元素的地址也用:&数组元素名 。(1)数组首元素的地址表示为:数组名 或 &组数元素名 a 或 &a0 (2)任意数组元素的地址表示为;数组名+下标 或 &数组元素名用i来表示下标,即 a+i 或 &ai 若指针p指向数组a,则 任意数组元素的地址可表示为: p+i 或 &pi 二、指针与一维数组的关系:若指针p指向数组a,则 p+ - 表示从当前指向位置下移

52、1个元素;p- - 表示从当前指向位置上移1个元素;pn - 表示从当前指向位置下移或上移n个元素; 若指针p、q均指向数组a,则可进行pq、p=q等运算; p=q -表示p、q均指向同一数组元素; p-q -表示p指针和q指针之间相隔的数组元素个数; 三、一维数组元素的引用若指针p指向数组a,则数组中任意元素可表示为: ai、*(a+i)、*(p+i)、pi【例】利用指针显示数组元素的值 #include main() int a5=1,2,3,4,5; int i; for(i=0;i5;i+) printf(a%d=%dn, i ,*(a+i); 或者写为: #include main(

53、) int a5=1,2,3,4,5; int *p; for(p=a; pa+5; p+) printf(%dn,*p); 13指针与字符串 在C语言中,字符串是存储在字符数组中的。字符数组与指针的关系与一位数组与指针的关系基本相同,只是数组与指针均为字符型。 当定义一个字符型的指针变量并把它指向一个字符数组时,就可以通过指针变量来处理字符串了。【例】通过指针计算字符串的长度。#includemain() char a80,*p; int len=0; gets(a); p=a; /指针p指向字符数组a while(*p!=0) len+; printf(%d n,len)【例】通过指针实现

54、字符串的复制。#includemain() char a80,b80,*p1,*p2; gets(a); p1=a; /指针p1指向字符数组a p2=b; /指针p2指向字符数组b while(*p1!=0) /当指针p1没有指向结束标记符号 *p2+=*p1+; /将指针p1指向的字符赋给指针p2指向的空间 *p2=0; /为数组b添加结束标记符号 puts(b);14函数的参数传递 函数定义时,函数首部的参数称为形式参数(简称形参); 函数调用时,调用语句中的参数称为实际参数(简称实参); 形式参数与实际参数必须要一一对应,二者数量相同,类型一致。C语言中,实际参数传给形式参数,而形式参数

55、的值不能传给实际参数,称为单向值传递。 值传递方式(传值):将实际参数的值单向传递给形式参数; 地址传递方式(传址):将实际参数所表示的地址单向传递给形式参数 一、传值调用时,编译系统为实际参数和形式参数分配的内存空间是不一样的,因此,即使函数修改了形式参数的值,也不会影响实际参数的值,同理,修改了实际参数的数值也不会影响到形式参数的值。 传值调用时,实际参数通常是常量、变量、数组元素或表达式,系统先计算实际参数的数值,再将该数值传递给形式参数。 二、传址调用时,编译系统不再为形式参数分配内存空间,形式参数和实际参数共用一段内存空间。 因此,在函数中修改了形式参数的值,也就是修改了实际参数的值

56、;同理,修改了实际参数的值,也就修改了形式参数的值,二者指向的数值相同。 传址调用时,实际参数通常是地址、指针变量、一维数组名、二维数组名、字符串等。 (1)一维数组名作为函数的实参 数组名表示一段连续内存空间的首地址,即数组首元素的地址。函数调用时,是把数组首元素的地址值传递给形参,形参可以是与实参数据类型相同的数组名,此时,形参和实参共用一段连续的内存空间,因此,形参和实参的数值完全相同。 (2)指针作为函数的实参 将指针变量所表示的数组首元素的地址传递给形参数组名,实参和形参共用一段连续的内存空间,其值也相同。15函数的嵌套的调用(略)16结构体,共用体,枚举一、结构体定义: 结构体是由

57、若干成员组成的一种构造类型,每个成员可以是一个基本数据类型或又是一个构造类型。 一般格式: struct 标识符 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名3; . ;其中:关键字 struct不可省略; 标识符是对结构体的命名,称为结构体名; 成员的定义格式一般如下: 类型标识符 成员名 在使用结构体变量之前,必须先定义结构体类型。如:定义一个学生情况结构体student: struct student char name12; /姓名 char sex; /性别 int age; /年龄 int score; /成绩 char class16; /班级 ;二、结构体变量的

58、引用和初始化 1、结构体变量的引用: 一般格式为: 结构体变量名.成员名 或 指针变量名-成员名 如:struct student stud,*ps; 则引用age成员分别是: stud.age ps-age 2、可以将结构体变量作为一个整体赋给另一个同类型的结构体变量; 如: struct student std1,std2; . std1=std2; 3、结构体变量的初始化: struct student sud=李明,M,20,88,091001011; 4、结构体数组的定义: 先定义结构体类型,再定义结构体数组。 struct student char name12; char sex

59、; int age; int score; char class16; struct student st40; 5、结构体数组的引用: 在st结构体数组定义后,st2.age表示st的第3个元素的age成员项, 6、结构体数组的初始化: struct depart int no; char dname; dp3=3,人事处,15,财务处,8,科技处;三、结构体指针 结构体指针指向一个结构体变量。 struct student stud,*p; p=&stud; p不是结构体变量,故不能写成p.age,应写为(*p).age,或写成p-age; p只能指向一个结构体变量;而不能指向一个结构体变

60、量中的一个成员;四、结构体数组指针: 一个指针变量可以指向结构体数组,即将该数组的起始地址赋值给指针变量。 struct student stud40,*p; p=&stud; 当执行p=&stud;后,p指向stud数组的第一个元素;当进行p+后,表示p指向下一个元素的起始地址; p只能指向该结构体数组的一个元素,然后用指向运算符-取其成员的值,而不能直接指向一个成员; (+)p-age:先将p自增1,然后取得它指向的元素中的成员age的值,即stud0.age; (p+)-age:先取得p-age的值,再进行p自增1,指向下一个元素stud1; 五、共用体类型的说明和变量定义 1、共用体类

温馨提示

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

评论

0/150

提交评论