C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】

这篇具有很好参考价值的文章主要介绍了C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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];这一步实现了转置

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

进阶:用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;
}

输出:C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

例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;	
}

输出:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

运行上述程序,在输入正式成绩之前,需要先随意给一个数,这是 因为如果在 Turbo C环境中,避免TurboC环境的 bug 。

在其他环境中,可以去除这两行代码,不用在正式执行前给数

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

例3.使用数组表示Fibonacii 数列的前20项。

Fibonacii数列f(n)的定义为

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

程序:

#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;
}

输出:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

注释: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;
}

输出:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

例5.螺旋数阵

设计一个算法,将连续的自然数1、2、3、...、 n*n-1、n*n,按由小到大、由外向里、顺时针反向, 排成一个 n*n 的螺旋形状的方阵。

如图:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

问题的关键是第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;
}

输出:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

例六.将一个一维数组 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;
}

输出:

C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】,c语言,算法,矩阵

注记:

           #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

到了这里,关于C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包