整型
1、short int
2、int
3、long
4、unsigned
浮点型
1、float
2、double
其他类型
1、_Bool型
2、_Complex
字符型
1、char
2、非打印字符
常量和变量
常量:值不会改变
变量:值可以修改
变量的使用
1、变量的声明
2、变量的初始化
3、变量的取值范围
4、各类数据的溢出
数据的打印
各进制打印:
1、十进制:%d
2、八进制:%o
3、十六进制:%x
各类整型数据:
1、%u
2、%ld
3、%h
小数位数:
1、%.2f
转义字符和序列:
1、\n
Subtopic
数据类型常量和变量
计算机底层是通过二进制进行数据存取的。(例如:二进制数据“01000001”既可以表示十进制数据65,也可以表示字符'A'。故在程序设计过程中需要明确没以恶搞数据的具体类型才能正确地展开运算)
C语言中的基本数据类型有:整型、浮点型、字符型。
数据常量:数值不会发生改变的数据类型。
数据变量:可以通过赋值语句修改的数据类型。
标识符:给变量命名的名字。
关键字:C语言函数库中默认存在的函数名称。
整数
目前一个整型数据用32位二进制数表示,因此取值范围为-2^31~2^31-1,使用过程中不能超过其取值范围。
浮点数
浮点类型有float、double、long double类型。
float类型数据有6位有效数字。
doublet类型数据有10位有效数字。
字符类型
字符类型在计算机内部和整数存储方式相同,标注ASCII码使用8位作为一个字符的存储单元,在编程时常使用单引号表示字符。对于ASCII码表中的非打印字符,可以使用ASCII值或者转义字符来表示字符常量。
例如:
1、'b':单引号表示字符类型常量,'\'表示转义,'\b'表示退格
2、99.44:表示双精度浮点型数据常量
3、0xAA:表示十六进制无符号整型数据常量
4、浮点型长默认为均为double类型,除非以6.0f的形式显示表示flaot类型的数据。
5、'\040'是以八进制表示的字符型数据,'\'表示转义
6、八进制和十六进制通常优先选择unsigned int类型,而不是int类型。当八进制和十六进制需要显示前面的0时,要使用%#X转换说明符。
7、2.9e05默认是double类型浮点数,其后的L表示其为long double类型。
char类型本质上也是一种整数类型,程序设计过程中可以使用字符类型的常量对char型变量赋值,也可以使用整型数据赋值。
赋值方式有如下几种:
char ch = 'r'; //转义序列形式
char ch = 13; //整数形式
char ch = '\015'; //八进制形式
char ch = '\xd'; //十六进制
1、通过试验,观察系统如何处理数据上溢、浮点数上溢和浮点数下溢的情况。
分析:
由于系统内对数据的存储和操作处理等原因,每一种数据类型都有其最大值和最小值限制。
实际编程当中应当选择合适的数据类型。
如果超出数据的限制则会发生数据溢出的错误。
C语言在limits.h和float.h头文件里预先定义了常见数据类型限制。
(例如:float类型的最大值就是FLT_MAX,int类型的最大值就是INT_MAX)*/
#include<stdio.h>
#include<float.h>
#include<limits.h>
int main(void)
{
int big_int = 2147483647;
//有符号整数的最大值是2的31次方-1
float big_float = 3.4e38;
//浮点型数据的最大值一般为3.4E38
float small_float = 10.0 / 3;
//浮点型数据的有效位数为6位
printf("The big int data is %d\n", big_int+1);
//整型数据最大值加1,会造成越界,结果为-2147483648
printf("The big flaot data is %f\n", big_float * 10);
//浮点型最大数据乘10造成越界,输出inf
printf("The big int data is %f\n", small_float);
//打印3.333333,精度损失
printf("The MAX float data is %f\n", FLT_MAX);
//打印40282346638528859811704183484516925440.000000
printf("The MAX int data is %ld\n", INT_MAX);
//打印2147483647
return 0;
}
运行结果:
The big int data is -2147483648
The big flaot data is inf
The big int data is 3.333333
The MAX float data is 340282346638528859811704183484516925440.000000
The MAX int data is 2147483647
2、编写一个程序,要求提示输入一个ASCII码值,然后打印输入的字符
分析:
程序要求读取用户输入的整型数据,将该整型数值转换成ASCII字符并显示该字符。
程序需要用到的scanf()函数和printf()函数*/
#include<stdio.h>
int main(void)
{
int input;
printf("Enter a value of char in ASCII:");
scanf("%d", &input);
printf("You input value is %d,and char is %c\n", input, input);
return 0;
}
运行结果:
Enter a value of char in ASCII:65
You input value is 65,and char is A
3、编写一个程序,发出一声警报,然后打印下列文本
Starled by the sudden sound,Sally shouted,
"By the Great Pumpkin,what was that!"
分析:
ASCII码表中表示警报的非打印字符为'\a',用十进制表示是7
通常建议使用转义序列,比卖你使用整数赋值。
打印双引号需要使用转义序列'\"'
#include<stdio.h>
int main(void)
{
char ch = '\a';
printf("%c", ch);
printf("Starled by the sudden sound,Sally shouted,\n");
printf("\"By the Great Pumpkin,what was that\"\n");
return 0;
}
运行结果:
Starled by the sudden sound,Sally shouted,
"By the Great Pumpkin,what was that"
4、编写一个程序,读取一个浮点数,先打印小数形式,后打印指数形式。
然后,如果系统支持,再打印p记数法(即十六进制记数法)
按照以下格式输出:(实际显示的指数位数因系统而异)
Enter a flaoting-point value:64.25
fixed-point notation:64.250000
exponential notation:6.425000e+1
p notation:0x1.01p+6
#include<stdio.h>
int main(void)
{
float input;
printf("Enter a floating-point value:");
scanf("%f", &input);
printf("fixed-point notation:%f\n", input);
printf("exponential notation:%e\n", input);
//打印指数形式,转换说明符使用%e
printf("p notation:%a\n", input);
//打印p记数形式,转换说明符使用%a
return 0;
}
运行结果:
Enter a floating-point value:200
fixed-point notation:200.000000
exponential notation:2.000000e+02
p notation:0x1.9000000000000p+7
5、一年大约有3.156*10^7秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数
分析:
程序要求读取用户的年龄数据,通过计算转换成该年龄对应的秒数。
年龄和秒数的大致位数估计,均可以使用flaot类型数据计算和表示
#include<stdio.h>
#define SEC_PER_YEAR 3.156e7
int main(void)
{
float second, year;
printf("Enter how many years old you are:");
scanf("%f", &year);
second = year * SEC_PER_YEAR;
printf("You are:%.lf years old.\n",year);
printf("And you are %e seconds old,too.\n", second);
return 0;
}
运行结果:
Enter how many years old you are:24
You are:24 years old.
And you are 7.574400e+08 seconds old,too.
6、一个水分子的质量约为3.0*10^-23克,
1夸脱水的质量大约是950克。(1夸脱=0.000946立方米)
编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量。
#include<stdio.h>
#define MASS_PER_MOLE 3.0E-23
#define MASS_PER_QUART 950
//使用预编译定义水分子质量,1夸脱水的质量
int main(void)
{
float quart, quantity;
printf("Enter how many quart:");
scanf("%f", &quart);
quantity = quart * MASS_PER_QUART / MASS_PER_MOLE;
printf("There are %e molecule.\n", quantity);
return 0;
}
运行结果:
Enter how many quart:5
There are 1.583333e+26 molecule.
7、1英寸相当于2.54厘米。编写一个程序,提示用户输入身高(单位是英寸),
然后以厘米为单位显示身高。
#include<stdio.h>
#define INCH_TO_CM 2.54
int main(void)
{
float inch, cm;
printf("Enter the inch of your heigh:");
scanf("%f", &inch);
cm = inch * INCH_TO_CM;
printf("Hi,your are %0.2f inch,or %.2f cm heigh\n", inch, cm);
return 0;
}
运行结果:
Enter the inch of your heigh:2
Hi,your are 2.00 inch,or 5.08 cm heigh
8、在美国的测量体系中,
1品脱 = 2杯(1品脱 = 0.4731765立方分米)
1杯 = 8盎司
1盎司 = 2大汤勺
1大汤勺 = 3茶勺
编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量.
#include<stdio.h>
#define PINT_CUP 2
#define CUP_OUNCE 8
#define OUNCE_SPOON 2
#define SPOON_TEA 3
int main(void)
{
float pint, cup, ounce, spoon, tea_spoon;
printf("Enter how many cup:");
scanf("%f", &cup);
pint = cup / PINT_CUP;
ounce = cup * CUP_OUNCE;
spoon = ounce * OUNCE_SPOON;
tea_spoon = spoon * SPOON_TEA;
printf("%.lf cup equals %.lf pint ,%.lf ounce,%.lf spoon,%.lf tea_spoon.\n.", cup, pint, ounce, spoon, tea_spoon);
return 0;
}
运行结果:
Enter how many cup:2
2 cup equals 1 pint ,16 ounce,32 spoon,96 tea_spoon.