C语言基础学习笔记

前言

本学习笔记为我个人结合b站的厦门大学C语言程序设计基础课程自学总结而来,记录学习成果,交流学习经验,希望能对广大计算机专业学生有所帮助。建议在学习其他编程语言之前,首先学习一下C语言基础,理解数据类型、语法规则、流程控制语句等内容即可,不用深入学习指针等内容。C语言具有很好的代表性,对于学习其他编程语言都有很大的帮助。本人能力有限,学识尚浅,如有谬误,欢迎交流。感谢各位的阅读、评论,如有引用、转发需要征得本人同意,保留权利。

正文

Visual C++6.0→文件→新建→文件→C++Source File→位置→文件名xxx.c→编写→组建F7→编译Ctrl+F5

#include 文件包含命令

stdio.h 标准输入/输出函数库

scanf(“格式控制字符串”,变量地址);

输入函数

printf(“格式控制字符串”,表达式);

输出函数

math.h 数学函数库

sqrt(x)

求x的平方根

cos(x)

求弧度x的余弦值

sin(x)

求弧度x的正弦值

fabs(x)

求x的绝对值

exp(x)

求e的x次方

log(x)

求log以e为底,x的对数


main() //主函数注:e=2.718282,C语言中没有π

{

      return 0;

}

//注释 单行注释

/*注释*/ 多行注释

%d 整型格式控制符; %h short型格式控制符; %u unsigned int; %l long; %o 八进制; %x 十六进制

%f float型格式控制符; %lf double型输入格式控制符

%e 浮点型格式控制符,以指数符形式输出浮点数,小数点占一列

%g 根据数据大小,自动选择%f或%e

附加说明项与格式控制符搭配使用

%md中的m指定输出数据的最小宽度,符号位占一列,即右对齐

%-md中的-m指定m列中数据左对齐

%0md中的0m指定m列数据中的空位填0

%-m.nf中的.n指定输出数据的精度,即保留小数点后n位,未说明时默认保留6位,-、0、m同上,可省略

%md在scanf语句中控制截取m列数据作为输入

%*md在scanf语句中控制跳过m列数据不输入

\n 换行符

\t 水平制表符

\0 字符串标识

aEn 指数符a×10n

变量必须先声明后使用

标识符(identifier):变量名,以字母或下划线开头,由字母、下划线和数字组成,区分大小写

C语言不能直接输入分数,需要以设置两个变量n和m,以n/m形式输入

 

 

++ 自增运算符

前置++i

i=i+1

表达式的值=i

-- 自减运算符

后置i++

表达式的值=i

i=i+1

运算符类别、名称、优先级和结合性

序号

类别

运算符

名称

优先级

结合性

1

强制

下标

成员

()

[]

->、·

类型转换,参数表,函数调用

数组元素的下标

结构或联合成员

15

(最高)

自左向右

2

逻辑

算术自增、算术自减

指针

算术

长度

!

~

++、--

&、*

+、-

sizeof

逻辑非

位非

增加1、减少1

取地址、取内容

取正、取负

数据长度

14

自右向左

3

算术

*、/、%

乘、除(整除)、模(取余)

13

自左向右

+、-

加、减

12

4

>> 

<< 

右移位

左移位

11

5

关系

>=、>

<=、<

大于等于、大于

小于等于、小于

10

==、!=

相等、不等

9

6

&

位与

8

^

位异或

7

|

位或

6

7

逻辑

&&

逻辑与

5

||

逻辑或

4

8

条件

?:

条件(三目运算符)

3

自右向左

9

赋值

=

赋值

2

10

自反赋值

+=、-=

*=

/=

%=、&=

^=、|=

<<=

>>=

加赋值、减赋值

乘赋值

除赋值

模赋值、位与赋值

按位异或赋值、位或赋值

位左移赋值

位右移赋值

2

11

逗号

,

逗号

1

(最低)

自左向右

 

分支语句:

if语句:

1.    if(表达式)语句;  

2.    if(表达式)  

3.        语句1  

4.    else  

5.        语句2 

switch语句:

1.    switch(表达式)  

2.    {  

3.        case 常量1:  

4.            语句序列1  

5.    break;  

6.        case 常量2:  

7.            语句序列2  

8.    break;  

9.            ……  

10.      case 常量n:  

11.          语句序列n  

12.  break;  

13.      default:  

14.          语句序列n+1;  

15.  }  

循环语句:

for语句:

1.    for(表达式1:循环变量赋初值;表达式2:循环结束条件;表达式3:循环体后对循环变量的改变)  

2.        循环体语句;  

while语句:

1.    循环变量赋初值语句;  

2.    while(循环结束条件)  

3.        循环体语句;  

4.    循环体后对循环变量的改变语句

do-while语句:

1.    循环变量赋初值语句;  

2.    do  

3.        循环体语句;  

4.        循环体后对循环变量的改变语句;  

5.    while(循环继续条件);

自定义函数:函数不能嵌套定义(main函数也是函数),但是可以嵌套调用

1.    函数类型 函数名(形式参数表)  

2.        {  

3.            声明部分  

4.            语句部分  

5.    }  

调用函数:

1.    函数名(实际参数表);  

int

1234

十进制

1234567890

long

1234l

八进制(0开头)

012345670

unsigned int

1234u

十六进制(0x0X开头)

0x1234567890ABCDEF

调试:F9:设置断点位置→F5:进入调试界面→F10:单步执行→Shift+F5:结束调试

(数据类型)表达式  强制数据类型转换运算符

一维数组定义:数据类型数组名[数组长度]={0,1,2,3……}

一维数组引用:数组名[下标],下标从0开始

冒泡排序法:模仿自然界中气泡上升,重物下降,两两比较,n个数进行n-1轮排序

%s 字符串格式控制符

gets(); 字符串输入函数=scanf(“%s”,字符串标识符); scanf不能输入带有空格的字符串

puts(); 字符串输出函数=printf(“%s”,字符串标识符);

getchar(); 单个字符输入函数,可以用于暂停程序

putchar(); 单个字符输出函数

string.h字符串处理函数库

strlen(字符串);

求字符串长度

由函数值返回字符串不包括’\0’在内的实际字符长度

strcpy(目的字符串,源字符串);

字符串复制

将源字符串的内容复制到目的字符串中

strcmp(字符串1,字符串2);

字符串比较

对两个字符串从左到右按ASCII码值逐个比较

strcat(目的字符串,源字符串);

字符串连接

将源字符串添加到目的字符串’\0’,返回目的字符串首地址

二维数组定义:数据类型数组名[][]={{第一行},……,{n}}

二维数组引用:数组名[行下标][列下标]

多维数组以二维数组推广

结构体

成员项1

成员项2

成员项n

结构体变量1

成员

成员

成员

结构体变量n

成员

成员

成员

结构体数组

构造体定义:

struct 结构体名

{

       数据类型成员项1;

       数据类型成员项2;

       数据类型成员项n;

}结构体变量表(可选);注意:定义是一个语句,以分号结尾

结构体变量定义:struct 结构体名结构体变量名;

结构体成员赋值:struct 结构体名结构体变量名={成员数据1,……,成员数据n};

结构体变量成员引用:结构体变量名.成员项名

结构体数组定义:struct 结构体名结构体数组名[维界-整数常量表达式];

结构体数组赋值:struct 结构体名结构体数组名[维界-整数常量表达式]={数据表};

共用体使用方法同结构体

枚举定义:enum 枚举名{元素表};

枚举变量定义:enum 枚举名枚举变量名;

枚举元素按顺序编号,默认从0开始,也可以自定义编号,若某一元素没有指定编号,则为前一元素编号+1

自定义编号:enum 枚举名{元素=编号};

可以使用元素或编号对变量进行初始化,但编号必须进行转换

Day enDay=Sun;等价于Day enDay=(Day)0;

为数据变量定义别名:typedef 现有数据类型名新数据类型名;

posted @ 2021-04-13 12:00  米开朗琪罗苏格拉底  阅读(62)  评论(0)    收藏  举报