一维数组和二维数组

难度明显提升,涉及部分数据结构

1

#include<stdio.h>
//编写一个函数以实现排序功能,其中传入参数分别为待排序的数组地址与其长度
void selec_array(int a[], int length) {
    for (int i = 0; i < length - 1; i++) {
        int min = i;  // 记录最小值的位置,第一个元素默认最小
        for (int j = i + 1; j < length; j++) {
            if (a[j] < a[min]) {  // 找到目前最小值
                min = j;  // 记录最小值的位置
            }
        }
        // 交换两个变量
        if (min != i) {
            int temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}
 
//主函数
int main()
{
    int length = 10; 
    int num[length];  //初始化一个长度为10的整形数组
    for (int i = 0; i < length; i++) {  //通过for循环接受10个数字存入数组中
        scanf("%d", &num[i]);
    }
    selec_array(&num, length); //调用上方编写的选择排序函数对数组进行排序
    for (int i = 9; i != -1; i--) {  //通过for将排序好的数组输出
        printf("%d ", num[i]);
    }
    return 0;
}

2

#include <stdio.h>

int main(void) {
    int n = 0,a;
    scanf("%d", &n);
    int arr[n];
//通过循环接受所有数据
    for (int i = 0; i < n; i++) {
     scanf("%d", &arr[i]);
    }
    scanf("%d", &a);
//遍历所有数据
    for (int i = 0; i < n; i++) {
      if (arr[i] == a) {
          printf("%d\n", i+1);
          break;
      }
        else if (i == n-1) {
            printf("-1");
}
    }
    return 0;
}

3

#include <stdio.h>

int main(void) {
    int m,n;
    printf("Input m, n:");
    scanf("%d,%d",&m,&n);
    printf("Input %d*%d array:\n", m,n);
    int arr[m][n];
    int max=0,row,col;


    for(int i=0;i<m;i++) {
        for(int j=0;j<n;j++) {
            scanf("%d",&arr[i][j]);
        }
        scanf("");
    }

    for (int i=0;i<m;i++)
        for (int j=0;j<n;j++)
            if (max< arr[i][j])//找最大值
            {
                max=arr[i][j];
                row=i+1;//行数
                col=j+1;//列数
            }
    printf("max=%d, row=%d, col=%d",max,row,col);

        return 0;
    }

4

#include<stdio.h>
int main(void)
{
    int n;
    scanf("%d",&n);
    int arr[n],t=0,s;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    int m;
    scanf("%d",&m);
    for(int i=0;i<n;i++)
    {
        if(m==arr[i])
        {
            t=1;
            s=i+1;  //i每增加1,t便增加2,t始终为i的两倍
            printf("%d",s);
            break;
        }
    }
    if(t==0)
        printf("None");
    return 0;
}

5

#include<stdio.h>
int main(void)
{
    int i,j,p,q,m,n,y,z,x=0,t=100; //i是行,j是列;
    scanf("%d%d",&m,&n);
    int arr[m][n];
    //遍历二维数组
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&arr[i][j]);
    }
    for(i=0;i<m;i++)
    {
        //先找出每行最大的
        for(j=0;j<n;j++)
        {
            if(x<arr[i][j])
            {
                x=arr[i][j];
                p=i;
                z=j;
                //把每行最大值的下标存起来
            }
        }
        x=0;
        //判断是不是这列最小的
        for(q=0;q<m;q++)
        {
            if(t>arr[q][z])
            {
                t=arr[q][z];
                y=q;
            }
        }
        t=100;
        if(p==y)
        {
            printf("Array[%d][%d]=%d",p,z,arr[p][z]);
            return 0;
        }
    }
}

6

该题目实际上涉及到数据结构中的顺序表

通过链表可实现同样效果,不过涉及到大量结构体与指针的应用

#include<stdio.h>
//编写一个删除数组中任意值的函数
void delete(int arr[],int num,int length){
for(int i=num;i<length;i++) {
    arr[i]=arr[i+1];
}
}

int main() {
    int length=10,max,row;
    int arr[length];
    for(int i=0;i<length;i++) {
        scanf("%d",&arr[i]);
    }
    for(int i=0; i<length; i++) {
        if(arr[i]>max){
            max=arr[i];
            row=i;
//定位到最大值的位置
        }
    }
//调用函数删除下标为row的元素
    delete(&arr,row,length);

for(int i=0;i<length-1;i++) {
    printf("%d ",arr[i]);
}
}

7

#include<stdio.h>

int main() {
    int height=10;
    int arr[height][height];
//通过循环将三角中恒为1的位置赋值
    for(int i=0;i<=9;i++)
        for(int j=0;j<=i;j++)
        {
            arr[i][0]=1;
            arr[i][i]=1;
        }
    for(int i=2;i<=9;i++)
        for(int j=1;j<=i-1;j++)
//计算每个位置的值
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
    for (int i= 0; i < 10; ++i)
    {
        for ( int j = 0; j <= i; ++j)
        {
            printf("%d", arr[i][j]);
            if (j != i)
//打印空格
                printf(" ");
        }
        if(i<=8)
//打印换行符
            printf("\n");
    }
}
上一篇
下一篇