第一章 C语言概述
?
必不可少
C程序的组成和形式
C程序是由函数构成的 主函数
其他函数
一个函数由两部分组成
?
参数说明可以省圆括号不能省
函数的首部
例1. 3中max函数的首部为:
int max (int x, int y)
函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名
? 函数体 声明部分 变量声明
函数声明
执行部分
一个C程序总是从main函数开始执行。
C程序
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
写格式自由,一行可以写几个语句,一个语句可以写在多行上。
每个语句和数据声明的最后必须有一个分号。
C语言的输入输出功能是通过函数完成的。
接
可以用/*······*/对C程序进行注释。
? 运行C程序的步骤:
第三章 数据类型、运算符、与
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式
整型int
§3.1C语言的数据类型
? C语言的数据类型:
数据类型决定:
1. 数据占内存字节数
2. 数据取值范围
3. 其上可进行的操作
§3.2常量与变量
? 常量与符号常量
常量:在程序运行过程中,其值不能被改变的量
符号常量:用一个标识符代表一个常量的符号
使用符号常量的好处:
? 含义清楚
? 能做到“一改全改”
? 变量
变量:代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。
标识符:在C语言中用来对变量、符号常量、函数、数组、类型等对象命名的有效字符序列
标识符的命名规则:
? 只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
? 大写和小写字母是不同的字符,也就是不同的标识符。
? 标识符的最大长度Tuobo C规定为32个字符,一般不超过8个字符。
? 标识符应做到“见名知义”
? 标识符不能是关键字,如果是已经定义标识符,比如函数名,则相当于重新定义。
变量必须“先定义,后使用”
例:判断下列标识符号合法性
sum Sum M.D.John day Date 3days
student_name #33 lotus_1_2_3
char a>b _above $123
§3.3整型数据
? 整型常量
十进制整数:正负整数
八进制整数:以0开头,08是错误的用法
十六进制整数:以0x开头,例:0x2a是合法的
? 整型常量的类型
一个整型常数根据数据所在的范围可自动确定它的数据类型
一个整常量后面加一个字母u或U,认为是unsigned int型
一个整常量后面加一个字母l或L,认为是long int
? 整型变量
整型数据在内存中的存放形式:补码
? 正整数:该数的原码
? 负整数:该数的绝对值按位取反再加1
例:10的补码为0
-10的补码为0
最高位是符号位,该位为0表示正,该位为1表示负。
整型变量的分类:六种
·有符号基本整型:[signed] int 2 -32768~32767(-215~215-1)
·无符号基本整型: unsigned int 2 0~65535(0~216-1)
·有符号短整型:[signed] short [int] 2 -32768~32767
·无符号短整型: unsigned short [int] 2 0~65535
·有符号长整型:[signed] long [int] 4 -2147483648(-231~231-1)
·无符号长整型: unsigned long [int] 4 0~4294967295(0~232-1)
整型数据的溢出
例3.3整型数据的溢出
#include
void main()
{int a,b;
a=32767;
b=a+1;
a和 b在内存中的形式:
1 32767
0 -32768
printf("%d,%d\n",a,b);
}
运行结果为:
32767,-32768
§3.4浮点型数据
? 浮点型常量的表示
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
十进制小数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123.
错误用法
指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5
规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位非零的数字。
? 浮点型变量
浮点型数据在内存中的存放形式:分成小数部分和指数部分两部分存放
例:3.14159在内存中的形式如下(实际存储的是它的二进制数形式):
+ 314159 1
符号 小数部分 指数部分
浮点型变量的分类
类 型
比特数
有效数字
数值范围
float
32
6~7
-3.4*10-38~3.4*1038
double
64
15~16
-1.7*10-308~1.7*10308
ling double
128
18~19
-1.2*10-4932~1.2*104932
浮点型变量也应先定义后使用
§3.5字符型数据
? 字符常量:
用单撇号括起来的一个字符
转义字符:以一个“\”开头的字符序列:
含义
转义字符
含义
转义字符
水平制表8
\t
\n
换行
回车
\r
退格
\b
反斜线
\\
换页
\f
1~2位16进制数代表的字符
\xhh
1~3位8进制数代表的字符
\ddd
双引号
\“
单引号
\‘
例:3.5转义字符的使用
#include
void main ( )
main()
{ printf(" ab c\t de\rf\tg\n");
printf("h\ti\b\bj k\n");
}
实际运行结果为:
f gde
h j k
*输出的制表符覆盖了原有字符
运行结果应为:
fab c gde
h jik
? 字符变量
字符变量的定义及使用形式:
char c1,c2;
c1=’a’;c2=’b’;
字符变量在内存中占一字节。
? 字符数据在内存中的存储形式
以字符的ASCII码形式存放
可以和整型数据通用,可以互相赋值,可以以%d或c式输出,字符型数据可以参加算术运算,但只能存放0~255(unsigned char)或-128~127(signed char)之间的整数。
例3.6向字符变量赋予整数
#include
void main()
{char c1;int c2;
c1=97;
c2=98;
printf("%c %c\n",c1,c2);
printf("%d %d\n",c1,c2);
}
运行结果:
a b
97 98
例3.7大小写字母的转换
#include
void main()
{char c1,c2;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
printf("%c %c",c1,c2);
}
? 字符串常量:
一对双撇号括起来的字符序列:“abc”
‘a’是字符常量,“a”是字符串常量
不能将一个字符串常量赋值给字符变量
系统自动在字符串常量的末尾加上‘\0’做结束标志
例 字符串“hello”在内存中:
h e l l o \0
\0
例 空串“”在内存中
§3.6变量赋初值
? 变量赋初值:在定义变量的同时使变量初始化
正确用法
例:int a=3;
float f=3.56;
char c=’a’;
错误用法
int i,j,k=5;
int a,b,c=5;
int a=b=c=5;
§3.7各类数值型数据间的混合运算
? 各类数值型数据间的混合运算
整型、浮点型、字符型数据间可以混合运算
不同类型的数据要先转换成同一类型,再进行运算
转换规则:
运算对象类型不同时转换方向
int i;
float f;
double d;
long e;
例:
10 + ‘a’ + I * f - d / e
double
§3.8算术运算符和算术表达式
? C运算符简介
算术运算符:(+ - * / % ++ --)
关系运算符:(< <= == > >= !=)
逻辑运算符:((! && ||)
位运算符 :(<< >> ~ | ^ &)
赋值运算符:(= 及其扩展)
条件运算符:(?:)
逗号运算符:(,)
指针运算符:(* &)
求字节数 :(sizeof)
强制类型转换:(类型)
分量运算符:(. ->)
下标运算符:([])
其它 :(( ) -)
C
运
算
符
? 算术运算符和算术表达式
● 基本算术运算符: + ,-, *, /, %(取余)
? 结合方向:从左向右
? 优先级: - * / % + -
(2) (3) (4)
● 说明:
? “-”可为单目运算符时,右结合性
? 两整数相除,结果为整数,遵守“向零取整”的原则
?
例:5%2 = 1
-5%2 = -1
1%10= 1
5%1 = 0
5.5%2 ()
%要求两侧均为整型数据
例:5/2 = 2
-5/2 =-2
-5/2.0 = -2.5
● 算术表达式:用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规则的式子。
? 强制类型转换运算符
● 一般形式:(类型名)(表达式)
例:(int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
● 说明:强制转换得到所需类型的中间变量,原变量类型不变
例 main()
{ float x;
int i;
x=3.6;
i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
结果:x=3.600000,i=3
精度损失问题
较高类型向较低类型转换时可能发生
? 自增、自减运算符++ --
● 作用:使变量值加1或减1
● 种类:
? 前置 ++i, --i (先执行i+1或i-1,再使用i值)
? 后置 i++,i-- (先使用i值,再执行i+1或i-1)
● 说明:
? ++ -- 只能用于变量,不能用于常量和表达式,如5++ (),(a+b)++ ()
? ++ --结合方向:自右向左
? 优先级:-,++,-- * ,/, % + ,-
(2) (3) (4)
例 -i++ -(i++)(同一优先级右结合性)
i=3; printf(“%d”,-i++); //-3
例 j+++k; (j++)+k;
j=i++;
printf(“%d,%d”,j,i);
例:printf(“%d,%d”,i,i++);
运行结果:4,3
§3.9赋值运算符和赋值表达式
? 简单赋值运算符
● 符号: =
● 格式: 变量标识符=表达式
● 作用:将一个数据(常量或表达式)赋给一个变量
? 赋值时若变量和表达式的类型不一致将自动进行类型转换
例1:int i;
i=3.56; /*实际i值为3*/
例2:float f;
f=23;
printf(“%f\n”,f); 结果为:23.000000
例3:doule赋值给float时,截取其前面7位有效数字,取值范围超出时产生溢出错误。
float f;
double d=123.456789e100;
f=d; /*出错*/
例4:字符赋给整型时:
main()
{unsigned char c,d;
int a,b;
无符号字符时,将原值存入整型数的低八位,高八位补零。
c=’\376’;d=-125;
a=c;b=d;
printf(“%d,%d”,a,b);}
运行结果为:254,131
main()
{ char c;
有符号字符时,将原值存入整型数的低八位,高八位符号扩展。原值最高位为零则补零,为1则补1
int a;
c=’\376’;
a=c;
printf(“%d”,a);}
运行结果为:-2
例5:main()
int,short,long赋值给字符型变量时,只将其低八位截取赋值
{int i=289;
char c;
c=i;
printf(“%d,%c”,c,c);}
运行结果为:33,!
例6:将int赋值给long int处理方法同例4
将long int赋值给int时截取低16位
main()
{long b=65536;int a;
a=b;
printf(“%d”,a);}
运行结果为:0
例7:将unsigned赋给一个同字节数的signed型时,将原值保持不变,超范围会产生溢出错误。
例:main()
{unsigned int a=65535;
int b;
b=a;
printf(“%d”,b);}
运行结果为:-1
例8:将signed赋给一个同字节数的unsigned型时,将原值保持不变
main()
{unsigned int a;
int b=-1;
a=b;
printf(“%d”,a);}
运行结果为:65535
? 复合赋值运算符
● 种类:+= -= *= /= %= <<= >>= &= ^= |=
含义: 变量 op= 表达式 变量= 变量 op (表达式)
a=a+3
x=x*(y+8)
x=x%3
? 赋值表达式
● 一般形式:变量=表达式
● 赋值表达式的值与变量值相等,且可嵌套,但赋值号左边必须为变量
正确用法:
a=b=c=5
a=(b=5)
a=5+(c=6)
a=(b=4)+(c=6)
a=(b=10)/(c=2)
错误用法:
3=x-2*y;
a+b=3;
a=3*5=4*3
例:a=12;
a+=a-=a*a /*a=-264 等价于a=a+(a=a-(a*a))*/
例:b=3;
printf(“%d”,a=b);
§3.10逗号运算符和逗号表达式
形式:表达式1,表达式2,……表达式n
结合性:从左向右
优先级低于赋值表达式
逗号表达式的值:等于表达式n的值
例 a=3*5,a*4 /*a=15,表达式值60*/
a=3*5,a*4,a+5 /*a=15,表达式值20*/
例 x=(a=3,6*3) /*赋值表达式,表达式值18,x=18*/
x=a=3,6*a /*逗号表达式,表达式值18,x=3*/
例 a=1;b=2;c=3;
printf(“%d,%d,%d”,a,b,c); /*1,2,3*/
printf(“%d,%d,%d”,(a,b,c),b,c); /*3,2,3*/
? 课堂练习:
分析下面程序的运行结果:
main()
{float f1;int a;char c=’a’;
f1=32.78;
c=(int)f1+c;
a=c%15;
printf(“%d,%f,%c\n”,a,f1,c);}
第一章与第三章练习题
1. 一个C程序的执行是从_____。
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C)本程序的main函数开始,到本程序文件的最后一个函数结束
D)本程序文件的第一个函数开始,到本程序main函数结束
2. 以下叙述正确的是:
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行中只能写一条语句
C)C语言本身没有输入输出语句
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
3. 以下叙述不正确的是。
A)一个C源程序可由一个或多个函数组成
B)一个C源程序必须包含一个main函数
C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面
4. C语言规定:在一个源程序中,main函数的位置 。
A)必须在最开始
B)必须在系统调用的库函数的后面
C)可以任意
D)必须在最后
5. 一个C语言程序是由
A)一个主程序和若干子程序组成 B)函数组成
C)若干过程组成 D)若干子程序组成
6. 若x,i,j和k都是int型变量,则执行下面表达式后x的值为
x=(i=4,j=16,k=32)
A)4 B)16 C)32 D)52
7. 假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是:
A)7 B)8 C)6 D)2
8. C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符
A)必须为字母 B)必须为下划线
C)必须为字母或下划线 D)可以是字母,数字和下划线中任一种字符
9. 若有代数式3ae/bc,则不正确的C语言表达式是:
A) a/b/c*e*3 B)3*a*e/b/c
C)3*a*e/b*c D)a*e/c/b*3
10. 以下不正确的叙述是
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
11. 以下正确的叙述是:
A)在C程序中,每行中只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,无论是整数还是实数,都能被准确无误地表示
D)在C程序中,%是只能用于整数运算的运算符
12. 以下符合C语言语法的赋值表达式是
A)d=9+e+f=d+9 B) d=9+e,f=d+9
C)d=9+e=e++,d+9 D)d=9+e++=d+7
13. 已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'十'6'一'3';后,c2中的值为
A)D B)68 C)不确定的值 D)C
14. 在C语言中,要求运算数必须是整型的运算符是。
A) / B) ++ c) != D)%
15. 若以下变量均是整型,且num=sum=7;则执行表达式sUM=num++,sUM++,++num后sum的值为
A) 7 B) 8 C) 9 D) 10
16. 在C语言中,int、char和short种类型数据在内存中所占用的字节数
A)由用户自己定义 B)均为2个字节
C)是任意的 D)由所用机器的机器字长决定
17. 若有说明语句:char c='\72'则变量c
A)包含1个字符 B)包含2个字符
C)包含3个字符 D)说明不合法,c的值不确定
18. 若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是
A)2.500000 B)2.7500OO c) 3.500000 D) 0.000000。
19. sizeof(float)是:
A)一个双精度型表达式 B)一个整型表达式