C程序设计摘要(二)

来源:互联网 发布:阿里云搭建openvpn教程 编辑:程序博客网 时间:2024/05/16 04:10

C程序设计第四章:顺序程序设计
一、 C语句概述
1.C语句的基本组成
一个C语句程序可以由若干个源程序文件组成,一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成,一个函数由数据声明部分和执行语句组成。
这里写图片描述
1.C语句分类
C语句分为以下五类:控制语句、函数调用语句、表达式语句、空语句、复合语句
(1)控制语句。控制语句用于完成一定的控制功能。 C只有9种控制语句它们是:
if() … else … (条件语句)
for() … (循环语句)
while() … (循环语句)
do … while() (循环语句)
continue (结束本次循环语句)
break (中止执行switch或循环语句)
switch (多分支选择语句)
goto (转向语句)
return (从函数返回语句)
(2)函数调用语句。函数调用语句由一个函数调用加一个分号构成。例如:printf(“This is a C statement.”);
(3)表达式语句。表达式语句由一个表达式加一个分号构成。最典型的是由赋值表达式构成的赋值语句。例:a=3这是赋值表达式,而a=3;则是赋值表达式。表达式+分号=表达式语句。一个语句必须在最后出现分号,分号是语句中不可缺少的组成部分,而不是两个语句间的分隔符号
(4)空语句:;。不影响编译,但是一定要有分号。
(5)复合语句。用{}把一些语句括起来,就成为复合语句。注意:复合语句中最后的分号不能忽略不写。
二、输入输出函数
1.字符数据的输入输出
(1)putchar函数:putchar函数(字符输出函数)的作用是向终端输出一个字符。其一般形式为 putchar(c)它输出字符变量c的值,c可以是字符型变量或整型变量用putchar函数也可以输出控制字符以及其他转义字符
(2)getchar函数:getchar函数(字符输入函数)的作用是从终端(或系统隐含制定的输入设备)输入一个字符,getchar函数没有参数,其一般形式为 getchar(),函数的值就是从输入设备得到的字符。
注意:getchar和putchar函数都只能接收或者显示一个字符,如要字符串输入输出则可以用一个循环语句来实现。
(3)printf函数:其一般形式为 printf(格式控制串,输出项列表) 输出项列表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:包含两种信息
1)格式说明%[引导符]格式字符 ,用于指定输出表中数据的输出格式。如%d、%f。
2)普通字符或转义序列:将被原样输出的字符(包括转义字符)
(4) scanf函数:期一般形式为scanf(“格式控制字符串”,地址表列) 地址列表:内存地址,可以是变量的地址、数组元素的地址等。地址运算符:&
输入输出常用:
%d—— 用于十进制整数
%f—— 用于float型
%lf—— 用于double型
%c—— 用于char型
%s ——用于字符串
• 使用scanf函数应注意的问题:(1)给出的是变量地址;(2)输入数值时不能规定精度;(3)多个数据间的间隔符一般以空格、TAB或回车键作为分隔符,若格式串中两个格式符间有其他字符,则输入时对应位置输入相同字符;(4)用“%c”格式符时,空格和转义字符作为有效字符输入;(5)输入数据时,遇以下情况认为该数据结束:遇空格、TAB或回车

修饰符 功 能 * 表示本输入项在输入后不赋给相应的变量 数字m 指定输入数据宽度,遇空格或不可转换字符则结束 h 用于d,i,o,x,u前,指定输入为short型整数 l 用于d,i,o,x,u前,指定输入为long型整数;用于e,f,g前,指定输入为double型实 L 用于e,f,g前,指定输入为long double型实数

三、 顺序结构设计举例
例 输入三角形边长,求面积
程序:
这里写图片描述
运行结果
这里写图片描述
C程序设计第五章:选择结构程序设计
一、 关系运算符和表达式
1、关系运算: 是对两个量“比较运算”。
2、关系运算符 :
种类:6种 < <= >= > == !=
结合方向:自左向右
优先级别:前4种优先级相同,高于后2种:高到低:算术运算-关系运算-赋值运算
3、关系表达式:用关系运算符将两个表达式连接起来式子。
4、关系表达式的值:是逻辑值“真”或“假”,用1和0表示
1 –– 结果为真 (关系成立)
0 –– 结果为假 (关系不成立)
关系运算注意的问题:
1) 关系运算符左右两边类型不一致,自动进行类型转换,转换成两边的类型相同,然后进行比较。例如:若a=0,b=0.5,转换成a=0.0,则 a<=b的值为1
2) 应避免对实数作相等或不等的判断,而只能使用“<”和“>”,原因在于舍入误差可能造成两个逻辑上应该相等的数不相等。
3)关系运算符“ >=、<=、==、!=”在书写时,不要用空格将其分开,否则会产生语法错误。
二、逻辑运算符和逻辑表达式
1、逻辑运算符
(1)种类:三种逻辑运算符
&& 逻辑与(只在两条件同时成立时为“真”)
|| 逻辑或(两个条件只要有一个成立时即为“真”)
! 逻辑非(条件为真,运算后为假,条件为假,运算后为真)
“&&”,“||”是双目运算符,“!”是单目运算符。
例:a&&b 若a,b为真,则a&&b为真。
a||b 若a,b之一为真,则a||b为真。
!a 若a为真,则!a为假。
结合方向:! :从右向左 && :从左向右 || :从左向右
2、逻辑表达式和逻辑表达式的值
1)逻辑表达式:用逻辑运算符将关系表达式、逻辑量连接起来的式子。例如: !a&&b¦¦x>y && c
2)逻辑表达式的值:1或0,表示逻辑值“真”或“假”
注:在逻辑运算中,非0值参加逻辑运算时被看成1处理。
三、if语句
1、if语句的三种基本形式:
形式1: if(表达式) 语句
形式2: if(表达式) 语句1
else 语句2
(执行过程:当表达式值为非0, 执行语句1;当表达式值为0, 执行语句2。)
形式3: if(表达式1) 语句1
else if (表达式2) 语句2
else if (表达式3) 语句3
… …
else if(表达式n) 语句n
else 语句n+1
执行过程:
1) 从上向下逐一对if后面的表达式进行检测。
2) 当某一个表达式的值为非0时,就执行与此有关的子句中的语句,其余部分就过去。
3) 如果所有表达式的值都是0,则执行最后的else子句;
4) 如果没有最后的那个else子句,那么,将不进行任何操作。
注意:1. 表达式可以是逻辑表达式、关系表达式、算术表达式,只要值是非0,就认条件为“真”。2. 语句必须以分号结束。3. 若语句不止一条,则必须用{ }括起来。在{ }外不加分号。
2、if语句的嵌套: 在if语句中, 又包含一个或多个if语句。
这里写图片描述
这里写图片描述
注:if ~ else 配对原则:缺省{ }时,else总是和它上面离它最近的未配对的if 配对。
3.条件运算符 ? : 唯一的三目运算符
一般形式:表达式1 ? 表达式2 : 表达式3
执行过程: 先求解表达式1, 若非0(真),则值为表达式2的值, 否则,为表达式3的值。
注意:
1) 条件运算符优先于赋值运算符。例如: max=(a>b? a:b) 可去掉( )
2) 条件运算符低于关系运算符和算术运算符。例如: max=a>b? a:b+1max= a>b? a:(b+1)而不是 max=(a>b? a:b)+1
3)条件运算符结合性为从右至左。例如: a>b? a:c>d ? c:相当于 a>b? a:(c>d? c:d)
4)条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if。例如:求 y=a+|b| printf(“y=%d\n”,b>0?a+b:a-b);
5)表达式1、表达式2、表达式3的类型可以不同。例如: x>y? 1 : 1.5
4. switch语句
switch语句是多分支选择语句,也叫开关语句
一般形式:
switch (表达式)
{
case 常量表达式1:语句 1 [break;]
case 常量表达式2:语句 2 [break;]

case 常量表达式n:语句 n [break;]
default: 语句 n+1
}
执行过程:当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句。若所有的 case 中的常量表达式的值都没有与表达式的值匹配,则执行 default 后面的语句。注意:case常量表达式只起语句标号作用; 必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。
说明:
1. 表达式的类型和常量表达式的类型须一致;switch后面的表达式一般是整型字符型。
2. 每一个 case 的常量表达式的值必须互不相同。
3. 多个case和default的出现次序不影响执行结果。
4. case常量表达式只起语句标号作用; 必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行
例:写程序,判断某一年是否闰年。
程序:
这里写图片描述
运行结果
这里写图片描述
这里写图片描述
C程序设计第六章:循环控制
一、 goto语句及用goto语句构成循环
一般形式:goto 语句标号;用途:与if语句构成循环结构; 从循环体中跳到循环体外。
二、while语句
一般形式:while(表达式) 语句
这里写图片描述
特点:先判断表达式,后执行循环体。
当表达式的值为真(非0)时,执行其中的内嵌语句(循环体),然后回过头来再判断表达式的值,如此重复;当表达式为假(0)时结束循环。
注意:1、循环前,须给循环控制变量赋初值。2、循环条件满足才去执行循环体3、若循环体包含一条以上的语句, 应以复合语句形式出现{ }。4、 循环体有可能一次也不执行。 5、无限循环: while(1) 循环体;
三、do-while 语句
一般形式:do
循环体语句
while(表达式); (注:;不可沈省略)
先执行循环体,后判断表达式。循环体至少执行一次。do-while语句可转化成while语句。
这里写图片描述
执行循环体,当表达式的值为真(非0)时,再次执行循环体,如此重复;当表达式为假(0)时结束循环。
while语句和用do-while语句的比较:
一般情况下,用while语句和用do-while语句处理同一问题,若二者的循环体一样,结果也一样。但如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。
四、for语句
一般形式:for(表达式1;表达式2;表达式3) 循环体语句
这里写图片描述
执行过程:(1) 先求解表达式1。(2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的循环体语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。。(3) 求解表达式3。(4) 转回上面第(2)步骤继续执行。(5) 循环结束,执行for语句下面的一个语句
for循环的说明:
1)表达式1省略时,应在for前给循环变量赋初值。
如:i=1;for(;i<=100;i++) s=s+i;
执行时,跳过“求解表达式1”这一步,其他不变。
2)表达式2省略时,不判断循环条件,将成为 “死循环”,需要在循环体中引入break语句以退出循环。
如: for(i=1; ;i++) s=s+i;
它相当于: i=1;while(1) {s=s+1;i++;} 死循环
3)表达式3省略时,在循环体内必须有使循环条件改变的语句,以保证循环能正常结束。
如:for(i=1;i<=3;)
{ s=s+i;
i++; }
4)同时省略表达式1和表达式3,只有表达式2,相当于while语句。
5) 3个表达式都可省略,如: for( ; ; ) 语句 无限循环
不设初值,不判断条件,循环变量不增值。无终止地执行循环体。
6) 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于0就执行循环体。
五:循环的嵌套(while、do-while、for可以互相嵌套自由组合)
1. 一个循环体内包含着另一个完整的循环结构,就称为嵌套循环。
2. 内嵌的循环中又可以嵌套循环,从而构成多重循环。
3. 三种循环可以相互嵌套。
六、break语句和continue语句
1. break语句:功能:跳出当前switch结构(前已讲);在循环语句中,提前终止循环,跳出本层循环。
continue语句: 功能:结束本次循环,跳过本次循环体中尚未执行的语句,进行下一次是否执行循环体的判断。(只能用于循环结构)
continue语句和break语句goto的区别:
1)continue语句只结束本次循环;2) break语句是终止本层循环的执行;3)要从很多重循环的内层跳到最外层,可考虑用goto语句,但应尽量少用。
例 把100~200之间不能被3整除的数输出
程序:
这里写图片描述
运行结果
这里写图片描述

0 0