C语言 如何在已修改的函数外部打印出数组值


void sort(int values[], int n);  
void modify_all_aray_values_to_0(int value[], int array_size);
int main(void)
{
int aray[] = {4,2,56,2,1,7,20,9,3,5,6,4,3,2,44,57};
int size_of_aray = sizeof(aray)/sizeof(aray[0]);
sort(aray, size_of_aray);
printf("n");
}
void sort(int values[], int n)
{
// TODO: implement a sorting algorithm
int temporary;
//assumes temporary array size will not exceed 1000
int temporary_array[1000];
int size_of_tmp_array = sizeof(temporary_array)/sizeof(temporary_array[0]);
//set all values in temporary array to 0
modify_all_aray_values_to_0(temporary_array, size_of_tmp_array);
for(int i = 0; i < n; i++)
{
//store the values of values[] i'th in temporary variable
//at this stage, temporary = 4, because first element in values[] is 4
temporary = values[i];
//store result of temporary_array[4]+1 in temporary_array[4]
//at this stage temporary_array[4],s values is 0
//when i assigned it, it gets the value (0) and increment it with 1
//this means so far i have seen value 4 once in values[]
/*so if this loops again and it found value 4, it will
modify and increment temporary_array value to 2*/
temporary_array[temporary] = temporary_array[temporary]+1;
//so at the end of the loop
//temporary_array[1] = 1
//temporary_array[2] = 3
//temporary_array[3] = 2
//temporary_array[4] = 2 and so on...
}
int tu;
//print all values in values[] before it get modified
for(int i = 0; i < n; i++)
{
printf("%i-", values[i]);
}
printf("n");
//assumes it wont loop more than 100 times
for(int i = 0; i < 100; i++)
{
if(temporary_array[i] > 0)
{
for(tu = 0; 0 < temporary_array[i]; tu++ )
{
//modify valeus[] by assigning i'th value
//at this stage if when temporary_array[1] is greater than 0
//store 1 in values[0]
values[tu] = i;
//immediately decrease temporary_array[1] by 1
//now temporary_array[1] is now 0
//next time the loop will check if its greater than 0
//if so it will modify values[] and store the value
//else it wont bother and that means 1 doesnt appear in array again
temporary_array[i] = temporary_array[i]-1;
//print values[0] inside loop after modification
printf("%i,", values[tu]);
//printed 1
//will print 1,2,2,2,3,3... and so on after compilation
}
}
}
printf("n");
for(int i = 0; i < n; i++)
{
//print values[0] outside the previous loop
printf("%i-", values[i]);
//this time around it printed 57 instead of 1
//prints 57-4-2-2-1-7-20... and so on
//what could have happend?
}
printf("n");
return;
}
void modify_all_aray_values_to_0(int value[], int array_size)
{
for(int i = 0; i < array_size; i++)
{
value[i] = 0;
}
}

请帮我解决这个问题。 我之前发布过这个问题,但它是不行和可以理解的,所以我决定删除这个问题并研究用户评论只是为了从我的错误中吸取教训,以便我能够提出我们可以理解的问题。

我真的练习了代码格式,现在我感谢上帝,因为它比我发布的上一篇文章更好。

我能够发现您的代码存在很多问题。首先,您一定要阅读如何提问。给你几点:

  1. 不要在代码中放那么多注释,这会很难理解
  2. 通过名称使用众所周知的概念,以便其他人很容易理解您在做什么。就像这里一样,从外观上看,您正在尝试实现计数排序

至于代码,您面临的主要错误是由于此代码块

for(int i = 0; i < 100; i++)
if(temporary_array[i] > 0)//If the count of a number is > 0
for(tu = 0; 0 < temporary_array[i]; tu++ ){ //<- ERROR HERE 
values[tu] = i;
temporary_array[i] = temporary_array[i]-1;
printf("%i,", values[tu]);
}

问题是您每次都将values[tu]设置为temporary_array中新找到的非零项。所以发生的事情是,首先,你做出values[0]=1,然后再次改变values[0]=2等等......

我不是在指出问题的确切解决方案,也不是你为什么要面对它。因为鼓励你自己解决。因此,请继续查看该代码块并尝试修复它。如果有更多问题,您可以询问:)

PS:这是我编辑过的代码版本,它让我更容易解释

#include <stdio.h>
void sort(int values[], int n);  
void modify_all_aray_values_to_0(int value[], int array_size);
int main(void){
int aray[] = {4,2,56,2,1,7,20,9,3,5,6,4,3,2,44,57};
int size_of_aray = sizeof(aray)/sizeof(aray[0]);
sort(aray, size_of_aray);
}
void sort(int values[], int n){
int temporary;
int temporary_array[1000];
int size_of_tmp_array = sizeof(temporary_array)/sizeof(temporary_array[0]);
modify_all_aray_values_to_0(temporary_array, size_of_tmp_array);
for(int i = 0; i < n; i++){
temporary = values[i];
temporary_array[temporary] = temporary_array[temporary]+1;
}
int tu;
printf("Before getting modified: ");
for(int i = 0; i < n; i++)
printf("%i ", values[i]);
printf("nn");

printf("temporary_array: ");
for(int i = 0; i < size_of_tmp_array; i++){
if(temporary_array[i]>0) printf("%d-%i ", i,temporary_array[i]);
}
printf("nn");
for(int i = 0; i < 100; i++)
if(temporary_array[i] > 0)//If the count of a number is > 0
for(tu = 0; 0 < temporary_array[i]; tu++ ){
values[tu] = i;
temporary_array[i] = temporary_array[i]-1;
printf("%i,", values[tu]);
}
printf("nnShould be 1 2 2 2 3 3 4 4 5 6 7 9 20 44 56 57");
printf("nnAfter Sorting: ");
for(int i = 0; i < n; i++)
printf("%i ", values[i]);
printf("n");
return;
}
void modify_all_aray_values_to_0(int value[], int array_size){
for(int i = 0; i < array_size; i++) value[i] = 0;
}

最新更新