少英C语言自学笔记.docx

上传人:b****1 文档编号:20139708 上传时间:2023-04-25 格式:DOCX 页数:17 大小:24.50KB
下载 相关 举报
少英C语言自学笔记.docx_第1页
第1页 / 共17页
少英C语言自学笔记.docx_第2页
第2页 / 共17页
少英C语言自学笔记.docx_第3页
第3页 / 共17页
少英C语言自学笔记.docx_第4页
第4页 / 共17页
少英C语言自学笔记.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

少英C语言自学笔记.docx

《少英C语言自学笔记.docx》由会员分享,可在线阅读,更多相关《少英C语言自学笔记.docx(17页珍藏版)》请在冰豆网上搜索。

少英C语言自学笔记.docx

少英C语言自学笔记

一、运算符

1、算数运算符:

+﹣*/(除)%(取余数)

2、关系运算符:

>>=<<=!

=(不等于)==(等于)

3、逻辑运算符:

(非):

真----假

假----真

&&(与):

真&&真----真

真&&假----假

假&&真----假

假&&假----假

||(或):

真||假----真

假||真----真

真||真----真

假||假----假

▲①&&左边的表达式为假,右边的表达式肯定不会执行

||左边的表达式为真,右边的表达式肯定不会执行

②逻辑运算符的优先级由高到低:

、&&、||

4、赋值运算符:

=+=*=/=﹣=

★优先级别:

算数>关系>逻辑>赋值

二、什么是字节

字节就是存储数据的单位,并且是硬件所能访问的最小单位。

1字节=8位1K=1024字节1M=1024K1G=1024M

三、常量以什么样的二进制代码存储在计算机中的

1、整数是以补码的形式转化为二进制代码存储在计算机中的

2、实数是以IEEE754标准转化为二进制代码存储在计算机中的

3、字符的本质实际也是与整数的存储方式相同

四、格式输出函数(printf)

printf函数的作用是向终端(输出设备)输出若干任意类型的数据。

其一般格式为:

printf(格式控制,输出列表)

格式控制是用双引号括起来的字符串(称为转换控制子符串),包括格式字符、普通字符。

格式字符是将输出的数据转化为指定的格式输出,以“%”字符开头;普通字符是需要原样输出的字符,包括双引号内的逗号、空格和换行符。

printf()的4种用法:

1、printf(“字符串”)

2、printf(“输出控制符”,输出参数)

3、printf(“输出控制符1输出控制符2...”,输出参数1,输出参数2...)

▲输出控制符与输出参数的个数必须一一对应

4、printf(“输出控制符非输出控制符”,输出参数)

★Printf函数的附加格式说明字符:

l用于长整型整数,可加在格式符d、o、x、u前面

m(代表一个整数)数据最小宽度

n(代表一个整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数

-输出的数字或字符在域内向左靠

①%ms即%10s表示输出字符串占m列,如果字符串本身长度大于m,则将字符串全部输出,若字符串长度小于m,则在字符串的左侧用空格补全。

②%m.ns即%10.3s表示输出占m列,但只取字符串左端n个字符,这n个字符输出在m列的右侧,左补空格。

③%-ms即%-10s表示如果字符串长度小于m,则在m列范围内,字符串向左靠,右补空格。

④%-m.ns即%-10.3s表示n个字符输出在m列范围内的左侧,右补空格;如果n>m则m自动取n值,即保证n个字符正常输出。

五、格式输入函数(scanf)

scanf函数的功能是指固定的格式,并按照指定的格式接收用户在键盘上输入的数据,最后将数据存储在指定的变量中。

其一般格式为:

scanf(格式控制,地址列表),取地址符&。

★scanf函数的附加格式说明字符

l用于输入长整型数据(可用于%ld、%lo、%lx、%lu)及double型数据(%lf、%le)

h用于输入短整型数据(可用于%hd、%ho、%hx)

n(整数)指定输入数据所占宽度

*表示指定的输入项在读入后不赋给相应的变量

▲输入/输出控制符:

%d——int输入/输出(有符号)十进制整型

%ld——longint输入/输出(有符号)十进制长整型

%u——用来输入/输出(无符号)十进制整型

%c——char输入/输出单个字符

%f——float输入/输出单精度浮点型

%lf——double输入/输出长双精度浮点型

%x(或者%X或者%#X)——int或longint或shortint十六进制输入/输出

%o——int或longint或shortint八进制输入/输出

%s——输出字符串

五、if的用法

if语句有3中形式,分别为:

if语句形式、if...else语句形式、elseif语句形式。

(if默认的只能控制一个语句的执行或不执行。

if语句形式:

if(表达式)

语句

if…else语句形式:

if(表达式)

语句块1;

else

语句块2;

elseif语句形式:

if(表达式1)

语句1;表达式1成立,执行语句1

elseif(表达式2)

语句2;表达式1不成立,表达式2成立,执行语句2

elseif(表达式3)

语句3;表达式1、2不成立,表达式3成立,执行语句3

else

语句n;以上表达式均不成立,执行语句n

★if的嵌套形式:

if(表达式1)

{

if(表达式2)语句块1;

else语句块2;

}

else

{

if(表达式3)语句块3;

else语句块4;

}

▲在使用if语句嵌套时,应注意if与else的配对情况;else总是与其上面的最近的未配对的if进行配对。

六、常用转义字符表

\n回车换行\t横向跳到下一制表位置

\v竖向跳格\b退格

\r回车\f走纸换页

\\反斜线符“\”\’单引号符

\a鸣铃\ddd1~3位八进制数所代表的字符

\xhh1~2位十六进制数所代表的字符

七、条件运算符(?

条件运算符对一个表达式的真或假值进行,然后根据检验结果返回另外两个表达式中的一个。

条件运算符的一般形式:

表达式1?

表达式2:

表达式3;

在运算中,先对表达式1的值进行检验,如果只为真,则返回表达式2的结果值;如果为假,则返回表达式3的结果值。

八、switch语句

switch语句是多分支选择语句(提高可读性),switch语句检验的条件必须是一个整型表达式(可包含运算符和函数调用);而case语句检验的值必须是整型常量(可以是常量表达式或常量运算)。

switch语句的一般形式为:

switch(表达式)

{

case情况1:

语句块1;

break;

case情况2:

语句块2;

break;

case情况n:

语句块n;

break;

default:

默认情况语句块;

break;

}

▲在每一个case或default语句后都有一个break关键字,break语句用于跳出switch结构,不再执行switch下面的代码。

如果将case后面的(break)去掉,则会将case检验相符情况后的所有语句进行输出;任意两个case语句都不能使用相同的常量值。

▲在使用switch语句时,如果没有一个case语句后面的值能匹配switch语句的条件,就执行default语句后面的代码,每一个switch结构只能有一个default语句。

九、循环语句

1、while语句:

使用while语句可以执行循环结构,其一般形式为:

while(表达式)语句。

while语句先检验一个条件,即括号中的表达式;当表达式为真时,则执行紧跟其后的语句或语句块。

每完成一遍循环,程序都将回到while语句处,重新检验条件是否为真。

若为真,那么循环将一直执行,直到条件为假时,循环终止。

若一开始条件就为假,则循环一次也不执行,直接执行后面的程序代码。

2、do-while语句:

do-while语句先执行循环体语句中的内容,再判别表达式,若表达式为真,返回重新执行循环体语句,执行循环;直到表达式的判断为假时,循环终止。

其一般形式为:

do

{

循环体语句

}while(表达式);

▲while语句与do-while语句的区别:

while语句在每次循环之前检验条件,do-while语句则在每次循环之后检验条件。

3、for语句:

for语句的一般形式为:

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

当执行for语句时,程序先计算表达式1的值,再计算表达式2的值,若表达式2的值为真,则执行循环体的内容,并计算表达式3的值;然后检验表达式2,为真,执行循环,如此反复,直到表达式2的值为假,退出循环。

十、转移语句

1、goto语句:

goto语句为无条件转向语句,可以使程序立即跳转到函数内部的任意一条可执行语句;其一般形式为:

goto标识符;。

goto后的标识符就是要跳转的目标,当然这个标识符要在程序的其它位置给出,但是其标识符要在函数内部。

如:

gotoShow;

printf(“第一个”);

Show:

printf(“第二个”);

goto后的Show为跳转的标识符,而其后的Show:

代码表示goto语句要跳转的位置;因此,上面语句中的第一个printf函数不会执行,而会执行第二个printf函数。

▲跳转的方向可向前、可向后;可跳出一个循环,也可跳入一个循环。

十一、数组

1、一维数组(用以存储一维数列中数据的集合)

一般形式为:

数据类型数组名[常量表达式];如:

intArray[5];

△类型说明符表示数组中所有元素的类型。

△数组标识符就是数组变量的名称,命名规则与变量名一致。

△常量表达式定义了数组中存放的数据元素的个数,即数组长度。

如:

intArray[5];

5表示数组中有5个元素,下标从0开始,到4结束==》【不可使用元素Array[5],否则会出现下标越界的错误】。

▲一维数组的初始化:

①在定义数组时可直接对数组元素赋初值,如:

intArray[6]={1,2,3,4,5,6};

②可以只给一部分元素赋值,未赋值的部分元素值为0。

(赋值顺序由前至后)

③在对全部数组元素赋初值时可以不指定数组长度,如:

intArray[]={1,2,3,4}

2、二维数组

一般形式为:

数据类型数组名[常量表达式1][常量表达式2];

其中:

“常量表达式1”被称为行下标,“常量表达式2”被称为列下标。

如:

二维数组intArray[n][m];

其行下标取值范围为0~(n-1),列下标取值范围为0~(m-1)。

△二维数组的最大下标元素是Array[n-1][m-1]。

△下标可以是整型常量或整型表达式。

△不管是行下标还是列下标,其索引都是从0开始的。

▲二维数组的初始化跟一维数组一样,也可以在声明时对其进行初始化

3、字符数组

字符数组的定义与其他数据类型的数组定义类似,一般形式为:

char数组名[常量表达式];

十二、字符处理函数

1、字符串复制

strcpy函数功能:

把源字符数组中的字符串复制到目的字符数组中,字符串结束标志“\0”也一同复制。

其语法格式为:

strcpy(目的字符数组名,源字符数组名);

▲①要求目的字符数组有足够的长度,否则不能全部装入所复制的字符串。

②“目的字符数组”必须写成数组名形式;而“源字符数组”可以是字符数组名,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。

2、字符串连接

strcat函数功能:

把源字符数组中的字符串连接到目的字符数组中字符串的后面,并删去目的字符数组原有的结束标志“\0”。

其语法格式为:

strcat(目的字符数组名,源字符数组名);

▲要求目的字符数组有足够的长度,否则不能全部装入所复制的字符串。

3、字符串比较

strcmp函数功能:

两个字符串从首字母开始,按照ASCLL码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。

其语法格式为:

strcmp(字符数组名1,字符数组名2);

▲返回值如:

①字符串1=字符串2,返回值为0;

②字符串1>字符串2,返回值为正数;

③字符串1<字符串2,返回值为负数;

4、字符串大小写转换

strupr函数功能:

将字符串中的小写字母变成大写字母,其他字母不变。

其语法格式为:

strupr(字符串);

strlwr函数功能:

将字符串中的大写字母变成小写字母,其他字母不变。

其语法格式为:

strlwr(字符串);

5、获取字符串的长度

strlen函数功能:

计算字符串的实际长度(不含字符串结束标志“\0”),函数返回值为字符串的实际长度。

其语法格式为:

strlen(字符数组名);

十三、函数的调用

1、函数调用方式(包括:

函数语句调用、函数表达式定义、函数参数定义3种方式)

①函数语句调用:

把函数的调用作为一个语句就叫函数语句调用。

程序如下:

#include

voidDisplay()//定义函数

{

printf(“justshowthismessage。

”);输出信息

}

intmain()

{

Display();//函数语句调用

ruturn0;}//程序结束

②函数表达式定义:

函数出现在一个表达式中,这时要求函数带回一个确定的值,这个值做为参加表达式的运算。

程序如下:

#include

intAddTwoNum(intiNum1,intiNum2);/*声明函数,函数进行加法计算*/

intmain()

{

intiResult;/*定义变量用来存储计算结果*/

intiNum3=10;/*定义变量,赋值为10*/

iResult=iNum3*AddTwoNum(3,5);/*在表达式中调用函数AddTwoNum*/

printf("Theresultis:

%d\n",iResult);/*将计算结果进行输出*/

return0;/*程序结束*/

}

intAddTwoNum(intiNum1,intiNum2)/*定义函数*/

{

intiTempResult;/*定义整型变量*/

iTempResult=iNum1+iNum2;/*进行加法计算,并将结果赋值给iTempResult*/

returniTempResult;/*返回计算结果*/

}

③函数参数调用:

函数调用作为一个函数的实参,这样讲函数返回值作为实参传递到函数中使用。

程序如下:

#include

intAddTwoNum(intiNum1,intiNum2);/*声明函数,函数进行加法计算*/

intmain()

{

intiResult;/*定义变量用来存储计算结果*/

iResult=AddTwoNum(10,AddTwoNum(3,5));/*在参数中中调用函数AddTwoNum*/

printf("Theresultis:

%d\n",iResult);/*将计算结果进行输出*/

return0;/*程序结束*/

}

intAddTwoNum(intiNum1,intiNum2)/*定义函数*/

{

intiTempResult;/*定义整型变量*/

iTempResult=iNum1+iNum2;/*进行加法计算,并将结果赋值给iTempResult*/

returniTempResult;/*返回计算结果*/

}

2、函数的嵌套调用

在C语言中,函数的定义都是平行的、独立的,即在定义函数时,一个函数体内不能包含“定义”的另一个函数;但可以嵌套调用函数。

程序代码如下:

①intmain()

{

voidDisplay()//错误!

不能在函数内定义函数

{

printf(“Thisfunctioniswrong”);

}

}

②voidShowMess()//定义函数

{

printf(“TheShowMessagefuntion”);

}

voidmain()

{

ShowMessage();//正确,在函数体内进行函数的嵌套调用

}

3、递归调用

C语言的函数都支持递归,即每个函数都可以直接或间接地调用自己;所谓的间接调用指在递归函数调用的下层函数中再调用自己。

十四、内部函数和外部函数

1、内部函数

定义一个函数,该函数只被所在的源文件所使用,称这样的函数为内部函数,内部函数又称为静态函数。

定义内部函数,只需在函数返回值类型和函数名前加上关键字static进行修饰:

static返回值类型函数名(参数列表)

▲使用内部函数的好处是:

可以使函数只局限在函数所在的源文件中,如果在不同的源文件中有同名的内部函数,则这些同名的函数是互不干扰的。

2、外部函数

外部函数就是可以被其他源文件调用的函数,定义外部函数,只需在函数返回值类型和函数名前加上关键字extern进行修饰:

extern返回值类型函数名(参数列表)

▲在C语言中定义函数时,若不指明函数是内部函数、还是外部函数,那么默认外部函数,即定义外部函数时可以省略关键字extern。

十五、局部变量和全局变量

1、局部变量

在一个函数的内部定义的变量(或函数的形式参数)是局部变量,局部变量的作用范围仅限于函数内部的所有语句块。

在语句块内声明的变量仅在该语句块内部起作用,当然也包括嵌套在其中的子语句块。

▲局部变量的屏蔽作用:

内层作用域中的变量间屏蔽外层作用域中的那个变量,直到结束内层作用域为止。

2、全局变量

在所有函数外部声明的变量,称为全局变量;全局变量可以在程序中的任何位置进行访问。

▲全局变量不属于某个函数,而属于整个源文件,但如果外部文件要进行使用,则要用extern进行引用修饰。

(全局变量的值的改变会影响所有引用该全局变量的函数)

十六、指针(指针的本质就是一个操作受限的非负整数)

1、指针变量的一般形式:

数据类型*变量名;

2、地址:

地址就是内存区对每个字节的编号。

(指针就是地址,地址就是指针)

3、指针变量:

专门用来存放另一个变量地址的变量是指针变量。

△不同类型的指针变量所占的字节一样,都占4个字节。

4、指针变量的运算

①不能相加、相乘和相除,但可以相减。

▲只有当两个指针变量指向同一块连续的空间中的不同存储单元时,两个指针变量可进行相减(程序如下)

#include

#include

intmain()

{

inta[5],*p,*q;//定义一个一维数组和两个指针变量

p=&a[0];//将一维数组a的首地址赋给p

q=&a[4];//将一维数组a的末地址赋给q

printf(“p和q所指向的单元隔%d个单元\n”,q-p);//将p-q运算的结果输出

system(“pause”);//冻结屏幕,便于观察程序执行的结果

reyurn0;//程序结束

}

5、指针的自加、自减运算

假设指针p指向变量i的地址,如果i数据类型为整型,则执行p++(p--)后,p的值增加(减少)4(4个字节),如果i的数据类型为字符型,则执行p++(p--)后,p的的值增加(减少)1(1个字节),即指针按照它所指向的的变量的数据类型的直接长度进行增或减。

▲使用指针变量之前需先定义且赋予具体的值,未经赋值的指针变量不能使用。

给指针变量赋值只能赋予地址,若赋予任何其他数据,将引起错误。

★注意:

1、处理用户非法输入的代码(即错误的代码):

while((ch=getchar())!

=’\n’)continue;

2、除法/的运算符结果和运算对象的数据类型有关,两个数都是int,则商就是int,若商有小数,则截取小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。

如:

16/5==316/5.0==3.20000-13/4==-43/5==0

3、取余%的运算对象必须是整数,结果是整除后的余数,其余数的符号与本除数相同。

如:

13%3==113%-3==1-13%3==-1-13%23==-13

4、scanf(“%d”,&a[i]);指从键盘获取一个十进制整数,并赋值给一维数组a[i]。

5、用C语言生成的可执行文件(.exe),运行结果一闪就没了,可在ruturn的语句的上面加system("pause");这条语句解决。

6、如果用+、--、*、/运算的两个数中有一个为实数,那么结果是double型,这是由于所有实数都按double型进行运算的。

7、在C语言中,可以用逗号将多个表达式分隔开来,其中,用逗号分隔的表达式被分别计算,并且整个表达式的值是最后一个表达式的值。

逗号表达式称为顺序求值运算符,一般形式为:

“表达式1,表达式2,…,表达式n”先求解表达式1,再求解表达式2,一直求解到表达式n,整个逗号表达式的值是表达式n的值。

8、printf函数使用的是变量的标示符,而不是变量的地址;scanf函数使用的是变量的地址,而不是变量的标示符。

9、大写字符与小写字符的ASCII码值相差32。

如字符A的ASCII值为65,a的ASCII值为97,即a的ASCII值=A的ASCII值+32。

10、getchar∕putchar函数用于单个字符的输入∕输出,而gets∕puts函数则用于字符串的输入∕输出

11、srand和rand函数都包含在stdio.h头文件中,srand函数的功能是设定一个随机发生数的种子,rand函数式根据设定的随机发生数种子产生特定的随机数。

若在使用rand函数之前不提供种子值,也即不用srand设定种子值,则rand函数总是默认以1为种子,每次产生同样的随机数序列。

12、使用while和do-while语句循环时,循环变量初始化的操作应在while和do-while语句之前完成。

13、break语句不能用于循环语句和switch语句之外的任何其他语句中。

break语句是结束整个循环过程,不再判断执行循环的条件是否成立。

14、continue语句的作用是结束本次循环,即跳过循环体中尚未执行的部分,接着执行下一次循环操作。

continue语句只结束本次循环,并非终止整个循环的执行。

15、排序算法的比较:

插入法、冒泡法、交换法排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度;在这种情况下,择半法排序反而会显得速度慢了。

当排序的数量n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。

16、C程序中,不管main()函数在程序的哪个位置,程序都是从此处开始执行、在此结束;若遇到调用其他函数,则转去执行被调用的函数,该函数执行完毕后,重新返回main();只有在main()函数的所有课执行语句执行完毕时,整个C程序才执行完成。

17、函数是C语言的基本单元,在函数内不可再定义其他函数。

18、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1