困难——指针变量作函数参数

1.
用指针编程实现3X4的二维数组的元素读入以及求此二维数组的最大值及最大值下标 
请用以下函数实现:
void Input(int *p,int m, int n);  /*数组元素读入函数*/
int FindMax(int *p, int m, int n, int *pRow, int *pCol);  /*求最大值及下标函数*/

若存在若干个相同最大元素,则按照第一次出现的最大值的下标输出。

***输入提示信息:"Please input your data:\n"
***输入格式要求:无格式要求
***输出格式要求:"The maximum is %d, which is in row %d, colum %d\n"


样例:

Please input your data:
**输入样例:
3 5 2 7 1 6 12 11 4 10 8 9
**输出样例:
The maximum is 12, which is in row 1, colum 2
#include <stdio.h>

#define ROW 3
#define COLUMN 4

void Input(int (*p)[4], int m, int n); // (*p)[4]: 指针p指向包含4元素的数组
int FindMax(int (*p)[4], int m, int n, int *pRow, int *pCol);

int main (void)
{
    int score[ROW][COLUMN];
    int row = 0, col = 0;

    int maxScore = 0;

    printf("Please input your data:\n");
    Input (score, ROW, COLUMN);

    maxScore = FindMax (score, ROW, COLUMN, &row, &col);

    printf ("The maximum is %d, which is in row %d, colum %d\n", maxScore, row, col);

    return 0;
}

void
Input (int (*p)[4], int m, int n)
{
    int i, j;
    for (i = 0; i < m; i ++)
    {
        for (j = 0; j < n; j ++)
        {
            scanf ("%d", p[i] + j);
        }
    }
}

int
FindMax (int (*p)[4], int m, int n, int *pRow, int *pCol )
{
    int  i, j;
    int max = *(p[0]); // p[0][0]

    *pRow = 0;
    *pCol = 0;

    for (i = 0; i < m; i ++)
    {
        for (j = 0; j < n; j ++)
        {
            if (*(p[i] + j) > max) // p[i][j]
            {
                max = *(p[i] + j);

                *pRow = i;
                *pCol = j;
            }
        }
    }

    return max;
}

2.

输入3个数x,y,z,按从小到大顺序排序后输出。
要求:利用指针方法实现两数互换,函数原型为:void swap(int *p1,int *p2);
输入提示:printf("please input 3 number x,y,z");
输出格式:printf("the sorted numbers are:%d,%d,%d\n",  );

#include <stdio.h>

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

int main (void)
{
    int x, y, z;

    printf("please input 3 number x,y,z");
    scanf ("%d,%d,%d", &x, &y, &z);

    while (1)
    {
        if (x > y)
        {
            swap (&x, &y);
        }

        if (y > z)
        {
            swap (&y, &z);
        }

        if (x < y && y < z)
        {
            break;
        }

    }

    printf("the sorted numbers are:%d,%d,%d\n", x, y, z);

    return 0;
}

void
swap (int *p1, int *p2)
{
    int tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
}

3.

输入一个整形数,然后按汉语的习惯,将其读出来并输出。如1052,读作:一千零五十二。
输入样例:
1052
输出样例:
一千零五十二
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char chinese[10][4] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
const char places[5][4] = {"十", "百", "千", "万", "亿"};

int iCount = 0;
int nlen;

void ChinaPrint (char *num);

int main (void)
{
    char num[11];
    gets (num);

    nlen = strlen (num);

    ChinaPrint (num);

    return 0;
}

void
ChinaPrint (char *num)
{
    int len = strlen (num);

    if (len == 0)
    {
        return;
    }

    switch (num[0])
    {
        case '0':
            if (num[1] != '0' && len > 1)
            {
                printf ("%s", chinese[0]);
            }
            break;
        case '1':
            if (len != 2 && len != 6)
            {
                printf ("%s", chinese[1]);
            }
            else if (*(num - 1) != '0)
            {
                printf ("%s", chinese[1]);
            }
            break;
        case '2':
            printf("%s", chinese[2]);
            break;
        case '3':
            printf("%s", chinese[3]);
            break;
        case '4':
            printf("%s", chinese[4]);
            break;
        case '5':
            printf("%s", chinese[5]);
            break;
        case '6':
            printf("%s", chinese[6]);
            break;
        case '7':
            printf("%s", chinese[7]);
            break;
        case '8':
            printf("%s", chinese[8]);
            break;
        case '9':
            printf("%s", chinese[9]);
            break;
        default:
            return;
        }

    switch (len)
    {
        case 9:
            printf("%s", places[4]);
            break;
        case 8:
            if (num[0] != '0')
                printf("%s", places[2]);
            break;
        case 7:
            if (num[0] != '0')
                printf("%s", places[1]);
            break;
        case 6:
            if (num[0] != '0')
                printf("%s", places[0]);
            break;
        case 5:
            break;
        case 4:
            if (num[0] != '0')
                printf("%s", places[2]);
            break;
        case 3:
            if (num[0] != '0')
                printf("%s", places[1]);
            break;
        case 2:
            if (num[0] != '0')
                printf("%s", places[0]);
            break;
        case 1:
            break;
        default:
            return;
    }

    iCount ++;

    if(nlen - iCount == 5 && nlen > 4)
    {
        printf("%s", places[3]);
    }

    ChinaPrint (++ num);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值