《C语言程序设计第三版》(苏小红)习题十一 课后答案

本文介绍使用C语言进行矩阵转置及二维数组最大值查找的方法。包括不同类型的矩阵转置函数实现,以及如何找到二维数组中的最大值及其位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11.3  月份的英文

从键盘输入一个整型表示的月份,用指针数组编程输出该月份对应的英文,若输入的月份值不在1~12之间,则输出“Ilegal month”。

#include <stdio.h>
#include<stdlib.h>
#define N 10
char *a[12]={"Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec"};


int main(){
    int n;
    printf("请输入月份:\n");
    scanf("%d",&n);
    if(n>=1&&n<=12)
    printf("%s",a[n-1]);
    else
    printf("Illegal month\n");
	return 0;
} 

11.4  用三种函数编程实现n x n矩阵转置

void Trans1(int a[][N],int n)

void Trans2(int (*a)[N],int n)

#include <stdio.h>
#include<stdlib.h>
#define N 10
void Swap(int &a,int &b){
	int temp=a;
	a=b;
	b=temp;
}
void Trans1(int a[][N],int n){
	int i,j;
	for(i=1;i<n;i++)
	{
		for(j=0;j<i;j++)
		Swap(a[i][j],a[j][i]);
	}
}
void Trans2(int (*a)[N],int n){
	int i,j;
	for(i=1;i<n;i++){
		for(j=0;j<i;j++)
		Swap(a[i][j],a[j][i]);
	}

}

int main(){
	
    int n,i,j;
    printf("输入矩阵的阶数:\n");
    scanf("%d",&n);
    int a[N][N];
    printf("输入矩阵:\n");
    for(i=0;i<n;i++){
    	for(j=0;j<n;j++)
    	scanf("%d",&a[i][j]);
	}    
	Trans1(a,n);
//	Trans2(a,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
	      printf("%d ",a[i][j]);
	      printf("\n");
	}
	return 0;
  
} 

void Trans3(int *a,int n)

#include <stdio.h>
#include<stdlib.h>
#define N 10
void Swap(int &a,int &b){
	int temp=a;
	a=b;
	b=temp;
}

void Trans3(int *a,int n)
{
	int i,j;
	for(i=1;i<n;i++){
		for(j=0;j<i;j++)
		//printf("%d ",a[i*n+j]);
		Swap(a[i*n+j],a[j*n+i]);
	}
}
void Input(int *p,int n){
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
		scanf("%d",&p[i*n+j]);
	}
}
void Output(int *p,int n){
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
		printf("%d ",p[i*n+j]);
		printf("\n");
	}
}
int main(){
    int n,i,j;
    printf("输入矩阵的阶数:\n");
    scanf("%d",&n);
    int a[N][N];
    printf("输入矩阵:\n");
    Input(*a,n);
	Trans3(*a,n);
    Output(*a,n);
    return 0;  
} 

11.5  m x n 矩阵转置

void Trans1(int a[][N],int at[][N],int m,int n)

void Trans2(int (*a)[N],int (*at)[N],int m,int n)

#include <stdio.h>
#include<stdlib.h>
#define N 10
void Trans1(int a[][N],int at[][N],int m,int n){
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		at[j][i]=a[i][j];	
	}
}
void Trans2(int (*a)[N],int (*at)[N],int m,int n){
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++)
			at[j][i]=a[i][j];
	}

}
int main(){
    int n,m,i,j;
    printf("输入矩阵的阶数m和n:\n");
    scanf("%d %d",&m,&n);
 
    int a[N][N],b[N][N];

    printf("输入矩阵:\n");
    for(i=0;i<m;i++){
    	for(j=0;j<n;j++)
    	scanf("%d",&a[i][j]);
	}    

	Trans1(a,b,m,n);
    //Trans2(a,b,m,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
	      printf("%d ",b[i][j]);
	      printf("\n");
	}
	return 0;
}

 void Trans3(int *a,int *at,int m,int n)

#include <stdio.h>
#include<stdlib.h>
#define N 10
void Trans3(int *a,int *at,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++)
		at[j*m+i]=a[i*n+j];
		//printf("%d ",a[i*n+j]);
	}
}
void Input(int *p,int m,int n){
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++)
		scanf("%d",&p[i*n+j]);
	}
}
void Output(int *p,int m,int n){
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<m;j++)
		printf("%d ",p[i*m+j]);
		printf("\n");
	}
}
int main(){
    int n,m,i,j;
    printf("输入矩阵的阶数m和n:\n");
    scanf("%d %d",&m,&n);
 
    int a[N][N],b[N][N];
    printf("输入矩阵:\n");
    Input(*a,m,n);
    Trans3(*a,*b,m,n);
    
    Output(*b,m,n);
    return 0;
}

11.6  二维数组最大值

按所给函数原型从键盘输入m x n的二维数组,然后计算数组中最大值和所在的下标值。

void Input(int *p,int m,int n)

int FindMax(int *p,int m,int n,int *prow,int *pcol)

#include <stdio.h>
#include<stdlib.h>
#define N 10
void Input(int *p,int m,int n){
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++)
		scanf("%d",&p[i*n+j]);
	}
}
int FindMax(int *p,int m,int n,int *prow,int *pcol){
	int max=0;	
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
			if(p[i*n+j]>max)
			{
			max=p[i*n+j];
			*prow=i;
			*pcol=j;
		   }
		}
	}
//	printf("%d",max);
	printf("最大值是%d",p[(*prow)*n+(*pcol)]);
}
int main(){
    int n,m,i,j;
    printf("输入矩阵的阶数m和n:\n");
    scanf("%d %d",&m,&n);
    int a[N][N];
	int r,b;
    printf("输入矩阵:\n");
    Input(*a,m,n);
    FindMax(*a,m,n,&r,&b);
    printf("行下标为%d,列下标为%d",r,b);
    return 0;
}

11.7  最高分

用动态数组编程输入任意m个班学生(每班n个学生)的某门课成绩,计算最高分。

#include <stdio.h>
#include<stdlib.h>
void Input(int *p,int m,int n){
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++)
		scanf("%d",&p[i*n+j]);
	}
}
int FindMax(int *p,int m,int n,int *prow,int *pcol){
	int max=0;	
	int i,j;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
			if(p[i*n+j]>max)
			{
			max=p[i*n+j];
			*prow=i;
			*pcol=j;
		   }
		}
	}
//	printf("%d",max);
	printf("最高分是%d",p[(*prow)*n+(*pcol)]);
}
int main(){
    int n,m,r,b;
    int *p=NULL; 
    printf("输入有几个班:\n");
    scanf("%d",&m);
    printf("输入每班有几个学生:\n");
    scanf("%d",&n);
    p=(int *)calloc(m*n,sizeof(int));
    printf("输入矩阵:\n");   
    Input(p,m,n);
    FindMax(p,m,n,&r,&b);
    printf("是%d班的第%d位同学",r+1,b+1);
    return 0;
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值