程序设计作业3 数组

 

 数组

基本知识

1 定义:按顺序排列的一组同种类型的数据构成的集合。

2 数组的优势:保存大量同类型的相关数据 。

include<stdio.h>

int main()

{

    int a[5];

    for(int i=0;i<5;i++)

{

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

}

 

3 注:

(1)数组的下标是从0开始的

如:a[5]是a[0],a[1],a[2],a[3],a[4]  五个

(2)一开始定义数组时下标不能是变量,只能是常量。

(3) 最好把数组定义为全局数组,即在main()之前。

是对全局初始化。

4 排序

(1)选择排序

#include<stdio.h>

main()

{  

 int a[100000];   

 int i,j,max,l,n;   

 scanf("%d",&n);   

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

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

 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;//则交换

  }

  return 0;

}

 

   

(2)插入排序

  void insSort(int *a,int num)

{ for(i=1;i<num;i++)

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

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

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

   l--;

}

a[l+1]=temp;

}

}

 

(3)冒泡法排序

#include<iostream> 

#include<iomanip> 

using namespace std; 

const int n=10; 

int t,a[n+1];        //定义数组 

int main() 

{  

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

cin>>a[i];                       //输入十个数    

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;}   

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

   cout<<setw(5)<<a[i];                   //输出排序后的十个数     

cout<<endl;    

return 0; 

}

 

 

运行结果:输入: 2 5 8 6 12 34 65 22 16 55

输出: 65  55  34  22  16   12   8   6   5   2

(4)函数排序

#include <algorithm>

using namespace std;

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

sort(a,a+n); 

两个参数分别为待排序数组的首地址和尾地址

5 查找(前提是已排序)

(1)常规方法:顺序查找

 

(2)折半查找

优点:减少计算量,减少运算时间

相当于数学中的二分法

low=0,high=n-1,mid=0;

while(low<=high)

{ mid=(low+high)/2;

if(a[mid]>temp) high=mid-1;

else if(a[mid]<temp) low=mid+1;

else cout<<a[mid]<<endl;

}

cout<<"Not Found!"<<endl; }

6二维数组

只是比一维数组多增加了一维下标,例:

#include<stdio.h>

int a[305][305];/*定义一个全局的二维数组*/

int main()

{

    int n,i,j,s=0,m;

    scanf("%d %d", &n,&m);

  for(i=1;i<=n;i++)/*行下标变化*/

 {

  for(j=1;j<=m;j++)/*列下标变化*/

  {

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

}

}

  例:int a[3][5];   a是二维数组(相当于一个3*5的表格),共有3*5=15个元素,它们是:   

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]   

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]   

a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]   

因此可以看成一个矩阵(表格),a[2][3]即表示第3行第4列的元素。

7 字符数组与字符串

学的不多,这里粗略总结一下:

(1)字符数组的定义格式   

字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。

具体格式如下:

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

  char ch1[5]; //数组ch1是一个具有5个字符元素的一维字符数组

char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};   字符数组中也可以存放若干个字符,也可以来存放字符串。两者的区别是字符串有一结束符(‘\0’)。

反过来说,在一维字符数组中存放着带有结束符的若干个字符称为字符串。

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

(2)字符串

字符串的输入:

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

例如:scanf(“%s%s%s”,s1,s2,s3);从键盘分别输入Let us go,则三个字符串分别获取了三个单词。   

例如:scanf(“%s”,s1);从键盘分别输入Let us go,则仅有第一个单词被获取,即s1变量仅获取第一个单词Let。

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

例如:scanf(“%s”,s1);gets(s2);对于相同的输入Hello World!。s1获取的结果仅仅是Hello,而s2获取的结果则是Hello World!

输出

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

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

说明:puts语句输出一个字符串和一个换行符。

对于已经声明过的字符串a,printf(“%s\n”,a)和 puts(a)是等价的。

可以解决的问题:

1 一维数组

(1)输出满足某一条件的数目,如寻找配对数,与指定数字相同的个数

(2)判断一组数据是否满足某一条件,如有趣的跳跃

(3)输出满足几个指定范围的个数,如年龄与疾病

2 二维数组

一般与矩阵的简单变化有关

感受

数组是对前面循环的扩充,综合性较强,有的题还需要转化成数学问题,好多题都需要想??好长时间才有思路,??,最后不会的还要问别人,真是考验人……

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值