C语言实用基础大总结(高效快速学习精华、实用语句案例多)

2023-05-16

文章目录

        • 一、基本库
        • 二、\数学库
        • 三、常用数据类型
        • 四、常用运算符及优先级
        • 五、输入和输出
        • 六、选择控制
        • 七、循环控制
        • 八、函数
        • 九、数组与指针
        • 十、字符串处理函数
        • 十一、位运算
        • 十二、结构体共用体
        • 十三、变量与作用域
        • 十四、文件处理

一、基本库

一个基本的C程序首先看的就是对库的导入:

#include <stdio.h>

1、<stdio.h>输入输出库:主要用于输入输出函数的调用,即printf()和scanf(),是最常用的库。
2、<string.h>字符串库:主要存放对字符和字符串的处理的函数。
3、<stdlib.h>功能库:主要用于对内存的操作,以及存放绝对值、除商取余等函数。
4、<math>数学库:就是存放各种数学操作的库。

二、<math>数学库

以下是<math>库的常用函数:
1、三角函数与反三角函数

函数名作用
sin(x)求x弧度的正弦值
cos(x)求x弧度的余弦值
tan(x)求x弧度的正切值
asin(x)求反三角函数arcsin(x),得到的结果的弧度
acos(x)求反三角函数arccos(x),得到的结果是弧度
atan(x)求反三角函数arctan(x)

2、指数和对数

函数名作用
exp(x)求e的x次方的值
log(x)求以自然对数e为底x为真数的结果
log10(x)求以10为底x为真数的结果

3、乘幂和开方

函数名作用
pow(x,y)求x的y次方的值,y可以为分数
fabs(x)求x的绝对值
sqrt(x)求x开方的值
fmod(x)求x除以y后的余数

三、常用数据类型

C语言中常用的数据类型有以下:

char:字符型
unsigned char:无符号字符型
int:整型(4字节)
unsigned int:无符号整型(4字节)
long int:长整型
float:单精度浮点型(4字节)
double:双精度浮点型(8字节)

四、常用运算符及优先级

此表从上到下,表示优先级从高到低:

运算符含义
++自增
自减
!逻辑非
-负号运算符
+正号运算符
*乘法
/除法
%取余
+加法运算符
-减法运算符
<,>,<= ,>=关系运算符
==、!=等于,不等于
&&逻辑与
||逻辑或
=赋值运算符
逗号运算符

此处列出的只是常用的运算和和优先级,并非所有的,需要完整运算符及优先级顺序可参见以下博客:C语言运算符优先级列表(超详细)

五、输入和输出

在C语言中最常用的输入和输出函数是printf()和scanf()函数:
1、printf()输出函数

int a = 3;
printf("%d",a);

2、scanf()输入函数同理

int a;
scanf("%d",&a);  //需要使用取值符

3、常用的数据格式
%d:整型数据
%c:字符型数据
%f:单精度浮点型数据(float)
%lf:双精度浮点型数据(double)
%s:字符串数据(常量、数组或指针)

4、get-put类输入输出
这4个函数主要都是用于获得字符串和输出字符串的函数:

  • getchar()函数:获得字符
  • putchar()函数:输出字符
  • gets():获得字符串
  • puts()函数:输出字符串

其实gets和puts是可以用getchar和putchar来实现的:

	char ch;
	while((ch=getchar())!='\n')
	{
		putchar(ch);
	}
	printf('\n');
	char a[10];
	gets(&a);
	puts(a);

六、选择控制

1、if语句

if(判断条件){
	操作...
}
else if(条件){
	操作...
}
else{
	操作...
}

2、条件运算符

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

这个语句的意思就是如果a大于b满足,则max等于a;否则就等于b
该思想也可以用于宏定义中:

#define B(a,b) a>b?a:b

该行表示的就是取a与b之间较大的一个数,然后赋值给max。
当然宏定义还有很多种用法,比如:

#define PI 3.1415926  //不带参的宏定义
#define Sum(a,b) a+b  //带参的宏定义

3、switch控制语句

switch(判断量){
	case 常量1: 语句1;break;
	case 常量2: 语句2;break;
	...
	case 常量n: 语句n;
	default: 语句;
}

七、循环控制

1、while循环语句
就是只要满足条件就一直循环的语句,括号内只需要一个判断条件就行。

while(判断条件){
	操作...
}

2、do while循环语句
就是至少执行一次的语句,执行一次do之后,再去判断while的括号是否成立,如果成立则再执行do中的内容;如果不成立,则跳出循环。
注意:while后有个分号

do{
	操作...
}while(判断条件);

3、for循环语句

for(语句1; 语句2; 语句3){
	操作...
}

for括号内的三个语句都用分号隔开,语句1常用来赋初值(可空);语句2是判断循环的条件(必须有),如果满足就执行循环;语句3是当执行完一次循环之后进行的操作(可空),常用来自增或自减。例如:

for(i=0; i<=10; i++){
	操作...
}

八、函数

1、函数的定义

类型标识符 函数名 (类型名 形参1, 类型名 形参2, ...){
	函数中的操作...
}

2、函数的调用

函数名([实参列表]);

3、函数的用法经验
(1)定义函数的时候,关于函数的参数和返回值是什么情况,完全取决于函数的功能。当编写函数的时候,一开始不要想着函数如何传参和函数的返回值应该是什么;
(2)而是当在编写代码的途中,要使用某些值,但是当前函数中不存在,此时就需要进行传参,这时候考虑怎么传参就是合适的时机;
(3)当函数编写完毕后,考虑是否要将某些结果返回给其他函数去使用,此时需要考虑返回值。

九、数组与指针

1、一维数组的定义和引用

类型名 数组名[常量] = {1,2,...};
int a[10] = {1, 2, 3};
数组名[下标];
int a[3] = {1, 2, 3};
printf("%d",a[2]);

2、二维数组的定义和引用

类型名 数组名[常量1][常量2] = {{1,2,...}, {11,12,...}};
int a[2][3] = {{1,2,3}, {4,5,6}};
int a[2][3] = {{1,2,3}, {4,5,6}};
printf("%d",a[1][2]);

以上是输出第1行第2列的元素,即6,下标是从开始排的。

3、转义字符

字符形式含义
\a响铃
\n换行,将当前位置移到下一行开头
\t水平制表,跳到下一个tab位置
\b退格,将当前位置移到前一列
\r回车,将当前位置移到本行开头
\f换页,将当前位置移到下页开头
\v竖向跳格
\反斜杠字符’’
双引号字符
"空字符(字符串结束标志)
\ddd1-3位八进制ASCII码所代表的字符
\xhh1-2位十六进制ASCII码所代表的字符

4、指针
该知识点和用法在以下文章中已有详细介绍:
C语言指针深入透析(原来你一直没有搞懂C语言指针是因为没有理解其中的规律)

十、字符串处理函数

1、字符串连接函数:strcat(s1, s2) //将字符串s2连接到是s1

2、字符串复制函数:strcpy(s1, s2) //将字符串2拷贝到字符串1中

3、字符串比较函数:strcmp(s1, s2) //若s1<s2返回-1,若s1>s2返回1,若s1==s2返回0

4、字符串长度函数:strlen(s) //返回字符串s的实际长度,不包括末尾的\0

5、存储空间赋值函数:memset(s, 'e', 5) //将字符数组s前5个字符设置成字符‘e’

6、存储空间拷贝函数:

int a[5] = {2,3,4,5,6}, b[5];
memcpy(b, a, sizeof(a));
//将数组a中的内容拷贝到数组b中,空间大小为a的空间大小

7、字符处理函数:就是专门处理字符的函数,常用的有以下几个

int isupper(ch);  //检查ch是否为大写字符
int islower(ch);  //检查ch是否为小写字符
int isdigit(ch);  //检查ch是否为数字字符

十一、位运算

位运算主要是用于二进制和其他进制的计算,是数字电子技术和计算机基础类课程都会学到的基础内容。
1、按位与&: 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
0000 0011
0000 0101
0000 0001
按位与的结果是3&5=1

//C语言代码:
#include <stdio.h>
main()
{
	int a = 3;
	int b = 5;
	printf("%d",a&b);
}

2、按位或| :两个相应的二进制位中只要有一个为1,该位的结果值为1
0011 0001
0000 1001
0011 1001
按位或的结果是49|9=57

//C语言源代码:
#include <stdio.h>
main()
{
	int a = 49; 
	int b = 9;
	printf("%d",a|b);
}

3、按位异或^ :若参加运算的两个二进制位值相同则为0,否则为1,
即0∧0=0,0∧1=1,1∧0=1, 1∧1=0
0011 1001
0010 1010
0001 0011
按位异或的结果是:57^42=19

//c语言源代码:
#include <stdio.h>
main()
{
	int a=57;
	int b = 42;
	printf("%d",a^b);
}

4、取反运算~ :~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
0000 1001——>原数9
1 111 0110——>取反的结果是246

//C语言源代码:
#include <stdio.h>
main()
{
	int a = 9;
	printf("%d",~a);
}

5、 左移<< :用来将一个数的各二进制位全部左移N位,右补0

将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍弃。若a=15,即0000 1111,左移2位得0011 1100。

//C语言源码
#include <stdio.h>
main()
{
	int a=15;
 	printf("%d",a<<2);
}

6、右移>> :将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
0000 1001——>数字9
0000 0010——>又移2位后的结果是2

#include <stdio.h>
main()
{
	int a = 9;
	printf("%d",a>>2);
}

另外需要注意的是,根据编译系统的不同,右移之后左边可能补0也可能补1。移如0称为逻辑右移,移入1称为算数右移。

7、位运算赋值
位运算符与赋值运算符可以组成复合赋值运算符。

  • 常用赋值:&=, |=, >>=, <<=,∧=
  • 例:
    a & = b相当于 a = a & b
    a << =2相当于a = a << 2

十二、结构体共用体

1、用typedef声明新类型名

typedef long long int LLint;  //将类型long long int起个名字叫LLint
LLint a=12334555, b;  //定义两个long long int类型的变量
typedef int * INTP;  //给int类型的指针起个名字叫INTP
INTP p1, p2;  //定义p1和p2两个指针

2、结构体
(1)结构体类型的声明

struct 结构体名称
{
	类型名1 成员名1;
	类型名2 成员名2;
	...
	类型名n 成员名n;
}变量1, 变量2... ;  //后面有个分号不能忘

(2)结构体变量、指针、数组的定义

struct student
{
	char name[20];
	int age;
	double score;
}std1, *pstd=&std1; stds[3];

其中,student是结构体类型,是一种数据类型了(与int、char这种一样);
然后,std1是一个student类型的变量,pstd是student类型的指针,stds是student类型的一维数组。

(3)结构体变量的引用
有三种方式可以引用结构体变量,其中.称为成员运算符,->称为指向运算符。

  • 结构体变量.成员名
  • 指针变量名->成员名
  • (*指针变量名).成员名

3、用结构体构造链表
在C语言中的链表简单来说就是:结构体变量中含有指向同类结构体变量的成员,就是拥有一个next指针成员,然后每次执行结构体都会自动跳转到下一个地址继续执行。

struct student
{
	char name[20];
	int age;
	double score;
	struct student *next;
}

以上,next指针就是指向下一个结构体变量的指针成员,当然这只是简单的链表,还有更深入的动态链表,此处就不做介绍了。

4、共用体
共用体的定义和结构体基本相同:

union 共用体名称
{
	类型名1 成员名1;
	类型名2 成员名2;
	...
	类型名n 成员名n;
}变量1, 变量2... ;  //后面有个分号不能忘

因此,共用体变量的引用也和结构体一样;它们之间的差别就是对内存的占用情况不同,对于只把C语言当成使用工具的开发者来说,这其实并不是需要掌握的重点。

十三、变量与作用域

1、动态类变量

auto变量register变量
局部作用域本函数内本函数内
生存期动态存储本函数内

2、静态类变量

static变量extern变量不加任何说明符
作用域本文件内可扩展文件本文件内
生存期静态存储静态存储静态存储

十四、文件处理

1、文件指针:FILE *指针变量名;

2、打开与关闭

  • 打开文件:FILE *fopen("文件名", "使用方式");
  • 关闭文件:fclose(文件指针);

3、文件使用方式及含义

使用方式含义
“r”(只读)为输入打开一个文本文件
“w”(只写)为输出打开一个文本文件
“a”(追加)向文件文件尾添加数据
“rb”(只读)为输入打开一个二进制文件
“wb”(只写)为输出打开一个二进制文件
“r+”(读写)为读写打开一个文本文件
“w+”(读写)为读写建立一个新的文本文件
“a+”(读写)为读写打开一个文本文件
“rb+”(读写)为读写打开一个二进制文件
“wb+”(读写)为读写建立一个新的二进制文件
“ab+”(读写)为读写打开一个二进制文件

4、文件输入输出

  • fprintf()文件输出函数:fprintf(文件指针, "格式控制", 地址列表);
  • fscanf()文件输入函数:fprintf(文件指针, "格式控制", 地址列表);
  • getc()文件输入函数:getc(文件指针);
  • putc()文件输出函数:putc(文件指针);
  • fgets()函数:fgets(字符指针, 位数, 文件指针); 从ASCII文件中读入字符串
  • gputs()函数:fputs(字符指针, 文件指针); 把字符串输出到ASCII文件中

5、二进制文件读写

  • fwrite()函数:向指定文件以二进制方式写入若干字节的数据
fwrite(待传出数据的其实地址, 要写入的字节数, 多少个字节的数据, 文件指针);
  • fread()函数:从指定的二进制文件中读入若干字节的数据
fread(起始地址, 要读入的字节数, 多少个字节的数据, 文件指针);

6、读写位置与定位

  • feof()判断文件结束:feof(文件指针);
  • fseek()移动文件位置指针到指定位置上:fseek(FILE *p, long offset, int origin);
    fp是文件指针,offset是以字节为单位的位移量,origin是起始点。
  • ftell()获得指针当前位置:ftell(文件指针);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实用基础大总结(高效快速学习精华、实用语句案例多) 的相关文章

随机推荐