C语言中对数组的学习总结

  数组学习已经结束,对于数组进行以下总结。

一、知识点回顾总结。
(一)、一维数组,二维数组。
首先,明确数组的定义:数组是一组具有相同类型的变量的集合。数组包含数组名和数组的下标,数组的每个数据项叫做属于元素。定义格式为:(一维数组)数组类型 数组名[下标]; (二维数组)数组类型 数组名[下标1][下标2]。一维数组表示的是一行数据,而二维数组表示的是一个数据表格。注意:1.定义数组时,元素个数一定为常量。2.C语言中数组的下标都是从0开始的。3.数组定义完成后大小不能改变。4.定义的范围要稍大一些,防止下标越界。
数组初始化可直接赋值,eg:int score[5]={90,80,70,100,95}或int score[]={90,80,70,100,95}或static int score[5]。数组定义但未进行初始化的数组仍然是随机数。数组一般不初始化。数组的赋值用循环语句,不能直接赋值。注意:要保证输入合法,程序则能运行,若输入不合法,则跳出循环。
(二)、字符数组。
字符数组需要调用这个投文件。初始化有两种形式,即: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的用法,首先要调用投文件,格式memset(数组名,被赋的值,sizeof(数组名)),其中,被赋的值只能是0过-1,若输入其他的值则错误。bool数组只占用一个字节,节省内存,只有两个值0个1或者两个状态true和false。a[j]=!a[j]是取值取反的意思。inta为给定数组的首地址。sprintf(s,"%d",x)是将整数x转化为字符s。
2.有关查找方法:较为普通的是顺序查找,即从前往后逐一查找。二分查找是:使用三个指针,将一组数据先有序排列起来,三个指针分别位于数据的首位,末位和中间,判断所要查找的数与中间的数的大小关系,如果大于中间的数则首位指针移动到中位的后一位,中位的指针再移动到后半部分的中位,反之亦然,以此类推,直到找到这个数,或者末位指针小于首位指针则结束程序。
3.筛法求素数eg:输出1到100的素数。从2开始判断,2是素数,则2的倍数均不是素数,筛掉;3是素数,3的倍数都不是素数,筛掉;4是2的倍数,已经判断过了;再继续判断5……以此类推。
二、方法总结。
当数据量较大,且关联性不强时,用多个字母定义变量,显然很费时费力,这时候就用到了数组,定义一个可以将所有的同种类型变量放进去的数组,然后用循环语句输入,就缩短了代码长度,使输入更加简洁。当需要输入的一行数字位数过多时,此时用long long或着int定义占用空间过大,用int定义甚至会出现越界的情况,此时可以使用字符数组定义,将这一行数看成字符串。
举例:题目计算鞍点:给定一个5
5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
思路:由于是一个二维表格,则使用二维数组定义,将表格输入。写两重循环,第一重循环控制行数变化,第二重控制列数变化。开始先让行数不变,改变列数,找出某一行的最大值,并记录位置。找到某一行最大值哪里列,从上往下找这一列最小值,并判断某行最大值与该列最小值是否为同一个数,若相同输出,不相同则继续执行循环,直到全部遍历一遍后没有找到则输出not found。
代码实现:
#include
using namespace std;
int main()
{
int max,min;
int n1,n2,m;
n1=0;n2=0;m=0;
int a[5][5];
for(int i=0;i<=4;i++)
{
for(int j=0;j<=4;j++)
{
cin>>a[i][j];
}
}
for(int k=0;k<=4;k++)
{
max=a[k][0];
for(int l=0;l<=4;l++)
{
if(a[k][l]>=max)
{
max=a[k][l];
n1=k;
n2=l;
}
}
min=max;
for(int t=0;t<=4;t++)
{
if(a[t][n2]<=min)
{
min=a[t][n2];
n1=t;
}
}
if(minmax)
{
m++;
n1+=1;n2+=1;
cout<<n1<<" “<<n2<<” "<<max<<endl;
break;
}
else
m+=0;
}
if(m
0)
cout<<“not found”<<endl;
return 0;
}
三、学习感悟。
数组应该是C语言学习中有难度的一部分,需要好好地去理解。利用数组可以解决很多实际问题,可以简化一些问题,避免出现定义许多个变量的情况,简化代码。在数据量较大时使用数组,定义一个数组,可以将所有的数据都存入,便于调用。一维数组二维数组可进行对数据的运算,判断等。使用memset可以进行记数,现将数组全部清零,符合条件加一,最后就行判断。字符数组可以用于处理字符或进行判断。
对于数组的学习,需要好好练习,多做题,在做题中会使用数组的思路和方法,才能将其掌握。开始对数组可能还是有些不理解,使用也不是很熟练,通过刷题,了解各种题型及其使用方法之后,对数组的理解就会逐渐加深,使用起来也会更熟练。在一定程度上可以简化某些问题,节省打代码的时间,也缩短了代码的长度,使自己的效率提高。这在一定程度上也考验了程序员的水平。但,在数组使用时应遵循数组使用的原则。定义数组是,数据量一定是常数;数组下标是从0开始计数的;越界访问时,错误很难找,定义时一定要注意数组数据量的大小,避免出现越界访问的问题。记住这些原则,好好利用数组,争取写出更好的代码!

猜你喜欢

转载自blog.csdn.net/weixin_43460224/article/details/85111749
今日推荐