单元6 数组课堂实践答案
1.课堂实践6-1
编写程序求含有N个元素一维数组的最大值、最小值及它们的下标。要求:数组元素的输入、求最大值最小值及它们的下标通过函数实现,结果在主函数中输出。
程序代码:
#include "stdio.h"
#define N 5
void Input(int b[N]);
void Max(int b[N],int max[2]);
void Min(int b[N],int min[2]);
int main()
{
    int a[N],min[2],max[2];
    Input(a);
    Max(a,max);
    Min(a,min);
    printf("数组元素的最大值为:%d,下标为:%d\n",max[0],max[1]);
    printf("数组元素的最小值为:%d,下标为:%d\n",min[0],min[1]);
    return 0;
}
void Input(int b[N])
{//输入N个整数
    int i;
    printf("请输入%d个整数:\n",N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&b[i]);
    }
}
void Max(int b[N],int max[2])
{//求最大值及下标
    int i;
    max[0]=b[0];max[1]=0;
    for(i=1;i<N;i++)
    {
        if(b[i]>max[0])
        {
            max[0]=b[i];max[1]=i;
        }
    }
}
void Min(int b[N],int min[2])
{//求最小值及下标
    int i;
    min[0]=b[0];min[1]=0;
    for(i=1;i<N;i++)
    {
        if(b[i]<min[0])
        {
            min[0]=b[i];min[1]=i;
        }
    }
}
2.课堂实践6-2
将冒泡排序函数中控制趟数和每趟比较次数的初值均从0改为1,修改函数并实现降序排序。
程序代码:
#include "stdio.h"
#define N 10
void Input(int b[N])
{//输入函数
    int i;
    printf("请输入%d个整数:\n",N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&b[i]);
    }
}
void BubbleSort(int b[N])
{//冒泡排序函数
    int i,j,t;
    for(i=1;i<N;i++)
    { //外层循环控制趟数
        for(j=1;j<N-i+1;j++)
        { //内层循环控制每趟的比较次数
            if(b[j-1]<b[j])
            {
                t=b[j];
                b[j]=b[j-1];
                b[j-1]=t;
            }
        }
    }
}
void Print(int b[N])
{//输出函数
    int i;
    for(i=0;i<N;i++)
    {
        if(i%10==0)
            printf("\n");
        printf("%6d",b[i]);
    }
    printf("\n");
}
int main()
{
    int a[N];
    Input(a);
    printf("排序前:");
    Print(a);
    BubbleSort (a);
    printf("排序后:");
    Print(a);
    return 0;
}
3.课堂实践6-3
m×n矩阵A的第i行变成第i列(i=1,2,,m)得到的n×m矩阵称为矩阵A的转置矩阵,记为AT。编写程序求一个矩阵的转置矩阵,求得结果在主函数中输出。
程序代码:
#include "stdio.h"
#define M 3
#define N 4
void trans(int a[M][N],int b[N][M])
{
    int i,j;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            b[j][i]=a[i][j];
}
void Input(int b[M][N])
{
    int i,j;
    printf("请输入%d个整数:\n",M*N);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            scanf("%d",&b[i][j]);
}
void print1(int b[M][N])
{
c语言数组最大值最小值    int i,j;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            printf("%4d\t",b[i][j]);
        printf("\n");
    }
}
void print2(int b[N][M])
{
    int i,j;
    for(i=0;i<N;i++)
    {
        for(j=0;j<M;j++)
            printf("%4d\t",b[i][j]);
        printf("\n");
    }
}
int main()
{
    int A[M][N],B[N][M];
    Input(A);
    printf("转置前的矩阵为:\n");
    print1(A);
    trans(A,B);
    printf("转置后的矩阵为:\n");
    print2(B);
    return 0;
}
4.课堂实践6-4
由键盘任意输入N个国家的英文名称,按英语词典规律(升序)排序后输出。
程序代码:
#include <stdio.h>
#include <string.h>
#define N 5
void sort(char str[][80])
{
    char t[80];
    int i,j;
    for(i=0;i<N-1;i++)
    {
        for(j=0;j<N-1-i;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(t,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],t);
            }
        }
    }
}
void showstr(char str[][80])
{
    int i;
    for(i=0;i<N;i++)
    {
        puts(str[i]);
    }
}
int main()
{
    char str[N][80];
    int i;
    printf("请输入%d个国家的英文名称:\n",N);
    for(i=0;i<N;i++)
    {
        gets(str[i]);
    }
    sort(str);
    printf("排序后国家的英文名称:\n",N);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。