超实用的C语言基础知识总结

总体上必须清楚的:

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

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

第一章 C语言的基础知识

第一节、对C语言的基础认识

1、C语言编写的程序称为源程序,又称为编译单位。

2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。

注意:

1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、在函数中不可以再定义函数。

第三节、标识符

1、标识符:

合法的要求是由字母,数字,下划线组成。有其它元素就错了。

并且第一个必须为字母或则是下划线。第一个为数字就错了

2、标识符分为关键字、预定义标识符、用户标识符。

关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。

第五节:整数与实数

1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。

a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没有8的,逢8进1。

b、C语言中的十六进制规定要以0x开头。

2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。

1.0在C语言中可写成1.

0.1在C语言中可以写成.1。

3)实型数据的合法形式:

a、2.333e-1 就是合法的,且数据是2.333×10-1。

b、口诀:e前e后必有数,e后必为整数。

4) 整型一般是4个字节, 字符型是1个字节,双精度一般是8个字节: long int x; 表示x是长整型。

unsigned int x; 表示x是无符号整型。

第六、七节:算术表达式和赋值表达式

核心:表达式一定有数值!

1、算术表达式:+,-,*,/,%

注意:“/” 两边都是整型的话,结果就是一个整型。 3/2的结果就是1. “/” 如果有一边是小数,那么结果就是小数。 3/2.0的结果就是0.5

“%”符号请一定要注意是余数, %符号两边要求是整数。不是整数就错了。

2、赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

1、int x=y=10: 错啦,定义时,不可以连续赋值。

2、int x,y;

x=y=10; 对滴,定义完成后,可以连续赋值。

3、赋值的左边只能是一个变量。

4、int x=7.7;对滴,x就是7

5、float y=7;对滴,x就是7.0

3、复合的赋值表达式:

int a=2;

a*=2+3;运行完成后,a的值是10。

一定要注意,首先要在2+3的上面打上括号。变成(2+3)再运算。

4、自加表达式:

自加、自减表达式:假设a=5,++a(是为6), a++(为5);

运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,

再放到变量a中。 进行了++a和a++后 在下面的程序中再用到a的话都是变量a中的6了。

口诀:++在前先加后用,++在后先用后加。

5、逗号表达式: 优先级别最低。表达式的数值是逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(有点难度哦!)

z= 2,3,4 (整个是逗号表达式)这个时候z的值为2。

补充:

1、空语句不可以随意执行,会导致逻辑错误。

2、注释不是C语言,不占运行时间,没有分号。不可以嵌套!

3、强制类型转换:

一定是 (int)a 不是 int(a),注意类型上一定有括号的。

注意(int)(a+b) 和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。

4、三种取整丢小数的情况:

1、int a =1.6;

2、(int)a;

3、1/2; 3/2;

第八节、字符

1)字符数据的合法形式::

'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。 表示单个字符错误的形式:'65' "1"

字符是可以进行算术运算的,记住: '0'-0=48

大写字母和小写字母转换的方法: 'A'+32='a' 相互之间一般是相差32。

2)转义字符:

转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。

一般转义字符:背诵\0、 \n、 \?、 \”、 \\。

八进制转义字符: ?\141? 是合法的, 前导的0是不能写的。

十六进制转义字符:?\x6d? 才是合法的,前导的0不能写,并且x是小写。 3、字符型和整数是近亲:两个具有很大的相似之处 char a = 65 ;

printf(“%c”, a); 得到的输出结果:a

printf(“%d”, a); 得到的输出结果:65

第二章

第一节:数据输出(一)(二)

1、使用printf和scanf函数时,要在最前面加上#include“stdio.h” 2、printf可以只有一个参数,也可以有两个参数。 3、printf(“ 第一部分 ”,第二部分 );把第二部分的变量、表达式、常量以第一部分的形式展现出来!

4、printf(“a=%d,b=%d”,12, 34)

一定要记住是将12和34以第一部分的形式现在在终端也就是黑色的屏幕上 printf(“a=%d,\n b=%d”,12, 34)那么输出的结果就是:a=12,

b=34

5、int x=017; 一定要弄清楚为什么是这个结果!过程很重要 printf(“%d”, x); 15

printf(“%o”, x); 17 printf(“%#o”,x); 017 printf(“%x”, x); 11 printf(“%#x”,x); 0x11

6、int x=12,y=34; 注意这种题型 char z=‘a’; printf(“%d ”,x,y); 一个格式说明,两个输出变量,后面的y不输出 printf(“%c”,z); 结果为:12a 7

超实用的C语言基础知识总结

举例说明: printf(“%2d”,123 ); 第二部分有三位,大于指定的两位,原样输出123 printf(“%5d”,123 ); 第二部分有三位,小于指定的五位,左边补两个空格 123 printf(“%10f”,1.25 ); 小数要求补足6位的,没有六位的补0,。结果为1.250000 printf(“%5.3f”,125 ); 小数三位,整个五位,结果为1.250(小数点算一位) printf(“%3.1f”,1.25 );小数一位,整个三位,结果为1.3(要进行四舍五入) 第三节 数据输入 1、scanf(“a=%d,b=%d”,&a,&b)

一定要记住是以第一部分的格式在终端输入数据。

在黑色屏幕上面输入的为 a=12,b=34才可以把12和34正确给a和b 。有一点不同

也不行。

2、scanf(“%d,%d”,x,y);这种写法绝对错误,scanf的第二个部分一定要是地址! scanf(“%d,%d”,&x,&y);注意写成这样才可以!

3、指定输入的长度

终端输入:1234567

scanf(“%2d%4d%d”,&x,&y,&z);x为12,y为3456,z为7

终端输入:1 234567 由于1和2中间有空格,所以只有1位给x

scanf(“%2d%4d%d”,&x,&y,&z);x为1,y为2345,z为67

4、字符和整型是近亲:

int x=97;

printf(“%d”,x); 结果为97

printf(“%c”,x); 结果为 a

5、输入时候字符和整数的区别

scanf(“%d”,&x);这个时候输入1,特别注意表示的是整数1

scanf(“%c”,&x);这个时候输入1,特别注意表示的是字符‘1’ASCII为整数48。 补充说明:

1)scanf函数格式:

注意该函数的第二个部分是这样的地址,不是;

scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。

2)putchar ,getchar 函数:

char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。 putchar(?y?)把字符y输出到屏幕中。

3)如何实现两个变量x ,y中数值的互换

不可以把 x=y ,y=x; 要用中间变量 t=x;x=y;y=t。

4)如何实现保留三位小数,第四位四舍五入的程序

y=(int)(x*100+0.5)/100.0 这个保留两位,对第三位四舍五入

y=(int)(x*1000+0.5)/1000.0 这个保留三位,对第四位四舍五入

y=(int)(x*10000+0.5)/10000.0 这个保留四位,对第五位四舍五入

这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。

 

第二篇:C语言基础知识点总结以及题目订正

好老师重庆市二级C语言基础知识点总结以及题目订正

第一章

  1,函数是从主函数(main())开始执行,回到主函数(main())结束;

  2,一个程序的编译是从第一个函数(语句)开始,到最后一个函数(语句)结束;

第二章

  1,算法的特性:有穷性,确定性,有一个或者0个输入,有一个或者多个输出;有效性

  2,算法(程序)的几个结构:选择结构,顺序结构,循环结构

第三章 

1,int类型是2个字节,float是4个字节,dooble是8个字节

  2,数据类型分为:基本类型(整型,实型,字符型,枚举型),指针类型,构造类型(结构体类型,数组类型,共用体类型),空类型 (空类型合法哦,不要忘记了这个特殊哦

  3,变量的地址是确定的,变量变的地方只是地址里面的值。

  4,用户标志符,由数字,字母,下划线构成,第一个不能是数字,但是32个关键字除外。

  5,注意int的最大表示范围是-32768――+32767,当超过这个范围的时候,即以%d输出+32768时结果为-32768

  6,长整形(long)表示方法是在数字后面加L,如果一个变量a=3,那么表示的是一个整形的3,如果是a=3L,那么就是长整形的3;当分别以%o,%ld,%x (8进制,长整形,16进制)输出的时候,结果没有前面的0,0X,和后面的L

   例:int a=075,b=ox14;long int c=5L;

        printf(“%o,%x,%ld”,a b c);  结果为(75,14,5)

  7,当出现’\0’的什么时候为结束,什么时候为八进制的转义字符:当’\0’后面有1-7之间的数字的时候为转义字符;其他的时候为字符串结束标志,注意转义字符有哪些(参考书p8)

  这样一个例题 若 strlen(”abc\089”)=3    strlen(“abc\012”)=4

  8,强制转换不会改变一个变量的值,只是改变其作用的那个表达式的值。

  9,++,――,当++,——,在变量后面的时候表示在本次运算的时候会改变,在下次引用或者参与运算的时候才会自变;当++,――,在变量的前面的时候则是在本次运算就发生自变(顺便掌握++,――结合性是右结合,若i+++j等价于(i++)+j;

  10,复合运算符要注意当等号后面接的是表达式的时候要把表达式看成一个整体即x *=y+8等价于x=x*(y+8),y+8是一个整体

第四章

   1,格式输入和输出的时候,注意格式。要严格按照题目的格式进行操作。(在做题的时候尤其是读程序写结果的时候要细心哈!)

   2,%d,%md,%m..nd, %e,以及相应的几种格式是什么意思,参考书p13

第五章

   1,关系运算符,>,<,<=,>=,= =,!= ,==和!=优先级最低,主意=与==的区别:=是赋值的意思,表达式的值是对变量赋的值,==是关系运算符,关系运算表达式的值为0或者1.

   2,逻辑运算符,&& ,||,!在这几个中优先级!> && > ||,优先级是体现在结合性上而不是运算的先后性上。例如

           a=b=c=1;d=++a||++b&&++c在这个里面&&最高那就是加粗部分先看成一个整体,运算顺序还是从++a开始,即做完这个运算后,可以依次判断出后边的运算式子没有必要计算了,所以d=1,a=2,b=1,c=1

   3,if语句基本格式:1有else的情况是:if(表达式)语句;else语句;(注意有分号哦),2没有else的情况是:if(表达式)语句;当有多个if和else的时候if是与其后最近的没有配对的else结合;注意,当函数作为if里面的表达式的时候即if(printf(“*”))的时候,则是以函数的返回值判断if的真假,printf输出以1个字符则返回为1,所以这个if是真的;

  4条件表达式,? :  ;右结合性,是从右往左结合,即是以最后一个?开始结合,但是计算顺序仍然是从左到右(这个牵涉到++,--问题)(参考书p16)

  5,switch语句,switch语句只有碰到break或者做到最后一个语句才结束,case和default语句都只是入口。(参考书p17页例子)

第六章

  1,while语句基本格式是while(表达式)语句;注意在while()后面没有;号,当函数或者赋值表达式放在while的()中时与if的判断方法一样,时候函数的返回值或表达式值的逻辑值;

  2,do{  }while();语句和while语句的区别在于前者先做后判断后者是先判断后做,这个知识点多参考书上(p18例题)和卷子上的题

  3,for语句,例如:for(i=1;i<100;i++)                   

                          s=s+i;注意for括号的后面没有;号,

                   当有两个for语句即嵌套的for循环的时候   例如:

                  for(i=1;i<4;i++)                   

                   for(j=0;j<5;j++) 

s=s+i ;  这个时候是先做i=0;然后判断i;然后做加粗的部分,即是把加粗部分看成一个整体做完之后才会回到i++;所以s=s+i ;这个语句做了20次,(参考书p19例题)

  4,总结if,for,whlie,后面如果没有{}的时候,即是只有一个简单的语句的时候,if,for,whlie的作用效力范围是到与之最近的分号结束;当有{  }的时候即是把{  }看成一个整体,控制范围是整个{  }里面的所有语句。

  5,break是结束整个循环;contine结束本层循环;具体参考书(p19页例子这个很重要哦,一定要掌握)

第七章和第十章(重点哦!!!!!!)

  1,维数的判断,当*,[]前面有int ,char,float等常见的类型名的时候表示是在定义,一个 * 或者[]表示升一维,当表达式前面没有int ,char,float的时候则是在引用(或称为使用)一个*或者[ ]表示降一维;

  2,注意这样一些东西:int a[3][3],**p=a则, a[0]等价于*p表示的是这个2维数组的第一行或者说是这个2维数组的首元素的地址;a[i]等价与*(p+i)都表示是数组的第i行或者是第i行的首元素的地址;所以要引用这个a数组的元素应该用a[i][j]或者**p

  3,对一个数组的输入输出总结

当数组是int(整形的时候)

一个有n个元素的1维数组:输入   for(i=0;i<n;i++)  

                                   scanf(“%d,&a[i]”);

        输出    for(i=0;i<n;i++)

                  printf(“%d”,a[i]);注意int类型要以%d的格式

一个有n行m列的2维数组:输入:for(i=0;i<n;i++)(这里i控制行,j控制列)

                                    for(j=0;j<m;j++)

                                       scanf(“%d”,&a[i][j]);

                           输入:for(i=0;i<n;i++)

                                    for(j=0;j<m;j++)

                                       printf(“%d”,a[i][j]);(注意在输入的时候才有&符号,输出的时候没有)

一个字符串数组即 char a[10];对这个的输入有两种方式

(1)for(i=0;i<n;i++)

       scanf(“%c”,&a[i]);

(2)gets(a); scanf(“%s”,a)(注意这两种方式的括号里面的只能是一个数组名

输出也对应有两种方式:(1),for(i=0;i<n;i++)  

                                 printf(“%c”, a[i]);

               (2)puts(a);printf(“%s”,a);注意这两种方式的括号里面的只能是一个数组名;

  4,对一个有n个元素的数组的遍历(既是说从第一个成员访问到最后一个成员)有以下两种方式:

1,   for(i=0;i<n;i++)                   

2,   for(i=0;a[i]!=’\0’;i++)      

       a[i];     都是指从a[0]访问到a[n-1])        a[i];  参考书p31

  5,对字符串的操作注意:sizeof是一个系统关键字,不是函数,求其后边的参数占用的内存空间,strlen 求字符串中有多少有效字符。

   注意这个例题:char a[30]=“abc\0b”;   sizeof(a)=30 ;   sizeof(“abc\0b”)=6;

                                   strlen(a)=3   strlen(“abc\0b”)=3 ;

  6,*p++  表达式中p与++先结合,取完值之后地址指向下一个元素的地址;*++p则是直接输出第二个元素,指针输出完之后,也指向了下一个元素的地址

  7,char a[10];    while(a[i])和while(a[i]!=‘\0’)都是表示当a数组不结束的情况下继续循环,一般就是指访问整个数组

  8,自编函数实现求字符串的长度:

         int  fun(char  *a)               int fun(char  *s)

             {  int  k;                    {   char *p;

p=s

                whlie(a[k])                       whlie(*p)

                   k++;                          p++;

                retrun(k-1);  }          retrun(p-s);    }

第八章

  1,分清形参和实参的区别:(1)形参是在定义或声明中,实参是在引用当中;当函数名前有int ,float, char等类型名时是定义或者声明,但是要排除省略类型名的情况;一般引用出现在主函数中,(2)形参是不确定的值,因此不能为常量,实参是确定的值所以可以为常量

  2,当实际参数是一个变量的时候,实参向形参传递值,只是个简单的值传递,不会改变实参的值;当是实参是地址传递的时候就要改变

  例:(1),int sub(int x,int y)

{   int c=x;x=y;y=c;}

  void main()

{  int a=3,b=2;sub(a,b)

printf(“%d,%d”,a,b);}  结果是 3,2

(2),int sub(int* x,int *y

{int c=*x;*x=*y;*y=c;}

void main()

{int a=3,b=2;sub(&a,&b)

printf(“%d,%d”,a,b);}  结果是 2,3

  3,局部变量和全局变量;注意分清各自的作用范围;参考书p64 第4题  

局部变量:在程序中,只在特定的过程或函数中可以访问的变量,是相对与全局变量而言的。

  全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。

  局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

  4,注意形参和实参必须赋值兼容,也就是说形参和实参维数必须一样;注意区别viod和return;当主函数里面带参数的形式,main(int argc,char *argv[])中argc是表示参数的个数,argv这个数组储存的是具体的参数个数。例,

void main(int argc,char *argv[])

       {   char  **p ;

while(――argc)

{  *p=argv[argc];

puts(*p); }

}  若输入为 china Beijing flie     则结果为:flie  Beijing ;

  5,注意函数的调用以及静态变量;参考各次卷子中关于这个方面的题

第九和十一章

 1,宏替换的时候只是简单的字符替换,不要加任何东西,宏名中不能包含空格;

例:#define xx(m) m*m

 …… int i=5;

i=i+xx(4+5);

    结果为 i=5+4+5*4+5=34;

 2,宏替换是在预编译的时候进行,所以不占用程序运行时间;宏名是无类型的;

 3,结构体变量的长度是各个成员长度的和;当结构体指针和数组的时候注意分清 . 和->的区别;参考书中p59第3题

 4,共用体变量的长度是由成员中的最长的成员决定;

 5,链表的题就掌握模拟考试题中的一道选择题就可以了;第十一章的其他内容,还是要去看书了解 

第十二章和第十三章

 1,位运算符有 | (或)即只要有一个1就是1,  &(与)要全部为1才为1   ^(异或)要不相同才为1 ;注意的是当向左移动n位就是乘以2的n次方;向右移动n位就是除以2的n次方。

 2,文件,c语言中可以认识两种文件存储类型(1),文本文件(2),二进制文件;

 3,打开文件操作注意语句  if((fp=fopen(“文件名”,“r”))==NULL);当等于NULL的时候就不能打开;注意文件打开之后必须关闭,即是fclose(fp);这两个必然是成对出现;

 4,文件在什么情况下结束(1),fp==EOF的时候结束fp!=EOF的时候不结束。

(2),当feof(fp)返回值为0时不结束,返回非零时就是结束;

 5,注意背下书p139第2题,万一考到文件的编程一般就是这种题。一般填空就是上面的加粗部分。

 6,w,r,a分别表示对文本文件的读,写,追加;fputs(ch,fp)指将ch变量输出到文件fp中;ch=fgets(fp)指的是从文件中得到一个字符赋给变量ch;fread或fwrite(buffer,size,num,fp)中,buffer指的是文件读出/写入的数据的地址,是一个数组名或者指针;size,指读出或者写入每个数的字节数;num指读出和写入多少个数;fp指文件指针。

  

编者的话:

这些只是基础知识的重点,目的是帮助大家复习基础知识(记住这个只是基础的一部分,仅仅是基础,各个基础知识的运用请大家多参考发的卷子和书后面的习题),大家还是争取要把书细细的看上2遍以上,最后祝大家都能顺利的过二级。

                                 

                                        作者:好老师工作组