C语言入门笔记整理 02

入门案例

求一元二次方程的解

#include <stdio.h>
#include <math.h>

int main(void) {
    int a = 1;
    int b = 2;
    int c = 3;
    a
    double delta; // delt存放的是 b*b - 4*a*c
    double x1;
    double x2;
    
    delta = b*b - 4*a*c;
    
    if (delta > 0) {
        // 两个解
        x1 = (-b + sqrt(delta)) / (2*a);
        x2 = (-b - sqrt(delta)) / (2*a);
        printf("一共两个解, x1 = %f, x2 = %f\n",x1,x2);
    } else if (delta == 0){
        // 唯一解
        x1 = (-b) / (2*a);
        x2 = x1;
        printf("一共一个解, x1 = x2 = %f\n",x1,x2);
    } else{
        // 无解
        printf("无解\n");
    }
    return 0;
}

无解

硬件关系复习

cpu 内存条 硬盘 显卡 主板显示器 之间关系

硬盘数据传入内存条
CPU 处理 内存条上的信息
处理结果是 视频 在显卡上显示
处理结果是 声音 在声卡上发生
主板用来 插入 CPU 内存条的,把它们都装起来。

Hello World 如何运行

代码


#include <stdio.h>


int main(void) {
    printf("欢迎来到C的世界\n");
    return 0;
}

上面是源文件,点击运行 生成exe文件,操作系统通过exe文件 执行。

数据类型

编程的第一步 是 数据的存储
需要对数据进行分类
分为两类:
基本类型数据
整数

		整型 int 4个字节
		int main(void) {
		    int i = 10.6; //表示i变量是否是整型变量,所谓整型变量就是指i只能是整数。
		    printf("%d\n",i);
		    return 0;
		}
		
		短整型 short int 2个字节
		长整型 long int 8 个字节
浮点数(实数)
		单精度浮点数 float 4个字节
		双精度浮点数 double 8个字节
字符
		字符 char  1个字节
		// 下面是单个字符
		int main(void) {
		    char i = 'A';
		    printf("%c\n",i);
		    return 0;
		}

变量

变最的本质就是内存中一段存储空间

例子:

#include <stdio.h>


int main(void) {
    /* 3 最终是存放在内存当中,程序终止之后,3所占用的内存就会被释放。
     */
    int i; // 在内存条上找到一个空闲单元,让其和i产生关联 
    i = 3; // 使用字母i 在内存条上所对应的空间 
    printf("%d\n",i);
    return 0;
}

变量为什么要初始化

所调初始化就是斌值的意思

#include <stdio.h>


int main(void) {
    int i;
    printf("%d\n",i);
    return 0;
}

802912 

上面这个数字是提醒我们,数据没有被进行初始化。

理解:

可以吧内存条比喻为一排房子
变量i就相当于与给你中的一套房子起名字
给i赋值就相当于往房子里面放了一个人
而构成人的基本就是细胞 而在这个房子里存放的数据是以1和0来进行记录的

可以类比厕所,关掉程序相当于A上完走掉被释放,写入i相当于I来这个坑,未初始化就相当于冲下来的是A的屎,初始化了就是I的屎了

定义变量

数据类型 变量名= 要赋的值;
等价于
数据类型 变量名;
变量名=要赋的值:

    int = 3; 等价于 int i = 3;
    int i,j; 等价于 int i; int j;
    int i,j = 3; 等价于 int i; int j = 3;
    int i = 3, j = 5; 等价于 int i,int j; i = 3; j = 5;
    int i, j; i = j = 5; 等价于 int i, j; i = 5; j = 5;

进制

十进制就是逢十进一

十个基数,逢10进一
基数:0123456789

二进制逢二进一

二个基数 逢二进一
基数:01

计算机只能识别二进制。

1011B为二进制数1011
1357Q为八进制数1357
2049D为十进制数2049
3FB9H为十六进制数3FB9

小tips

计算机之父 冯诺依曼
计算机从10进制 改 2进制
计算机分为5大部件:运算器 控制器 输入设备 输出设备 存储设备

进制对照表在这里插入图片描述

#include <stdio.h>


int main(void) {
    int i = 88;
    printf("i = %d\n",i);  // %d表示以10进制输出
    printf(" i = %x\n",i); // %x表示16进制
    printf(" i = %o\n",i); // %o表示8进制
}

i = 88
i = 58
i = 130

十进制:

传统的写法

十六进制:

前面加0x或0x

八进制:

前面0 注意是数字0而不是字母o

#include <stdio.h>


int main(void) {
    int i = 015; //八进制前面加零
    printf("%o\n",i);
    printf("%d\n",i);
}

15
13

常量

浮点数

传统的写法
在这里插入图片描述

float x = 3.2://传统

科学计数法

float x = 3.2e3: //x的值是 3200

float x 二

123. 45e-2; //x的值是1.2345

代码展示


#include <stdio.h>


int main(void) {
    double i = 123.45e-2;
    printf("%f\n",i);
    return 0;
}

1.234500

字符

在这里插入图片描述

常量存储在计算机的形式

整数是以补码的形式转化为二进制代码存储在计算机中的
实数是以IEBE754标准转化为二进制代码存储在计算机中的
字符的本质实际也是与整數的存储方式相同

总结

Cpu 内存条 硬盘 显卡 主板 显示器 之间的关系

CPU 处理 内存数据
处理完成 发送给 显示器 声卡

这些都是通过主板连接起来

HelloWorld程序如何运行起来的

软件 发送给操作系统
操作系统 调用 CPU
CPU处理后 发送给 软件

数据类型

在这里插入图片描述
在这里插入图片描述

什么是变量

变量的本质就是内存中一段存储空间。

变量为什么必须的初始化

内存条的数据 可能 是上一个变量 遗留下来的垃圾数据。

不初始化,里面的值不确定

如何 定义变量

数据类型 变量名= 要赋的值:

在这里插入图片描述

代码规范化

当代码功能独立的时候,需要空行
整体分为 3部分

#include <stdio.h>

int main(void)
{
    //定义变量
    
    //对变量进行操作
    
    //输出值
    
    return 0;
}

什么是字节

字节就是存储数据的单位
也是硬件能够访问的最小的单位

左边CPU 右边内存条
CPU 最小只能精确到bit 位
1个字节 == 8 位bit
1 K = 1024字节
1 M = 1024k
1 G = 1024G

购买的硬盘显示 320G
但是 实际是300G
这是因为 计量单位不同了

卖家 以 1000为单位
实际上 以1024为单位

不同类型 数据之间相互赋值

整型和长整型 可以相互赋值
字符串 和常量 不可以

 int i = 45;
 long j = 102345;
 i = j;

float x = 6.6;
double y = 8.8;
printf("%f %lf\n", x, y);

关键点
在于 补码

ASCII码

ASCII不是一个值,而是一种规定,
ASCII规定了不同的字行是使用哪个整数值去表示
它规定了
在这里插入图片描述

#include <stdio.h>

int main(void)
{
    char ch = 'A';
//    char ch2 = "AB"; // error: AB是字符串,不能把字符串赋值给单个字符
    return 0;
}

任何一个二进制码都可以转换为整数,因为本身就是和整数相同格式存储的

#include <stdio.h>

int main(void)
{
    char ch = 'A';
//    char ch2 = "AB"; // error: AB是字符串,不能把字符串赋值给单个字符
    printf("%d\n",ch); //任何一个二进制码都可以转换为整数,因为本身就是和整数一个格式存储的
    return 0;
}
65

基本输入和输出函数

输入

通过键盘将数据输入到变量中

scanf()

两种用法

用法1:
功能: 将从 键盘输入的字符 转化为 输入控制符所规定格式的 数据,
然后存入 以输入参数的值 为 地址 的 变量中

#include <stdio.h>

int main(void)
{
    printf("请输入数字: ");
    int i = scanf("%d", &i); // &i 表示i的地址 &是一个取地址符
    printf("i = %d\n", i);
    return 0;
}

用法2:
将从 键盘输入的字符转 化 为 输入控制符所规定格式的数据 ,然后存入以输入参数的值为地址的变量中非输入控制符必须原样输入

# include <stdio.h>

int main(void)
{
    int i;
    scanf("m%d", &i); // m123正确输入 i是123;   123是非法输入,必须以m开头
    printf("i = %d\n", i);
}

通过scanf 让键盘多个值来进行赋值

# include <stdio.h>

/**
 通过scanf 让键盘多个值来进行赋值
 
 */
int main(void)
{
    int i,j;
    
    printf("please input the numbers: ");
    scanf("%d %d", &i,&j);
    printf("i = %d, j = %d\n", i, j);
    
    return 0;
}

如何使用scanf编写出高质量代码

1.使用scanf之前最好先使用printf提示用户以什么样的方式来输入
2.scanf中尽量不要使用非输入控制符,尤其是不要用\n
在这里插入图片描述

经典错误
int main(void)
{
    int i;
    scanf("%d", &i);
    printf("i = %d\n",i);
    
    int j;
    scanf("%d", &j);
    printf("j = %d\n",j);
}

12asd
i = 12
j = 802912
Program ended with exit code: 0

当我需要对一个变量输入的时候,很可能用于在前面放了一些垃圾值,没有接受到,留给我们。

因此需要有个函数,清空,前面遗留的垃圾值。

输出

将变量的内容输出到显示器上

printf()

一共四种用法:
第一种用法

#include <stdio.h>

int main(void)
{
    printf("hh\n");
    return 0;
}

// 这里 \N 表示换行符

第二种用法

#include <stdio.h>

int main(void)
{
    int i = 10;
    printf("%d\n",i); // 以十进制输出
    return 0;
}

#include <stdio.h>

int main(void)
{
    int i = 10;
    printf("%d\n",i); // 10进制输出
    printf("%X\n",i); // 16进制输出
    return 0;
}

10
A

第三种用法

#include <stdio.h>

int main(void)
{
    int j = 3;
    int k = 5;
    printf("%d %d\n",j,k);
    return 0;
}

3 5

在这里插入图片描述

四种方法总结:

在这里插入图片描述
为什么需要输出控制符:
01组成的代码可以表示数据也可以表示指令。
如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果。
printf 可以让输出 以不同的进制输出

/**
2021.05.10
 功能:
 目的:
     测试 %x %X %#x %#X的用法
 */
#include <stdio.h>

int main(void)
{
    int x = 47; //47是十进制
    printf("%d\n", x); // 以十进制输出   47
    printf("%x\n", x); // 以十六进制输出  2f
    printf("%#x\n", x); // 以十六进制输出  0x2f
    printf("%#X\n", x); // 以十六进制输出  0X2F
    return 0;
}


字符的本质「字符本质上和整数的存储方式相同」

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值