第一章
- c语言是有
main
函数组成,main
函数代表主函数c语言程序都是从主函数开始到主函数结束,void
类型属于空类型大家写程序的话如果声明的void
类型最后结尾不用加return
返回,如果是INT main
就需要加return
第二章
- c语言本身不提供输入输出语句,
scanf
和print
,然后大家需要知道每个数据类型所占的字节,char
类型占一个字节,short
int
2个字节,int
整形是两个字节,long int
4个字节,float
是4个字节,double
是8个字节上面说的是针对16位操作系统,如果是32位操作系统int
是4个字节 - c语言分为整形常量,实行常量,需要明确的是c语言的整形常量不包括二进制由字母数字下划线组成,开头不可以是数字,整形常量的后面可以跟
l L
代表long int
类型,也可以是u
,实行常量记住一个口诀e
前e
后必有数e
后必须为整数
c语言严格区分大小写的,还有转义字符大家也许需要清楚,几个重要的,
\n
代表换行\t
是一个tab
就是空大概5 6个空格这个特别注意因为在程序结果中是频繁出现的坑
-
%d
是整形十进制的o
是八进制x
是十六进制的,u
为无符号十进制,c
只能输出一个字符,s
是字符串,f
为float
类型的一般需要保留6个小数double
也是分float
一样 -
C语言32个关键字,这个大家一般在程序都会遇到,在书的14页不用刻意记,这个关键字是不可以作为标识符的,但是
main scanf pinnt
可以作为标识符这三个不属于关键字 都是引入的函数 -
字符常量是单引号引起来的,字符串常量是双引号引起来的,并且字符常量必须是单个字符,字符串包含多个字符一般在选择题出现让判断正误,例如
‘ab
’这样是错的他只能括起来一个,“ab”
这个就是对的 一> 字符串是2个字节字符是1个因为字符串后面有\0,数字节的时候不要忘了\0 -
优先级的问题,从高到低依次是
单目运算符
算数运算符
移位运算符
关系运算符
位运算
逻辑
条件
赋值
逗号
- 依次 逗号是最低的优先级括号跟指向是最高的,这个主要考选择题的4则运算给你一个题让你计算但是需要按优先级计
第三章
-
putchar
函数这个函数是输出单个字符只能是单个字符不可以是字符串,也就是说用他的话只能输出单个字符,而getchar
这个是输入单个字符并且没有参数例如getchar()
这样括号里面没有东西,跟他对应的是puts跟gets 这两个跟前两个的区别就是他们是输入输出字符串,那个getchar
这个在选择题经常考判断正误,后面括号里给你加东西, -
%d
代表十进制%0
代表8进制%x
代表16进制%c
是输出单个字符,%s
是字符串%f
输出的话默认6个小数后面,然后就是这个比如int a=254 printf("%5d",a)
;这个需要左补空格因为规定了5个长度而a只有3个左移补两个空格默认左对齐右补空格 ,
-
右对齐左补空格三角形面积和二元一次方程求根必须会
第四章
- 循环的嵌套,
if
的话他配对的话就是跟最进的一个没有配对的else
是一组的,还有switch
语句,他的写法是switch(表达式){ case:}
这个下午咱们遇到题了语音说,然后就是需要知道大小写转换A大写字母的ascll是65 小写是97他们相差32, 还有就是编程题闰年的条件他是能被4整除但是不能被100整除又能被400整除,就是if(year%4 == 0&&year%100!=0||year%400 == 0)
scanf
函数的格式考察:
注意该函数的第二个部分是&a
这样的地址,不是a; 如何实现两个变量x ,y
中数值的互换(要求背下来)
不可以把x=y ,y=x;
要用中间变量t=x;x=y;y=t。
第五章
特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。 1)关系表达式: 表达式的数值只能为1(表示为真),或0(表示假) 当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1; 2)逻辑表达式: 只能为1(表示为真),或0(表示假) a) 共有 ` && || !` 三种逻辑运算符号。 b)`!>&&>||` 优先的级别。 c) 注意短路现象。考试比较喜欢考到。 d) 要表示 x 是比0大,比10小的方法。`0<X<10` 是不可以的(一定记住)。`(0<X)&&(X<10)` 表示比0大比10小。
-
while
语句一般用于循环次数无法确定的时候do while
这个至少循环依次for
语句格式是for(;;)
主要用于循环次数确定的语句这个自己写编程的时候会遇到 -
条件表达式:
表达式1 ?表达式2 :表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式3的数值。
考试口诀:真前假后。 -
switch
语句:
a)一定要注意 有break
和没有break
的差别,没有break
时候,只要有一个case
匹配了,剩下的都要执行,有break
则是直接跳出了switch
语句。default
可以放在任何位置,也只起标号作用b)
for
循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d)do-while()
循环的最后一个while();
的分号一定不能够丢。 -
break
和continue
的差别
记忆方法:
break
:是打破的意思,(破了整个循环)所以看见break
就退出整个一层循环。
continue
:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。然后这一章需要掌握的编程96页逆序数输出,97页百元百鸡的问题102页5.10程序举例哪个计算兔子的斐波那契数列问题还有103页求Π的近似值,104页输出一个逆序数的问题还有105页判断素数的几个方法106页求1的阶乘到100的阶乘,这个是考试经常考的编程的经典算法那个页书可能有差别你们看下你们的书
第六章
一维数组的重要概念:
对 a[10]
这个数组的讨论。
-
a 表示数组名,是第一个元素的地址,也就是元素
a[0]
的地址。 -
a 是地址常量,所以只要出现
a++
,或者是a=a+2
赋值的都是错误的a+1
表示下一个紧挨着的元素 ->a+1 = a[1]
如果有 `a[3][3] ={1,2,3,4,5,6,7,8,9}` 这样的题目。 步骤一:把他们写成:
第一列 第二列 第三列 a[0] 1 2 3 第一行 a[1] 4 5 6 第二行 a[2] 7 8 9 第三行
1.一维数组比方说 a[5]
他有5个元素但是他是从0开始的就是包含 a[0] a[1] a[2] a[3] a[4]
5个元素,
2.数组名不可以跟其他变量名相同
3.数组名代表数组的首地址就是 a
的值跟 a[0]
的值相同
4.例如 int n,a[10]={3*n};
这个是错误的 因为n的值不确定不可以这样进行赋值 。 int a[3.5],a[0];
这也是错误的写法
5.如果定义 int a[10];
然后给出了选项让判断正确 比如 a[10] a[9]
这个肯定是a[9]
对 a[10]
会出现越界
6.一维数组的下标可以省略,例如 int a[]
这样也是对的
7.还有一种情况就是 a[5]={0,1,2,3,4,5}
这个编译时会出现错误
二维数组做题目的技巧:
如果有 `a[3][3]={1,2,3,4,5,6,7,8,9}` 这样的题目。 步骤一:把他们写成:
第一列 第二列 第三列 a[0] 1 2 3 第一行 a[1] 4 5 6 第二行 a[2] 7 8 9 第三行 步骤二:这样作题目间很简单: `*(a[0]+1)` 我们就知道是第一行的第一个元素往后面跳一列,那么这里就是 `a[0][1]` 元素,所以是2。 `*(a[1]+2)` 我们就知道是第二行的第一个元素往后面跳两列。那么这里就是 `a[1][2]`元素,所以是6。
一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。
数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写
int a[]={1,2}
合法。int a[][4]={2,3,4}
合法。 但 int a[4][]={2,3,4}
非法。
二维数组比如 int a[2][3]
代表他有2行3列 并且行跟列都是从0开始的, 还有就是字符数组,他的定义为 char a[2][3]
字符处理函数
要引入字符串函数头文件 string.h
-
strcat(字符数组名1,字符数组名2)
字符串连接函数C 库函数 `char *strcat(char *dest, const char *src) `把 `src` 所指向的字符串追加到 `dest` 所指向的字符串的结尾。 该函数返回一个指向最终的目标字符串 `dest` 的指针。
- 比如
char a[10]="abc";char b[10]="bcd"
然后strcat(a,b)
现在a
会变成abcbcd
#include <stdio.h> #include <string.h> int main () { char src[50], dest[50]; strcpy(src, "This is source"); strcpy(dest, "This is destination"); strcat(dest, src); printf("最终的目标字符串: |%s|", dest); return(0); } /* * 运行结果 * 最终的目标字符串: |This is destinationThis is source| */
- 比如
-
strcpy(字符数组名1,字符数组名2)
字符串复制函数C 库函数 `char *strcpy(char *dest, const char *src)` 把 `src` 所指向的字符串复制到 `dest`。 需要注意的是如果目标数组 `dest` 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
-
dest
– 指向用于存储复制内容的目标数组。 -
src
– 要复制的字符串。该函数返回一个指向最终的目标字符串
dest
的指针。
- 执行步骤跟上面一样就是拿上面哪个来说
strcpy(a,b)
a
会变为bcd
#include <stdio.h> #include <string.h> int main () { char str1[]="Sample string"; char str2[40]; char str3[40]; strcpy (str2,str1); strcpy (str3,"copy successful"); printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3); return 0; } /* * 运行结果 * str1: Sample string * str2: Sample string * str3: copy successful */
-
-
strlen
测字符串的长度,- 这个主要会出选择题让你测字符串长度
- 比如
char a[6]="abc"
他的长度为3,但是他的字符个数为4,因为字符串有个\0
结尾
#include <stdio.h> #include <string.h> int main () { char str[50]; int len; strcpy(str, "This is runoob.com"); len = strlen(str); printf("|%s| 的长度是 |%d|\n", str, len); return(0); } /* * 运行结果 * |This is runoob.com| 的长度是 |18| */
-
strcmp(字符串1,字符串2)
字符串相等,返回0
字符串1>字符串2,返回值大于0
字符串1<字符串2,返回值小于0#include <stdio.h> #include <string.h> int main () { char str1[15]; char str2[15]; int ret; strcpy(str1, "abcdef"); strcpy(str2, "ABCDEF"); ret = strcmp(str1, str2); if(ret < 0) { printf("str1 小于 str2"); } else if(ret > 0) { printf("str1 大于 str2"); } else { printf("str1 等于 str2"); } return(0); } /* * str1 大于 str2 */
6.1.4 求最大值 p133 6.1.5 用数组处理斐波那契额数列 p133 6.2.8 冒泡排序 选择排序 p135 6.3.3 行列互换 p143 6.5.3 杨辉三角形 p161 6.4.8 不用库函数实现复制 p161
第七章
- 函数的调用时的实参可以是常量变量表达式
- 函数如果声明的是int类型就必须有
return
返回值 - 不返回函数值的函数可以明确为空类型,即
void
- 函数的返回值只能有一个但是
return
语句可以有多个 - 二维数组作为函数形参时,只有一维的大小可以省略,第二维的大小必须指定
- 函数不可以嵌套定义但可以嵌套调用
- 一个函数即可以被其他函数调用也可以调用其他函数,这就是函数嵌套调用
- 只能在本源程序中使用的全局变量为static
- 自动类auto 静态类static 寄存器类register 还有外部extern变量
函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。
malloc()
申请内存 在堆里
free()
释放内存
7.2.2 用函数求阶乘 p173 7.4.4 用函数排序 p184 7.9.1 回文 p210 7.9.2 完数指针 p211 这章不涉及编程考试应该不会出的,大佬的话可以写一下那4个函数的编程用指针 就是复制连接长度比较
第八章
- 指针变量的本质是用来放地址,而一般的变量是放数值的。
int *p
中*p
和p
的差别:
*p
可以当做变量来用;*
的作用是取后面地址p
里面的数值
p
是当作地址来使用。
`*p++` 和 `(*p)++`的之间的差别:==改错题目中很重要== `*p++`是 地址会变化。 `(*p)++` 是数值会要变化。 `p == &*p`
- 三名主义:(考试的重点)
- 数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)
- 函数名:表示该函数的入口地址。
- 字符串常量名:表示第一个字符的地址。
- 只有指向同一数组的两个指针变量之间才能运算,否则毫无意义,可以进行减法运算但是不能加,比如
p1+p2
是没有意义的 - 设
p
为指针变量,则p==0
表示p
为空指针,他不指向任何变量 - 前提条件
p=a
地址&a[i] a+i
元素a[i] *(a+i)
这个会出选择题让你看他是元素还是地址 int *pa[3]
这个的意思就是表示一个指针数组,他有3个数组元素,每个元素值都是一个指针,指向整型变量int (*pa)[3]
这个的意思是pa
为指向含n
个元素的一维数组的指针变量
4 5这个的话属于定义会直接考选择题,就考这个定义
第九、十章
struct stu
{
int num;
char name a[20];
char sex;
float score;
}boy1;
这个引用的一般格式就是结构体变量名.成员名 即 boy1.num
就是第一个人的学号
-
如果是指向结构体变量的指针,有三种定义方法
1.变量名.成员名
2.(*指针名).成员名
3.指针名->成员名
-
共用体的话是跟上面结构体一样的就是把
struct
改成union
,然后共用体只考一个定义就是共用体变量所占内存长度等于最长的成员的长度,而结构体是所有的长度加起来的总和 -
然后说下宏定义,这个最主要的一个就是原样替换,先说下定义,题的话我下午出一个,定义是如果不是特殊需要预处理的语句的结尾不应该有分号,如果语句末尾加分号,则连同分号一起替换