C语言程序设计笔记

  • Post author:
  • Post category:其他

总体上必须清楚的:

1)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.

2)bit是位 ,是指为0或者1,byte是指字节,一个字节=八个位.

概念常考到的:

1、预编译(#)不是C语言的一部分,C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

4、算法的是一定要有输出的,它可以没有输入。

第一章概述

1.一个C语言的执行:从main函数开始,到main函数结束

2.C语言本身没有输入输出语句(用函数实现)格式化输入操作由库函数scanf完成,格式化输出操作由库函数printf完成

3.一个C源程序可由多个函数构成,但有且仅有一个main函数,且main函数位置任意

4.C语言程序的基本单位:函数!

5.注释的位置任意,但是不可以嵌套

6.C语言有32个关键字,9个控制语句,34种运算符

第二章 数据类型、运算符和表达方式

1.标识符、变量的命名:3个原则;常量:直接常量和符号常量(用一个标识符来表示常量#define)

变量实现的本质:给变量开辟一个空间(地址)存放

2.在数的后面加上U/u表示无符号整数,加L/l表示长整型数

3.整形数据在内存中以二进制补码的形式存放

4.判断某一数据类型占内存的字节数可用sizeof(数据类型说明)来计算

5.浮点型常量:只有十进制形式,全部都是有符号,默认类型为double,写答案的时候要记得小数!

6.字符是按其所对应的ASCII码值来存储的,一个字符占一个字节(即8位,但最高位为0),单引号内的字符不可以是’和\ P98(16)

7.字符串常量:保存每个字符的ASCII值,而且在末尾自动加上\0

8.转义字符:\加上字符或八进制或十六进制,只占一个字节

9.取余运算要求两边必须是整形数据,浮点数据不可以取余运算

10.除数或被除数中有一个是负数,取余运算的结果可根据公式m=pq+r 得到余数 P23

11.fabs:绝对值

12.自加自减只用于变量,不用于常量和表达式

13.逗号运算符:取最后的一个数字

14.赋值运算符(=):注意和判断(==)的区别!!!

15.自动类型转换:double是最高级 (int)(x+y)/(int)x+y注意两者区别

16.关系表达式:int a=0; double b=0.5,x=0.3;a<=x<=b的值为0,先比较左边的式子为1,1<=0.5显然不对

17.短路表达式:a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d) //m=0,n=1

先执行左边,为0,由于是与运算,就没有必要执行右边式子,所以n的值不变,m变为0

18.a>b ? a : c>d ? c : d;理解为a>b ? a :( c>d ? c : d),从左到右

第三章算法与控制语句

1.三种基本结构:顺序结构,循环结构(三个循环结构),选择结构(if和switch)

算法举例:判断三角形、求n!、判断一年是否闰年、反位输出、判断一个数是否为素数、三个数从小到大排序输出

2.格式化输出时printf的修饰符:%8d:占8个位,不足左补空格,超过则不理; %8.1f:浮点型数据(就是一串数字)占8个位,且小数点后面保留一位,不足左补空格; %10.5s:字符串占10个位,但只输出5个字符,不足左补空格;+:有符号的正数前显示+;-输出的数据左对齐(靠最左边)

3.格式化输入scanf: %d%d:输入时两个数字用空格隔开(输入内容的数据类型不同时,不需要空格也可以,或者遇Tab、回车,宽度、非法输入)

%d,%d:用逗号隔开(如果使用其他的标点符号,则与该标点符号相同)**若使用了标点隔开,那么输入时一定遇到标点才确定输入结束

用%c格式符时,空格和转义字符都是有效输入;

抑制字符*:表示按规定格式输入但不赋予相应变量,作用是跳过相应数据

4.getchar/putchar:读取或者输出字符;getchar:默认以回车符为结束,而且每次只能读取一个字符

5.if-else 配对原则:缺省{ }时,else总是和它上面离它最近的未配对的if配对

6.switch后面表达式的值必须是整型或字符型(可用ASCII码);每个case语句的冒号后面可以是0条或多条语句,多条语句时,可以不加{};如果case后面没有语句,这是多个case共用一条语句的情况;default是所有情况都不满足时运行,如果不是放在循环后面,也要加break,建议都加上;switch语句的嵌套:注意break够不够跳出两个循环!如果case后面没有break,那么执行完这条case语句后,会继续往后执行下一条case!

7.While语句先判断后执行,有可能循环一次也不执行

8.do…while先执行再判断,最少执行一次循环,注意while后面有分号;P75

9.for循坏注意过程P77;多层循环时,注意花括号管到哪里,输出变量的值是在内循环还是外循环!;100元换1元,5元,10元的所有兑换方案用3个for循环*******循环的调整语句时自加自减时,要记住:不管调整后是否执行循环,变量本身是已经变化的,写程序运行结果题会考!!!

10.continue:跳出本次循坏后面的语句,直接进入判断部分,看是否符合下一次循坏,可能进入下一层循环;只能用于循环结构中,不能用于其他结构

11.break:用于永久的终止本层循环;只能用于switch或者循环结构中;在多层循环语句中,break只向外跳一层循环

12.!*****自加自减会被放在循环中作为判断条件,如果判断结果是假,变量的值也还是变化的,考程序运行结果题******!

*********************************自加自减都是坑,别跳进去了*****************************

#涉及到每循环一次,符号就改变时,定义变量flag=-1;

第四章函数

1.函数不可以嵌套定义(就是在函数中又定义一个函数),只能嵌套调用!!!

2.形式参数:在函数定义中使用的参数;只能是变量,只有在调用时才会分配内存单元,调用结束后存储空间被释放;只在函数内部有效

3.如果形参和实参的类型不一致,以形参类型为准;形参只能是变量,实参可以是变量,常量和表达式

4.函数的定义:说明一个函数是怎么运行的;int max(int x,int y)

5.函数的声明:一般放在预编译后面,带分号,形参的名称可以省略;最简单是int max(int x,int y);或者int max(int ,int );C语言要知道调用函数的入口地址;一般在调用之前

6.单向值传递:实际参数将值传递给形式参数,调用的函数会返回一个值给主调函数;形参的任何改变不会对实参有影响;

7.函数中可以有多个return语句,但每次只执行一个;函数返回值的大小由return后面的表达式决定,返回值的类型由函数定义的类型决定

8.若调用一个非void函数,,且此函数中没有return语句,则返回一个不确定的值

9.递归调用:会按照原路线返回主调函数!!!求n!、斐波那契数列;

10.局部变量(内部变量):在复合语句中也可以定义,但作用域只在复合语句内

11.全局变量(外部变量):作用域是整个源程序;可以再用extern声明,被其他源文件使用,只赋一次值,如果没有赋值,自动赋初值0或空字符!;

12.局部变量和全局变量同名时,优先局部变量

13.动态存储:变量在函数调用时分配空间,函数调用后释放存储空间

14.静态存储:由系统分配固定的存储空间;可以是全局变量,也可以是局部变量,其定义初始化都在程序编译时进行;

15.auto变量:动态存储方式,都是局部变量(动态局部);形参的缺省存储类别;每次调用都赋一次值;

16.static变量:静态变量,每次只初始化一次(在编译时),如果没有赋值,自动赋初值0或空字符;程序结束才释放内存;静态局部:不能被其他函数使用,再次进入该函数时,保存上次的结果(继承性);静态全局:只在定义它的源文件中可见,其他源文件不可见,即不能再说明为外部变量(9)

17.register变量:寄存器变量,CPU中一点点存储功能的地方;一般为整型或字符型变量,只能是auto变量;每次函数调用时赋一次值

18.函数的隐含存储类别:extern(全局);函数中变量的隐含存储类别:static

19.内部函数:只能被本程序文件调用的函数

20.外部函数:用extern,可以简单理解为把函数定义放在另外一个.cpp源文件中

21.变量的数据类型决定变量占用内存的大小和数据表示的范围,而变量的存储类型决定变量的作用范围和生存周期!

22.变量按作用域分:全局和局部;按生存期分:静态和动态;

23.变量的存储类型:auto,register,static,extern

24.变量被赋初值可以分为编译和运行两个阶段

第五章数组

1.数组名是数组首元素的地址;读取键盘输入时不用&;编译时分配连续内存

2.只能逐个引用数组元素,不能一次引用整个数组,所有输出时只能采用for循环

3.两种排序方法:冒泡法和选择法;很重要!

4.利用数组解决问题:①将一串整数,依次左移一个数,且原来的第1个数移到最后去;(PPT34)

②输入m和k,将大于整数m且紧靠m的k个素数存入数组中并输出,例如,若输入17,5,则应输出19,23,29,31,37。 (36)

5.一维数组的运用:①查找指定数组 P158 ② 将一个数组中的元素首尾依次逆转并输出 P159

6.二维数组:C语言强制规定数组中的存储顺序为按行序存储,就是先让行不变;

7.赋值:可以缺行,不可以缺列!

8.运用:矩阵加法,乘法

9.字符数组的输入gets(str)/puts(str):输出时自动加换行符\n;用scanf(“%s”,str)时,不可以用空格,因为字符串遇空格结束;用scanf(“%c”,&str)时,地址符不可以省,一个一个读的时候,一个字符相当于一个变量

10.补充例题:从标准输入设备(键盘)中输入一行文字,查找该行文字中最长的单词 PPT78

11.scanf函数扫描字符串时,默认分隔符作为数据结束的标志,空格、换行和制表符字符也是分隔符

12.字符串处理函数:①赋值:strcpy ②连接:strcat

③比较:strcmp 比较的是ASCII码值大小,直到出现不同字符或\0,如果出现不同字符,以第一个不相同的字符比较为准;返回值是整数,若大于0,则前者大于后者…

④长度:strlen 返回有效字符数(除空字符以外的),注意和sizeof(算空字符)的区别

13.删除数组中符合条件的元素!如一个有n个元素的一维数组中,将所有相同的数删去,使之只剩一个;PPT113!

14.应用:将一维数组的元素循环右移k个位置;输出杨辉三角PPT104

第六章指针

1.指针:内存中的地址,本身是一个无符号整数;int*p,*属于变量名而不是类型名!

2.使用指针之前一定要有初始化:****p=&a **** p是a的地址

3.指针变量能够赋常量值或变量值;

4.C语言中,数组名是一个不可改变的指针,不能对它进行赋值运算

5.使用指针交换两个整数 P205

6.char* ps = “hello bit”;printf(“%s\n”,ps);//hello bit 字符数组打印方式

7.指针数组:存放指针的数组;数组指针:存放指针的数组

8.字符串赋值操作:char *s=”china”(char * s;s=”china”)!!!

最后

是大一学c语言的期末要考试的时候,自己总结的笔记,水平有限,欢迎大家指出错误!


版权声明:本文为magnitude_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。