一个使用C的小程序,用if,else查找四个数中最大的一个

时间:2016-01-05 12:13:49

标签: c

我是C编程新手,也是“编程”。到目前为止不到一个月。我做了一个小程序,打印出四个输入数字中最大和最小的整数。有没有使用基本c编程方法的最短路径?

#include <stdio.h>

main()
{   
    int a, b, c, d, y;

    printf("Enter four integers (separate them with spaces): ");
    scanf("%d %d %d %d", &a, &b, &c, &d);

    if (a>b && a>c && a>d){
      if (b<c && b<d){
        y = b;
      }
      else if (c<b && c<d){
        y = c;
      }
      else if (d<b && d<c){
        y = d;
      }

      printf("Largest: %d\n", a);
      printf("Smallest: %d", y);
    }
    else if (b>a && b>c && b>d) {
      if (a<c && a<d){
        y = a;
      }
      else if(c<a && c<d){
        y = c;
      }
      else if(d<a && d<c){
        y = d;
      }

      printf("Largest: %d\n", b);
      printf("Smallest: %d", y);
    }
    else if (c>a && c>b && c>d)
    {
      if (a<b && a<d){
        y = a;
      }
      else if(b<a && b<d){
        y = b;
      }
      else if(d<a && d<b){
        y = d;
      }

      printf("Largest: %d\n", c);
      printf("Smallest: %d", y);
    }
    else if (d>a && d>b && d>c) {
      if (a<b && a<c){
        y = a;
      }
    else if(b<a && b<c){
      y = b;
    }
    else if(c<a && c<b){
      y = c;
    }

    printf("Largest: %d\n", d);
    printf("Smallest: %d", y);
  }

  return 0; 
}

5 个答案:

答案 0 :(得分:3)

欢迎来到编程世界。你会喜欢这里:)

在逻辑思维中,你应该总是试着想出一个可以轻松扩展的通用解决方案。

最大值问题的一般方法是任意设置最大值,然后使用循环比较将所有其他值。

将数字放在数组中。

int array[] = {a,b,c,d};

将max和min值任意设置为数组的第一个元素

int max = array[0];
int min = array[0];

将循环运行到数组的长度,并将每个元素与max进行比较。如果它大于最大值,则更新最大值。同样地将每个元素与最小值进行比较,如果它小于最小值,则更新最小值。

int length = sizeof array / sizeof array[0];
for (int n = 0; n < length; n++)
    {
       if(array[n]>max)
       {
        max = array[i];
       }
       if(array[n]<min)
       {
        min = array[i];
       }
    }
printf("Maximum Number:\t%d\n",max);
printf("Minimum Number:\t%d\n",min);

使用这种方法,您可以轻松扩展到大量输入,而且非常简单。

答案 1 :(得分:2)

  

使用基本的c编程方法有没有最短的方法?

根据您的问题,for loop将完成这项工作:

#include<stdio.h>

int main (void){
    int array[] = {1,6,15,9};
    int length = sizeof array / sizeof array[0];
    int big, small;

    big=small=array[0];
    for (int i = 0; i < length; i++){
        if(array[i]>big){
            big=array[i];
        }

        if(array[i]<small){
            small=array[i];
        }
    }

    printf("The biggest Number is:\t%d\n",big);
    printf("The smallest Number is:\t%d\n",small);

    return 0;
}

输出:

The biggest Number is:  15
The smalles Number is:  1

我认为这是一个codereview.stackexchange.com问题,而不是SO。

答案 2 :(得分:2)

直接的方法如下

#include <stdio.h>

int main( void )
{   
    int a, b, c, d;
    int largest, smallest;

    printf( "Enter four integers (separate them with spaces): " );
    scanf( "%d %d %d %d", &a, &b, &c, &d );


    largest = smallest = a;

    if ( largest < b )
    {
        largest = b;
    }
    else if ( b < smallest )
    {
        smallest = b;
    }
    if ( largest < c )
    {
        largest = c;
    }
    else if ( c < smallest )
    {
        smallest = c;
    }
    if ( largest < d )
    {
        largest = d;
    }
    else if ( d < smallest )
    {
        smallest = d;
    }

    printf( "\nLargest: %d\n", largest );
    printf( "Smallest: %d", smallest );

    return 0;
}

如果要输入例如

3 2 1 4

然后输出

Enter four integers (separate them with spaces): 3 2 1 4

Largest: 4
Smallest: 1

另一种方法是以下

#include <stdio.h>

int main( void )
{   
    int a, b, c, d;

    printf( "Enter four integers (separate them with spaces): " );
    scanf( "%d %d %d %d", &a, &b, &c, &d );

    if ( !( a < b || a < c || a < d ) )
    {        
        printf( "\nLargest: %d\n", a );
    }        
    else if ( !( b < c || b < d ) )
    {        
        printf( "\nLargest: %d\n", b );
    }        
    else if ( !( c < d ) )
    {        
        printf( "\nLargest: %d\n", c );
    }        
    else 
    {        
        printf( "\nLargest: %d\n", d );
    }        

    if ( !( b < a || c < a || d < a ) )
    {        
        printf( "Smallest: %d", a );
    }        
    else if ( !( c < b || d < b ) )
    {        
        printf( "Smallest: %d", b );
    }        
    else if ( !( d < c ) )
    {        
        printf( "Smallest: %d", c );
    }        
    else 
    {        
        printf( "Smallest: %d", d );
    }        

    return 0;
}

同一输入的输出相同。

如果要使用整数数组,那么你可以写一个像这样的通用函数

struct minmax
{
    int *min;
    int *max;
}

struct minmax minmax_element( int *a, size_t n )
{
    struct minmax m = { a, a };

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[i] < *m.min ) m.min = a + i;
        else if ( *m.max < a[i] ) m.max = a + i;
    }

    return m;
}

此功能甚至可以用于空序列。它返回指向数组中最大和最小元素的指针结构。

至于ypur方法,那么一般来说它是不正确的。它没有考虑到一些(甚至所有)数字可以彼此相等。

同样根据C标准函数main,没有参数应声明为

int main( void )

答案 3 :(得分:0)

这种带有函数的方法更具动态性,可重用性和可读性:

int max(int* arr ,int n) {

    if (n < 0)
        return 0;

    int ans = arr[0];
    for (int i=1; i<n; i++) {
        if (arr[i]>ans) {
            ans = arr[i];
        }
    }

    return ans;
}

int min(int* arr ,int n) {

    if (n < 0)
        return 0;

    int ans = arr[0];
    for (int i=1; i<n; i++) {
        if (arr[i]<ans) {
            ans = arr[i];
        }
    }

    return ans;
}

int main()
{
    int a, b, c, d;

    printf("Enter four integers (separate them with spaces): ");
    scanf("%d %d %d %d", &a, &b, &c, &d);

    int arr[] = {a, b, c, d};
    printf("Largest: %d\n", max(arr, 4));
    printf("Smallest: %d", min(arr, 4));

    return 0; 
}

答案 4 :(得分:0)

以下代码包含错误检查,并且简单而简单地实现了功能,而无需进入新程序员难以理解的代码。

#include <stdio.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <limits.h> // INT_MAX, INT_MIN

#define MAX_INPUTS (4)

int main( void )
{
    // declare array of MAX_INPUTS integers
    int myInputs[ MAX_INPUTS];

    // for flexibility, the printf() and scanf() could be in a loop
    // so most any number (defined in MAX_INPUTS) could be used
    // with out changing anything but the #define statement
    printf("Enter four integers (separate them with spaces): ");
    if( 4 != scanf("%d %d %d %d", &myInputs[0], &myInputs[1], &myInputs[2], &myInputs[3]) )
    { // then scanf failed
        // output error message, including the system error message to stderr
        perror( "scanf for 4 inputs failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, scanf successful

    int minValue = INT_MAX;
    int maxValue = INT_MIN;

    for( size_t i=0; i< MAX_INPUTS; i++ )
    {
        if( myInputs[i] > maxValue) maxValue = myInputs[i];
        if( myInputs[i] < minValue) minValue = myInputs[i];
    }

      printf("Largest: %d\n", maxValue);
      printf("Smallest: %d\n", minValue);

    return 0;
} // end function: main