第11章实验 指针与数组

第11章实验 指针与数组

 

  • 题目11.3:

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

 

1、解题思路:

   定义指针一维数组,do while循环,输入月份代表的数组,如果不在1-12,输出Illegel month,若在范围内,指针带出月份字符。

 

2、源代码:

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

    int *p[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

    int m;

    do

    {

        printf("Please input month:");

        scanf("%d",&m);

        if(m<1||m>12)

            printf("Illegel month");

    }while(m<1||m>12);

    printf("%s",p[m-1]);

    return 0;

}

3、程序运行效果截图:

 

 

 

 

 

  • 题目11.4:

利用例9.6程序中的函数Swap(),分别按如下函数原型编程计算并输出nXn阶矩阵的转置矩阵。其中,n由用户从键盘输入。已知n值不超过10。

void Transpose (int a[][N], int n) ;void Transpose (int (*a)[N], intn) ;void Transpose (int *a,int n);

 

  1. 解题思路:

外层函数,用指针交换位置。三种方法,一一进行原型声明。主函数中,定义二维数组,输入阶数,for循环输入数组值。输出原矩阵,printf显示三种选择,switch选择,调用外层函数,输出转置后的矩阵。第一种,数组下表示方法,直接循环交换行与列,调用。第二种,行指针,swap改变指针形势。第三中,列指针,swap,改变指针形势,就可以实现交换。

 

2、源代码:

#include <stdio.h>

#define N 10

 

void Swap(int *p1,int *p2);

void Transpose2(int *a,int n);

void Transpose(int a[][N],int n);

void Transpose1(int (*a)[N],int n);

int main()

{

int n,i,j;

int a[N][N];

int m;

 

do

  {

    printf("Input 阶数 n: ");

    scanf("%d",&n);

  }while(n>10);

for(i=0;i<n;i++)

{

    printf("输入第 %d 行:\n",i+1);

    for(j=0;j<n;j++)

    {

        printf("输入第 %d 行第 %d 列: ",i+1,j+1);

        scanf("%d",&a[i][j]);

    }

}

printf("原矩阵:\n");

for(i=0;i<n;i++)

{

    printf("\n");

    for(j=0;j<n;j++)

    {

        printf("%d",a[i][j]);

    }

}

printf("\n 1.引用数组下表法\n 2.行指针法\n 3.列指针法\n");

printf("Switch:");

scanf("%d",&m);

switch(m)

{

case 1:

Transpose(a,n);

break;

case 2:

Transpose1(a,n);

break;

case 3:

Transpose2(*a,n);

break;

}

printf("转置矩阵是: \n");

for(i=0;i<n;i++)

{

    for(j=0;j<n;j++)

    {

        printf("%d",a[i][j]);

    }

    printf("\n");

}

 

return 0;

}

void Swap(int *p1,int *p2)

{

    int temp;

    temp=*p1;

    *p1=*p2;

    *p2=temp;

}

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

{

    int i,j;

    for(i=0;i<n;i++)

    {

        for(j=i;j<n;j++)

        {

            Swap(&a[i][j],&a[j][i]);

        }

    }

}

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

{

    int i,j;

    for(i=0;i<n;i++)

    {

        for(j=i;j<n;j++)

        {

            Swap(*(a+i)+j,*(a+j)+i);

        }

    }

}

void Transpose2(int *a,int n)

{

    int i,j;

    for(i=0;i<n;i++)

    {

        for(j=i;j<n;j++)

        {

            Swap(a+i*n+j,a+j*n+i);

        }

    }

}

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 题目3:

参考习题11.5按如下函数原型编程从键盘输入一个m行n列的二维数组然后计算数组中元素的最大值及其所在的行列下标志。其中m和n的值由用户键盘输入。已知m和n的值都不超过10。
Void InputArray(int *p,int m,int n);
Int FindMax(int *p, int m, int n, int *pRow, int *pCol);

 

  1. 解题思路:

指针行位置,列位置,二维数组,定义行列,对二位数组指针进行初始化,输入行列,取一定的内存,若空值,exit结束程序。输入数组,寻找最大值,外层进行原型声明。主函数中调用,输出最大值,行位置,列位置,释放内存。输入数组,for循环。寻找最大值,if判断,指针指向一一比较,返回此值。

 

2、源代码:

#include <stdio.h>

#include <stdlib.h>

#define N 10

#define M 10

void InputArray(int *p[N][M],int n,int m);

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

int main()

{

 

    int m,n,row,col,a;

    int *p=NULL;

    printf("Input row: ");

    scanf("%d",&n);

    printf("Input col: ");

    scanf("%d",&m);

    p=(int *)calloc(n*m,sizeof(int));

    if(*p=NULL)

    {

        printf("error \n");

        exit(1);

    }

    InputArray(p,n,m);

    FindMax(p,n,m,&row,&col);

    free(p);

 

}

void InputArray(int *p[N][M],int n,int m)

{

    int i,j;

    for(i=0;i<n;i++)

    {

    printf("输入第 %d 行:\n",i+1);

    for(j=0;j<m;j++)

    {

        printf("输入第 %d 行第 %d 列: ",(i+1),(j+1));

        scanf("%d",p++);

    }

  }

}

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

{

   int c,d;

   int *a=p;

    for(c=0;c<n;c++)

    {

        for(d=0;d<m;d++)

        {

            if(*p < *(a+c*m+d))

            {

                p=(a+c*m+d);

                *prow=c;

                *pcol=d;

            }

        }

    }

   printf("Max = %d, row = %d, col = %d",*p,c-1,d-1);

}

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

  • MOOC网课程测试结果:
  1. 测试1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、实验心得与总结:

   对于本章的学习,感觉比上章轻松,通过做的题,对指针的学习更为深刻,熟悉,掌握。

猜你喜欢

转载自blog.csdn.net/weixin_48450741/article/details/112464899
今日推荐