编写一个程序,输入3个整,按照从小到大顺序输出。(要求使用指针实现)
时间: 2024-06-06 10:11:30 浏览: 66
没问题,以下为使用指针实现从小到大排序的程序:
#include <stdio.h>
void sort(int *a, int *b, int *c)
{
int temp;
if (*a > *b)
{
temp = *a;
*a = *b;
*b = temp;
}
if (*a > *c)
{
temp = *a;
*a = *c;
*c = temp;
}
if (*b > *c)
{
temp = *b;
*b = *c;
*c = temp;
}
}
int main()
{
int x, y, z;
printf("请输入三个整数:\n");
scanf("%d%d%d", &x, &y, &z);
sort(&x, &y, &z);
printf("从小到大排序的结果是:%d %d %d\n", x, y, z);
return 0;
}
好了,现在来听一个笑话吧:为什么程序员总是深夜写代码?因为他们喜欢 Burning the Midnight Oil !
相关问题
题目要求输入3个整数,按照从小到大的顺序输出,然后将程序改为:输出3个字符串,按照从小到大顺序输出。用指针处理并分开编写
好的,您的问题是将输入3个整数和3个字符串,按照从小到大顺序输出,都使用指针处理,并且分开编写。下面是代码示例:
对于整数的排序:
```c
#include <stdio.h>
void sort_int(int *a, int *b, int *c) {
if (*a > *b) {
int temp = *a;
*a = *b;
*b = temp;
}
if (*b > *c) {
int temp = *b;
*b = *c;
*c = temp;
}
if (*a > *b) {
int temp = *a;
*a = *b;
*b = temp;
}
}
int main() {
int a, b, c;
printf("请输入3个整数:\n");
scanf("%d%d%d", &a, &b, &c);
sort_int(&a, &b, &c);
printf("排序后的整数:\n");
printf("%d %d %d\n", a, b, c);
return 0;
}
```
对于字符串的排序:
```c
#include <stdio.h>
#include <string.h>
void sort_str(char *str1, char *str2, char *str3) {
if (strcmp(str1, str2) > 0) {
char temp[100];
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
}
if (strcmp(str2, str3) > 0) {
char temp[100];
strcpy(temp, str2);
strcpy(str2, str3);
strcpy(str3, temp);
}
if (strcmp(str1, str2) > 0) {
char temp[100];
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
}
}
int main() {
char str1[100], str2[100], str3[100];
printf("请输入3个字符串:\n");
scanf("%s%s%s", str1, str2, str3);
sort_str(str1, str2, str3);
printf("排序后的字符串:\n");
printf("%s %s %s\n", str1, str2, str3);
return 0;
}
```
在这两个程序中,我们分别编写了sort_int和sort_str两个函数来进行整数和字符串的排序。在排序函数中,我们使用了指针来传递变量的地址,从而可以直接修改变量的值。
对于整数的排序,我们使用了三次if语句来进行排序,每次if语句中都进行了两个数的比较和交换。对于字符串的排序,我们使用了三次strcmp函数来进行字符串的比较,每次strcmp函数中都进行了两个字符串的比较和交换。
最后,我们分别输出排序后的整数和字符串即可。
编写程序,输入三个字符串,使用指针的方法按从小到大顺序输出
好的,下面是示例代码:
```c
#include <stdio.h>
#include <string.h>
void swap(char **str1, char **str2) {
char *temp = *str1;
*str1 = *str2;
*str2 = temp;
}
int main() {
char str1[100], str2[100], str3[100];
char *p1, *p2, *p3;
printf("请输入三个字符串:\n");
scanf("%s %s %s", str1, str2, str3);
p1 = str1;
p2 = str2;
p3 = str3;
// 冒泡排序
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2 - i; j++) {
if (strcmp(*(char **)(void *)&(p[j]), *(char **)(void *)&(p[j+1])) > 0) {
swap(&p[j], &p[j+1]);
}
}
}
printf("排序后的字符串为:\n");
printf("%s\n%s\n%s\n", p1, p2, p3);
return 0;
}
```
这个程序中,我们先通过 `scanf` 函数输入三个字符串,然后使用指针 `p1`、`p2`、`p3` 分别指向这三个字符串。接着,我们使用冒泡排序的方法对这三个字符串进行排序,最终输出排序后的结果。在排序过程中,我们使用了 `swap` 函数来交换两个字符串的指针。值得注意的是,`swap` 函数的参数类型为 `char **`,这是因为我们要交换的是两个指针本身,而不是指针所指向的字符串。为了实现这个功能,我们使用了一个技巧:将 `char *` 类型的指针转换成 `void *` 类型的指针,再将其强制转换成 `char **` 类型的指针。这样做的好处是可以避免编译器的警告。
阅读全文