温习上一课
0.1 如何将一个十进制数转为二进制数?
整数局部:逆序取余
小数局部:正向取整
例题:20.28
整数局部:
20/2 10 0
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1
小数局部:
0.28*2 0.56 0
0.56*2 1.12 1
0.12*2…..
后果就是:10100.01
0.2 如何将一个二进制数转为十进制数?
将各个位所代表的权值 加到一起
5 4 3 2 1 0 -1 -2 -3
1 1 0 1 1 0. 1 0 1
32 + 16+0+4+2+0 + 0.5 +0 + 0.125
后果:54.625
0.3 如何在二进制和十六进制之间转换?
外围逻辑:4 个二进制位 代表 1 个十六进制位
比方:
二进制转十六进制
0001 1010 1001. 1101 1000
1 A 9 D 8
十六进制转二进制
3 D 4
0011 1101 0100
0.4 原码,反码,补码
负数:三码合一,或者也能够说负数不辨别这些货色
正数:
原码 最高位是符号位(1 代表正数)其余的位依照负数去写就能够 比方 -5 1 000 0101
反码 符号位不变 其余的位按位取反 1 111 1010
补码 反码 +1 1 111 1011
一个字节 是 8 位 如果用于存储正整数 范畴 就是 0~ 255(2 的 8 次方 -1)
一个字节 是 8 位 如果即用来存储负数,也存储正数 -127~127 然而有一个非凡规定 -0 示意 -128 所以规定的范畴是 -128~127
今日内容
1. 预处理,库函数,关键字,正文,语句,main 函数
#include <stdio.h>
#include <stdlib.h>
int main()
{printf("hello world");
system("pause");
return 0;
}
1.1 预处理命令
以 #结尾的一些命令,这些命令,使得 编译器 在正式编译之前,对源代码进行一些解决。
#include #define #if...
#include <stdio.h> 的性能就是 找到 stdio.h 这样一个文件,而后将文件中的内容复制粘贴到命令所在的地位。
赋值粘贴这样的操作,不算是编译
复制粘贴不是咱们程序员做的,是编译器本人做的,编写做的这些编译之前的操作,就叫做编译预处理。
1.2 库函数
C 语言会将一些罕用的代码,提供给开发者去应用。这些罕用的代码,是以库函数的形式提供给咱们的。
比方:printf 就是一个 库函数,这个函数的性能是 输入一个字符串,这个 printf 函数是被寄存在 stdio.h 这个库外面。
如果咱们想要应用库函数,就必须先蕴含对应的头文件。
1.3 练习
设置控制台的题目为“Hello 15PB”,并输入白底黑字的内容“Hello 信息安全”;提醒:system("color 0A")中 color 前面的 0 是背景色代号,A 是前景色代号。各颜色代码如下:0= 彩色 1= 蓝色 2= 绿色 3= 湖蓝色 4= 红色
5= 紫色 6= 黄色 7= 红色 8= 灰色 9= 淡蓝色
A= 淡绿色 B= 淡浅绿色 C= 淡红色
D= 淡紫色 E= 淡黄色 F= 亮红色
system("title XXX")批改题目。
#include <stdio.h>
#include <stdlib.h>
int main()
{system("title 学习高兴");
system("color EA");
printf("欢送同学学习");
system("pause");
return 0;
}
1.4 关键字
1.5 正文
不参加程序的编译和运行,个别起到一个提醒作用,正文有两种:
多行正文 / /
单行正文 //
正文的作用:
a. 对于咱们学习的时候来说,便于今后看代码的时候进行温习。b. 对于工作来说,便于工作的交接。
代码写进去次要是给他人看的,顺带着可能正确的执行。
体现的 代码可读性 的重要
1.6 语句
单语句
以分号为结尾的
复合语句
应用 {} 括起来的一堆语句
C 语言执行的根本单位 是 语句
组成 C 语言的根本单位 是 函数
1.7 main 函数
main 函数是咱们编写的第一个函数。int 是 main 的返回值类型 return 0 会完结掉 main 函数。
C 语言规定 整个程序的入口,就是 main 函数。一个程序只能有一个 main 函数。
C 语言的代码,是从 main 函数中的第一条语句开始,程序的往下执行。
根本写法:
int main()
{return 0;}
2. 常量和变量
2.1 常量
2.2 变量
格局:
变量类型 变量名称 = 初始值;
2.2.1 变量的定义,各个类型的区别
#include <stdio.h>
#include <stdlib.h>
int main()
{
//1. 定义变量
int a = 20; // 定义了一个整型变量
char c = 'A'; // 定义了一个字符型变量
double m = 3.5;// 定义了一个浮点型变量
// 这些变量的值是能够被批改的
a = 50;// 赋值 将左边的数据存储到右边去
c = 'M';
m = 10.5;
//2. 定义变量还有其余多种类型
// 整型
//long long num0; // 8 字节
long int num1 =10; // 4 字节 -20 多亿~20 多亿
short int num2 =20; // 2 字节 -32768~32767
int num3 =100; // 4 字节
long num4;
short num5;
int num6;
// 字符型
//char 的范畴 就是 -128~127
//char 类型是一个字节,说是存储字符,实际上就是存储数字
// 能够将 char 类型,看作 1 个字节的整数
char cCh = 'A';
//char cCh = 65;
char cCh2 = '1';
//char cCh2 = 49;
char cCh3 = 1;
char cCh4 = -5;
char cCh5 = -128;
//wchar_t 的应用形式和 char 差不多,就是字符后面都应该加一个 L
wchar_t wCh1 = L'A';
// 浮点型 次要看的是精度
//float 4 个字节 精度低
//
float fNum1 = 3.88;
//double 8 个字节 精度高
double fNum2 = 3.88;
return 0;
}
2.2.2 标识符的规定
字母,数字,下划线
数字不能结尾
不能应用关键字
辨别大小写
2.2.3 怎么选用变量类型
在过来的时候,硬件资源比拟缓和,能用小的类型,就尽量应用更小的。
当初:
整型,没有特殊要求,就是用 int
浮点,没有特殊要求,就应用 double
字符,没有特殊要求,就应用 char
2.3 对于主动类型转换的问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
//1. 定义变量
int a = 20; // 定义了一个整型变量
char c = 'A'; // 定义了一个字符型变量
double m = 3.5;// 定义了一个浮点型变量
char n = 0;
a = m;
// 第一种主动类型转换形式
// 当赋值的时候,左右两边类型不统一
// 会将左边的数据转换为右边的类型,再赋值
// m 是 double,a 是 int 将 m 转为 int 再赋值
// 转换过程中,有可能会失落数据
a = 10000;
n = a; // a 是 4 字节 n 是 1 字节 有可能会失落数据
a + m;
// 第二种主动转换的形式
// 当一个算式中,呈现了多种类型的时候,会主动往
// 范畴较大的类型去转换, 尽量的不失落数据
// 会先将 a 转为 double,而后再做加法
return 0;
}
2.4 对于显示转换的问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
//1. 定义变量
int a = 20; // 定义了一个整型变量
char c = 'A'; // 定义了一个字符型变量
double m = 3.5;// 定义了一个浮点型变量
char n = 0;
a = (int)m;
// 第一种主动类型转换形式
// 当赋值的时候,左右两边类型不统一
// 会将左边的数据转换为右边的类型,再赋值
// m 是 double,a 是 int 将 m 转为 int 再赋值
// 转换过程中,有可能会失落数据
a = 10000;
n = (char)a; // a 是 4 字节 n 是 1 字节 有可能会失落数据
(double)a + m;
// 第二种主动转换的形式
// 当一个算式中,呈现了多种类型的时候,会主动往
// 范畴较大的类型去转换, 尽量的不失落数据
// 会先将 a 转为 double,而后再做加法
return 0;
}
显示转换的目标,第一个是加强了可读性。
总结:
a. 命名肯定要有含意
b. 正文要具体
c. 排版要清晰标准
替换两个数:
int main(void)
{
int a = 5;
int b = 6;
/*a = b;
b = a;*/
int c = 0;
c = a;
a = b;
b = c;
return 0;
}
3. 输出和输入
3.1 输入
根本用法:
printf(“ 带格局控制符的字符串 ”, 参数 2, 参数 3,…..);
这外面 %d 是一个格局控制符。
函数的作用:将字符串中的内容原样输入,遇到了格局控制符就匹配前面的参数
格局控制符:
a. 示意十进制整数
i. %d
b. 示意双精度浮点数
i. %lf
c. 示意单个字符
i. %c
d. 示意字符串
i. %s
e. 其余的,临时不重要
i. %o 八进制输入
ii. %f 单精度浮点
iii. %u 无符号整数
iv. %p 输入地址
v. ....
除了格局控制符之外,还须要晓得一个转义字符
\n 示意换行
#include <stdio.h>
int main(void)
{
int a = 5;
int b = 6;
/*a = b;
b = a;*/
printf("a 的值是 %d,b 的值是 %d\n", a, b);
int c = 0;
c = a;
a = b;
b = c;
printf("a 的值是 %d,b 的值是 %d\n", a, b);
printf("b");
return 0;
}
3.2 输出 -scanf_s
#include <stdio.h>
int main(void)
{
// 输出两个数,输入两个数的和
int nNumberA = 0;
int nNumberB = 0;
printf("请输出两个数:");
// 留神:& 它是用来获取一个变量的地址的
scanf_s("%d,%d", &nNumberA, &nNumberB);
return 0;
}
scanf_的格局控制符和 printf 是一样的
拓展:vs 调试根底:
对于根本的调试:
点一下,呈现一个小红点,这里就是断点。
F5 调试运行,就会中断在第一个断点的地位。如果再按 F5 就会运行到下一个断点处。
F10:单步步过
F11:单步步入
遇到本人写的函数的时候,他俩有区别,其余时候是一样的。
在单步运行的过程中,咱们能够查看 变量的值,从而去验证咱们的代码是否正确