C语言 基础60题(2)――二维数组操作

本篇内容主要是是对二维数组操作,掌握二维数组作为参数传递时,如何用指针表示。


第10题
double  sum_2diagonal(double* array_2d,  unsigned int m, unsigned int n);
功  能:求出二维数组中两条对角线上元素之和
参  数:array_2d为二维数组;m为二维数组的行数;n为二维数组的列数.
返回值:二维数组中两条对角线上元素之和
分  值:

//题:求出二维数组中两条对角线上元素之和。 应该是求行数和列数相同的数组
double sum_2diagonal(double *array_2d,unsigned int m,unsigned int n){
    double sum=0;
    for(unsigned int i=0;i<m;i++){
        for(unsigned int j=0;j<n;j++){
            if(i==j)
                sum=sum+*(array_2d+i*n+j);
            if((n-1-i)==j)
                sum=sum+*(array_2d+i*n+j);
        }
    }
    return sum;
}

第11题
double  sum_diagonal(double* array_2d,  unsigned int m, unsigned int n);
功  能:求出二维数组中主对角线上元素之和
参  数:array_2d为二维数组;m为二维数组的行数;n为二维数组的列数.
返回值:二维数组中主对角线上元素之和
分  值:

double sum_diagonal(double *array_2d,unsigned int m,unsigned int n){
    double sum=0;
    for(unsigned int i=0;i<m;i++){
        for(unsigned int j=0;j<n;j++){
            if(i==j)
                sum=sum+*(array_2d+i*n+j);
        }
    }
    return sum;
}

第12题
double  sum_circum(double* array_2d,  unsigned int m, unsigned int n);
功  能:求出二维数组中周边元素之和
参  数:array_2d为二维数组;m为二维数组的行数;n为二维数组的列数.
返回值:二维数组中周边元素之和
分  值:

double sum_circum(double *array_2d,unsigned int m,unsigned int n){
    double sum=0;
    for(unsigned int i=0;i<m;i++){    
        sum=sum+*(array_2d+i*n+0);
        sum=sum+*(array_2d+i*n+(n-1));
    }
    for(unsigned int j=1;j<n-1;j++){
        sum=sum+*(array_2d+j);
        sum=sum+*(array_2d+(m-1)*n+j);
    }

    return sum;
}

第13题
double  sum_max(double* array_2d,  unsigned int m, unsigned int n);
功  能:求出二维数组中的最大值
参  数:array_2d为二维数组;m为二维数组的行数;n为二维数组的列数.
返回值:二维数组中的最大值
分  值:

double sum_max(double *array_2d,unsigned int m,unsigned int n){
    double largest=*array_2d;
    for(unsigned int i=0;i<m;i++){
        for(unsigned int j=0;j<n;j++){
            if(largest<*(array_2d+i*n+j))
                largest=*(array_2d+i*n+j);
        }
    }
    return largest;
}

第14题
double  sum_min(double* array_2d,  unsigned int m, unsigned int n);
功  能:求出二维数组中的最小值
参  数:array_2d为二维数组;m为二维数组的行数;n为二维数组的列数.
返回值:二维数组中的最小值
分  值:

double sum_min(double *array_2d,unsigned int m,unsigned int n){
    double min=*array_2d;
    for(unsigned int i=0;i<m;i++){
        for(unsigned int j=0;j<n;j++){
            if(min>*(array_2d+i*n+j))
                min=*(array_2d+i*n+j);
        }
    }
    return min;
}

//测试程序
#include<stdio.h>

//将sum_2diagonal()、sum_diagonal()、sum_circum()、sum_max()、sum_min()代码考到此处

void main()
{
//调用sum_2diagonal()、sum_diagonal()、sum_circum()、sum_max()、sum_min()函数
    double arr_2d[4][4]={
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12},
        {13,14,15,16}};
    double sum_2d = sum_2diagonal((double *)arr_2d,4,4);
    double sum_d = sum_diagonal((double *)arr_2d,4,4);
    double sum_cir = sum_circum((double *)arr_2d,4,4);
    double max=sum_max((double *)arr_2d,4,4);
    double min=sum_min((double *)arr_2d,4,4);
    printf("the sum_2diagonal  is %.2f\n",sum_2d);
    printf("the sum_diagonal  is %.2f\n",sum_d);
    printf("the sum_circum  is %.2f\n",sum_cir);
    printf("the largest number is %.2f\n",max);
    printf("the least number is %.2f\n",min);
    double arr_2dd[3][4]={
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}};
    sum_2d = sum_2diagonal((double *)arr_2dd,3,4);
    sum_d = sum_diagonal((double *)arr_2dd,3,4);
    sum_cir = sum_circum((double *)arr_2dd,3,4);
    max=sum_max((double *)arr_2dd,3,4);
    min=sum_min((double *)arr_2dd,3,4);
    printf("the sum_2diagonal  is %.2f\n",sum_2d);
    printf("the sum_diagonal  is %.2f\n",sum_d);
    printf("the sum_circum  is %.2f\n",sum_cir);
    printf("the largest number is %.2f\n",max);
    printf("the least number is %.2f\n",min);
}

第15题
int sum_odd(unsigned int n);
功  能:求出小于给定自然数的所有奇数之和
参  数:n为给定的自然数.
返回值:>=0,小于给定自然数的所有奇数之和; <0,不成功.
分  值:

int sum_odd(unsigned int n){
    if(n<0)
        return -1;
    int sum=0;
    unsigned int i;
    for( i=1;i<=n;i+=2){
        sum=sum+i;
    }
    return sum;
}

第16题
int sum_even(unsigned int n);
功  能:求出小于给定自然数的所有偶数之和
参  数:n为给定的自然数.
返回值:>=0,小于给定自然数的所有偶数之和; <0,不成功.
分  值:

int sum_even(unsigned int n){
    if(n<0)
        return -1;
    int sum=0;
    unsigned int i;
    for( i=0;i<=n;i+=2){
        sum=sum+i;
    }
    return sum;
}

//测试程序
#include<stdio.h>

//将sum_odd()、sum_even()代码考到此处

void main()
{

//调用sum_odd()、sum_even()函数
    int a=sum_odd(1);
    int b=sum_odd(10);
    printf("the sum_odd is %d\n",a);
    printf("the sum_odd is %d\n",b);
    a=sum_even(1);
    b=sum_even(10);
    printf("the sum_odd is %d\n",a);
    printf("the sum_odd is %d\n",b);
}


      大家应该都知道,程序的算法不是唯一的,欢迎路过的朋友将你们认为更高效的算法指出,欢迎评论,让我们一起进步吧......

本文出自 “智者天下、志者天下” 博客,转载请与作者联系!

你可能感兴趣的:(二维数组,C语言,指针,对角线)