C语言基础知识汇总

本文介绍了Linux的主要特点,包括其免费性、安全性、多用户和多任务特性,以及Windows与Linux的对比。还详细讲解了C语言的基础知识,如预处理器、编译流程、标识符规则、数据类型、逻辑与关系运算、控制结构、位运算、数组和字符数组,以及字符串处理和输入输出。
摘要由CSDN通过智能技术生成

一、Linux命令

Linux的主要特点:

完全免费:用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。

安全性:Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。

多用户:可以被不同用户使用,每个用户对自己的资源有特定的权限,互不影响。

多任务:同时执行多个程序,而同时各个程序的运行互相独立。

独立性和可移植性都是说可以适应不同环境,内核都是一样的。

Windows:必选图形界面,上手容易,有文件拓展名,不区分大小写

Linux:可选图形界面,需要有编程基础者使用,不使用文件拓展名,区分大小写

路径分类:

绝对路径 (路径字符串中含根目录的写法)

相对路径 (在一个参考目录位置(当前目录作为参考位置)基础上的一种写法)

有/,绝对路径

C语言代码的编译过程

? 预处理 编译 汇编语言 链接

f1.c f1.i f1.S f1.o

预处理:处理.c文件中#开头的语句

编译:将c语言语句翻译成同功能的汇编指令

汇编:将汇编指令翻译成cpu的二进制指令

链接:按特定规则将所有目标文件打包成与操作系统相匹配的可执行文件

二、c语言预备知识

标识符: 程序员自己可以命名的单词。

命名规则如下:

  1. 不能是关键字
  2. 由大小写字母和0~9数字符号以及下划线构成
  3. 只能以字母或者下划线开头
  4. 区分大小写

类型的级别从高到低依次是long double,double,float,unsigned long long,long long,unsigned long,long,unsigned int,int。例外的情况下,当long和int的大小相同时,unsigned int 比 long的级别高。之所以short和char类型没有列出,是因为它们已经被升级到int或unsigned int。

常用基本数据类型(64位机器为例)

int  %d

float %f

double %lf

char %c %s

long int  %ld

常用基本数据类型占用空间

char : 1个字节

int: 4个字节

float:4个字节

double: 8个字节

基本类型书写

整数:

a,默认为10进制,10,20。

b,以O开头为8进制,045,021。

d,以Ox开头为16进制,0x21458adf。

d,以Ox开头为16进制,0x21458adf。

小数:

单精度常量:2.3f。
双精度常量:2.3,默认为双精度。字符型常量
用英文单引号括起来,只保存一个字符'a'、'b'、'*',还有转义字符'\n' 、'\t'。字符串常量
用英文的双引号引起来可以保存多个字符: "abc"。

如“china”字符串      %s  6

如‘c’,’h’,’i’,’n’,’a’单个字符  %c  5

void  和int区别在于有没有返回值

变量定义

类型 变量名;

int num;//类型 int 变量名 num

强制转换

(要强制转换的类型)变量名

记住常用的ASCLL码   

比如 A  65   a  97

sizeof(类型)-- 计算字节数

注意%参与运算的对象必须是整型数

自增的类型和用法

i++    i=i+1; 先使用i,再++

++i    i=i+1; 先++,再使用i

自减的类型和用法

i--   i=i-1; 先使用i,再--

--i   i=i-1; 先--,再使用i

三、三大结构

逻辑运算符

与“&&”

或“||”,注意与和或连接的是两个表达式

非“!”

关系运算符

等于“==”

不等于“!=”

选择结构

if语句

单分支结构:

if(条件表达式){

        语句;

}

如果符合“条件表达式”,执行语句

双分支结构

if(条件表达式){

        语句1;

}

else{

        语句2

}

多分支结构

if(表达式1){

        语句1;

}

else if(表达式2){

        语句2;

}

else if(表达式3){

        语句3;

}

else{

        语句4;

}

switch语句

switch(表达式){

        case 常量表达式1:

        语句1;

        break;

        case 常量表达式2:

        语句2;

        break;

        case 常量表达式3:

        语句3;

        break;

        ...

        case 常量表达式n:

        语句n;

        break;

        default:

        语句n+1;

}

循环结构

while循环语法:

while(表达式){

循环体;

}

do while循环

do{

循环体;

}while(表达式);

while和do-while区别在于

while先判断,再运行循环语句

do-while先运行循环语句,再判断

需要注意的是,如果一开始输入假,do-while会进行一次操作,运行循环语句,再判断,不符合退出;如果一开始输入假,while先判断,不符合退出。

一开始输入假,两个结果就不一样;一开始输入真,两个是一样的。

常见的死循环:

while(1){

}

不执行:

while(0){

}

字符输出函数:

putchar函数是字符输出函数,其功能是在终端(显示器)输出单个字符。其函数原型为:
int putchar(int ch);
ch表示要输出的字符内容,返回值作用为:如果输出成功返回一个字符的ASC码,失败则返回EOF即-1,如代码:
putchar('A');
putchar(x);

字符输入函数:

getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为:
getchar();
getchar会以返回值的形式返回接收到的字符。即该字符的ASC码,通常的用法如下:
char c;
c=getchar();

for循环

for(表达式1;表达式2;表达式3){

        语句;

}

表达式1:设置初始条件,只执行一次,可以0或者多个表达式赋初始值

表达式2:循环条件表达式

表达式3:作为循环的调整

调用数学函数

添加头文件:#include <math.h>

调用函数:pow(数值,次方)n次方的函数

编译:gcc 名字 -lm

四、位运算

单位的换算:


进制转换:

十进制负整数转换为二进制数:

例如:-29

第一步:先将该负整数对应的正整数转换为二进制数。

十进制数29的二进制数为00011101。

第二步:对得到的二进制数取反。

二进制数00011101取反为11100010。

第三步:加1。

11100010加1为11100011。

因此,十进制数-29转换为二进制数11100011。

补码的应用:

假设两个四位二进制数0111和0110为无符号数,我们来计算一下两者之间的减法:0111-0110=7-6=1。

由于计算机没有减法运算,我们可以先求减数相对应的补数,四位二进制数的模为2^4=16,那么6的补数为16-6=10,也就是说7-6=7+10=17,0111-0110=0111+1010=10001。

因为只有4位,所以最高位省略,得到0001=1,正好是原本的计算结果。

补码的特点:

1. 补码的符号可以看做是数值的一部分参与运算;

2. 在补码表示中,0只有一种表示方法;

3. 负数补码表示的范围比原码稍宽。

位操作符

& 与运算 两个位都是1时,结果才为1,否则结果为0

| 或运算 两个位都是0时,结果才为0,否则结果为1

^ 异或运算 两个位相同则为0,不同则为1

~ 取反运算,1则变为0,0则变为1

<< 左移:左移运算,向左进行移位操作,高位丢弃,低位补0

>> 右移:右移一位相当于/2 

五、数组和字符数组

三元运算符

如果条件为真?则值为X:否则值为Y。

max=(a>b)?a:b;

局部变量与全局变量

局部变量:在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,所有的变量a、b和c是maint)函数的局部变量。

全局变量:定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。全局变量可以被任何函数访问。也就是说,全局变量在声明后整个程序中都是可用的。

循环结束的方法:

continue:结束当前当次循环,继续下一次循环

break:跳出循环

return: 结束方法

宏定义

命名规则:#define 名字  大小

特点:宏定义只代不运算

定义一维数组

定义一维数组的一般形式为:类型符数组名[常量表达式]

数组下标从0开始

冒号排序法:

现在输入10个用户的有效学习时间,要求对它们按由小到大的顺序排序。

解题思路:这种问题是一个典型的排序问题,排序方法是一种重要且基本的算法,我们在此使用“冒泡排序法”,其思路为:每次将相邻两个数比较,将小的调到前面,如果有6个数:8,7,5,4,2,0。第一次先将最前面的两个数8和7对调。第二次将第二个数和第三个数(8和5)对调。如此总计进行了5次,得到7-5-4-2-0-8的顺序,可以看到:最大的数8已经沉底,成为最下面的一个数,而小的数上升。经过第一轮(5次比较)后,得到了最大的数8。

如果有n个数,则需要比较n-1轮,在第一轮需要进行n-1次两两比较,在第j轮中要进行n-j次的两两比较。
这种如水底的气泡逐步冒出水面一样,故称之为冒泡法。

打擂台方法:

解题思路:先思考一下在打擂台的时候怎样确定最后的优胜者。先找出任一个人站在台上,第2个人上去与之比武,胜者留在台上。再上去第3个人,与台上的人比武,胜者留在台上,败者下台。以后每一个人都和当时留在台上的人比武。直到所有人都上台比过为止,最后留在台上的就是冠军,这中方法就是打擂台法。
我们本题目也采用打擂台算法。先让a[0][0]做“擂主”,把它的值赋给变量max,max用来存放当前已知的最大值,在开始时还未进行比较,把最前面的元素认为是当前最大值,然后让下一个元素 a[0][1]和max比较,如果a[0][1]>max,则把 a[0][1]赋值给max,取代 max的原值。以后以此处理,直到全部比完之后,max就是最大值。

字符数组的定义

定义字符数组的方法与定义数值型数组的方法类似:例如∶char c[10];就定义了为字符数组,包含10个元素。

字符串外部输入读取

字符串函数的头文件  #include<string.h>

scanf(“%s”,s);把\n和空格作为空白,当分隔符处理,不作为字符串内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值