#include<stdio.h>
int 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<stdio.h> /*编译预处理命令*/
int main(void)
{
printf("Programming is fun."); /*调用printf()函数输出文字*/
return 0;
}
运算结果:
Programming is fun.
如果需要在两行上输出文字,例2.1可以改写如下:
#include<stdio.h>
int 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/3
r
f=4r
输入半径,分别计算球体积和球表面积。
#include<stdio.h>
#define PI 3.14159 /*定义符号常量 PI*/
void 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; /*计算表面积*/
printf("体积为:%f,表面积为:%f\n",u,f);
/*输出体积、表面积*/
}
运行结果:
体积为:33.510292,表面积为:50.265442
2.2 C语言的数据类型
数据类型:
基本类型:整数、字符型(单词 字母)、实型(浮点型)(实数)
构造类型:数组类型、结构体类型、共用体类型、枚举类型
指针类型
空类型
2.3 C语言的常量
2.3.1 直接常量:直接常量又分为整数常量、实数常量、字符常量和字符串常量。
1.整数常量:整数常量即整数,包括正整数、负整数和零。
2.实数常量:实型常量即实数,又称为浮点数。实数的表示方 法有两种:小数形式和指数形式。
3.字符型常量:(1)字符常量只能用单引括号起来,不能用双引号或其他符号。
(2)字符常量只能是单个字符,不能是字符串。
(3)字符可以是ASCII字符集中的任意字符。
【例2.3】转义字符使用示例。
#include<stdio.h>
int main()
{ char b,c,d,e;
b='\43';
c='\103';
d='\x2a';
e='\x41';
printf("b=%c,c=%c,d=%c,e=%c\n",b,c,d,e); /*语句1*/
printf("\"good\40morning!\b\"!\n"); /*语句2*/
printf("\123456"); /*语句3*/
return 0;
}
4.字符串常量:字符串常量是由一对双引号" "括起来的零个或多个字符序列。字符串常量在内存中占用一段连续的存储单元,系统自动在每个字符串的尾部加上'\0'作为字符串的结束标志。
2.3.2 符号常量
【例2.5】利用符号常量计算价格。
#include<stdio.h>
#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】变量使用示例。
#include<stdio.h>
int main()
{ int a,b,c;
char ch='A'; /*初始化*/
a=10; /*使用赋值语句对变量a赋初值*/
b=a+ch; /*使用赋值语句对变量b赋值*/
scanf_s("%d",&c); /*使用 scanf 函数对变量c赋值*/
printf("%d,%d,%d,%c\n",a,b,c,ch);
return 0;
}
则程序的运行结果如下:
10,75,10,A
2.4.2整型变量:一个整数变量用来保存整数。在C语言中,整数又可分为:短整型、整型、长整型、无符号整型、无符号短整型和无符号长整型六种。
【例2.7】不同类型整型变量的定义与使用示例。
#include<stdio.h>
int 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=%d\n",c,d);
return 0;
}
运行结果:
c=15,d=16
【例2.8】短整型变量溢出。
#include<stdio.h>
int main()
{ short int a,b;
a=32767;
b=a+1;
printf("a=%d,b=%d\n",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】实数变量的使用示例。
#include<stdio.h>
int main()
{ float a=1234.56789;
double b=1234.567895678;
printf("a=%f,b=%f\n",a,b);
return 0;
}
运行结果:
a=1234.567871,b=1234.567896
2.4.4 字符型变量
【例2.10】字符变量的使用示例。
#include<stdio.h>
int main()
{ char c1,c2;
c1='A';
c2=65;
printf("%c,%c\n",c1,c2);
printf("%d,%d\n",c1,c2);
return 0;
}
运行结果:
A,A
65,65
【例2.11】把大写字母转换为小写字母。
#include<stdio.h>
int main()
{ char c1,c2;
c1='A';
c2='B';
c1=c1+32;
c2=c2+32;
printf("%c,%c\n",c1,c2);
printf("%d,%d\n",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)。
#include<stdio.h>
int main()
{ int number,a,b,c; /*定义变量*/
number=123;
printf("输入的3位数为:%d\n",number); /*输出原数*/
a=number/100; /*计算百位数*/
b=(number-a * 100)/10; /*计算十位数*/
c=number%10; /*计算个位数*/
printf("反序数是:%d%d%d\n",c,b,a); /*输出反序数*/
return 0;
}
运行结果:
输出的3位数为:123
反序数是:321
2.5.3 逗号运算符和逗号表达式:逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
【例2.14】逗号表达式应用示例。
#include<stdio.h>
int main()
{ int i,j=7;
float k=5;
i=(j=j+2,j/k);
printf("i=%d\n",i);
return 0;
}
运行结果:
i=1
2.5.4 求字节数运算符
【例2.15】不同数据类型字节数示例。
#include<stdio.h>
int 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】求字节数运算符示例。
#include<stdio.h>
int main()
{ int a,b;
a=sizeof(3+5.0)
b=sizeof 3+5.0;
printf("%d,%d,%d\n",a,b,sizeof("china"));
return 0;
}
运行结果:
8,9,6
2.6 数据类型转换:不同类型的数据在一起运算时,编译系统会自动进行类型转换。
2.6.2 强制类型转换
【例2.18】强制类型转换示例
#include<stdio.h>
int main()
{ int a=3,b=4;
float c;
c=(float)(a+b)/2;
printf("c=%f\n",c);
return 0;
}
运行结果:
c=3.500000
进行强制类型转换时需注意:
(1)需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度。
(3)强制类型转换并不改变表达中变量的类型和值。