第三章 最简单的C程序设计——顺序程序设计1
前言:
3.1 顺序程序设计举例
**【例3.1】**有人用温度计测量出用华氏法表示的温度(64℉),今要求把它转换为以摄氏法表示的温度(如17.8℃)。
程序代码:
#include<stdio.h>
int main()
{
float f,c;
f=64.0;
c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);
return 0;
}
运行结果:
f=64.000000
c=17.777779
--------------------------------
Process exited after 0.02364 seconds with return value 0
请按任意键继续. . .
程序分析: %f是后退,记得是5个位置。
【例3.2】 计算存款利息。有1000元,想存一年。有3种方法可选:(1)火气,年利率为r1;(2)一年期定期,年利率为r2;(3)存两次半年定期,年利率为r3。请分别计算出一年后按3中方法所得到的的本息和。
程序代码:
#include<stdio.h>
int main()
{
float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
p1=p0*(1+r1);
p2=p0*(1+r2);
p3=p0*(1+r3/2)*(1+r3/2);
printf("p1=%f\np2=%f\np3=%f\n",p1,p2,p3);
return 0;
}
运行结果:
p1=1003.599976
p2=1022.500061
p3=1019.897949
--------------------------------
Process exited after 0.0225 seconds with return value 0
请按任意键继续. . .
程序分析:略
3.2 数据的表现形式及其运算
3.2.1 常量和变量
1.常量
(1)整型常量;(2)实型常量;(3)字符常量,1.普通字符,2.转义字符;(4)字符串常量;(5)符号常量
字符常量常以其代码(一般以ASCII代码)存储。转义字符,\后面的字符转换成其他的意思,例如\n代表换行符。
| 转义字符 | 字符值 | 输出结果 |
|---|---|---|
| ’ | 一个单撇号 | 输出单撇号’ |
| ‘’ | 一个双撇号(’’) | 输出双撇号字符’’ |
| ? | 一个问号 | 输出问号字符? |
| \ | 一个反斜线() | 输出反斜线字符\ |
| \a | 警告(alsert) | 产生声音或视觉信号 |
| \b | 退格(backspace) | 将光标当前位置后退一个字符 |
| \f | 换页(form feed) | 将光标当前位置移到下一页的开头 |
| \n | 换行 | 将光标当前位置移到下一行开头 |
| \r | 回车(carriage return) | 将光标当前位置移到本行的开头 |
| \t | 水平制表符 | 将光标当前位置移到下一个Tab位置 |
| \v | 垂直制表符 | 将光标当前位置移到下一个垂直制表对齐点 |
| \o、\oo或\ooo 其中o代表一个八进制数字 | 与该八进制码对应的ASCII字符 | 与该八进制码对应的字符 |
| \xh[h…]其中h代表一个十六进制数字 | 与该十六进制码对应的ASCII字符 | 与该十六进制码对应的字符 |
2.变量
变量必须先定义,后使用
变量应该有一个名字。
注意区分变量名和变量值。
变量名实际上是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给没一个变量名分配对应的内存地址。
3.常变量
C99允许使用常变量,方法是在定义变量时,前面加一个关键字const
例如 const int a=6;
常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
常变量要占用存储单元,有变量值,只是改值不改变而已。
4.标识符
在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。
简单的说,标识符就是一个对象的名字。
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
例: sum,average,_total,Class,day,month,Student_name,lotus_1_2_3,BASIC,ling
编译系统认为大写字母和小写字母是两个不同的字符。
3.2.2 数据类型
{基本整型(int)
{短整型(short int)
{长整型(long int)
{双长整型(long long int)
{字符型(char)
{ 整形类型{{ 布 尔型(bool)
{单精度浮点型(float)
基本类型{ 浮点类型{ 双精度浮点型(double)
{复数浮点型(float_complex,double_complex,long long_complex)
数据类型 { 枚举类型(enum)
{空类型(void)
{指针类型(*)
{数组类型([])
派生类型{结构体类型(struct)
{共用体类型(union)
{函数类型
基本整型和枚举类型变量的值都是数值,统称为算数类型(arithmetic type)。
算数类型和指针类型统称为纯量类型(scalar type)
枚举类型是程序中用户定义的整数类型。
数组类型和结构体类型统称为组合类型,共用体类型不属于组合类型,因为同一时间内只有一个成员具有值。
函数类型用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。
3.2.3整形数据
1.整形数据的分类
(1)基本整形(int型)
在存储单元中的存储方式是:用整数的补码(complement)形式存放。一个整数的补码是此数的二进制形式,如5的二进制形式是101。
若整型变量分配2字节,则存储最大值是2^15-1,就是十进制数32767,范围是-3276832767,若分配4个字节,就是-21474836482147483647
(2)短整型(short int)
visual c++分配2个字节。-32768~32767.
(3)长整型(long int)
v c++分配4个字节。
(4)双长整型(long long int)
一般分配8个字节。C99新增类型。
C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的。C标准只要求long型数据长度不短于int型,short类型不长于int型,即
sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long)
注意将一个程序从A移到B时,注意这个区别,小心溢出。
2.整形变量的符号属性
| 类型 | 字节数 | 取值范围 |
|---|---|---|
| int(基本整型) | 4 | -2^31~ (2^31-1) |
| unsigned int(无符号基本整型) | 4 | 0~(2^32-1) |
| short(短整型) | 2 | -2^15~ (2^15-1) |
| long(长整型) | 4 | -2^31~ (2^31-1) |
| unsigned long(无符号长整型) | 4 | 0~(2^32-1) |
| long long(长整型) | 8 | -2^63~ (2^63-1) |
| unsigned long long(无符号长整型) | 8 | 0~(2^64-1) |
(1)只有整型(包括字符型)数据可以加singed或unsigned修饰符,实行数据不能加。
(2)对无符号整形数据用%u格式输出。
3.2.4 字符型数据
字符是按其代码(整数)形式存储的。
1. 字符与字符代码
略
字符‘1’和整数‘1’是不同的概念。字符‘1’只是代表一个形状为‘1’的飞㞑,在需要时需要原样输出,在内存中以ASCII码形式存储,占一个字节,而整数1以整数存储方式存储的,占2个或4个字节。
2. 字符变量
字符变量是用类型符char定义字符变量。
char是应为character(字符)缩写。
| 类型 | 字节数 | 取值范围 |
|---|---|---|
| signed char(有符号字符型) | 1 | -2^7~ (2^7-1) |
| unsigned char(无符号字符型) | 1 | 0~(2^8-1) |
3.2.5 浮点型数据
浮点型数据是用来表示具有小数点的实数的。
浮点数类型包括float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
| 类型 | 字节数 | 有效数字 | 数值范围(绝对值 |
|---|---|---|---|
| float | 4 | 6 | 0以及1.210^-38~ 3.410^38 |
| double | 8 | 15 | 0以及2.310……-308~1.710^308 |
| long double | 8 | 15 | 0以及2.10^-308~ 1.710^308 |
| long double | 16 | 19 | 0以及3.410^-4932~ 1…110^4932 |
用有限的存储单元不可能完全精确的存储一个实数!
3.2.6 怎样确定常量的类型
略
注意区分类型和变量
每一个变量都属于一个确定的类型,类型是变量的一个重要的属性。变量是占用存储单元的,是具体存在的实体,在其占用的存储单元中可以存放数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。