复习上一课
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 ” ,并输出白底黑字的内容“i love you ”;
提示:
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 常量
整型: 123 017 0xABC
浮点: 3.15 科学计数法:10.88e5
字符: ‘A’ L‘A’
字符串:“hello world” L“hello World”
2.2 变量
格式:
变量类型 变量名称 = 初始值;
2.2.1 变量的定义,各个类型的区别
- 整型
a. long 4字节
b. short 2字节
c. int 4字节
d. 每一个类型的前面,都可以加上一个 unsigned 表示无符号数 - 浮点
a. float 4字节
b. double 8字节 字符
a. char 1字节
b. wchar_t 2字节
#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
字符,没有特殊要求,就使用 char2.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;
}
关于显示转换,隐式转换,可参考我之前的一篇帖子
https://segmentfault.com/a/11...
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;
}
输出
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 65;
double b = 10.8;
char cCh = 'a';
printf("整数的值%d\n", a);
printf("整数的值按照字符输出%c\n", a);
printf("浮点数的值%lf\n", b);
printf("浮点数的值%d\n", b);
printf("字符的值%c\n", cCh);
printf("字符的值按照整数输出%d\n", cCh);
printf("字符的值按照整数输出%d\n", cCh +2);
return 0;
}
3.2 输入-scanf_s
scanf_s是微软提供的安全版本,当然也可以选择scanf,没有这些规定要求。
#include <stdio.h>
int main(void)
{
//输入两个数,输出两个数的和
int nNumberA = 0;
int nNumberB = 0;
printf("请输入两个数:");
//注意:&它是用来获取一个变量的地址的
scanf_s("%d,%d", &nNumberA, &nNumberB);
return 0;
}
scanf_的格式控制符和printf是一样的
scanf_的格式控制符和printf是一样的
需要注意的地方:
- scanf_s这个函数,是将键盘上输入的内容,按照规定的格式,存储到变量中。需要提供变量的地址才能够正确执行。 获取变量的地址 使用 &
- 在输入单个字符(整数,浮点数不用加)的时候,需要多一个参数,要写个1
- 在输入字符串的时候,需要写一下,最大的大小
3.3 getchar putchar _getch
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
//对于字符而言,有专门的库函数输入输出字符
//从键盘上获取字符
char a = 0;
a = getchar();//函数的返回值,就是输入的字符
//将单个字符输出
//putchar(a);
//无回显的获取字符
char cCh = 0;
cCh = _getch();
return 0;
}
拓展:vs调试基础:
关于基本的调试:
点一下,出现一个小红点,这里就是断点。
F9:下断点
F5 调试运行,就会中断在第一个断点的位置。 如果再按F5 就会运行到下一个断点处。
F10:单步步过
F11:单步步入
遇到自己写的函数的时候,他俩有区别,其他时候是一样的。
在单步运行的过程中,我们可以查看 变量的值,从而去验证我们的代码是否正确
我曾经总结的c语言试题
(持续更新,已更新至8月25日)C语言经典题集合
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。