C语言例题二维数组
例一:转置矩阵
程序:
#include <stdio.h>
int main ()
{
int a[2][3]={{1, 2, 3}, {4, 5,6}};
int b[3][2];
int i =0,j;
while (i<2)
{
j=0;
do
{
b[j][i] = a[i][j];
j =j+ 1;
}while(j<3);
i =i + 1;
}
printf ("原矩阵:\n");/*输出原矩阵,即二维数组a的各个元素*/
for (i = 0;i<2;i=i+1)
{
for (j= 0;j<3;j=j+1)
printf ("%5d", a[i][j] );
printf ("\n");/*输出一行数据后,回车到下一行*/
}
printf ( "转置矩阵:\n");/*输出转置矩阵,即二维数组b的各个元素*/
i = 0;
while(i<3)
{
j = 0;
while(j<2)
{
printf ( "%5d", b[i][j] );
j =j+ 1;
}
printf ("\n");/*输出一行数据后,回车到下一行*/
i = i+ 1;
}
return 0;
}
输出:通过b[j][i] = a[i][j];这一步实现了转置
进阶:用6个1~20内的随机数按行的顺序生成一个a[2][3]的矩阵,并输出它的转置矩阵
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
int a[2][3];
int m,n;
printf("随机产生6个1~20以内的随机数:\n\n");
srand(time(NULL));
for(m=0;m<2;m++)
for(n=0;n<3;n++)
{
a[m][n]=rand()%20+1;
printf("%d ",a[m][n]);
}
printf("\n");
int b[3][2];
int i =0,j;
while (i<2)
{
j=0;
do
{
b[j][i] = a[i][j];
j =j+ 1;
}while(j<3);
i =i + 1;
}
printf ("原矩阵:\n");/*输出原矩阵,即二维数组a的各个元素*/
for (i = 0;i<2;i=i+1)
{
for (j= 0;j<3;j=j+1)
printf ("%5d", a[i][j] );
printf ("\n");/*输出一行数据后,回车到下一行*/
}
printf ( "转置矩阵:\n");/*输出转置矩阵,即二维数组b的各个元素*/
i = 0;
while(i<3)
{
j = 0;
while(j<2)
{
printf ( "%5d", b[i][j] );
j =j+ 1;
}
printf ("\n");/*输出一行数据后,回车到下一行*/
i = i+ 1;
}
return 0;
}
输出:
例2.登记某班三人的数学、英语两门课程的成绩。
分析:此类问题可以通过使用3个一维数组来解决,也可以通过使用1个二维数组来解决。显然,使用二维数组更加方便。
二维数组可定义为3行(代表3个学生)×2列(代表每个学生的2门课);当然也可以定义成2行×3列。本例使用前者定义形式,定义为float su(3][2)。设定第0列代表数学课程的成绩,第1列代表英语课程的成绩。
程序:
#include <stdio.h>
# define M 3
# define N 2
void InputScore (float stu[M] [N]); /*输入函数的函数原型*/
void OutputScore (float stu[M] [N]); /*输出函数的西数原型*/
int main ()
{
float stu [M] [N];
float f;
scanf ( "%f", &f);
/*以上两行代码对程序本身而言并无意义,专为应付 Turbo C的 bug*/
InputScore ( stu );/*调用输入函数,输入3个学生的两门课成绩*/
OutputScore ( stu);/*调用输出函数,输出3个学生的两门课成绩*/
return 0;
}
void InputScore ( float stu[] [N] )
{
int i, j;
printf ( "输入成绩:\n");
for(i=0; i<M; i++)
{
printf ( "no. %d ",i+1);
for (j=0;j<N;j++)
scanf ( "%f", &stu[i][j]);
}
return ;
}
void OutputScore ( float stu[][N])
{
int i, j;
printf ("\n");
for (i=0;i<M;i++)
{
printf ( "Stu no %d:", 1+1);
for (j=0;j<N;j++)
printf ( "%7.2f", stu[i][j] );
printf ("\n");
}
return;
}
输出:
运行上述程序,在输入正式成绩之前,需要先随意给一个数,这是 因为如果在 Turbo C环境中,避免TurboC环境的 bug 。
在其他环境中,可以去除这两行代码,不用在正式执行前给数
例3.使用数组表示Fibonacii 数列的前20项。
Fibonacii数列f(n)的定义为
程序:
#include <stdio.h>
int main ()
{
int i;
int f[20] ={1, 1};/*数列赋初值:前两项为1,其他项为0*/
i= 2;
while (i<20 )
{
f[i]=f[i-2]+f[i-1];/*计算其他项*/
i=i+1;
}
for (i=0;i<20;i++)/*输出数列的所有项*/
{
if (i % 5 == 0)
printf("\n");
printf ( "%8d", f[i] );
}
return 0;
}
输出:
注释:i%5==0,printf("\n");这一步使前二十项按5个一行输出,%8d是为了使输出各列个位数对齐(右对齐)。
例4.简单矩阵查找
从键盘输入25个整数,组成一个5*5的矩阵,编程按照以下要求输出数据:
查找每行中最大的数,然后查找这5个数中最小的数并输出该数(仅输出该数即可);
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5][5], b[5];
int i, j, min, max;/*输入矩阵a[5][5]*/
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
scanf("%d", &a[i][j]);
}
for (i = 0; i < 5; i++)
{
max = a[i][0];
for (j = 0; j < 5; j++)
{
if (a[i][j] > max)
max = a[i][j];
}
b[i] = max;
}/*找到每一行的最大值*/
min = b[0];
for (i = 1; i < 5; i++)
{
if (b[i] < min)
min = b[i];
}/*找到这些最大值中的最小值*/
printf("%d", min);/*输出结果*/
return 0;
}
输出:
例5.螺旋数阵
设计一个算法,将连续的自然数1、2、3、...、 n*n-1、n*n,按由小到大、由外向里、顺时针反向, 排成一个 n*n 的螺旋形状的方阵。
如图:
问题的关键是第i圈的描述问题。每一圈可以分成上、 右、下、左四个边
程序:
#include <stdio.h>
void spiral(int n)
{
int arr[n][n];
int i, j, k = 1, m=0;
while (k <= n * n) /*进行循环生成螺旋矩阵*/
{
for (i = m; i < n - m; i++) /*行从左向右*/
{
arr[m][i] = k++;
}
for (i = m + 1; i < n - m; i++) /*列从上到下*/
{
arr[i][n - m - 1] = k++;
}
for (i = n - m - 2; i >= m; i--) /*行从右到左*/
{
arr[n - m - 1][i] = k++;
}
for (i = n - m - 2; i > m; i--) /*列从下到上*/
{
arr[i][m] = k++;
}
m++;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%3d", arr[i][j]);/*输出螺旋矩阵*/
}
printf("\n");
}
}
int main()
{
int n;
printf("请输入n的值:");
scanf("%d", &n);
spiral(n);
return 0;
}
输出:
例六.将一个一维数组 a[9] 中各元素的值按行的顺序放入二维数组 b[3][3] 中。
若一维数组确定,可以在定义一维数组的同时,对数组各个元素赋初值,然后执行下面程序放入二维数组中;
int b[3][3];
int i, j, k = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
b[i][j] = a[k];
k++;
printf("b[%d][%d]=%d ",i,j,b[i][j]);
}
printf("\n");
}
若一维数组随机,可采用下列程序
程序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[9];
int n;
printf("随机产生9个1~100以内的随机数并赋值给a[9]:\n");
srand(time(NULL));
for(n=0;n<9;n++)
{
a[n]=rand()%100+1;
printf("a[%d]=%d ",n,a[n]);
}
printf("\n");
int b[3][3];
int i, j, k = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
b[i][j] = a[k];
k++;
printf("b[%d][%d]=%d ",i,j,b[i][j]);
}
printf("\n");
}
return 0;
}
输出:
注记:
#include<stdlib.h>
#include<time.h>
·················· ·················
srand(time(NULL));
················· ···············
a[n]=rand()%100+1;
printf("a[%d]=%d ",n,a[n]); 这是C语言生成随机数的一种方法 ,具体相关知识可以自行了解学习。文章来源:https://www.toymoban.com/news/detail-769081.html
制作不易,请各位王子公主点赞。文章来源地址https://www.toymoban.com/news/detail-769081.html
到了这里,关于C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!