知识点汇总及必练习题:数组

2.6、数组

数组的声明并不是声明一个个单独的变量,比如number0、number1、...、number99,而是声明一个数组变量,比如numbers,然后使用numbers[0]、numbers[1]、...、numbers[99]来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

2.6.1 声明数组

在C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:

type arrayName [ arraySize ];

这叫做一维数组。arraySize必须是一个大于零的整数常量,type可以是任意有效的C数据类型。例如,要声明一个类型为double的包含 10个元素的数组balance,声明语句如下:

double balance[10];

现在balance是一个可用的数组,可以容纳10个类型为 double 的数字。

2.6.2 初始化数组

在C中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括号{ } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例:

balance[4] = 50.0;

2.6.3 访问数组

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

double salary = balance[9];

上面的语句将把数组中第10个元素的值赋给salary变量。下面的实例使用了上述的三个概念,即,声明数组、数组赋值、访问数组:

#include <stdio.h>
 
int main ( )
{
   int n[ 10 ]; /* n 是一个包含 10 个整数的数组 */
   int i,j;
 
   /* 初始化数组元素 */        
   for ( i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; /* 设置元素 i 为 i + 100 */
   }
 
   /* 输出数组中每个元素的值 */
   for (j = 0; j < 10; j++ )
   {
      printf("Element[%d] = %d\n", j, n[j] );
   }
 
   return 0;
}

结果

Element[0] = 100

Element[1] = 101

Element[2] = 102

Element[3] = 103

Element[4] = 104

Element[5] = 105

Element[6] = 106

Element[7] = 107

Element[8] = 108

Element[9] = 109

查看本章更多知识点

https://www.nowcoder.com/tutorial/10002/1ed43c516adf4c60b5e4cc92d6c7d09b?from=Ccz 


 2.6.4习题库

【习题1】逆序输出

题目描述

输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。

输入描述

一行,输入10个整数(范围-231~231-1),用空格分隔。

输出描述

一行,逆序输出输入的10个整数,用空格分隔。


示例1

输入
1 2 3 4 5 6 7 8 9 10
输出
10 9 8 7 6 5 4 3 2 1

题目解析

用数组把10个整数都存储下来,然后反向输出。

参考代码

#include<stdio.h>
int main( ){
    int a[10],i;
    for(i=0;i<10;i++){
    scanf("%d",&a[i]);
    }
    for(i=9;i>-1;i--){
        printf("%d ",a[i]);
    }
}

【习题2】有序序列判断

题目描述

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序。

输入描述

第一行输入一个整数N(3≤N≤50)。

第二行输入N个整数,用空格分隔N个整数。

输出描述

输出为一行,如果序列有序输出sorted,否则输出unsorted。

示例1

输入
5
1 6 9 22 30 

输出
Sorted

示例2

输入5
3 4 7 2 10

输出
unsorted

题目解析

分别记录数组中从第二个位置开始当前数字比前一个数大(小)的数量,最终判断是否等于n-1即可。

参考代码

#include <stdio.h>
#include <stdlib.h>
 
int main( )
{
    int n,i,j,s=0,z=0;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
            scanf("%d",&a[i]);
    for(i=0;i<n-1;i++)
        {
            if(a[i+1]>=a[i]) s++;
        }
        for(i=0;i<n-1;i++)
        {
            if(a[i]>=a[i+1]) z++;
        }
    if(s==n-1||z==n-1) printf("sorted\n");
    else printf("unsorted\n");
    return 0;
}

【习题3】序列中删除指定数字

题目描述

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述

第一行输入一个整数(0≤N≤50)。

第二行输入N个整数,输入用空格分隔的N个整数。

第三行输入想要进行删除的一个整数。

输出描述

输出为一行,删除指定数字之后的序列。

示例1

输入
6
1 2 3 4 5 9
输出
1 2 3 5 9

题目解析

用数组存储下来序列,输出的时候对于指定的数字不输出即可。

参考代码

#include <stdio.h>
int main( ){
    int k[51];
    int a;
    int x;
    scanf("%d",&a);
      for(int i=0;i<a;i++){
        scanf("%d",&k[i]);
    }
    scanf("%d",&x);
    for(int i=0;i<a;i++){
        if(k[i]!=x){
        printf("%d ",k[i]);}
    }
    return 0;
}

【习题4】序列中整数去重

题目描述

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

示例1

输入

5

10 12 93 12 75

输出

10 12 93 75

题目解析

枚举每个数,然后枚举这个数往后的位置的数,如果相等就把后面的数置为0,最终输出的时候不是0的数即可。

参考代码

#include<stdio.h>
 
int main( )
{
    int n;
    scanf("%d",&n);
    int a[n],i,j;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
        for(j=0;j<i;j++)
            if(a[i]==a[j])
                a[i]=0;
    for(i=0;i<n;i++)
        if(a[i]!=0)
            printf("%d ",a[i]);
    return 0;
}

【习题5】有序序列合并

题目描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述

输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。 第二行包含n个整数(范围1~5000),用空格分隔。 第三行包含

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C语言入门自学指南 文章被收录于专栏

本专刊由牛客官方团队打造,从一个入门者的角度写下这篇C语言自学指南,内容丰富详实,每一道例题也都是精挑细选,不管是C语言小白抑或是“老司机”,都能在本刊中有所收获。 本专刊购买后即可解锁所有章节,故不可以退换哦~

全部评论

相关推荐

双尔:你就写拥有ai开发经历,熟练运用提示词,优化ai,提高ai回答质量
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务