谭浩强C语言程序设计第五版课后习题详细讲解-第8章习题-1

正文开始

题目描述:

请添加图片描述

解题思想:

只需要进行数字间的两两比较,完成数据的有序输出

解题流程:

1. 捕捉(定义)三个整数,num1、num2、num3;

2. 将num1与num2进行比较,将较小的值存储到num1中;

3. 将num1与num3进行比较,将较小的值存储到num1中,这时候num1中存储的就是三个整数中最小的那个值

4. 将num2与num3进行比较,将较小的值存储到num2中,这时候num2就是次小值。

代码呈现:

使用常规方法处理

代码如下:

#define _CRT_SECURE_NO_WARNINGS //宏定义,防止VS出现不安全的警告
#include <stdio.h> //标准输入输出库
//#include <stdlib.h> //system的头文件

int main()
{
    int num1, num2, num3; //定义三个整数
    printf("请输入三个整数:"); //提示输入
    scanf("%d %d %d", &num1, &num2, &num3); //输入三个整数

    if (num1 > num2) //比较num1与num2,将较小的数存入num1
    {
        int temp = num1; //定义一个中间变量temp,用于临时存储num1的值
        num1 = num2;
        num2 = temp;
    }
    if (num1 > num3) //比较num1与num3,将较小的数存入num1
    {
        int temp = num1; //定义一个中间变量temp,用于临时存储num1的值
        num1 = num3;
        num3 = temp;
    }
    if (num2 > num3) //比较num2与num3,将较小的数存入num2
    {
        int temp = num2; //定义一个中间变量temp,用于临时存储num2的值
        num2 = num3;
        num3 = temp;
    }
    printf("三个整数的排序结果为:%d %d %d", num1, num2, num3); //输出三个整数的排序结果
    //system("pause"); //暂停程序,等待用户输入(可要可不要,可以把它注释掉),低版本编译器可能会出现一闪而过的黑框,使用这个解决。
    return 0;
}

运行结果如下:
请添加图片描述

使用指针处理

指针的基本概念:

数据都是存储在内存中的,指针就是内存地址
如果我们有了一块内存地址,就可以通过这个地址去访问这块内存中的数据

总结:指针就是内存地址,通过指针可以访问内存中的数据。

指针变量(用于保存内存地址):

指针类型的变量可以保存一个内存地址,它可以用来访问内存中的数据

例如:

int a=10; //定义一个整型变量a,并赋值为10

int *p=&a; //定义一个指针变量p,并将a的内存地址赋值给p

画图理解:
请添加图片描述

指针解引用:

指针解引用就是通过指针变量去访问它指向的内存地址中的数据

int a=10; //定义一个整型变量a,并赋值为10

int *p=&a; //定义一个指针变量p,并将a的内存地址赋值给p

int b=*p; //通过指针p去访问a的内存地址中的数据,并将数据赋值给b

解题思路:

  1. 定义三个整型指针变量 *pmin(小值指针), *pmax(大值指针), *pmid(中间值指针)

  2. 输入三个整数,并将三个指针变量指向这三个整数的内存地址

  3. 利用指针变量,比较三个整数,将较小的数存入pmin中,将较大的数存入pmax中,将中间的数存入pmid中

  4. 输出三个整数的排序结果

画图理解:
请添加图片描述
代码如下:

#define _CRT_SECURE_NO_WARNINGS //宏定义,防止VS出现不安全的警告
#include <stdio.h> //标准输入输出库

int main()
{
    int num1, num2, num3; //定义三个整数
    printf("请输入三个整数:"); //提示输入
    scanf("%d %d %d", &num1, &num2, &num3); //输入三个整数

    int *pmin = &num1; 
    int *pmid = &num2; 
    int *pmax = &num3; //定义三个指针变量
 
    if (*pmin > *pmid) //指针解引用,*pmin与*pmid指向交换,也就是地址的交换,所以这里比较的是值
    {
        int *temp = pmin; //定义一个中间指针变量temp,用于临时存储*pmin的地址
        pmin = pmid;
        pmid = temp;
    }
    if (*pmin > *pmax) //指针解引用,*pmin与*pmax指向交换,也就是地址的交换,所以这里比较的是值
    {
        int *temp = pmin; //定义一个中间指针变量temp,用于临时存储pmin的地址
        pmin = pmax;
        pmax = temp;
    }
    if (*pmid > *pmax) //指针解引用,*pmid与*pmax指向交换,也就是地址的交换,所以这里比较的是值
    {
        int *temp = pmid; //定义一个中间指针变量temp,用于临时存储pmid的地址
        pmid = pmax;
        pmax = temp;
    }
    printf("三个整数的排序结果为:%d %d %d", *pmin, *pmid, *pmax); //输出三个整数的排序结果
    //system("pause"); //暂停程序,等待用户输入(可要可不要,可以把它注释掉),低版本编译器可能会出现一闪而过的黑框,使用这个解决。
    return 0;
}

运行结果如下:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值