一、建立二维数组并赋值

程序1:

#include <stdio.h>int main()
{int a[6][6],i,j;  //定义一个六行六列的二维数组for(i=1;i<6;i++)for(j=1;j<6;j++)a[i][j] = (i/j)*(j/i);   //对除第一行以及第一列的所有元素赋值,i/j保留整数值for(i=1;i<6;i++){for(j=1;j<6;j++)printf("%2d",a[i][j]); //对已经赋值的部分全部输出printf("\n");}return 0;
}

第一个主for循环对二维数组的部分元素赋值
第二个for循环对二维数组的赋值部分进行输出
结果为:

程序2:

#include <stdio.h>int main()
{int a[3][3]={{1,3,5},{7,9,11},{13,15,17}},sum=0,i,j; //对二维数组初始化赋值for(i=0;i<3;i++)for(j=0;j<3;j++){if(i==j)sum += a[i][j];  //将二维数组的所有对角线元素相加,1+9+17}printf("sum = %d",sum);return 0;
}

for循环对二维数组的行列数相等的位置进行输出,即输出1,9,17的和,即27

程序3:

#include <stdio.h>int main()
{int a[5][5]={0},i,j,k=1; //定义一个初始化全为0的二维数组for(i=0;i<5;i++)  //对每一层遍历for(j=i;j>=0;j--)a[j][i-j] = k++;  //观察i,j每次循环指代的位置for(i=0;i<5;i++){for(j=0;j<5-i;j++)printf("%4d",a[i][j]);  //下三角形式输出全部元素printf("\n");}return 0;
}


因为k的值,每次都是k++递增的,所有k的值反应了a[ i ][ j ]的赋值顺序,可以验证参考

二、程序设计

1. 输出行、列号之和为3的数组元素

#include <stdio.h>int main( )
{char ss[4][3]= {'A','a','f','c','B','d','e','b', 'C','g','f','D'};//从第一行开始按顺序对全部元素赋值int x,y,z;for (x=0;x<4; x++)for (y=0;y<3; y++)  //按顺序遍历{z=x+y; //z表示行、列号之和if (z==3)printf("%c\n",ss[x][y]); //z等于3,则输出}return 0;
}


行列号为3,也就是a[1][2] ; a[2][1] ; a[3][0],注意二维数组的四行三列的

**2. 分别求一个 5×5 矩阵(5阶魔方阵)的所有行之和、列之和、两条对角线上的元素之和。 **

#include <stdio.h>
#define N 5     //定义N代表值5int main( )
{int i, j;int x[N][N] = {{17,24,1,8,15},{23,5,7,14,16}, {4,6,13,20,22}, {10,12,19,21,3}, {11,18,25,2,9}};  //对二维数组中的元素进行初始化int rowSum, colSum, diagSum; //行的和;列的和;对角线的和for (i=0; i<N; i++)     //行求和{rowSum = 0;  //每求一行需要先置零for (j=0; j<N; j++){rowSum += x[i][j];}printf("第%d行的和为:%d\n",i,rowSum);  //输出每一行的和}printf("\n");for (j=0; j<N; j++)        //列求和{colSum = 0;   //每求一列需要先置零for (i=0; i<N; i++){colSum += x[i][j];}printf("第%d列的和为:%d\n",j,rowSum);  //输出每一列的和}printf("\n");diagSum = 0;  //主对角线可以在循环外置零,中间不需要清零for (i=0; i<N; i++)  //主对角线求和{diagSum = diagSum + x[i][i];  //x[i][i]即主对角元素}printf("主对角线求和为:%d\n",diagSum);diagSum = 0;for (j=0; j<N; j++)  //次对角线求和{diagSum = diagSum + x[j][N-1-j];  //x[j][N-1-j]动态表示次对角元素}printf("次对角线求和为:%d\n",diagSum);return 0;
}

运行:

3. 数组的应用
创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后:

  • 通过键盘输入,使后两列的10个元素获得值;
  • 按行序优先输出数组元素;
  • 将所有元素值乘以3后保存在数组中;
  • 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”);
  • 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出);
  • 输出数组中的所有偶数;
  • 输出所有行列下标之和为3的倍数的元素值。

注意:完成本题可采用按要求,在主程序中分别完成所有功能也可以采用将每个可独立的功能按函数的方式进行编写,在主程序中进行调用。

这里全部采用函数实现,主函数调用

#include <stdio.h>
#include <conio.h>void hang(int a[][4],int m,int n)
//按行序输出所有元素,int a[][4]接收实参数组,m,n表示数组大小参数
{int i,j,k=0;for(i=0;i<m;i++)for(j=0;j<n;j++){printf("%d ",a[i][j]);k++;if(k%4==0)printf("\n");  //四个一换行}
}
void chen(int a[][4],int m,int n,int k)
//对所有元素乘积倍扩大函数,传入二维数组,数组大小参数,以及扩大的倍数k
{int i,j;for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=a[i][j]*k;  //遍历所有元素 ×k扩大
}
void lie(int a[][4],int m,int n)
//列序优先输出
{int i,j,k=0;for(j=0;j<n;j++)  //外层循环是n,也就是列数for(i=0;i<m;i++)  //外层循环是m,也就是行数,输出每列所有元素{printf("%d ",a[i][j]);k++;if(k%5==0)printf("\n");//五个一换行,因为有5行}
}
void dao(int a[][4],int m,int n)
//数组“倒”着输出
{int i,j,k=0;for(i=m-1;i>=0;i--)  //从对后一行开始遍历for(j=n-1;j>=0;j--)  //从对后一行最后一列开始遍历{printf("%d ",a[i][j]);k++;if(k%4==0)printf("\n");}
}
void ou(int a[][4],int m,int n)
//输出数组中的所有偶数
{int i,j,k=0;for(i=0;i<m;i++)for(j=0;j<n;j++)  //按序遍历每一个元素if(a[i][j]%2==0){printf("%d ",a[i][j]);k++;if(k%5==0)printf("\n");//可以被2整除就输出,并且满5个一换行}printf("\n");
}
void xia(int a[][4],int m,int n)
//输出所有行列下标之和为3的倍数的元素值
{int i,j,k=0;for(i=0;i<m;i++)for(j=0;j<n;j++)  //按序遍历每一个元素if((i+j)==3)  //下标和由i+j表示{printf("%d ",a[i][j]);k++;if(k%4==0)printf("\n");//下标和可以被3整除就输出,并且满4个一换行}printf("\n");
}
int main()
{int a[5][4]={{1,2},{5,6},{9,10},{13,14},{17,18}},i,j;printf("<1>已创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值(回车继续)\n");getch();  //接收键盘回车符printf("<2>请通过键盘输入,使后两列的10个元素获得值(回车继续)\n");for(i=0;i<5;i++)for(j=2;j<4;j++)scanf("%d",&a[i][j]);getch();  //接收键盘回车符printf("<3>按行序优先输出数组元素(回车继续)\n");hang(a,5,4);  //调用行输出函数getch();printf("<4>已将所有元素乘以3后保存在数组中(回车继续)\n");chen(a,5,4,3);  //调用扩大函数getch();printf("<5>按列序优先输出数组元素(回车继续)\n");lie(a,5,4);  //调用列输出函数getch();printf("<6>倒着输出数组元素(回车继续)\n");dao(a,5,4);  //调用倒序输出函数getch();printf("<7>输出数组的所有偶数元素(回车继续)\n");ou(a,5,4);   //调用偶数输出函数getch();printf("<8>输出所有行列下标之和为3的倍数的元素值\n");xia(a,5,4);   //调用下表和函数return 0;
}

运行:(按序补充所有元素1-20)

4. 编程,现有10位同学4门课程的成绩
要求:

  • 分别计算每门课程的平均分
  • 分别计算每位同学4门课程的平均分;
  • 要求最后以列表方式输出所有成绩和平均分;

分析:

  • 采用二维数据存储课程成绩,并且注意数组定义的大小;
  • 为了减少程序调试过程中,频繁输入数据,可以在程序中定义二维数组的同时提供初始化数据作为课程成绩;
  • 在主程序中分别完成所有功能,也可以采用将每个可独立的功能按函数的方式进行编写,在主程序中进行调用。
#include <stdio.h>
#include <conio.h>
//函数声明
void kave(int a[][4],int m,int n,float *p);//计算每门课程的平均分
void tave(int a[][4],int m,int n,float *p);//计算每位同学4门课程的平均分
int print(int a[][4],float b[],float c[],int m,int n);//以列表方式输出所有成绩和平均分
int main()
{int a[10][4]={{60,70,80,90},{61,71,81,91},{62,72,82,92},{63,73,83,93},{64,74,84,94},{65,75,85,95},{66,76,86,96},{67,77,87,97},{68,78,88,98},{69,79,89,99}};//定义10位同学的四门课分数float b[4]={},c[10]={};//浮点型数组,b数组存储四个课程平均分,c数组存储10位同学平均分,全部初始化为0printf("<1>完成计算每门课程的平均分(回车继续)\n");kave(a,10,4,b);  //将b数组地址传给kave函数的p指针,指代b数组,用于函数内赋值getch();printf("<2>完成计算每位同学4门课程的平均分(回车继续)\n");tave(a,10,4,c);  //将c数组地址传给tave函数的p指针,指代c数组,用于函数内赋值getch();printf("<3>以列表方式输出所有成绩和平均分:\n");print(a,b,c,10,4);  //三个数组,m,n表示a二位数组大小return 0;
}
void kave(int a[][4],int m,int n,float *p)
{int i,j;for(j=0;j<n;j++){for(i=0;i<m;i++)*p=*p+a[i][j];  //计算一列(同一科目)所有成绩之和*p=*p/m;  //取单科成绩平均数,赋值给b数组的p位置处p++;  //p指针调整至b数组的下一个元素位置}
}
void tave(int a[][4],int m,int n,float *p)
{int i,j;for(i=0;i<m;i++){for(j=0;j<n;j++)*p=*p+a[i][j];  //计算一行(同一学生)四种科目成绩之和*p=*p/n;  //取四科成绩平均数,赋值给c数组的p位置处p++;  //p指针调整至c数组的下一个元素位置}
}
int print(int a[][4],float b[],float c[],int m,int n)
{int i,j,k;//输出全部学生的所有科目成绩信息for(i=0;i<m;i++){printf("学生%d的成绩:",i+1);for(j=0;j<n;j++)printf("%d   ",a[i][j]);printf("\n");}printf("每门课程的平均分为:\n");for(k=0;k<n;k++)printf("课程%d\t\t",k+1);printf("\n");for(k=0;k<n;k++)printf("%f\t",b[k]);printf("\n");printf("每位同学4门课程的平均分为:\n");for(k=0;k<m;k++)printf("%f   ",c[k]);return 0;
}

运行:

C语言二维数组定义、赋值、按要求遍历操作、输出以及函数调用相关推荐

  1. C语言 二维数组定义和使用 - C语言零基础入门教程

    目录 一.二维数组简介 二.定义二维数组并初始化 1.定义二维数组 2.初始化二维数组 三.访问二维数组 四.修改二维数组 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 & ...

  2. C语言二维数组的赋值方式

    1   #include<stdio.h>   2 int main(){   3         /*      char chh[]={'a','a','a','a','a','\0' ...

  3. c语言数组赋值可以用scanf吗,二维数组怎么赋值 用scanf给二维数组赋值

    不知道行数列数的情况下,给一个二维数组赋值...... c语言二维数组的赋值: 例1: inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90}, ...

  4. C语言 二维数组行数和列数计算 - C语言零基础入门教程

    目录 一.计算一维数组长度 二.计算二维数组长度 1.二维数组行数 2.二维数组列数 3.二维数组的元素个数 = 二维数组行数 * 二维数组列数 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C ...

  5. C语言二维数组的定义、初始化、赋值

    二维数组的定义 二维数组定义的一般形式是: dataType arrayName[length1][length2]; 其中,dataType 为数据类型,arrayName 为数组名,length1 ...

  6. qt 二维数组初始化_C语言二维数组的定义、初始化、赋值

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍 二维 ...

  7. 【C语言】二维数组定义以及引用

    接着上面一期进行,二维数组的一些了解,代码均来自于VS编译环境下. 一.怎样定义二维数组 二维数组和一维数组一样,二维数组的定义方式如下:   类型说明符 数组名[常量表达式][常量表达式] 注意一个 ...

  8. C语言 二维数组的定义、初始化以及数组元素的引用

    二维数组定义的一般形式为: 类型说明符 数组名[常量表达式 ][常量表达式] 例如:float a[3][4],b[5][10]; 是定义a为3行4列的数组,b为5行10列的数组. 注意不可以写成fl ...

  9. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  10. python二维数组的行和列_python 定义N行2列二维数组与赋值

    python中怎么用花括号定义一个5行4列的数组花括号是字典,不是数组. python:定义函数,输入一个m维数组X和一个整数n,输# Python3.6import numpy as npwhile ...

最新文章

  1. (转)MySQL联表查询
  2. python中的异常(try...except...else...finally)
  3. 应该知道的Linux技巧
  4. Sign In and Sign Out
  5. ctags对部分目录生成tags
  6. 扩容原理_硬核丨一文读懂以太坊扩容方案 ─ Rollup 工作原理
  7. [html] html如何启动本地的exe应用?
  8. 使用一些宏跟踪调试__LINE__ __FILE__ __DATE__ __TIME__ __STDC__
  9. 写了个SQL语句,发到这里留念
  10. 错误使用 eig 输入矩阵包含 nan 或 inf_特斯拉AI主管提醒你神经网络的几大常见错误...
  11. MyBatis条件查询
  12. Jupyter Notebook:内核似乎挂掉
  13. Win10系统隐藏文件资源管理器中的3D对象等七个文件夹
  14. 在线banner制作网站
  15. proftpd 530 Login incorrect
  16. 第八章、使用matplotlib绘制高级图表
  17. Deeplab V1
  18. 人脸识别系统设计 -- 基于J2判据和FLDA的多分类器的人脸识别系统设计论文报告(三)(附matlab)
  19. 百度李彦宏致股东:选择技术战略,就必须抵御短期机会诱惑 | CEO说
  20. OpenCV学习(二)---树莓派上安装opencv

热门文章

  1. 书籍精品Android篇,拿好赶紧收藏
  2. 自己动手写一个分库分表中间件(六)分布式事务问题解决思路<二>动态事务管理器
  3. 企业微信代开发获取应用Secret
  4. 小猫爪:PMSM之FOC控制12-扩展卡尔曼滤波状态观测器解析
  5. 查看linux内存和硬盘
  6. 微服务学习笔记 演进式架构 适应度函数概念
  7. Windows NT 内核基本结构
  8. 计算机三级-未来教育考试题库做完题不显示正确与否解决办法
  9. 1月15日云栖精选夜读 | 重磅公开!阿里语音识别模型端核心技术,让你“听”见未来...
  10. Eclipse中的Unicode编码如何转为中文?