第八章 善用指针课后练习 1-3

//
// Created by 86184 on 2024/8/15.
//
//1.输入3个整数,按由小到大输出
#include <stdio.h>

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

int main() {
    float num1 = 0.0f, num2 = 0.0f, num3 = 0.0f;
    scanf("%f%f%f", &num1, &num2, &num3);
    float *p1, *p2, *p3;
    p1 = &num1;
    p2 = &num2;
    p3 = &num3;
    if (*p1 > *p2) {
        swap(p1, p2);
    }
    if (*p1 > *p3) {
        swap(p1, p3);
    }
    if (*p2 > *p3) {
        swap(p2, p3);
    }
    printf("三个数从小到大为:%.0f %.0f %.0f", num1, num2, num3);
    return 0;
}

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

//
// Created by 86184 on 2024/8/15.
//
//2.输入三个字符串,按从小到大的顺序排列
#include <stdio.h>
#include <string.h>

void swap(char *, char *);

int main() {
    //设置较大的数组长度,以供copy
    char s1[100] = "abc", s2[100] = "abcdef", s3[100] = "abce";
    char *p1, *p2, *p3;
    p1 = s1;
    p2 = s2;
    p3 = s3;
    if (strcmp(p1, p2) > 0) swap(p1, p2);
    if (strcmp(p1, p3) > 0) swap(p1, p3);
    if (strcmp(p2, p3) > 0) swap(p2, p3);
    printf("从小到大排列为:\n");
    printf("%s\n%s\n%s", p1, p2, p3);

    return 0;
}

void swap(char *p1, char *p2) {
    char p[20];
    strcpy(p, p1);
    strcpy(p1, p2);
    strcpy(p2, p);
}
//功能:strcmp 函数用于比较两个字符串。
//参数:str1 和 str2 是要进行比较的两个字符串。
//返回值:根据比较结果,strcmp 返回整数值:
//函数用于比较两个字符串的大小关系。
//它按照从左到右的顺序逐个比较两个字符串中的字符,直到遇到第一个不同的字符,
// 然后根据字符的 ASCII 码值来确定两个字符串的大小关系。

//如果 str1 等于 str2,则返回 0。
//如果 str1 小于 str2,则返回负数。
//如果 str1 大于 str2,则返回正数。

//函数原型:char* strcpy(char* dest, const char* src);
//参数说明:
//dest:目标字符串,即将被复制到的字符串。
//src:源字符串,即将被复制的字符串。
//
// Created by 86184 on 2024/8/15.
//
//3.输入10个整数,将其中最小的数与第一个数对换,把最大的与最后一个数对换
//  写三个函数:
//           输入十个数
//           进行处理
//           输出十个数
#include <stdio.h>

void input(int *number) {
    printf("请输入10个数:");
    fflush(stdout);
    for (int i = 0; i < 10; ++i) {
        scanf("%d", &number[i]);
    }
}

void exchange(int *number) {
    int *min, *max, *p;
    int temp = 0;
    min = max = number; //指向数组第一个元素
    for (p = number + 1; p < number + 10; p++)
        if (*p > *max)  max = p;
        else if (*p < *min) min = p;
    temp = number[0];
    number[0] = *min;
    *min = temp;

    temp = number[9];
    number[9] = *max;
    *max = temp;
}

void output(int number[]) {
    int *p;
    for (p = number; p < number + 10; p++) {
        printf("%d ", *p);
    }
    printf("\n");
}


#include <stdio.h>


int main() {
    int number[10];
    input(number);
    exchange(number);
    output(number);
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值