C语言实验8_指针

C语言实验8_指针

实验08(01)利用指针实现

题目描述
输入 10 个整数,将其中最大的数与第一个数对换,把最小的数与最后一个数对换。写 3 个
子函数分别实现:(1)输入 10 个数;(2)进行处理;(3)输出 10 个数。
输入描述
依次输入十个整数。
输出描述
以格式 printf("%5d",m[i]);依次输出调整后的数组。
输入样例
2 23 12 56 -1 6 9 10 56 4
输出样例
56 23 12 2 4 6 9 10 56 -1
#include 
#define N 10
void scan(int *p);
void print(int m[]);
void xuanze(int *p);
int main()
{
    int m[N];
    int *p;
    p = m;
    scan(p);
    xuanze(p);
    print(p);
    return 0;
}
void scan(int *p)
{
    int i;
    for (i = 0; i < N; i++)
        scanf("%d", (p + i));
}
void print(int m[])
{
    int i;
    for (i = 0; i < N; i++)
        printf("%5d", m[i]);
    printf("\n");
}
void xuanze(int m[])
{
    int i, j, max, min, t;
    int m1 = 0, m2 = 0;
    max = m[0];
    min = m[0];
    for (i = 0; i < N; i++)
    {
        for (j = i + 1; j < N; j++)
        {
            if (m[j] > max)
            {
                max = m[j];
                m1 = j;
            }
            if (m[j] < min)
            {
                min = m[j];
                m2 = j;
            }
        }
    }
    m[m1] = m[0];
    m[m2] = m[N - 1];
    m[0] = max;
    m[N - 1] = min;
}

实验08(02) 数组操作

题目描述
编写主函数定义两个数组 a[3][3]和 b[3][3]并初始化,随机输入数组的行和列(行列从 0 开始
计数)。编写子函数对两个数组进行调整,要求将两个数组中对应位置的数进行比较,较大
的数存入 a 数组,较小的数存入 b 数组。数组数据在程序中固定给出。
输入描述
输入要调整的数的位置坐标(小于 3)
输出描述
以格式 printf("%5d",m[i][j]);依次输出调整后的 n 个数。
输入样例
2 2
输出样例
调整前 a 数组
0 12 200
3 4 5
6 7 8
调整前 b 数组
11 12 23
34 45 56
67 78 89
调整后 a 数组
0 12 200
3 4 5
6 7 89
调整后 b 数组
11 12 23
34 45 56
67 78 8
#include 
void tz(int a[3][3], int b[3][3], int i, int j);
int main()
{
    int a[3][3] = {{0, 12, 200}, {3, 4, 5}, {6, 7, 8}};
    int b[3][3] = {{11, 12, 23}, {34, 45, 56}, {67, 78, 89}};
    int m, n;
    scanf("%d%d", &m, &n);
    tz(a, b, m, n);
}
void tz(int a[3][3], int b[3][3], int m, int n)
{
    int i, j, t;
    printf("调整前 a 数组\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
        {
            printf("%5d", a[i][j]);
            if (j == 2)
                printf("\n");
        }
    printf("调整前 b 数组\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
        {
            printf("%5d", b[i][j]);
            if (j == 2)
                printf("\n");
        }
    if (a[m][n] < b[m][n])
    {
        t = a[m][n];
        a[m][n] = b[m][n];
        b[m][n] = t;
    }
    printf("调整后 a 数组\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
        {
            printf("%5d", a[i][j]);
            if (j == 2)
                printf("\n");
        }
    printf("调整后 b 数组\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
        {
            printf("%5d", b[i][j]);
            if (j == 2)
                printf("\n");
        }
}

实验08(03) 求序列的逆序

题目描述
编写一个子函数 G(int *m, int n),要求将指针 m 指向的长度为 n 的序列按逆序排列。主函数
输入该 n 个数的序列,n 的值可变但不大于 10,当输入的数等于 1000 或者输入的数超过 10
个时,结束输入。调用子函数调整并在主函数中输出该序列。
输入描述
无
输出描述
以格式 printf("%5d",m[i]);依次输出调整后的 n 个数。
输入样例
2
12
56
-1
9
10
1000
输出样例
1000 10 9 -1 56 12 2
#include 
void G(int *m, int t);
int main()
{
    int m[10];
    int i, t = 0;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &m[i]);
        t++;
        if (m[i] == 1000)
            break;
    }
    G(m, t);
    for (i = 0; i < t; i++)
        printf("%5d", m[i]);
    printf("\n");
    return 0;
}
void G(int *m, int t)
{
    int i, temp;
    for (i = 0; i < t / 2; i++)
    {
        temp = m[i];
        m[i] = m[t - 1 - i];
        m[t - 1 - i] = temp;
    }
}

实验08(04) 字符大小写变换

题目描述
编写子函数,能将一个字符串中的大写字符变为小写字符,而小写字符变为大写字符。主函
数中要求能输入字符串,并输出变换后的字符串。
输入描述
输入字符串,回车结束。字符串长度不能大于 32
输出描述
输出变换后的字符串。
输入样例
Abc234zsyZ
输出样例
aBC234ZSYz
#include 
void G(char *a);
int main()
{
    char a[32];
    char *p;
    p = a;
    scanf("%s", a);
    G(p);
    printf("%s\n", a);
    return 0;
}
void G(char *a)
{
    int i;
    for (i = 0; a[i] != '\0'; i++)
    {
        if (a[i] >= 'a' && a[i] <= 'z')
        {
            a[i] -= 32;
            continue;
        }
        if (a[i] >= 'A' && a[i] <= 'Z')
        {
            a[i] += 32;
            continue;
        }
    }
}

实验08(05) 多字符串排序

题目描述
编写子函数,实现将一个二维字符数组中的每一个字符串的字符按升序重新排列,字符串的
个数为 3,每个字符串的长度不大于 15。
要求:(1)主函数中要求能输入字符串数组,并输出变换后的字符串数组。
(2)主函数只能调用一次子函数完成上述功能
输入描述
输入 3 个字符串,每个字符串回车结束。字符串长度不能大于 15.
输出描述
输出变换后的字符串。
输入样例
ergs
345d2xc
34da1
输出样例
egrs
2345cdx
134ad
#include 
void GG(char a[][15]);
int main()
{
    char a[3][15];
    int i;
    for (i = 0; i < 3; i++)
        scanf("%s", &a[i]);
    GG(a);
    for (i = 0; i < 3; i++)
        printf("%s\n", a[i]);
    return 0;
}
void GG(char a[][15])
{
    int i, j, k, t;
    for (k = 0; k < 3; k++)
    {
        for (i = 0; a[k][i] != '\0'; i++)
            for (j = i + 1; a[k][j] != '\0'; j++)
            {
                if (a[k][j] < a[k][i])
                {
                    t = a[k][i];
                    a[k][i] = a[k][j];
                    a[k][j] = t;
                }
            }
    }
}

你可能感兴趣的:(C,算法)