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");
}
效果为: