C语言学习笔记

本文详细介绍了C语言的基础知识,包括计算机组成原理、CPU的内存单位、进制转换、编译器的使用、基本数据类型、常量和变量、运算符、指针、数组、函数与指针、字符串、文件操作等。通过对这些概念的解释和实例演示,帮助初学者理解C语言的基本结构和操作。
摘要由CSDN通过智能技术生成

计算机组成原理

计算机的组成

五个设备:

输入设备: 键盘,鼠标,麦克风,写字板....

输出设备: 显示器 打印机 耳机....

主存储器: 内存条 4G 8G 16G

计算器: 计算机里面负责计算,处理数据的。

控制器:控制整个程序的运行计算

2.CPU的组成:

内存单位:

程序员节:10月24号。电!  高电平 1  低电平 0

bit          位 存放一个 1或者0

Byte        字节        1B  =  8b

KB                        1KB = 1024B            2^10

MB         1MB = 1024KB                 2^10

GB          1GB = 1024MB    2^10

TB          1TB = 1024GB     2^10

进制

进制

十进制数:人容易理解!!

由0-9组成的。逢10进1. 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

二进制数: 计算机更容易理解!!

由0-1组成,逢2进1

八进制:

由0-7组成,逢8进1

0000 0001 0002 0003 0004 0005 0006 0007 0010 0011 0012 0013 0014 0015 0016 0017 0020

十六进制:

由0 1 2 3 4 5 6 7 8 9 a b c d e f组成的,逢16进1

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000a 000b 000c 000d 000e 000f 0010 0011.... 001f 0020

进制之间 怎么转换?

十进制转其他进制:辗转相除,逆序取余。

其他进制转十进制:位权相加

二进制      十进制

1                        1     2^0

10                        2          2^1

100                        4          2^2

1000                8     2^3

10000                16    2^4

100000                32  

1000000                64

10000000        128

100000000        256

1000000000  512

二进制转8进制 拆3位

二进制转16进制 拆4位

在代码中区分各种进制

0x208   16进制

01010        8进制

520     10进制

原码、反码、补码。

一些概念

计算机只会做加法。

内存中一定只能存1或者0

机器数:一个10进制的数 转换成2进制  机器数。520:   1000001000 

符号位:以8位为例,为了能够表示负数,最高位当做符号位 0正数 1负数

原码:具有符号位的机器数。

1原:         0000 0001

-1原:        1000 0001

2:        0000 0010

-2:        1000 0010

如果假设计算机的内存中存放是一个数的原码。

1-1=-2 错误的计算。

反码:

正数的反码是原码本身。

负数的反码是符号位不变,其余个位取反。

1原:         0000 0001   反:0000 0001

-1原:        1000 0001   反:1111 1110

2:        0000 0010   反:0000 0010

-2:        1000 0010   反:1111 1101

如果假设计算机的内存中存放是一个数的反码。

2-2= -0 不太准确。

补码:

正数的补码还是原码.

负数的补码是反码+1

1原:         0000 0001   反:0000 0001  补:0000 0001

-1原:        1000 0001   反:1111 1110  补:1111 1111

2:        0000 0010   反:0000 0010  补:0000 0010

-2:        1000 0010   反:1111 1101  补:1111 1110

如果假设计算机的内存中存放是一个数的补码。

1-1= 0

2-2= 0

结论:计算机的内存里面存放的是数的补码。

编译器的使用

创建项目:

文件--- 新建项目 ---win32控制台应用程序

设置好项目名称,项目保存的盘符路径,下一步

空项目选中,取消安全检查。(VS是C++的编译器)  确定

创建文件:

源文件---添加新建项---C++文件

设置好文件名  .c  .cpp 添加。

VS布局:

各种窗口 都在视图里面。

这些窗口都是课题拖动。根据自己的习惯,自己更改。

代码:第一个C程序:

全英文 字母 括号 分号

注释:不是代码的一部分。只是代码的注释说明。

/*    

多行注释

*/ 

//  单行注释

主函数

int main()

{

//语句

}

C代码最小单位:语句。以分号结束。

 

编译运行:

鼠标  调试--开始执行(不调试)

键盘  ctrl+f5

 

基本数据类型

标识符

字母、数字、下划线组成。 2jiuxia2

不能用数字开头 

C语言里面标识符严格区分大小写

jiuxia  Jiuxia  jIuxia  JIUXIA

不能是C语言保留的关键字 32个

试一试:

while                   不是标识符   关键字

for                     不是标识符   关键字

jiuxia                   是

ye_2                   是

number1                是

2Number         不是标识符 不能以数字开头

student_6         是

___1                是

常量和变量

常量:不会变化的数据。

数值常量: 1 2 3 4 5 6 7 555 380 12.5 32.6 -8 -9

字符常量:'a'  'b'  '0'  '8'  '1'  '*'  'h'

字符串常量: 后面再讲

宏定义:#define

在程序中定义一个宏定义 #define PI 3.1415926548,在接下来的代码中凡是用到PI的地方全部都会替换成3.1415926548

宏定义不是一个语句,不需要分号结束.

宏定义是替换的过程,在预处理阶段完成。什么叫做预处理?往下讲。

变量:可以变化的量

人数

年龄

长度

....

整形 int

整形int

整形常量:1 2 3 4 5 6 7 8 9 0 -1 - 2 -138 -520 666

整形变量:         4B  32bit  -21亿 ---- +21亿

a)定义:int 标识符;

int age;   //定义了一个整形的变量--年龄

b)内幕:实际上,计算机去开辟4B内存,给这段内存取一个名字,age.

c)取值范围:4个字节   -21亿 ---- +21亿

短整型short int  直接写short 

a)定义:short 标识符;

short a;   //定义了一个短整形的变量 a

b)内幕:实际上,计算机去开辟2B内存,给这段内存取一个名字,a.

c)取值范围:2个字节   -32700~~+32700

长整形long int 直接写long

a)定义:long 标识符;

long a;   //定义了一个整形的变量a

b)内幕:实际上,计算机去开辟4B内存,给这段内存取一个名字,a.

c)取值范围:4个字节    -21亿 ---- +21亿

字符型

字符型char

字符型常量:'a'  'b'  '0'  '8'  '1'  '*'  'h'

字符型变量: char

a)定义:char标识符;

char  c;   //定义了一个字符变量c

b)取值范围:1个字节   -127---+128

c)内幕1:实际上,计算机去开辟1B内存,给这段内存取一个名字,c

d)内幕2:字符是用ASCII码来存放。

 

 

几个概念

定义

定义一个变量,从无到有创建一个新的变量。

int number;

初始化

定义一个变量的同时,给这个变量一个初始值。

int number = 14;

赋值

定义变量之后,给一个变量赋值。

number = 25;

        number = 38;

number = 98;

引用

使用一个变量的值。

number * 2;

printf("%d\n", number);

 

字符型        char                        1B        -127---128

短整型        short                 2B        -32700---+32700

整形                int                         4B        -21亿---+21亿

长整形        long                        4B        -21亿---+21亿

长长整形 long long         8B 

注意:

数据类型本身是不占用内存的。而是说用这种类型去定义一个变量,这个变量的内存大小。

定义变量,注意内存溢出。比如 int number;表示全世界的人数。

sizeof()  计算一个变量 或者 一种类型的字节数大小

sizeof(short)  sizeof(int)  sizeof(long)

signedunsigned

有符号(signed): 最高位为符号位,不参与计数,int  -21亿----+21亿

signed int a;  

                signed char c;

signed short b;

不指定signed 默认有符号的。

无符号(unsined): 不要符号位,最高位参与计数 unsigned int 0 - 42亿

unsigned int a1;

                unsigned char c1;

        unsigned short b1;

必须指定unsigned 才是无符号的。

 

 

浮点型

浮点型数据在内存的存放方式:

0(符号位) 00000000(实数00000000 00000000 0000000(幂)

单精度float

4B  -3.4*10^-38------ 3.4*10^38

双精度double

8B  -1.7*10^-308 ----- 1.7*10^308

长双精度long double

8B  -1.7*10^-308 ----- 1.7*10^308

程序的执行

代码我们写的。

计算机能够明白我们的意思!!!

预处理

把头文件展开,把宏定义替换.

main.c ----> main.i

汇编

汇编语言

main.i---->main.asm汇编语言 

编译

汇编语言变成机器语言 

main.asm---->mian.obj

链接

产生可执行文件

main.obj----->main.exe

#include <stdio.h>

#define PI 3.14

int main()

{

        double r, per; //定义圆的半径 圆的周长

        r = 3.2;  //给圆的半径赋值为 3.2

        per = 2 * PI*r; //计算圆的周长

        printf("周长为:%.2f\n", per); //打印周长

        getchar();

        return 0;

}

标准的输入输出

C语言编译系统,提供了一些标准的输入输出的函数。要使用这些函数,请在文件开始包含头文件stdio.h

scanf 从键盘格式化输入

%d  整数 

%f   浮点数

%c   字符

float a;

        char b;

        int c;

        //从键盘输入三个数保存在a b c变量

        scanf("%f %c %d", &a, &b, &c);

printf

格式化输出:

printf("jiuxia");

格式控制符:

int number = 35;

        char ch = 'B';

        float n = 3.14156;

        printf("十进制:%d\n", number); 

        printf("八进制:0%o\n", number);

        printf("十六进制:0x%x\n", number);

        printf("%5d\n", number);

        printf("%-5d\n", number);

        printf("%c\n", ch);

        printf("%d\n", ch);

        printf("%f\n", n);

        printf("%.2f\n", n);

        printf("%10.2f\n", n);

printf("%-10.2f\n", n);

 

转义字符:

 

getchar()  输入字符  getchar() 防止程序闪退。

ch = getchar(); //从键盘输入一个字符

        getchar(); //等待键盘的输入

putchar()  输出字符

putchar(ch);

 

运算符

表达式

操作数和运算符组成。1+2  3*5  a/6

单个操作数也是一个表达式。  1  3.14  6.28  NUM

表达式本身没有意义。更关心的是表达式的返回值。

算术表达式

逗号表达式

赋值表达式

关系表达式

逻辑表达式

.....

赋值运算符 =

数学:1+2=3  3*5=15

程序:=  赋值运算符 把一个数据赋值给一个变量

int a;

        int b;

        a = 5;

        b = a;

        b = a + 5;

b = a - b;

 

算术运算符                 

+加  -减  *乘  /除   %取模

a+b;a-b;a*b;a/b;a%b;

 

1./

整数 int: 截尾  整数的除法去除小数位。

浮点数float double: 正常

5/3; 返回值1

 

2.取模%

只针对整数,浮点数不存在%这个运算。

5%3;  返回值2

#include <stdio.h>

 

int main()

{

        int a = 135;

 

        //a 逆序输出   135   531

        int b = a / 100;  //b 1

        int c = a % 100 / 10; // c  3

        int d = a % 10;   //d 5

        printf("%d%d%d\n", d, c, b);

        return 0;

}

自增自减运算符  ++  --

++ 一个变量自己本身加1

-- 一个变量自己本身减1

 

1.以分号为一个语句。分号结束之后 不管是前置还是后置  变量本身都是要+1.

2.语句没有结束之前,前置++  先加1 后取值   后置++  先取值后加1

前置先加  后置后加

a+++--a-a--+a++;请大家不要写这种东西。毫无意义!!!!!

关系运算符

>大于  <小于  >=大于等于  <=小于等于  ==等于  !=不等于

关系运算符用描述两个量的大小关系。

逻辑值:条件的成立和不成立。真(1)  假(0

2<3; 返回值

3!=4;返回值1

2>5; 返回值0

int a = 5;

        int b = 3;

        printf("%d\n", a > 4);                        //1

        printf("%d\n", a < b);                        //0

        printf("%d\n", a >= b);                         //1

        printf("%d\n", a != a - b);                //1

        printf("%d\n", a == a - b);                //0

        printf("%d\n", b >= a*b);                //0

printf("%d\n", b <= b / a);                 //0

 

逻辑运算符 &&与  ||或  !

&&与  两者为真才为真。  并且

||或  两者为假才为假。  或者

 

表达式1 && 表达式2

表达式1为真 并且 表达式2为真   1

 

表达式1 || 表达式2

表达式1为真 或者 表达式2为真   1

 

注意:

短路!!!!

如果说第一个表达式能够确定整个表达式的返回值,第二个

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Korea Zou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值