头图

复习上一课

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 变量的定义,各个类型的区别

  1. 整型
    a. long 4字节
    b. short 2字节
    c. int 4字节
    d. 每一个类型的前面,都可以加上一个 unsigned 表示无符号数
  2. 浮点
    a. float 4字节
    b. double 8字节
  3. 字符
    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
    字符,没有特殊要求,就使用 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;
}

关于显示转换,隐式转换,可参考我之前的一篇帖子

https://segmentfault.com/a/11...

3. 输入和输出

3.1 输出

基本用法:
printf("带格式控制符的字符串",参数2,参数3,.....);
图片.png
这里面%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是一样的
需要注意的地方:

  1. scanf_s这个函数,是将键盘上输入的内容,按照规定的格式,存储到变量中。需要提供变量的地址才能够正确执行。 获取变量的地址 使用 &
  2. 在输入单个字符(整数,浮点数不用加)的时候,需要多一个参数,要写个1
  3. 在输入字符串的时候,需要写一下,最大的大小
    图片.png

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调试基础:

关于基本的调试:
图片.png
点一下,出现一个小红点,这里就是断点。
F9:下断点
F5 调试运行,就会中断在第一个断点的位置。 如果再按F5 就会运行到下一个断点处。
F10:单步步过
F11:单步步入
遇到自己写的函数的时候,他俩有区别,其他时候是一样的。
在单步运行的过程中,我们可以查看 变量的值,从而去验证我们的代码是否正确

我曾经总结的c语言试题
(持续更新,已更新至8月25日)C语言经典题集合


瞿小凯
1.3k 声望593 粉丝