我制作了一个程序,我的教授希望我特别按照她想要的方式制作,但输出与正确的输出不一样。
这是我的代码:
#include <stdio.h>
#define N 16
int xchg(int *a, int *b);
int main (){
int i, j, k, count;
int Num[N] = {7, 1, 993, -5, 0, 16, -451, 12, 89,28, 77, 384, -2, 38, -17, 201};
for(i = 0; i <= N - 1; i++){
for(j = i + 1; j <= N; j++){
count += xchg(&Num[i], &Num[j]);
}
for(k = 0; k < N; k++){
if(k <= 15){
printf("%d ", Num[k]);
}
else
printf("%d", Num[k]);
}
printf("\n");
}
printf("total exchanges: %d\n", count);
}
int xchg(int *a, int *b){
int c;
if ( *a > *b )
c = 1;
else
c = 0;
return c;
}
这是输出:
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
7 1 993 -5 0 16 -451 12 89 28 77 384 -2 38 -17 201
total exchanges: 1
这是正确的输出:
-451 7 993 1 0 16 -5 12 89 28 77 384 -2 38 -17 201
-451 -17 993 7 1 16 0 12 89 28 77 384 -2 38 -5 201
-451 -17 -5 993 7 16 1 12 89 28 77 384 0 38 -2 201
-451 -17 -5 -2 993 16 7 12 89 28 77 384 1 38 0 201
-451 -17 -5 -2 0 993 16 12 89 28 77 384 7 38 1 201
-451 -17 -5 -2 0 1 993 16 89 28 77 384 12 38 7 201
-451 -17 -5 -2 0 1 7 993 89 28 77 384 16 38 12 201
-451 -17 -5 -2 0 1 7 12 993 89 77 384 28 38 16 201
-451 -17 -5 -2 0 1 7 12 16 993 89 384 77 38 28 201
-451 -17 -5 -2 0 1 7 12 16 28 993 384 89 77 38 201
-451 -17 -5 -2 0 1 7 12 16 28 38 993 384 89 77 201
-451 -17 -5 -2 0 1 7 12 16 28 38 77 993 384 89 201
-451 -17 -5 -2 0 1 7 12 16 28 38 77 89 993 384 201
-451 -17 -5 -2 0 1 7 12 16 28 38 77 89 201 993 384
-451 -17 -5 -2 0 1 7 12 16 28 38 77 89 201 384 993
total exchanges:51
请帮助我将输出转换为正确的输出!我只编写了三个月的代码,所以我为基本的错误道歉。
答案 0 :(得分:0)
#include <stdio.h>
#define N 16
int xchg(int *a, int *b);
int main (void){
int i, j, k, count = 0;
int Num[N] = {7, 1, 993, -5, 0, 16, -451, 12, 89,28, 77, 384, -2, 38, -17, 201};
for(i = 0; i < N - 1; i++){
for(j = i + 1; j < N; j++){
count += xchg(&Num[i], &Num[j]);
}
for(k = 0; k < N; k++){
if(k < N-1){
printf("%d ", Num[k]);
} else {
printf("%d", Num[k]);
}
}
printf("\n");
}
printf("total exchanges: %d\n", count);
}
int xchg(int *a, int *b){
int s = (*a > *b);
if(s){
int t = *a;
*a = *b;
*b = t;
}
return s;
}
答案 1 :(得分:-1)
您的代码中存在一些问题。
一般来说,你应该就你不确定的问题提出具体问题。
根据您发布的内容。看起来你想在你的数组Num上执行冒泡排序,并计算发生的交换/交换的总数。
#include <stdio.h>
#define N 16
int xchg(int *a, int *b);
int main (){
int i, j, k, count = 0; // Initialize count to be 0 -- Number of exchanges
int Num[N] = {7, 1, 993, -5, 0, 16, -451, 12, 89,28, 77, 384, -2, 38, -17, 201};
for(i = 0; i <= N - 1; i++){
for(j = i + 1; j <= N; j++){
count += xchg(&Num[i], &Num[j]); // counters number of swaps and exchanges values as necessary
}
for(k = 0; k < N; k++){ // Prints out newest order of array
if (k < N - 1)
printf("%d ", Num[k]);
else
printf("%d", Num[k]);
}
printf("\n");
}
printf("total exchanges: %d\n", count); // Prints total number of exchanges
}
int xchg(int *a, int *b){ // Function to swap values if *a > *b
if ( *a > *b ){
int tmp = *a;
*a = *b;
*b = tmp;
return 1;
}
return 0;
}