C语言学习第一天
数据和C
本文主要学习以下内容:
- 关键字: int 、short 、long 、 unsigned 、char 、 float 、double 、 _Bool 、 _Complex 、 _Imaginary
- 运算符: sizeof()
- 函数: scanf()
- 整数类型和浮点类型的区别
- 如何书写整型和浮点型常数,如何声明这些类型的变量
- 如何使用printf()和scanf()函数读写不同类型的值
变量和常量
数据主要分为变量与常量数据,有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量;其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量。
数据类型关键字
C语言的数据类型关键字有:int 、short 、long 、 unsigned 、char 、 float 、double 、 _Bool 、 _Complex 、 _Imaginary
int关键字表示整数类型。后三个关键字(long 、short 、signed 和unsigned)用于提供基本整数类型的变式,如unsigned short int 和long long int。
另外,char类型也可以表示较小的整数
float 、 double 、和long double表示带小数点的数。 _Bool类型表示布尔值(true或false), _Complex和_Imaginary分别表示复数和虚数。
这些关键字创建的类型,按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。
- 整数
在C语言中,整数是没有小数部分的数。例如,2,-3,256都是整数。3.14和2.00都不是整数 - 浮点数
浮点数与数学中实数的概念差不多。2.75 、3.16E7 、7.00和2e-8都是浮点数。在一个值后面加上小数点,该值就成为一个浮点值。这里3.16E7表示3.16乘以10的7次方。
浮点数和整数的存储方案是不同的。计算机把浮点数分成小数部分和指数部分来表示,而且分开存储这两部分。
C语言的基本数据类型
- int类型
int类型是有符号整型,int类型的值必须是整数,可以是正整数 、负整数或零。 - 声明int变量
先写上int,然后写上变量名,最后加上一个分号。可以在int后面列出多个变量名,变量名之间用逗号分隔。如下:
int erns;
int hogs,cows,goats;
- 初始化变量
初始化变量就是为变量赋一个初始值。可以直接在声明中完成。
int hogs = 21;
int cows =32,goats = 14;
int dogs,cats = 94; /*有效,但是这种格式很糟糕 */
上面的最后一行只初始化了cats,并未初始化dogs。这种写法很容易被误会dogs也初始化为94,最好不要这样写。
- 打印int变量
可以使用printf()函数打印int类型的值,使用%d。
%d为转换说明,它指定了printf()应使用什么格式来显示一个值。格式化字符串中的每个%d都要与待打印的变量列表中的int值匹配。如果数量不同,编译器不会报错,但是会得到错误的结果。
int ten = 10;
int two = 2;
printf("%d minus %d is %d\n",ten,2,ten -two)
-
八进制和十六进制
十六进制的每一位的数恰好是由4位二进制数表示。例如:十六进制数3的二进制表示是0011,5是0101,因此十六进制的35表示是00110101。这种转换关系使得十六进制和二进制的转换非常方便。
316 + 5 = 3222*2+5
在二进制里面乘以2的多少次方就是把这个数小数点右移几位。
如果要打印不同进制的数,需要使用不同的转换说明:
十进制为%d
十六进制为%x
八进制为%o
另外,如果要显示各进制数的前缀,必须使用%#o 、%#d 、 %#x 。 -
char类型
char类型用于存储字符(如,字母或标点符号),但是从技术层面来看,char是整数类型。因为char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,美国最常用的是ASCII编码,C语言也使用此编码。存储字母A实际上存储的是整数65,C语言把1字节定义为char类型占用的位数。
声明char类型的变量与其他方式相同。
char response;
初始化时不必背下ASCII码,可以直接使用一个单引号。
char broiled;
broiled = 'T';
注意不能使用双引号,双引号是字符串
broiled = "T" /* T为字符串 */
- 非打印字符
单引号只适用与字符 、数字 和标点符号,有些ASCII字符会打印不出来(如,退格,换行,终端响铃或蜂鸣)。C语言提供了3种方法来表示这些字符。
第一种方法是使用ASCII码
char beep = 7;
第二种方法是使用转义序列
转义序列 | 含义 |
---|---|
\a | 警报 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 反斜杠 |
\’ | 单引号 |
\" | 双引号 |
\? | 问号 |
\0oo | 八进制 |
\xhh | 十六进制 |
- 打印字符
#include<stdio.h>
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c",&ch);
printf("the code for %c is %d.\n",ch,ch);
return 0;
}
运行该程序后,输出示例如下:
Please enter a character.
C
the code for C is 67.
-
_Bool类型
_Bool类型用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。但原则上它仅占用一位存储空间。 -
float 和double类型
C标准规定,float类型必须至少能表示6位有效数字,即float类型必须至少精确表示小数点后的6位有效数字,如33.333333.
C语言提供的另一种浮点类型是double(意为双精度)。double类型必须至少能表示10位有效数字。 -
类型大小(sizeof)
sizeof是C语言的内置运算符,以字节位单位给出指定类型的大小。C99和C11提供%zd转换说明匹配sizeof的返回类型。