数组总结

一、知识点回顾总结。
(一)、一维数组,二维数组区别:
(1)数组的定义:数组是一组具有相同类型的变量的集合。数组包含数组名和数组的下标,数组的每个数据项叫做属于元素。定义格式:(一维数组)数组类型 数组名[下标]; (二维数组)数组类型 数组名[下标1][下标2]。一维数组表示的是一行数据,而二维数组表示的是一个数据表格(几行几列)。
注意:1.定义数组时,元素个数一定为常量。2.C语言中数组的下标都是从0开始的。3.数组定义完成后大小不能改变。4.定义的范围要稍大一些,防止下标越界。
数组赋值:1.int a[10]={0,1,2,3,4,5,6,7,8,9};2,int a[10]={0,1,2,3,4}部分赋初值,后面的元素自动初始化为0;3.int a[]={1,2,3,4,5}不定义数组长度,直接根据赋值个数定;
int h[4][5]这是指20个元素;
二维数组初始化赋值:int a[2][3]={{1,2,3},{4,5,6}}; int a[2][3]={1,2,3,4,5,6};也可以给数组中的部分元素初始化 :int a[2][3]={{1,2},{4}}意思是第一行只有2个初值,按顺序分别赋值给a[0][0],a[0][1],第二行的初值4赋给a[1][0],其他元素默认为0;;4.数组定义但未进行初始化的数组仍然是随机数(就是从键盘中输入)。5.数组一般不初始化。数组的赋值用循环语句,一般不直接赋值。
输入一维数组:
int h[100];
for(int i=0;i<100;i++)cin>>h[i];
输入二维数组:
int a[i][j];
for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>a[i][j]}}(二)、字符数组字符数组需要用头文件#include。初始化有两种形式,即:char chr[5]={‘a’,‘b’,‘c’,‘d’,‘e’};或char chr[5]=“abcd”;其中,字符串中包含五个元素,即在字符串后面有一个’\0’。字符数组的输入:1.scanf("%s",字符数组名),对于scanf语句得到的字符串不存在空格,空格作为两段字符串的分隔符。2.gets语句输入gets(字符数组名),输入一个字符串,可包含空格,遇到回车终止。3.puts语句:puts(字符串名字),输入一个字符串和一个换行符。
(三)1.关于memset的用法(清0用);memset函数是给数组“按字节”进行赋值的,首先要用头文件#include,格式memset(数组名,被赋的值,sizeof(数组名)),就是将数组中的全部元素赋值为某一个数;其中,被赋的值一般只能是0过-1,若输入其他的值则错误。
fill函数是给数组“按元素”进行赋值的,可以是整个数组,也可以是部分连续元素,可以赋如何值。要加头文件#include eg:fill(a,a+10,5)就是将a数组中的前10个元素赋值为5。
bool数组只占用一个字节,节省内存,只有两个值0个1或者两个状态true和false。
2.一维数组的插入和删除:典型的问题就是插队问题:注意:排序问题,数组初始值要从1开始,要注意顺序的互换:
for(i=n;i>=x;i–)
q[i+1]=q[i];
q[x]=q[n+1];
3.有关查找方法:顺序查找:按照从前往后的顺序,将数组中的元素以次与要查找的数x进行比较。
二分查找:
int left=0,right=n-1;
int find=0;
while(left<=right){
int mid=(left+right)/2;if(a[mid]==x)找到了,就标记位置,并退出循环;find=mid;break;}
if(x<a[mid])right=mid-1;x只能在左半部分if(x<a[mid])left=mid+1;x只能在右半部分}
if(find!=n)
printf("%d\n",find);
else printf(“not find\n”);
(四)4.筛法求素数eg:输出1到100的素数。从2开始判断,2是素数,则2的倍数均不是素数,筛掉;3是素数,3的倍数都不是素数,筛掉;4是2的倍数,已经判断过了;再继续判断5……以此类推。
正方形长方形的个数:注意解决问题的方法:正方形是特殊的矩形。
for(int i=0;i<=min;i++){
zheng=zheng+(m-i)*(n-i);
chang=(1+m)m/2(1+n)*n/2-zheng;} cout<<zheng<<","<<chang<<endl;
5,元素排序:选择排序:从待排序的数据中,比较选出最小的元素,放在这些元素的最前面。依次类推。
冒泡排序:从第一个数开始,依次不断比较相邻的两个元素,如果逆序就交换,这样,一次排序结束后,最大的元素就放在了第N个位置。
插入排序:把所有待排序元素前后分成两段,前一段是已经排好序的,后一段是待排序的。每一趟都是把后一段的第一个数插入到前一段的某一个位置,保证前一段仍然是有序的;
桶排序。
(五)数字方阵:找规律。
二、方法总结。当数据量较大,且关联性不强时,用多个字母定义变量,显然很费时费力,这时候就用到了数组,定义一个可以将所有的同种类型变量放进去的数组,然后用循环语句输入,就缩短了代码长度,使输入更加简洁。用int定义甚至会出现越界的情况。
三、学习感悟。数组应该是C语言学习中有难度的一部分,需要好好地去理解。利用数组可以解决很多实际问题,可以简化一些问题,避免出现定义许多个变量的情况,简化代码。在数据量较大时使用数组,定义一个数组,可以将所有的数据都存入,便于调用。一维数组二维数组可进行对数据的运算,判断等。使用memset可以进行记数,现将数组全部清零,符合条件加一,最后就行判断。字符数组可以用于处理字符或进行判断。对于数组的学习,需要好好练习,多做题,在做题中会使用数组的思路和方法,才能将其掌握。开始对数组可能还是有些不理解,使用也不是很熟练,通过刷题,了解各种题型及其使用方法之后,对数组的理解就会逐渐加深,使用起来也会更熟练。在一定程度上可以简化某些问题,节省打代码的时间,也缩短了代码的长度,使自己的效率提高。在数组使用时应遵循数组使用的原则。定义数组是,数据量一定是常数;数组下标是从0开始计数的;越界访问时,错误很难找,定义时一定要注意数组数据量的大小,避免出现越界访问的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值