C语言 生成编号规则,然后对该规则进行排序

ecr0jaav  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(151)

我应该写一个程序,处理100个正数的序列。程序应该有3个不同的功能,可以从菜单中选择。
1.使用随机生成器生成一个数字序列,并在屏幕上打印数字。生成的数字应在0 ≤ n ≤ 900的范围内
1.我必须用冒泡排序对序列进行排序,然后必须打印数字,我不能使用内置的排序函数,如qsort。
1.退出程序。1和2必须在自己的函数中。程序每次打印数字时,必须打印成十行十列的表格。只有选择了选项一,才能选择选项二。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
#define N 10
#define INVALID 0
#define VALID 1

void randomNum() {
    //random number gen
    int num[SIZE] = {0};
    int i = 0;
    
    srand(time(NULL));
    
    
for(i = 0; i < SIZE; i++) {
      
       num[i] =  rand() % 901;
    }
        for(i = 0; i < SIZE; i++) {
        printf("%4d", num[i]);
        if(i % 10 == 9)
            printf("\n");
    }  
}

void sort() {
    //sort of the generated number sequence
    int num[SIZE] = {0};
    int i = 0;
    int j = 0;
    int temp = 0;
    
     for (int i = 0 ; i < SIZE; i++)
      {
            for (int j = 0; j < SIZE - 1; j++)
            {
              if (num[j] > num[j+1]) 
                {
                temp = num[j];
                num[j]   = num[j+1];
                num[j+1] = temp;
                  }
            }
        }
            
         for(i = 0; i < SIZE; i++) {
        printf("%4d", num[i]);
        if(i % 10 == 9)
            printf("\n");
         }   
}

int main() {
    
    randomNum();
    printf("\n");
    
    sort();
    
    
    
    return 0;    
}

我已经找到了如何生成一个序列并排序它的解决方案,当所有代码都在main()中时,它可以正常工作,但是,当我在main()上方放入自己的函数时,它不工作。我被卡住了,不知道如何前进。当我运行程序时,它生成了一个随机序列,但排序函数只打印出100个零。

qacovj5a

qacovj5a1#

我修改了你的代码,试图以一种非常直接的方式做几乎相同的事情。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 100

void fill_random_array( int array[const], size_t sz )
{
    srand(time(NULL));  
    for(int i = 0; i < sz; ++i)
    {
        array[i] =  rand() % 901;
        printf("%3d%s", array[i], (i+1)%16? " ": "\n" );
    }  
}

void sort( int array[const], size_t sz )
{
    for (int i = 0 ; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE - 1; j++)
        {
            if (array[j] > array[j+1]) 
            {
                int temp   = array[j];
                array[j]   = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

int main()
{
    int data[SIZE];
    fill_random_array( data, SIZE );
    printf("\n\nResult:\n");
    sort( data, SIZE );
    
    for(int i = 0; i < SIZE; ++i)
    {
        printf("%3d%s", data[i], (i+1)%16? " ": "\n" );
    }  

    return 0;    
}

示例输出:

Success #stdin #stdout 0s 5536KB
757 872 260 877 827 747 839 279 468 311 361 584 382 364 528  24
848  32 307 479 594  59 172  54 811 530 550 451 618 893  39 474
261 597 450 187 740 686 467 307 393 224 288 775 588 816 195 832
848 502 707 838 859 879 892 769 806 839 616 523 831 656  97 191
352 844 676 488 629 539 796 121 763 183 896 747 395 190  74 639
 89 781 873  47 759 865 212  60 199 828 584 129 880  77 618 628
 20 690 216 650 

Result:
 20  24  32  39  47  54  59  60  74  77  89  97 121 129 172 183
187 190 191 195 199 212 216 224 260 261 279 288 307 307 311 352
361 364 382 393 395 450 451 467 468 474 479 488 502 523 528 530
539 550 584 584 588 594 597 616 618 618 628 629 639 650 656 676
686 690 707 740 747 747 757 759 763 769 775 781 796 806 811 816
827 828 831 832 838 839 839 844 848 848 859 865 872 873 877 879
880 892 893 896
wkftcu5l

wkftcu5l2#

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 100
#define N 10

void fill_random_array( int array[SIZE],  size_t size )
{
int i= 0;
srand(time(NULL));  
for(i = 0; i < SIZE; ++i)
{
    array[i] =  rand() % 901;    
} 
for(i = 0; i < SIZE; i++) {
    printf("%4d", array[i]);
    if(i % 10 == 9)
        printf("\n");
}
}

void sort( int array[SIZE], size_t size )
{
int i = 0;
int j = 0;
for (i = 0 ; i < SIZE; i++)
{
    for (j = 0; j < SIZE - 1; j++)
    {
        if (array[j] > array[j+1]) 
        {
            int temp   = array[j];
            array[j]   = array[j+1];
            array[j+1] = temp;
        }
    }
}
for(i = 0; i < SIZE; i++) {
    printf("%4d", array[i]);
    if(i % 10 == 9)
        printf("\n");
     }   
}

void calculations(int array[SIZE], size_t size) {
//max och min

int i = 0;
int max = 0;
int min = 900;
int sum = 0;
double average = 0;
double median = 0;
for(i = 0; i < SIZE; i++){

    if(array[i] > max) {
        max = array[i];   
    }
    if(array[i] < min) {
        min = array[i];
    }    
}  
//average
for(i = 0; i < SIZE; i++) {
    sum += array[i];
}
average = sum / SIZE;
//median
median = (array[49] + array[50])/2;
printf("Max: %d  Min: %d  Average: %f  Median: %f\n", max, min, average, median);          
}

void binsearch(int array[SIZE], size_t size) {
//binary search

int i = 0;
int pos = 0; //position
int start = 0; //start position i vector
int end = 99; //end position i vector
int number = 0;
int flag;
int row = 0; //row
int col = 0; //column
printf("Enter number: \n");
scanf("%d", &number);
flag = 0;
while(start <= end) {
    
    pos = (start + end)/2;
    if(array[pos] == number){
        row = (pos / N) + 1;
        col = (pos % N) + 1;
        printf("The number %d was found in position %d and row %d and column     %d\n", number, pos, row, col);
         
        flag = 1;
        break;
    }
    else if(array[pos] < number)
        start = pos + 1;
    else if(array[pos] > number)
        end = pos - 1;
    
    break;
}
 if(flag == 0)
     printf("Number not found\n");     
}    

int main()
{
int data[SIZE];
fill_random_array( data, SIZE );
printf("\n");
sort( data, SIZE );
printf("\n");
calculations( data, SIZE);
printf("\n");
binsearch(data, SIZE);

return 0;    
}

这是我的代码现在的样子。我想程序现在运行的还不错,但是当我运行它的时候,它会生成一个随机数序列,排序,然后打印出最大最小,平均值和中值。但是当我输入一个数字进行二进制搜索的时候,它会说:找不到一个数字,即使该数字在排序序列中,它为什么会这样做?我该如何修复它?

相关问题