#includeint main() { printf("char类型占%d字节n",sizeof(char)); printf("short int类型占%d字节n",sizeof(short int)); printf("int类型占%d字节n",sizeof(int)); printf("float类型占%d字节n",sizeof(float)); printf("double类型占%d字节n",sizeof(double)); return 0; }
2.1 引例
【例2.1】在屏幕上输出英文短句“Programming is fun.”。
/ * Output:"Programming is fun." * / / * 注释 * / #include/ *编译预处理命令 * / int main(void) { printf("Programming is fun."); / * 调用printf()函数输出文字 * / return 0; }
运算结果:
Programming is fun.
如果需要在两行上输出文字,例2.1可以改写如下:
#includeint main(void) { printf("Programming is fun. n"); / * 输出文字后换行 * printf("And Programming in C is eve more fun!n"); return 0; }
运行结果:
Programming is fun. And Programming in C is eve more fun!
【例2.2】设球半径为r、球体积为、球表面积为f,球体积和球表面积的计算公式为:
=4/3r
f=4r
输入半径,分别计算球体积和球表面积。
#include#define PI 3.14159 / * 定义符号常量 PI * / uoid main() { int r; / * 定义r为整数型 * / float u,f; / * 定义u、f为单精度浮点型 * / r=2; / * 给半径赋值 * / u=4.0 * PI * r * r * r/3.0; / * 计算体积 * / f=4.0 * PI * r * r; / * 计算表面积 * / print f("体积为:%f,表面积为:%fn",u,f); / * 输出体积、表面积 * / }
运行结果:
体积为:33.510292,表面积为:50.265442
2.2 C语言的数据类型
数据类型:
基本类型:整数、字符型(单词 字母)、实型(浮点型)(实数)
构造类型:数组类型、结构体类型、共用体类型、枚举类型
指针类型
空类型
2.3 C语言的常量
2.3.1 直接常量:直接常量又分为整数常量、实数常量、字符常量和字符串常量。
1.整数常量:整数常量即整数,包括正整数、负整数和零。
2.实数常量:实型常量即实数,又称为浮点数。实数的表示方 法有两种:小数形式和指数形式。
3.字符型常量:(1)字符常量只能用单引括号起来,不能用双引号或其他符号。
(2)字符常量只能是单个字符,不能是字符串。
(3)字符可以是ASCII字符集中的任意字符。
【例2.3】转义字符使用示例。
#includeint main() { char b,c,d,e; b='43'; c='103'; d='x2a'; e='x41'; printf("b=%c,c=%c,d=%c,e=%cn",b,c,d,e); / * 语句1 * / printf(""good40morning!b"!n"); / * 语句2 * / printf("123456"); / * 语句3 * / return 0; }
4.字符串常量:字符串常量是由一对双引号" "括起来的零个或多个字符序列。字符串常量在内存中占用一段连续的存储单元,系统自动在每个字符串的尾部加上' '作为字符串的结束标志。
2.3.2 符号常量
【例2.5】利用符号常量计算价格。
#include#define PRICE 20 int main() { int num,total; / * num 表示购买商品的数量,total 表示总价款 * / num=10 total=num * PRICE; / * PRICE 是符号常量,表示单价20 * / return 0; }
运行结果:
总价格为:200
符号常量的使用,可以为编写程序提供很多好处:
(1)增加程序的可读性
(2)提高程序的可维护性
(3)简化程序代码
(4)方便数组的定义
2.4.1 变量的定义与使用:在C语言中,所有的变量必须先定义后使用。
1.变量的定义
2.变量的初始化
3.变量的使用:使用变量时,应该先赋值,后使用。
【例2.6】变量使用示例。
#includeint main() { int a,b,c; char ch='A'; / * 初始化 * / a=10; / * 使用赋值语句对变量a赋初值 * / b=a+ch; / * 使用赋值语句对变量b赋值 * / scanf("%d",&c); / * 使用 scanf 函数对变量c赋值 * / printf("%d,%d,%d,%cn",a,b,c,ch); return 0; }
则程序的运行结果如下:
10,75,10,A
2.4.2整型变量:一个整数变量用来保存整数。在C语言中,整数又可分为:短整型、整型、长整型、无符号整型、无符号短整型和无符号长整型六种。
【例2.7】不同类型整型变量的定义与使用示例。
#includeint main() { int a,b,c,d; unsigned long e; a=5;b=6;e=10; c=a+e; d=b+e; printf("c=%d,d=%dn",c,d); return 0; }
运行结果:
c=15,d=16
【例2.8】短整型变量溢出。
#includeint main() { short int a,b; a=32767; b=a+1; printf("a=%d,b=%dn",a,b); return 0; }
运行结果:
a=32767,b=-32768
2.4.3 实型变量:C语言中实型变量分为单精度(float型)和双精度(double型)两类。
表2.3 实型数据关键字、字节数和取值范围
| 关键字 | 类型 | 占用字节数 | 取值范围 |
| float | 单精度型 | 4 | 3.4E-38~3.4E+38 |
| double | 双精度型 | 8 | 1.7E-308~1.7E+308 |
单精度型数据能保留7位有效数字,双精度型数据能保留16位有效数字。
【例2.9】实数变量的使用示例。
#includeint main() { float a=1234.56789; double b=1234.567895678; printf("a=%f,b=%fn",a,b); return 0; }
运行结果:
a=1234.567871,b=1234.567896
2.4.4 字符型变量
【例2.10】字符变量的使用示例。
#includeint main() { char c1,c2; c1='A'; c2=65; printf("%c,%cn",c1,c2); printf("%d,%dn",c1,c2); return 0; }
运行结果:
A,A 65,65
【例2.11】把大写字母转换为小写字母。
#includeint main() { char c1,c2; c1='A'; c2='B'; c1=c1+32; c2=c2+32; printf("%c,%cn",c1,c2); printf("%d,%dn",c1,c2); return 0; }
运算结果:
a,b 97,98
2.5 运算符和表达式
2.5.1赋值运算符和赋值表达式:C语言中赋值运算符有“=”、“+=”、“-=”、“*=”、“/=”和“%=”等。用赋值运算符将运算对象连接而成的表达式称为赋值表达式。
2.5.2 算术运算符和算术表达式
1.基本的算术符运算符:先算单目,后算双目。
2.自增、自减运算符:C语言有两个特殊运算符“++”和“--"
(1)++自增运算符,为单目运算符,其功能是使变量的值自加1。自增运算符有两种使用形式:
1.前缀方式:用于变量前面。
2.后缀方式:用于变量后面。
(2)--自减运算符,为单目运算符,功能是使变量的值自减1。使用方法和自增运算符相似。
3.算术运算符的优先级和结合性:算术运算符的优先级为:“++、--、-">"*、/、%”>"+、-",即单目运算符的优先级高于双目运算符,双目运算符中*、/、%的优先级高于+、-。
【例2.13】输出一个3位数的正整数,输出其反序数(如123反序数为321)。
#includeint main() { int number,a,b,c; / * 定义变量 * / number=123; printf(输入的3位数为:%dn",number); / * 输出原数 * / a=number/100; / * 计算百位数 * / b=(number-a * 100)/10; / * 计算十位数 * / c=number%10; / * 计算个位数 * / printf("反序数是:%d%d%dn",c,b,a);3 / * 输出反序数 * / return 0; }
运行结果:
输出的3位数为:123 反序数是:321
2.5.3 逗号运算符和逗号表达式:逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
【例2.14】逗号表达式应用示例。
#includeint main() { int i,j=7; float k=5 i=(j=j+2,j/k); printf("i=%dn",i); return 0; }
运行结果:
i=1
2.5.4 求字节数运算符
【例2.15】不同数据类型字节数示例。
#includeint main() { printf("char类型占%d字节n",sizeof(char)); printf("short int类型占%d字节n",sizeof(short int)); printf("int类型占%d字节n",sizeof(int)); printf("float类型占%d字节n",sizeof(float)); printf("double类型占%d字节n",sizeof(double)); return 0; }
运行结果:
char 类型占1字节 short int 类型占2字节 int 类型占4字节 float 类型占4字节 double 类型占8字节
【例2.16】求字节数运算符示例。
#includeint main() { int a,b; a=sizeof(3+5.0) b=sizeof 3+5.0; printf("%d,%d,%dn",a,b,sizeof("china")) return 0; }
运行结果:
8,9,6
2.6 数据类型转换:不同类型的数据在一起运算时,编译系统会自动进行类型转换。
2.6.2 强制类型转换
【例2.18】强制类型转换示例
#includeint main() { int a=3,b=4; float c; c=(float)(a+b)/2; printf("c=%fn",c); return 0; }
运行结果:
c=3.500000
进行强制类型转换时需注意:
(1)需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度。
(3)强制类型转换并不改变表达中变量的类型和值。



