目录
《C Primer Plus》学习笔记
第3章 数据和C
1.示例程序platinum.c
//platinum.c --your weight in platinum
#include<stdio.h>
int main(void)
{
float weight;//你的体重
float value;//相等重量白金的价值
printf("Are you worth your weight in platinum?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds: ");
scanf("%f",&weight);
value=1700.0*weight*14.5833;
printf("Your weight in platinum is worth $%.2f.\n",value);
printf("Your are easily worth that!If platinum prices drop,\n");
printf("eat more to maintain your value.\n");
getchar();
getchar();
return 0;
}
输入数字156(按enter键,后续不再提示)后,输出:
Are you worth your weight in platinum?
Let's check it out.
Please enter your weight in pounds: 156
Your weight in platinum is worth $3867491.25.
Your are easily worth that!If platinum prices drop,
eat more to maintain your value.
getchar()函数读取下一个输入字符,因此程序等待用户输入。在这种情况下,键入数字后并按下enter键(发送一个换行符)。然后scanf()读取键入的数字,第一个getchar()读取换行符,第二个让程序暂停,等待输入。
程序中的新元素:
printf()中用%f处理浮点值,%.2f中的.2指定输出的浮点数只显示小数点后面两位。
scanf()函数读取键盘输入,%f说明scanf()要读取键盘输入的浮点数,&weight把输入的值赋给变量weight。
本程序最突出的就是交互性。
2.变量与常量数据
常量:数据在程序运行过程中没有变化。
变量:数据在程序运行过程中可能会改变或被赋值。
3.数据:数据类型关键字
数据类型关键字:int,long,short,unsigned,char,float,double
C90标准加的:signed,void
C99标准加的:_Bool布尔值 _Complex复数 _imaginary虚数
位:存储0或1.
字节:8位。
字:计算机的自然存储单位。
两大基本类型:整数类型,浮点数类型。
整数:没有小数的部分,在计算机内二进制存储。
浮点数:计算机把浮点数分成小数部分和指数部分来表示,分开储存这两部分,范围比整数大,不能表示所有小数。
4.C语言基本数据类型
1.int类型
有符号整型,必须是整数,一般是-32778~32767,16位。
声明int变量:int num;
给变量赋值:num =15;或者通过函数(如scanf()函数)获得值;或者初始化变量,如int num=15.声明为变量创建和标记存储空间,并为其指定初始值。
int常量:C把大多数整型常量视为int类型,非常大的整数除外。
打印int值:可以使用printf()函数打印int类型的值。%d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。格式化字符串中的每个%d都与待打印变量列表中相应的int值匹配。这个值可以是int类型的变量、int类型的常量或其他任何值为int类型的表达式。
1.演示程序print1.c。
//print的演示
#include<stdio.h>
int main(void)
{
int ten=10;
int two=2;
printf("Doing it wrong: ");
printf("%d minus %d is %d\n",ten);//遗漏2个参数
printf("Doing it right : ");
printf("%d minus %d is %d\n",ten,2,ten-two);
return 0;
}
使用print()函数时,要确保转换说明的数量与待打印的值数量相等。输出:
Doing it wrong: 10 minus 37814032 is 4198995
Doing it right : 10 minus 2 is 8
2.八进制与十六进制
通常是假定为十进制。
八进制:0前缀表示,转换说明%o显示数字,要前缀一起显示则是%#o;
十六进制:0x或0X前缀表示,转换说明%x显示数字,要前缀一起显示则是%#x(对应0x),%#X(对应0X);
3.进制程序bases.c
//十进制,八进制,十六进制打印十进制100
#include<stdio.h>
int main(void)
{
int num=100;
printf("dec=%d;octal=%o;hex=%x\n",num,num,num);
//dec十进制,octal八进制,hex十六进制
printf("dec=%d;octal=%#o;hex=%#x\n",num,num,num);
//%#o显示前缀
return 0;
}
输出如下:
dec=100;octal=144;hex=64
dec=100;octal=0144;hex=0x64
2.其他整数类型
1.short、long、unsigned
C语言提供3个附属关键字修饰基本整数类型:short、long、unsigned。
short int(简写为short):短整型,是有符号类型。
long int(long):长整型,是有符号类型。
unsigned int(unsigned):无符号整型,非负值,16位表示0~65335。
在任何有符号类型前面添加signed,可强调使用有符号类型的意图。
占用空间:short不多于int,long不少于int。
计算机最常见设置:long long64位,long32位,int16或32位,short16位。
int类型的选择:首先考虑unsigned类型,常用于计数。再根据范围选择。
long类型:在值的末尾加L或l(小写的L)后缀,该后缀也可用于八进制和十六进制。
long long:在值的末尾加LL或ll(小写的L)后缀,该后缀也可用于八进制和十六进制。
另外u或U后缀表示unsigned long long,如5ull、10LLU、9Ull。
2.整数溢出:程序toobig.c
//溢出
#include<stdio.h>
int main(void)
{
int i=2147483647;
unsigned int j=4294967295;
printf("%d,%d,%d\n",i,i+1,i+2);
printf("%u,%u,%u\n",j,j+1,j+2);
return 0;
}
输出:
2147483647,-2147483648,-2147483647
4294967295