本篇内容主要是是对二维数组操作,掌握二维数组作为参数传递时,如何用指针表示。
第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); }
大家应该都知道,程序的算法不是唯一的,欢迎路过的朋友将你们认为更高效的算法指出,欢迎评论,让我们一起进步吧......
本文出自 “智者天下、志者天下” 博客,转载请与作者联系!