c编程预备计算机专业知识
1.cpu、内存条、硬盘、显卡、主板、显示器之间的关系
CPU不能直接处理硬盘上的数据,需先将硬盘上的数据拷贝到内存条,CPU再从内存条读取数据并处理。一些数据变为图像,传输至显卡,通过显示器显现出;另一些变为声音,传输至声卡,声卡处理后播出声音。而主板则起到桥梁作用,将各硬件连接起来。 2.HelloWorld程序是如何运行起来的
通过输入代码,由vc++生成一个后缀为.exe的程序,再由操作系统调用cpu来执行该程序从而运行。
3.什么是数据类型
数据类型可分为两类:
- 基本类型数据
|基本类型数据| | | | ---|---|---|---|
|整数| int -- 2/4 Bytes | short int -- 2|long int -- 4|
|浮点数(实数)|float -- 4|double -- 8|
|字符|char -- 1| - 复合类型数据
- 结构体
- 枚举
- 共用体
4.什么是变量
变量的本质就是内存中一段存储空间。
变量就相当于一个容器,地址固定但是存放在其中的值可以改变。
5.CPU、内存条、vc++、操作系统之间的关系
在编程时,先vc++向CPU发出请求,再由操作系统为其分配内存,而后vc++就会与操作系统中对应的地址编号产生一定关系使得程序可以运行。
6.变量为什么必须得初始化
初始化就是指对变量进行赋值。
程序在每次运行完毕后,操作系统都会回收内存空间,但是并不会清空遗留下来的数据,如若不初始化的话,在给变量分配内存时,这段内存就极可能存在上一个程序未释放完的无用数据。当vc++发现该变量没有赋值可使用时,就会自动补充一个很大的“填充数”,表示该变量没有进行初始化。所以每次为一个变量分配好存储空间后都要对该内存空间进行初始化。
7.如何定义变量
数据类型 变量名 = 要赋的值
即:
数据类型 变量名;
变量名 = 要赋的值
如:int i = 3,j = 5; 就等价于 int i; int j; i = 3; j = 5;
8.什么是进制
- 进制就是逢几进一。
- 计算机只识别二进制,人类最习惯使用十进制,但为了实际需要,我们又建立了八进制和十六进制。
- c语言规定八进制前要加0(数字0,非字母),十六进制前要加0x或0X,十进制前什么都不加。
- 在数字后面加B表示二进制数,加字母O表示八进制数,加D表示十进制数,加H表示十六进制数。
9.常量在c语言中是如何表示的
- 整数
- 十进制: 传统的写法
- 十六进制:前面加0x或0X
- 八进制: 前面加0
- 浮点数
- 传统的写法: float x = 3.2(表示x = 3.2)
- 科学计数法: float x = 3.2e3(表示x = 3200);123.4e-2表示1.234
- 字符
- 单个字符用单引号括起来:‘A’
- 字符串用双引号括起来: “AB”
10.常量以什么样的二进制代码存储在计算机中
- 整数以补码的形式转化为二进制代码存储在计算机中
- 实/浮点数以IEEE754标准转化为二进制代码存储在计算机中
- 字符的存储本质实际与整数的存储方式相同
11.代码的规范化
- 注释详细,格式规范,以便于自己观看回忆,不易出错,以及使别人易于阅读
- 成对敲代码,适当插入空格,内部的代码需缩进,相对独立的代码需换行
- 使程序不易出错,同时便于观看
12.什么是字节
字节就是存储数据的单位,并且是硬件所能访问的最小单位
1Bytes = 8bits , 1Kb = 1024Bytes , 1MB = 1024Kb , 1GB = 1024MB 13.不同类型数据之间相互赋值的问题
不同数据类型相互赋值将可能报错,会溢值,丢失数据。当正数溢值时可能会变成负数(涉及到补码) 14.什么是ASCII
ASCII不是一个值,而是一种设定,其规定了不同的字符是使用哪个整数值去表示(由此 字符的存储本质与整数的存储方式相同),规定了
‘A’ -- 65; 'B' -- 66; 'a' -- 97; 'b' -- 98; '0' -- 48
基本的输入和输出函数的用法
printf() -- 将变量的内容输出到显示器上
- 四种用法:
- printf(“字符串\n”);
- printf(“输出控制符\n”,输出参数);
- printf(“输出控制符1 输出控制符2。。。”,输出参数1,输出参数2。。。);输出控制符和输出参数必须一一对应。
- printf(“输出控制符 非输出控制符”,输出参数);
- 输出控制符包含如下:
- %d -- int
- ld -- long int
- %c -- char
- %f -- float
- %lf -- double
- %x(或者%X或者%#X) -- int / long int / short int
- %o(用的很少) -- int / long int / short int
- %s -- 字符串
- 为什么需要输出控制符
- 01组成的代码可以表示数据也可以表示指令
- 如果01组成的代码表示数据的话,那么同样的01代码组合以不同的格式输出就会有不同的输出结果
scanf() -- 通过键盘将数据输入到变量中
- 两种用法:
- 用法一: scanf(“输入控制符”,输入参数);
- 功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中
- 用法二 : scanf(“非输入控制符 输入控制符”,输入参数);
- 功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中,非输入控制符必须原样输入
- 用法一: scanf(“输入控制符”,输入参数);
如何使用scanf编写出高质量代码
- 使用scanf之前最好先使用printf提示用户以什么样的方式来输入期望内容
- scanf中尽量不要使用非输入控制符,尤其是不要用\n
- 应该编写代码对用户的非法输入做适当的处理
代码实操
进制转换: 进制转换的代码1,进制转换的代码2(pastebin)
运行结果:
八进制前要加0(数字0,非字母),十六进制前要加0x或0X,十进制前什么都不加
%d表示以十进制输出,%x或%X表示以十六进制输出,%o表示以八进制输出。
printf的用法:
- 用法四:测试%x %X %#x %#X的用法
从输出结果中,最推荐使用第四种代码%#X
scanf的用法(不含非输入控制符):
其中&k表示k的地址,&是一个取地址符
一次给多个变量赋值:
对用户非法输入的处理:
用以处理用户错误输入的代码
名词翻译
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
| 整数 | integer | 变量 | variable |
| 字符 | character | 初始化 | initialize |
| 浮点数 | floating-point | 十进制 | decimal |
| 结构体 | Structure | 二进制 | Binary |
| 枚举 | enum | 十六进制 | Hexadecimal |
| 联合 | union | 打印 | printf |
课后习题
3.10
第四题:
| 类型 | 含义 | |
|---|---|---|
| a | char | |
| b | int | |
| c | double | |
| d | unsigned int | 十六进制的格式 |
| e | double |
第六题:
| 常量 | 类型 | 转换说明 |
|---|---|---|
| 12 | int | %d |
| 0X3 | unsigned int | %#X |
| 'C' | char | %c |
| 2.34E07 | double | %e |
| '\040' | char | %c |
| 7.0 | double | %f |
第八题:
printf(“The odds against the %d were %ld to 1.\n”,imate,shot);
printf ("A score of %f is not an %c grade.\n",log,grade);
3.11
第一题:
整数的上溢:
浮点数上溢:
浮点数下溢:
第二题:
代码:paste.ubuntu.com/p/GgyNnZWS8…
运行结果:
4.8
第一题:
代码:paste.ubuntu.com/p/KcmZVtXTB…
运行结果:
第四题:
代码:paste.ubuntu.com/p/ryGSQp2hS…
运行结果:
第七题:
代码:paste.ubuntu.com/p/ZVSv5CVGQ…
运行结果:
显然不一致