第8章习题-1

正文开始

题目描述:

alt text

解题思想:

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

解题流程:

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

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

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

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

代码呈现:

使用常规方法处理

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
}

运行结果如下:
alt text

使用指针处理

指针的基本概念:

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

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

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

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

例如:

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

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

画图理解:

alt text

指针解引用:

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

1
2
3
4
5
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. 输出三个整数的排序结果

画图理解:

alt text

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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;
}

运行结果如下:
alt text