程序设计第三次总结——数组

一、知识点总结

一维数组

1、数组定义:

   类型标识符 数组名[常量表达式]

   一组具有相同类型的变量的集合。

   一个数组在内存中占一片连续的存储单元。

   直接对a的访问,就是访问此数组的首地址。

注意:在定义数组长度所用的常量时注意要比所用长度大一点以防止溢出

2、数组大小必须是值为正的常量,不能为变量。

3、数组下标从0开始。

4、一维数组初始化:

   数组定义在主函数之外,起初始值为0;定义在主函数之内,起初始值是随机的。
   #给数组赋初值的方法:
(1)、直接初始化:int arr[3]={1,2,3};
(2)、遍历访问初始化:
               for(i = 0;i< 3;i++)
               arr[i]=i;
(3)、内存操作函数。
              memset(arr,3,abs);//abs为另一个已知的数组。
(4)、字符串赋值函数,仅限于char型数组。
              strcpy(arr,abs) ;abs为一字符串或者char型数组。

5、使两个数组值相等的方法:

   ①列举赋值:b[0]==a[0] b[1]==a[1]...②循环赋值

   ③数组a复制k个元素到数组b:mencpy(b,a,sizeof(int)*k)

     数组a全部复制到数组b:mencpy(b,a,sizeof(a))

     使用mencpy函数要包含头文件cstring。

6、容错处理:保证输入在合法范围之间

7、sort函数

    头文件为#include <algorithm>(其中,compare为排序规则)

    默认的sort函数是按升序排。

    sort(a,a+n); 两个参数分别为待排序数组的首地址和尾地址

8、数组的排序:

①选择排序:

for(j=0;j<n-1;j++)

{

    l=j;

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

    if(a[l]<a[i])

       l=I;

 if(l!=j) i=a[l],a[l]=a[j],a[j]=i;

}

②插入排序:

 l= i-1;temp=a[i];

 while(l>=0&&a[l]>temp)

{       

     a[l+1]=a[l]; 

     l--;

}

a[l+1]=temp;

③冒泡排序:

for (int j=1; j<=n-1; ++j) //冒泡法排序

for (int i=1; i<=n-j; ++i) //两两相比较           

if (a[i]<a[i+1]) //比较与交换

{t=a[i]; a[i]=a[i+1]; a[i+1]=t;}

9、折半查找用于有序序列中查找指定元素。

二维数组

数据类型 数组名[常量表达式1] [常量表达式2] ;

字符数组和字符串数组

1、 [存储类型] char 数组名[常量表达式1]…

2.字符数组的赋值

 ①用字符初始化数组

  例如:char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};

  字符数组中也可以存放若干个字符,也可以来存放字符串。

两者的区别是字符串有一结束符(‘\0’)。

字符串是一维数组,但是一维字符数组不等于字符串。

 ②用字符串初始化数组

  用一个字符串初始化一个一维字符数组,可以写成char chr[5]=“abcd”;

  ③数组元素赋值

3、字符常量和字符串常量的区别

  ①两者的定界符不同,字符常量由单引号括起来,字符串常量由双引号括起来。

  ②字符常量只能是单个字符,字符串常量则可以是多个字符。

  ③可以把一个字符常量赋给一个字符变量,但不能把一个字符串常量赋给一个字符变量。

  ④字符常量占一个字节,而字符串常量占用字节数等于字符串的字节数加1。增加的一个字节中存放字符串结束标志‘\0’。例如:字符常量‘a’占一个字节,字符串常量“a”占二个字节。

4、字符串的输入

  (1)scanf语句

   格式:scanf(“%s”,字符数组名);

   说明:①系统会自动在输入的字符串常量后添加‘\0’标志,因此输入时,仅输入字符串的内容即可。

               ②输入多个字符串时,以空格分隔。

  (2)gets语句

   格式:gets(字符数组名);

   说明:使用gets只能输入一个字符串。读入的是一整行,包括空格。

5、字符串的输出

  (1)printf语句

   格式:printf(“%s”,字符数组名);

  (2) puts语句

   格式:puts(字符串名称);

   说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf(“%s\n”,a)和 puts(a)是等价的。

6、字符串处理函数

     strlen(字符串名)  计算字符串的长度,终止符’\0’不算在长度之内

    strlwr(字符串名)  将字符串中大写字母换成小写字母

二、问题解决

1、约瑟夫问题

2、矩阵相关问题

三、总结

数组的输入与输出结合循环语句的运用让常常我感觉思路混乱,也许第一组数组还未处理输出,就被第二组数覆盖了。在做题过程中经常出现运行结果错误,这时就需要从头模拟运行,来找到出错的地方。有些算法的思路根本想不到,只能从网上查找,学习理解别人的思路,然后再进行编写。虽然现在我依然在算法的思维逻辑方面有欠缺,但是我相信经过反复练习做题,一定可以熟练掌握基础知识,并能灵活运用,一定能形成C语言逻辑思维。

猜你喜欢

转载自blog.csdn.net/qq_43641764/article/details/85231594
今日推荐