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