C语言笔记9--趣味算法04

1.题目:输入3个数a,b,c,按大小顺序输出
分析:这个排序非常多的解法,只用三目运算符也能简便求出,这次我采用指针进行解答

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void swap(int *p1, int *p2)
{
    int temp;
    temp = *p1;//取值
    *p1 = *p2;
    *p2 = temp;
}
void main()
{
    int a, b, c;
    int *p1, *p2, *p3;
    printf("请输入三个数字:");
    scanf("%d,%d,%d", &a, &b, &c);
    p1 = &a;//分别把地址传给指针变量
    p2 = &b;
    p3 = &c;
    //升序输出
    if (a > b)
        swap(p1, p2);
    if (a > c)
        swap(p1, p3);
    if (b > c)
        swap(p2, p3);
    printf("%d,%d,%d", a, b, c);
    system("pause");
}

输出结果:
这里写图片描述
2.题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:通过遍历数组分别找出最大值和最小值的下标,然后进行交换,但要注意第一个是最大,最后一个是最小的情况。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void swap(int *p1, int *p2)
{
    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
void main()
{
    int a[5];//这里我只输入5个数字
    int max, min, index_max, index_min;
    printf("请输入5个数字:");
    for (int i = 0; i < 5; i++)
    {
        scanf("%d,", &a[i]);
    }
    max = a[0];
    min = a[4];
    for (int j = 0; j < 5; j++)//找出最大值
    {
        if (a[j] >= max)
        {
            max = a[j];
            index_max = j;
        }

    }
    if (index_max == 0)
    {
        ;//如果首个元素是最大值不用交换
    }
    else
    {
        swap((&a[0]), (&a[index_max]));//交换
    }
    for (int j = 0; j < 5; j++)//最小值
    {
        if (a[j] <= min)
        {
            min = a[j];
            index_min = j;
        }
    }
    if (index_min == 4)
    {
        ;//如果最后一个元素是最小值不用交换
    }
    else
    {
        swap((&a[4]), (&a[index_min]));//交换
    }
    for (int k = 0; k < 5; k++)
    {
        printf("%d,", a[k]);
    }
    system("pause");
}

首个元素是最大值的情况:
这里写图片描述
末位是最小值的情况:
这里写图片描述
3.题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
分析:定义一个新的数组保存改变后的值。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void move(int *a,int n)
{
    int b[10];//用来存储新的数组
    for (int i = 0; i < (10 - n); i++)
    {
        b[(i + n)] = a[0];
        a++;//赋值后指针+1
    }
    for (int j = 0; j < n; j++)
    {
        b[j] = a[0];
        a++;
    }
    for (int k = 0; k < 10; k++)
    {
        printf("%d,", b[k]);
    }
}
void main()
{
    int a[10], n;
    printf("请输入10个数字:");
    for (int i = 0; i < 10; i++)
    {
        scanf("%d,", &a[i]);
    }
    printf("请输入要移动的位数:");
    scanf("%d", &n);
    move(a, n);//传入数组的地址
    system("pause");
}

效果为:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/82253265
今日推荐