用c语言随机输入一些整数,对这些整数进行冒泡排序后输出。 Input 第一行输入一个整数,表示接下来要输入的整数的个数 n。 第二行输入 n 个整数,以空格分隔。 Output 输出从小到大排好序后的序列,输出为 1 行,以空格分开。
时间: 2023-02-07 18:46:03 浏览: 99
下面是实现冒泡排序的 C 语言代码:
```
#include <stdio.h>
int main() {
int n, i, j, temp; // 定义变量
scanf("%d", &n); // 读入整数的个数
int a[n]; // 定义数组
for (i = 0; i < n; i++) {
scanf("%d", &a[i]); // 读入整数
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) { // 比较相邻的两个数,如果顺序错误就交换
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d ", a[i]); // 输出排序后的序列
}
return 0;
}
```
该代码实现了从小到大排序。如果要从大到小排序,可以将比较的符号 `>` 改为 `<`。
希望这能帮到你!
相关问题
c语言编写冒泡程序对输入的15个无序整数排序。要求,编写3个子函数;1个为数组输入数据,1个为排序,一个为输出数组数据(输出结果5个一行显示)。主函数调用子函数来完成冒泡排序。
### 回答1:
好的,我会回答您的问题。下面是针对您的问题的代码:
```
#include <stdio.h>
#define MAX_NUM 15
// 定义三个子函数:输入、排序、输出
void input(int arr[])
{
printf("请输入%d个无序整数:\n", MAX_NUM);
for(int i = 0; i < MAX_NUM; i++)
{
scanf("%d", &arr[i]);
}
}
void sort(int arr[])
{
int temp;
for(int i = 0; i < MAX_NUM-1; i++)
{
for(int j = 0; j < MAX_NUM-i-1; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void output(int arr[])
{
printf("排序后的结果为:\n");
for(int i = 0; i < MAX_NUM; i++)
{
printf("%d ", arr[i]);
if((i+1) % 5 == 0) printf("\n"); // 每输出5个数换行
}
}
int main()
{
int arr[MAX_NUM];
input(arr); // 调用输入函数
sort(arr); // 调用排序函数
output(arr); // 调用输出函数
return 0;
}
```
希望能对您有所帮助。
### 回答2:
根据题目要求,我编写了以下三个子函数和主函数来完成冒泡排序的要求:
1. 数组输入函数 `input_array`:
```c
void input_array(int arr[], int n) {
printf("请输入15个无序整数:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
}
```
2. 排序函数 `bubble_sort`:
```c
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
3. 数组输出函数 `output_array`:
```c
void output_array(int arr[], int n) {
printf("排序后的数组为:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
if ((i + 1) % 5 == 0) {
printf("\n");
}
}
}
```
最后,在主函数中调用这三个子函数来完成冒泡排序:
```c
int main() {
int arr[15];
int n = sizeof(arr) / sizeof(arr[0]);
input_array(arr, n);
bubble_sort(arr, n);
output_array(arr, n);
return 0;
}
```
以上代码实现了对输入的15个无序整数进行冒泡排序,并按照每行显示5个结果进行输出。
### 回答3:
首先,我们可以定义一个全局变量NUM来表示输入的整数数量,这里是15。
然后,我们编写第一个子函数inputArray(),用于接收用户输入的15个无序整数,并存储到一个名为array的数组中。
接下来,我们编写第二个子函数bubbleSort(),用于对array数组进行冒泡排序。冒泡排序的基本思想是从数组的第一个元素开始,与其后相邻的元素进行比较,若发现逆序则交换位置,这样经过一轮的比较和交换,可以将最大的元素“冒泡”到数组的末尾。重复这个过程,直到所有元素排序完毕。
最后,我们编写第三个子函数outputArray(),用于输出排序后的整数数组。根据题目要求,我们每行输出5个数。因此,我们可以使用一个循环,遍历数组并按照要求输出。
在主函数中,我们先调用inputArray()函数输入15个整数到数组中,然后调用bubbleSort()函数对数组进行排序,最后调用outputArray()函数输出排序后的数组。
以下是完整的代码示例:
#include <stdio.h>
#define NUM 15
void inputArray(int array[]) {
printf("请输入15个无序整数:\n");
for (int i = 0; i < NUM; i++) {
scanf("%d", &array[i]);
}
}
void bubbleSort(int array[]) {
for (int i = 0; i < NUM - 1; i++) {
for (int j = 0; j < NUM - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
void outputArray(int array[]) {
printf("排序后的数组为:\n");
for (int i = 0; i < NUM; i++) {
printf("%d ", array[i]);
if ((i + 1) % 5 == 0) {
printf("\n");
}
}
}
int main() {
int array[NUM];
inputArray(array);
bubbleSort(array);
outputArray(array);
return 0;
}
通过运行上述代码,用户可以输入15个无序整数,程序将对其进行冒泡排序,并按照每行5个数的格式输出排序好的结果。
用c语言写出用户输入多个正整数,进行排序后输出,事先不知道用户输入正整数的个数,可以给一个提示结束输入,有异常处理机制,例如当输入字母时,提示用户重新输入
下面是一个用C语言实现的用户输入多个正整数排序的程序,包括了异常处理机制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
int main()
{
int numbers[MAX_SIZE];
int count = 0;
char input[10];
int i, j;
// 循环读取用户输入的数字,直到用户输入结束
while (1) {
printf("请输入一个正整数(输入q或其他字母结束输入):");
scanf("%s", input);
if (isdigit(input[0])) {
numbers[count++] = atoi(input);
if (count >= MAX_SIZE) {
printf("输入的数字过多,只能处理前%d个\n", MAX_SIZE);
break;
}
} else {
printf("输入结束\n");
break;
}
}
// 对数字进行排序
for (i = 0; i < count - 1; i++) {
for (j = i + 1; j < count; j++) {
if (numbers[i] > numbers[j]) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
// 输出排序后的结果
printf("排序后的结果为:\n");
for (i = 0; i < count; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
```
程序中使用了一个 `while` 循环来读取用户输入的数字,当用户输入一个非数字字符时,程序会判断是否是输入结束,如果是,就跳出循环;否则提示用户重新输入。使用 `isdigit` 函数来判断输入的字符是否是数字,使用 `atoi` 函数将字符串转换为整数。
程序还设置了一个常量 `MAX_SIZE` 来限制用户输入的数字个数,防止用户输入过多的数字导致程序崩溃。
排序算法使用了一个简单的冒泡排序,对于小规模的数据集来说已经足够快了。
最后,程序输出排序后的结果。