2.1引例
#include<stdio.h>
#define PI 3.14159
int main()
{
int r;
float v, f;
r = 2;
v = 4.0 * PI * r * r * r / 3.0;
f = 4.0 * PI * r * r;
printf("体积为:%f,表面积为:%f\n", v, f);
}
运行结果:
例2.1.2:
#include<stdio.h>
int main(void)
{
printf("Programming is fun.\n");
printf("And Programming in C is even more fun!\n");
return 0;
}
运行结果:
2.2 C语言的数据类型
(1)基本类型(主要分为整型、字符型、和浮点型)
(2)构造类型(包括数组类型、结构体类型、共用体类型和枚举类型)
(3)指针类型(是C语言中一钟特殊的,同时又具有重要作用的数据类型)
(4)空类型
2.3 C语言的常量
2.3.1 直接常量:
1.整型常量
2.实型常量:
(1)小数形式:由整数部分、小数点和小数部分组成,当整数部分或者小数部分为0时,可以省略不写,但是小数点不可省略。
(2)指数型式:由尾数部分、字母E或e和指数部分组成。
3.字符型常量:
(1)字符常量只能用当单引号括起来,不能用双引号或其它括号。
(2)字符常量只能是单个字符,不能是字符串。
(3)字符可以是ASCII字符集中的任意字符。
表2.1 转义字符
转义符号使用示例:
#include<stdio.h>
int main()
{
char b,c,d, e;
b = '\43';
c = '\103';
d = '\x2a';
e = '\x41';
printf("b=%c,c=%c,e=%c\n", b, c, d, e);
printf("\"good\40morning!\b\"!\n");
printf("\123456");
return 0;
}
运行结果:
4.字符串常量
2.3.2 符合常量
(1)增加程序的可读性:通过标识符就知道常量的意思。
(2)提高程序的可维护性:通过符合常量使得修改常量很方便,只需在常量的定义处修改即可。
(3)简化程序代码:通过符合常量可以简化复杂表达式的重复表达式的重复输入。
(4)方便数组的定义:可以将整型符合常量作为数组的长度。
利用符合常量计算价格:
#include<stdio.h>
#define PRICE 20
int main()
{
int num, total;
num = 10;
total = num * PRICE;
printf("总价格为:%d\n", total);
return 0;
}
运行结果:
2.4 C语言的变量
2.4.1变量的定义与使用
1.变量的定义
2.变量的初始化
3.变量的使用
变量使用示例:
#include<stdio.h>
int main()
{
int a, b, c;
char ch = 'A';
a = 10;
b = a + ch;
scanf_s("%d", &c);
printf("%d,%c,%d,%c\n", a, b, c, ch);
return 0;
}
运行结果:
2.4.2 整型变量
表2.2整型数据关键字、字节数和取值范围
不同类型整型变量的定义与使用示例:
#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;
}
运行结果:
短整型变量的溢出:
#include<stdio.h>
int main()
{ short int a,b;
a=32767;
b=a+1;
printf("a=%d,b=%d\n",a,b);
return 0;
}
运行结果:
2.4.3 实型变量
表2.3 实型数据关键字、字节数和取值范围
实型变量的使用示例:
#include<stdio.h>
int main()
{
float a = 1234.56789;
double b = 1234.567895678;
printf("a=%f,b=%f\n", a, b);
return 0;
}
运行结果:
2.4.4 字符型变量
字符变量的使用示例:
#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;
}
运行结果:
把大写字母转换为小写字母:
#include<stdio.h>
int main()
{ char c1, c2;
c1 = 'A';
c2 = 'B';
c1 = c1 + 32;
c2 = c2 + 32;
printf("%c,%c\n", c1, c2);
pintf("%d,%d\n", c1, c2);
return 0;
}
运行结果:
2.5 运算符和表达式
2.5.1 赋值运算符和赋值表达式
1.简单赋值运算符
2.复合赋值运算符
表2.4 复合算术赋值运算符
3.赋值表达式
一般形式为
变量 =表达式
2.5.2 算术运算符和算术表达式
1.基本的算术符和算术运算符(先算单目,再算双目)
2.自增、自减运算符(两个运算符不能出现在同一个表达式里)
(1)++自增运算符为单目运算符,其功能是使变量的值增加1。
自增运算符的使用形式:
前缀方式:用于变量前面,如“int a=++x;"它是”先计算,后使用“。
后辍方式:用于变量后面,如”int a=x++;"它是“先使用,后计算”。
(2)--自减运算符,为单目运算符,功能是使变量的值自减1。
3.算术运算符的优先级和结合性
单目运算符是右结合的,双目算术运算符是左结合。算术运算符的优先级为;“++、- -、-">" *、/、%”>"+、-",即单目运算符的优先级高于双目运算符中 *、/、%的优先级高于+、-。在优先级相同的情况下按规定的“结合性”进行处理。
4.算术表达式
输入一个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;
}
运行结果:
2.5.3 逗号运算符和逗号表达式
(1)逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
(2)逗号运算符是双目运算符,其优先级最低,是左结合的。
(3)并非所有出现逗号的地方都为逗号表达式,如在变量说明语句中,以及函数参数表中逗号只是用做各变量中之间的分隔符。
#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;
}
运行结果:
2.5.4 求字节运算符
不同数据类型字节数示例:
#include<stdio.h>
int main()
{
printf("char类型占%字节\n", sizeof(char));
printf("short int类型占%d字节\n ", sizeof(short int));
printf("int类型占%d字节",sizeof(int));
printf("float类型占%d字节",sizeof(float));
printf("double类型占%d字节", sizeof(double));
return 0;
}
运行结果:
求字节数运算符示例
#include<stdio.h>
int main()
{
int a, b;
a = sizeof(3 + 5.0);
b = sizeof(3 + 5.0);
printf("%d,%d,%d\\", a, b, sizeof("china"));
return 0;
}
运行结果:
2.6 数据类型转换
2.6.1 自动类型转换
图2.2 数据类型自动转换规则
2.6.2 强制类型转换
强制类型转换是采取强制类型转换运算符将某种数据类型强制转换成指定的数据类型,其一般形式为
功能:把表达式的运算结果强制转换成类型说明符指定的类型。
强制类型转换示例:
#include<stdio.h>
int main()
{
int a = 3, b = 4;
float c;
c = (float)(a + b) / 2;
printf("c=%f\n", c);
return 0;
}
运行结果:
进行强制类型转换时需注意:
(1)需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度。
(3)强制类型转换并不改变表达式中变量的类型和值。