江小南
2022/11/20阅读:36主题:萌绿
【408篇】C语言笔记-第二章(数据类型,输入与输出)
第二章
第一节:数据类型
1. 数据类型

C语言中定义变量要避免与关键字同名。

2. 常量
常量是指在程序运行过程中,其值不会发生改变的量。
常量分为:整型、实型(也称浮点型)、字符型、字符串型。
3. 变量
变量代表内存中具有特定属性的一个存储单元,它用来存放数据,即变量的值。这些值在程序的执行过程中是可以改变的。
变量的命名规则:只能由字母、数字、下划线三种字符组成。并且第一个字符必须为字母或下划线。
C语言中变量定义严格区分大小写。同时先定义,后使用。
4. 整型数据
4.1 符号常量
定义一个整型变量时使用关键字int。
常量符号是直接替换的效果。
例如:
#include <stdio.h>
#define PI 3+2
int main() {
int i=PI*2;
printf("i=%d\n",i);
return 0;
}
结果为i=7。
4.2 整型变量
一个变量i是4个字节。
5. 浮点型数据
5.1 浮点型常量
浮点型常量有两种形式。

注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数。
浮点型变量
通过float f来定义浮点变量,f占用4个字节。
6. 字符型数据
6.1 字符型常量
用单引号括起来的一个字符是字符型常量。
6.2 存储形式与使用方法
字符型变量使用关键字char定义。一个字符型变量占用1个字节大小空间。
一个字符常量存放到一个字符型变量中,实际上并不是把该字符的字型放到内存中,而是把该字符的ASCII码值放到存储单元中。

说明字符型数据和整型数据之间可以通用。字符型数据既可以以字符形式输出,又可以以整型形式输出,还可以通过运算得到想要的各种字符。
#include <stdio.h>
int main() {
char c='A';
printf("%c\n",c+32);
printf("%d\n",c);
return 0;
}
F:\Computer\Project\practice\2\2.1-char\cmake-build-debug\2_1_char.exe
a
65
进程已结束,退出代码为 0
注意:通过这个例子可以判断大小写转换其实就是处理差值32的关系。
7. 字符串型常量
字符串型常量是由一对双括号括起来的字符序列。
注意'a'是字符型常量,而"a"是字符串型常量。
C语言规定,在每个字符串常量的结尾接一个字符串结束标志,以便系统据此判断字符串常量是否结束。以字符'\0'作为字符串结束标志。

实际占用6个字节,而不是5个。
2.1附件

第二节:混合运算-printf
1. 混合运算
强制类型转换:
整型数进行除法运算时,如果运算结果为小数,那么存储浮点数时要进行强制类型转换。
#include <stdio.h>
// 强制类型转换
int main() {
int i=5;
float j=i/2;
float k=(float)i/2;
printf("%f\n",j);
printf("%f\n",k);
return 0;
}
F:\Computer\Project\practice\3\3.1-transformation\cmake-build-debug\3_1_transformation.exe
2.000000
2.500000
进程已结束,退出代码为 0
2. printf函数介绍
printf函数可以输出各种类型的数据,包括整型,浮点型,字符型,字符串型等。实际原理是printf函数将这些类型的数据格式化为字符串后,放入标准输出缓冲区,然后将结果显示到屏幕上。

位于%和格式化命令之间的一个整数被称为最小字段宽度说明符。通常会加上空格来控制格式。
printf函数的所有输出都是右对齐的,除非在%符号后面放置了负号。例如:%-5.2会显示5位字符,2位小数位的浮点数并且左对齐。
#include <stdio.h>
int main() {
int i=10;
float f=96.3;
printf("student number=%3d score=%5.2f\n",i,f);
printf("student number=%-3d score=%5.2f\n",i,f);
printf("%10s\n","hello");
return 0;
}
F:\Computer\Project\practice\2\2.2-printf\cmake-build-debug\2_2_printf.exe
student number= 10 score=96.30
student number=10 score=96.30
hello
进程已结束,退出代码为 0
第三节:整型进制转换
计算机只能存储二进制数。除我们正常使用的十进制数外,计算机还提供了十六进制数和八进制数。
在计算机中,一个字节为8位,1位即二进制的1位,他存储0或1,int类型为4个字节,即32位。
进制转换:
#include <stdio.h>
int main() {
int i=123;
printf("%d\n",i);
printf("%o\n",i);
printf("%x\n",i);
return 0;
}
F:\Computer\Project\practice\2\2.3-base\cmake-build-debug\2_3_base.exe
123
173
7b
进程已结束,退出代码为 0
换算方法:
十进制:123
十进制转二进制数:01111011

说明:十进制转几进制就除以几,直到商为0然后取余数。
二进制转十进制:02^7+12^6+12^5+12^4+12^3+02^2+12^1+12^0=123
说明:任何进制数转十进制数都是这样的方法,区别就是二进制底数是2。八进制底数是8,十六进制底数是16.
二进制八进制数:01111011

说明:将二进制每3位分开,分别求出对应的十进制数,拼起来即可。
二进制转十六进制:01111011

说明:将二进制每4位分开,分别求出对应的二进制数,拼起来即可。
十六进制在观察内存是需要频繁使用。

从图里面看出,i=123,其中i的值变为十六进制7b,其十进制为716^1+1116^0=123。
十六进制7b实际为0x0000007b,为何显示结果为7b 00 00 00呢?原因是因特尔的CPU采用了小端方式进行数据存储,因此低位在前,高位在后。
第四节:scanf读取标准输入
标准输入函数:scanf
标准输出函数:printf
1. scanf函数原理
C语言通过scanf函数读取键盘输入,键盘输入又被称为标准输入。
没有输入时scanf函数会被阻塞。
#include <stdio.h>
int main() {
int i=10;
char c;
scanf("%d",&i);
printf("%d\n",i);
// fflush(stdin); // 方案一:清空标准输入缓冲区
scanf(" %c",&c); // 方案二:加空格忽略
printf("%c\n",c);
return 0;
}
F:\Computer\Project\practice\2\2.4-scanf\cmake-build-debug\2_4_scanf.exe
30
30
b
b
进程已结束,退出代码为 0
注意:如果不清空缓冲区,第二个scanf将不会被阻塞,因为读到了上一个printf的'\n'。所以需要加上清空缓冲区。
行缓冲:scanf函数在读取整型数,浮点数,字符串时,会忽略'\n'(回车符),空格等字符(忽略是指scanf函数执行时会首先删除这些字符,然后再阻塞)。所以有了以上两种方案。
2. 多种数据类型混合输入
#include <stdio.h>
int main() {
int i,ret;
char c;
float f;
ret= scanf("%d %c%f",&i,&c,&f); // 在%c之前加个空格
printf("i=%d,c=%c,f=%5.2f\n",i,c,f);
return 0;
}
F:\Computer\Project\practice\2\2.4-scanfs\cmake-build-debug\2_4_scanfs.exe
10 a 10.3
i=10,c=a,f=10.30
进程已结束,退出代码为 0
注意:ret用来接收scanf匹配成功的个数。scanf里面%c前面有个空格。
作者介绍