C语言预备知识
电脑硬件
- CPU:计算机中负责读取指令,对指令译码并执行指令的核心部件,详见CPU。
- 内存条:用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据,详见内存条。
- 硬盘:计算机最主要的存储设备,详见硬盘。
- 主板:计算机最基本的同时也是最重要的部件之一,负责连接各个部件,详见主板。
- 显示器:显示器(display, screen)是属于电脑的I/O设备,即输入输出设备。它是一种将一定的电子文件通过特定的传输设备显示到屏幕上再反射到人眼的显示工具,详见显示器。
Hello World运行过程
#include <stdio.h>
int main()
{
printf("Hello world");
}
源代码(sourcecode)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(objectcode)→连接器(Linker)→可执行程序(executables)
数据类型
- 数据:数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。
数据可以是连续的值,比如声音、图像,称为模拟数据;也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0、1的形式表示。
用人话来讲:数据就是一切可以被利用加工的东西,它可以用来传信息(不一定是物体)。
| 基本数据类型 | 类型标识符 | 字节数 | 数值范围 |
|---|---|---|---|
| 整型 | [signed]int | 4 | -2147483648~+2147483647 |
| 无符号整型 | unsigned [int] | 4 | 0~4294967295 |
| 短整型 | short [int] | 2 | -32768~+32767 |
| 无符号短整型 | unsigned short [int] | 2 | 0~65535 |
| 长整型 | long[int] | 4 | -2147483648~+2147483647 |
| 无符号长整型 | unsigned long [int] | 4 | 0~4294967295 |
| 字符型 | [signed]char | 1 | -128~-127 |
| 无符号字符型 | [unsigned]char | 1 | 0~255 |
| 单精度型 | float | 4 | 3.4E-38~+3.4E38 |
| 双精度型 | double | 8 | 2.3E-308~2.3E+308 |
| 复合类型数据 | ||
|---|---|---|
| 结构体 | 枚举 | 共用体 |
| PS; |
变量
- 定义:变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。 变量的本质就是内存一段存储空间
- 变量名:如取一个人的名字有相应的规则,而当我们给变量取名时也有相应的 规则。 简称:变量的命名规则 C++中变量只能由字母,数字,下划线组成。
- 变量的初始化:数据类型 变量名 =要赋的值; 等效于:数据类型 变量名; 变量名 = 要赋的值;
cpu 内存条 软件 操作系统之间的关系
软件向操作系统请求内存条中的一定内存空间,在将此内存空间与变量名产生关联。
进制
- 十进制:逢十进一
- 二进制:逢二进一
- 十六进制:逢十六进一
常量在C语言的表现
- 整数
- 十进制:传统
- 十六进制:0x开头
- 八进制:前面位0
- 浮点数
- 传统写法 float =3,2
- 科学计数法 float x=3.2E3 float x=3.2e-
- 字符 单字符:单引号 字符串:双引号
常量的存储
- 整数:以补码的形式转换为二进制代码存储到计算机
- 实数:以IEEE754标准转换为二进制代码存储在计算机
- 字符:以整数形式相同
代码规范化
代码可读性强
更不容易出错
内部代码缩进
成对
推荐书籍《代码简洁之道》
字节
定义:存储数据的单位 ,硬件能·访问的最小单位。 位:最小存储单元 1字节 = 8位 1k = 1024字节 1M = 1024K 1G = 1024M
数据相互赋值
ASCII
- ASXII码是一种规定
规定了不同字符对应的整数
字符的存储
与整数存储方式一样
C的输入输出
printf()
1。printf("大家好啊!\n");
2. printf("输出控制符",输出参数;
输出控制符:指定输出二进制代码的编码格式
3. printf("输出控制符1 输出控制符2",输出参数1,输出参数2);
必须一一对应
| 转换说明符 | 输出 |
|---|---|
| %a | 浮点数,十六进制数和p-计数法(C90) |
| %A | 浮点数,十六进制数和p-计数法(C90) |
| %c | 一个字符 |
| %d | 有符号十进制整数 |
| %e | 浮点数,e-计数法 |
| %E | 浮点数,E-计数法 |
| %f | 浮点数,十进制计数法 |
| %g | 根据数值不同自动选择%f或%e. %e格式在指数小于-4或大于等于精度时使用 |
| %G | 根据数值不同自动选择%f或%E. %E格式在指数小于-4或大于等于精度时使用 |
| %i | 有符号十进制整数(与%d相同) |
| %o | 无符号八进制整数 |
| %p | 指针 |
| %s | 字符串 |
| %u | 无符号十进制整数 |
| %x | 使用十六进制数字0f的无符号十六进制整数 |
| %X | 使用十六进制数字0F的无符号十六进制整数 |
| %% | 百分号 |
scanf()
- scanf("输入控制符",输入参数);
输入控制符:将从键盘上得到的值转换为对应格式的参数 - scanf("输入控制符",&i);
输入以输入参数的值为地址的变量中
名词翻译
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
| 整数 | integer | 变量 | variable |
| 字符 | character | 初始化 | initialition |
| 浮点数 | float | 十进制 | decimal system |
| 结构体 | structure | 二进制 | binary system |
| 枚举 | enum | 十六进制 | hexadecimal |
| 联合 | union | 打印 | printf |
Ubuntu Pastebin
Ubuntu Pastebin paste.ubuntu.com
课后习题
- 3.10
-
第四题
- '\b'为转义字符 作用:将光标前移一格
- 1066为十进制整型常量
- double
- 0AXX为十六进制的整型常量
- 2.0E3为浮点型
-
第六题
常量 类型 转换说明 12 int %d 0x3 int %X 'C' char %c 2.34E07 float %E '\040' char %c 7.0 float %f -
第八题
int imate = 2;
long short = 53456;
char grade = 'a';
float log = 2.71828;
print("The odds against the %d were %ld to 1.\n",imagte, short);
print("A score of %f is not an %c grade.\n",log, grade);
-
- 3.11
-
第一题
- 整数上溢
#include <stdio.h> int main(void) { int i=11111111221212; printf("%d",i); return 0; }运行结果
- 浮点数上溢
#include <stdio.h> int main(void) { float k = 1.3333333333333; printf("%f",k); return 0;运行结果
- 浮点数下溢
#include <stdio.h> int main(void) { float k = -1.3333333333333; printf("%f",k); return 0; }运行结果
-
第二题
#include <stdio.h> int main() { int i; printf("输入一个ASCII!\n"); scanf_s("%d",&i); printf("%d的字符为%c\n", i, i); return 0; }运行结果
-
- 4.8
-
第一题
#include <stdio.h> int main(void) { char i[20],k[20]; printf("please write you name and your sumname.\n"); scanf("%s%s",i,k); printf(" %s,%s ",i,k); return (0); }运行结果
-
第四题
#include <stdio.h> int main(void) { char a[20]; float i; printf("What's your height in centimeters and name.\n"); scanf("%f%s",&i,&a); i=i/100; printf("%s,you are %f meter tall\n",a,i); return 0; }运行结果
-
第七题
#include <stdio.h> #include <float.h> int main() { float i = 1.0/3.0; double j = 1.0/3.0; printf("%.6f\n",i); printf("%.6lf\n",j); printf("%.12f\n",i); printf("%.12lf\n",j); printf("%.16f\n",i); printf("%.16lf\n",j); printf("%d\n",FLT_DIG); printf("%d",DBL_DIG); return (0); }运行结果
-