C语言数组知识点总结

数组

定义:数组是有序的并且具有相同类型的数据的集合。

一维数组

1、一般形式:类型说明符 数组名[常量表达式];例如: int a[10]; 元素为a[0]----a[9].

2、常量表达式中不允许包含变量,可以包含常量或符号常量。

3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。

4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。

5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。

6、需要整体赋值时只可以在定义的同时整体赋值。如

   int a[10]={0,1,2,3,4,5,6,7,8,9};正确。

   int a[10];    a[10]={0,1,2,3,4,5,6,7,8,9};错误。

7、可以只给一部分元素赋值。例如:

   int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。

8、对全部数组元素赋值时可以不指定数组长度,例如:

   int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成 int a[]={0,1,2,3,4,5,6,7,8,9};

   但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。

二维数组

1、一般形式:类型说明符 数组名[常量表达式1][常量表达式2];例如:

   int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。

   所有元素为 a[0][0],a[0][1],a[0][2],a[0][3]

              a[1][0],a[1][1],a[1][2],a[1][3]

              a[2][0],a[2][1],a[2][2],a[2][3]

2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。

3、需要整体赋值时只可以在定义的同时整体赋值。例如:

   int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。

   int a[3][4];  a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。

4、可以把所有数据写在一个花括号内。例如:

   int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。

5、可以只对部分元素赋值。例如:

   int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。

   int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}};

6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如:

   a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

   可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

   或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

字符数组

1、定义:char a[10];字符数组a长度为10。每个元素只能存放一个字符。例如:

   a[0]='h';a[1]='a';a[2]='p';……

2、初始化:

   char a[]={'h','a','p','p','y'};

   char a[]="happy";

   char a[]={"happy"}; 注意,因为字符串结尾自动加'\0',所以char a[]="happy";长度为6,不是5。

3、C语言中没有字符串变量,字符串的输入、存储、处理和输出等必须通过字符数组实现。 

4、字符串的输入。

   scanf();可以用%C逐个字符输入比如char a[6];for(i=0;i<6;i++) scanf("%c",&a[i]);

           可以用%S以字符串的形式输入,比如char a[6];scanf("%s",a);注意,a前不用加&,因为a是数组名,已经代表了数组首地址。

           注意:以%S输入时,以第一个非空白字符开始,终止于第一个空白字符。比如:输入How are you时。只输出How.

   gets();作用为输入一个字符串。与scanf();功能一致,但空格和回车都存放在数组中,最后自动加入‘\0’.不会出现上面输出不全的情况。

         调用方式为:gets(数组名);需要包含头文件“stdio.h”.

5、字符串的输出。

    printf();可以使用%C逐个字符输出,比如:char a[6];for(i=0;i<6;i++) printf("%c",a[i]);

           可以用%S以字符串的形式输出,比如char a[6];printf("%s",a);

    puts();输出一个字符串,结尾自动换行。

         调用形式:puts(字符数组名或字符串常量);需包含头文件“stdio.h”

常用字符串处理函数(以下函数需要头文件“string.h”)

1、strlen()作用是测试字符串长度。这里不包括‘\0’.使用形式strlen(数组名或字符串常量)

2、strcat()作用是连接两个字符串。调用方式strcat(字符数组1名,字符数组2名);合并后的字符串存放在字符数组1中。

3、strcmp()比较两个字符串是否相等。调用方式strcmp(字符串1,字符串2);相等时值为0。1>2时为正数。1<2时为负数。

4、strcpy()复制字符串。调用方式strcpy(字符数组1,字符串2);2的内容复制到1中。1只能是字符数组名。

 

第二篇: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进制)输出的时候,结果没有前面的00X,和后面的L

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

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

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

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

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

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

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

第四章

   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++)                   

                   forj0j<5;j++ 

ssi ;  这个时候是先做i=0;然后判断i;然后做加粗的部分,即是把加粗部分看成一个整体做完之后才会回到i++;所以ssi ;这个语句做了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[n1]        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 subint xint y

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

  void main()

{  int a=3,b=2;subab

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

(2),int subint* xint *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((fpfopen(“文件名”,“r”))==NULL;当等于NULL的时候就不能打开;注意文件打开之后必须关闭,即是fclose(fp);这两个必然是成对出现;

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

(2),当feoffp)返回值为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遍以上,最后祝大家都能顺利的过二级。

                                 

                                        作者:好老师工作组                                          

 
相关推荐