1、第四章 顺序程序设计,4.1 C语句概述,C程序:可由若干源程序文件组成, 一个源文件可由若干函数和预处理命令及全局变量声明部分组成。 函数包括声明部分:指出数据结构,定义数据类型。 执行部分:由语句组成,称数据操作,对提供的数据进行加工。,C程序组成的示意图,C语言提供的语句分五大类:,控制语句,完成控制功能函数调用语句 表达式语句 空语句 (5) 复合语句,C语言提供的语句分五大类,(1)控制语句,完成控制功能 if( ) else 条件 for ( ) 循环 while ( ) 循环 do while ( ) 循环 continue 结束本次循环 break 中止switch 或循环 s
2、witch 多分支选择 goto 转向 return 从函数返回,(2) 函数调用语句 函数名(参数); 如:printf (“This is a C program.n”); max(a,b); (3) 表达式语句 在表达式后加 “ ;” 构成 a=6 a=5 ; 如 i=i+2 表达式 而 i=i+2 ; 表达式语句x+y x+y ; (4) 空语句 ; 无任何操作,但合法,可用于循环中的转折,(5) 复合语句 用 将若干语句括起来而构成的语句。如: if (xy) 与 if (xy) 意义不同z=x; x+; z=x; y- -; x+; y- -; ,1、赋值运算符 “=”是赋值号,也
3、是赋值运算符 功能:将赋值号右边表达式值赋给赋值号左边的变量,赋值 号同时含有计算的功能。 如:a=3; b=x*y; a,b变量中原来不管存放什么值,执行赋值语句后,新值将取代旧值,4.2 赋值运算符和赋值表达式,在赋值号前加其它运算符,可以构成复合运算符。 如: a=a+b a+=b x=x*(y+8) x*=y+8 x=x%3 x%=3 为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再 补上变量名。 如:a + = b a + = (b) a=a+b , 其中a是变量,b是表达式 x * = y+8 x * = (y+8) x=x*(y+8) 在C语言中,有十个二元运算符:+、-、
4、*、/、%、&、| 可与赋值号一起构成复合运算符;其优点是:简化程序,提高编译效率。,2、复合的赋值运算符,由赋值运算符将一个变量和一个表达式连接起来的式子。 (1)一般形式: (2)赋值表达式求解过程计算赋值号右边表达式的值,然后赋给左边的变量。 如:a=3+5 在C语言中,表达式又可以是赋值表达式,如a=(b=5); 其中 b=5是赋值表达式,其值是5,因此a的值是5,整个表达式的值是5。,3、赋值表达式,赋值运算符的结合顺序:从右向左 因此:a=(b=5) 与 a=b=5 是等价的。 例: a=b=c=5 表达式的值为5,a,b,c的值为5。 a=5+(c=6) 表达式的值为11,a的值
5、为11,c的值为6。 a=(b=4)+(c=6) 表达式的值为10,a的值为10,b为4,c为6。 a=(b=10)/(c=2) 表达式的值为5,a的值为5,b为10,c为2。,赋值表达式也可以包含复合的赋值运算符 main( ) int a=12, b; b=(a+=a-=a*a); printf (“a=%d, b=%dn”,a,b); 运算结果: a= -264, b= -264,4.3 赋 值 语 句,前已说到,赋值语句是由赋值表达式加上一个分号构成。C语言的赋值语句具有其它高级语言中赋值语句的一切特点和功能,但也应当注意到它们的不同: C语言中的赋值号“=”作为赋值运算符; 作为赋值
6、表达式可以被包括在其它表达式之中,例如if (ab)0) ta;,变量类型的不同,所接收的数据也是不同的,当赋值运算符两侧的数据类型不一致时,在赋值时要进行类型转换(1) 实型数据赋给整型变量时,舍去实型数据的小数部分 如:int i; i=3.56; (2) 整型数据赋给实型变量时,数值不变,但以浮点形式 存放于内存。(3) double型数据赋给float变量,截取7位有效数字存放float单元,应注意数值溢出(4)字符型数据赋给整型变量无符号字符型赋给整型量:将其存放在整型变量的低8位中,而高位以0补齐 带符号字符型赋给整型量时若最高位为1(负数),则整型变量的高8位补1,若最高位为0(
7、正数),则整型变量高8位补0。(5) int, short, long型数据赋给char变量,则将其低位赋给char型变量(6) long型数据赋给int型变量,将long型数据的低16位赋给int型变量 (7)将unsigned int型数据赋给 long 型变量时 将unsigned short型数据送到long int型变量的低16位,longint的变量高16位补0若无符号数据赋给相同长度的带符号的变量,则原样赋给。(8) 将带符号的数赋给长度相同的无符号变量,4、类型转换问题,2、类型转换 (1)实型数据赋给整型变量时,舍去实型数据的小数部分 如:int i; i=3.56; 结果i
8、的值为3 (2)整型数据赋给实型变量时,数值不变,但以浮点形式存放于内存。 如: float a=23; 先将23转换成23.000000,然后送a中 double b=23; 先将23转换为23.00000000000000,然后送b中,(3) double型数据赋给float变量 截取其前面的7位有效数字,存放到float单元,应注意数值 范围不能溢出,如:float f; double d=123.45678e65; f=d; 由于数据溢出,f将得到错误的值 float 数据赋给double变量时,数值不变,有效位扩展到16位。,(4)字符型数据赋给整型变量字符数据占一个字节,整型数据占
9、两个字节,字符数据存入整型变量的低8位,有两种情况: 无符号字符型数据赋给整型变量时:将其存放在整型变量的低8位中,而高位以0补齐,main ( ) int i; unsigned char c ; c=376; i=c; printf(“i=%d, c=%dn”, i, c); 结果: i=254 c=254,带符号的字符型数据赋给整型变量时 若最高位为1(负数),则整型变量的高8位补1,若最高位为0(正数)则整型变量高8位补0。 例T3-8-9.c main( ) int i; char c; c=376; i=c; printf (“i=%d,c=%dn”,i,c); 运行结果:i= -
10、2,c= -2,(5)int, short, long型数据赋给char变量,则将其低位赋给char型变量 例T3-8-10.c main() int i=289; char c; c=i; printf(“i=%d,c=%d, c=%c n”,i,c,c); 运算结果: i=289,c=33,c=!,(6)long型数据赋给int型变量,将long型数据的低16位赋给int型变量 例T3-8-11.c main() short a;long b=65544; a=b; printf(“a=%d,b=%ldn“,a,b); 运算结果:a=8, b=65544,a=8,符号位,b=65544,(
11、7)将unsigned int 型数据赋给 long 型变量时 将unsigned short 型数据送到 long int 型变量的低16位,long int的变量高16位补 0 例T3-8-12 main ( ) unsigned a=65535; long b; b=a; printf(“a=%u ,b=%ldn“, a, b); ,输出: a=65535, b=65535,unsigned int int unsigned short short int unsigned long long int 要注意数据的有效位占据符号位 例T3-8-13.c main( ) unsigned
12、int a=65535; int b;b=a; printf (“a=% u ,b=%dn”,a,b); 运算结果:a=65535,b= -1,若无符号数据赋给相同长度的带符号的变量,则原样赋给。,(8)将带符号的数赋给长度相同的无符号变量 过程: 原样赋给 例T3-9.c main( ) unsigned int a; int b= -1; a=b; printf (“a=% u,b=%dn”,a,b); ,1 111111111111111,1 111111111111111,a,b,符号位,数值位,运算结果: a=65535,b= -1,4.3数据输入输出概念及在C语言中的实现,数据的输
13、入输出设备键盘,鼠标,显示器,打印机 C语言本身不提供输入输出语句,由输入输出函数来实现的。 在C的标准函数库中(stdio.h)提供了一些输入输出函数 getchar( ),putchar( ), printf( ) ,scanf( ) 使用上述库函数时,需要使用预编译命令,在主函数的前面加上如下语句#include #include “stdio.h”,4.4 字符数据的输入输出,两个简单的字符输入输出函数getchar( )putchar( ) 使用前提,在主函数的前面加上如下语句#include 或#include “stdio.h” 4.4.1 putchar( ) 函数 (字符输出
14、函数)格式: putchar(char c);c可以是字符常量或字符变量用途:向输出设备输出一个字符,include “stdio.h”main() char a,b,c;a=”B”;b=O;c=Y;putchar(a); putchar(b); putchar(c); 运行结果: BOY 如果将例程最后一行改为putchar(a); putchar(n); putchar(b); putchar(c);则输出结果为:BOY,4.4.1 putchar( ) 函数 (字符输出函数),getchar( ) 函数(数据输出函数) 格式: getchar(); 用途:向输出设备输出一个字符 说明: getchar()只能接收一个字符。 getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以下赋给任何变量,作为表达式的一部分。 例题:include “stdio.h”main() char c;c=getchar(); putchar(c); 可以将程序中语句改为: putchar (getchar();,4.4.2 getchar( ) 函数,