目录
第1部分-程序的基本结构
1主要由函数组成
2有全局量,但尽量减少全局量的使用
3声明
4输入
5处理操作
6输出
第2部分-C语言基础
1各种常量的合法性判定(如:转义字符、整型常量的范围,double型常量)
2符号系统:关键字、标识符
3常用基本数据类型:int 、char、float、double, unsinged 无符号修饰各种数据类型(unsinged无符号如unsinged int 没有负号)
4各种表达式的计算(注意型和值)
5+、-、*、/、%,整数相除的结果为整数(除法可以在整数后加上.0转为浮点型)
如3/2=1; 3/2.0=1.2;
6数据类型的自动转换和强制转换
(1)在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:
- 数值型数据的转换:byte→short→int→long→float→double。
- 字符型转换为整型:char→int。
(2)当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换
int a=3;
double b=5.0;
a=(int)b;
意为将 double 类型变量 b 的值强制转换成 int 类型,然后将值赋给 a,但是变量 b 本身的值是没有发生变化的。
第3部分 顺序结构
1 语句的先后顺序决定了变量的内容4
2 格式化输入
%f(float)、%d(int)、%c(char)、%lf(double)、%s(字符串有 ’\0’) 、%m.nf
3 %c或者%s之前有其他输入语句要特别注意,
用getchar();或者fflush(stdin);清除键盘缓冲区
4 字符的输入输出:
scanf(“%c”,&c);
c=getchar();
printf(“%c”,c);
putchar(c);
5 字符串的输入输出:
gets(str);
puts(str);
scanf(“%s”,str);
printf(“%s”,str);
6 大小写字符之间相差32
如 A=a-32;
7 各种运算
算术、关系、逻辑、赋值
第4部分 选择结构
1 if语句三种形式,判断条件的正确描述
- If ()
- If () --else if ()
- If () -- else ()
2 多分支选择结构
switch语句的应用
switch (?)
{
case ? : ? break;
case ? : ? break;
}
3 if语句的嵌套使用,大括号的配对使用
//if(s=1)表示的是赋值,最好用if(1==s)
//if(s),s不为0将执行if的后续语句
//注意If(!s)非
//switch(p),p的范围为整数
第5部分 循环结构
1 while和do-while循环(表达方式、与自增自减运算结合);
(区别:while先判断满足条件再执行,do-while先执行再判断条件看看要不要再次执行)
2 for循环(与自增自减运算结合、三个表达式的执行顺序);
for( ; ; )//里面是分号不是逗号
3 break和continue语句的用法描述;
(1)break:用在循环语句中,强行结束循环的执行,不再判断执行的条件是否成立,直接转向循环语句下面的语句。结束break语句所在的循环,并不会终止其他的循环.
(2)continue:用在循环语句中,终止本次循环的执行,也就是跳出本次循环,接着进行下一次循环的判断。最常见的用途就是在遍历数组时跳过某些不符合特定条件的数组元素。
4 循环的嵌套;
把一个循环放在另一个循环体内,那么就可以形成嵌套循环
5 循环基本结构的综合应用。
//累加和,变量要初始化为0
//累乘,变量要初始化为1
第6部分 函数与编译预处理
1 函数的定义和使用的各种表述(例如嵌套使用);
2 变量的作用域和存储类型;
3 带参数的宏定义;
4函数嵌套调用;
5函数形参和实参的传递(值传递和指针传递,重点是指针传递);
6函数调用综合应用程序。
1.同时定义一个全局变量num和一个在主函数中的局部变量num,不会导致冲突
“全局变量”,作用域在整个C语言源文件;“局部变量”,
作用域在main函数中,
所以,它们是不冲突的,程序在编译的时候,也不会报错。
最终,程序执行的结果,以“局部变量”的值为准
2.如果没有返回值的话,那么你调用这个函数,只会进行里面定义的一些操作,但是不会返回一个确切的数字
3.在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的。在复合语句内定义的变量只在复合语句范围内有效,只有在本复合语句内才能引用它们,在复合语句以外是不能使用这些的。
4.C语言函数的定义不能嵌套,函数的调用可以嵌套。
5.C语言中函数的定义都是相互平行、相互独立的,也就是说在函数定义时,函数体内不能包含另一个函数的定义,即函数不能嵌套定义,但可以 嵌套调用。 嵌套函数,就是指在某些情况下,您可能需要将某函数作为另一函数的参数使用,这一函数就是嵌套函数。
6.实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
7.形参只能是变量,实参可以是常量、变量或表达式。 在被定义的函数中,必须指定形参的类型。
8.实参与形参的个数应一样,类型应一致。 字符型和整型某时候可以互相通用。
9.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。 调用结束后,将释放内存。 执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。
10.c语言规定,函数返回值的类型是由函数首部定义的类型决定。 函数返回值应与首部定义的类型一致,如若不一致,则自动将返回值强制转换为函数首部定义的类型
11.在C语言中,函数的定义是独立的,也就是说,一个函数不能定义在另一个函数内部。 但在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用。
12.main函数不能被被其他函数调用,每个函数都能单独编译,但不能单独运行,要通过main函数调用才能正确运行
13.静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
14.在函数调用过程中,如果函数A调用了函数 B,函数B又调用了函数A,则称之为函数的间接递归调用
15在C语言中,当定义一个函数的类型为void时,说明执行该函数不返回值或者没有返回值。
16.自定义的函数中可以有多个return语句,但是只能返回一个值
第7部分 数组
1 切记不要越界,数组的下标从0开始。
2 排序(冒泡法、选择法和擂台法、利用指针数组的字符串排序);
冒泡法(双层循环)
从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。3最大/小值及其下标
4 数组初始化或赋值及输入输出运算;(字符数组串输入不加地址符)
5 字符串运算(指针变量方法);
(一般情况也可以不用指针变量法,用数组下标法)
6 字符数组处理的综合应用程序。
7‘a’+1的结果为’b’ 、 ’9’-’0’的结果为9
(十六进制转换 ch-‘a’+10 //ch=a,十六进制的10)
8 字符串找最大值
第8部分 指针
1 指针变量的定义及使用;
2 指针变量存放的内容为地址
3 指针的基本运算(间接存取运算、赋值运算和加减运算);
指针的算术运算,
指针的算术运算实际是地址的运算,
指针运算只可以进行加减运算,
1,指针加减一个整数n,实际上就是往前或往后跳n下,跳的字节由数据类型决定,运算后的结果任然是一个地址,
2,两个指针相减,得到的是一个整数,这个整数所表示的意义是,这两个指针所代表的地址之间的数据个数,例如,在一个数组里让指向最后一个元素的指针和指向第一个元素的指针相减,就可以得到这个数组的长度,
3,自增,自减,他们都是从右向左进行结合的,且优先级相同
1,(*p)++:先取值后值加1。
2,*++p:指针p先加1,即p指向下一个数,后取出指向后的值;
3,++*p:同 (*p)++,他们两是等价的;
4,*p++:先取值,后让p++;
5,(*p)++:先取值,后让这个值加1;,
6,*(p++):先取值,后让p++;等价于4
4指向数组的指针变量的定义及使用(字符串的输出);
5指向一维数组的指针变量(行指针)的使用(引用元素);
(*(arry+i)+j)==arry[i][j]
6指针变量作函数参数;
7完成两个数交换的函数
void change(int *x,int *y)//形参
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
第9部分 结构体
结构体的存取长度计算;
结构体类型变量定义和使用;
结构体类型的数组变量的定义、初始化及应用;
定义点结构,完成距离的计算
第10部分 常用算法
1 求累加和、阶乘
递归法求n!
int fun(int n)
{
if(n==0||n==1)n=1;
else n=n*fun(n-1);
return n;
}
2数字倒序、字符串倒序
反序存放数组
int trans(int *pa,int n)
{
int m,temp;
int *p,*pi,*pj;
m = (n-1) / 2;
pi = pa;
pj = pa+n-1;
p = pa + m;
for(pi = pa; pi <= p; pi++, pj--)
{
temp = *pi;
*pi = *pj;
*pj = temp;
}
return 0;
}
3判断素数
void pr_(int a)
{
int i;
for(i=3;i<=a;i+=2)
{
if(a%i==0)break;
}
if(a==i)printf("%d是素数",a);
else printf("%d不是素数",a);
}
4打擂台找最大(并输出)
char f( char x, char y )
{
if ( x > y )
return(y);
else return(x);
}
5两数交换的函数(前面写了 略)
6排序算法(冒泡法、选择法)(前面写了)
7数组元素的插入和删除(字符数组的删除)
判断并删除数组中的数字,记下来删了多少个
int fun(char A[80])
{
int i,n=0;
int j,len;
len=strlen(A);
for(i = 0;A[i]!='\0';i++){
if(A[i]>= '0' && A[i]<= '9')//判断每一个字符是否为数字
{
//是的话记录下来
n++;
}
}
printf("%d:",n);
for(i = 0;A[i]!='\0';i++){
if(A[i]>= '0' && A[i]<= '9')A[i]='?';
else printf("%c",A[i]);
}
return n;}
//此处为c语言储存类型的一点笔记,应该不是考点,但是正好两页可以凑个整,爱看就看……
C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。
C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
1、用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。如:
2、用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。如下为静态局部变量:
注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。
3、为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。例如:
注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量。
4、用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。如: