使用if else语句代替while

时间:2019-11-16 16:59:01

标签: c

有什么方法可以仅通过使用if-else来编写此程序,否则可以使用if语句来代替使用while。

而且我也希望所有输入都在一行中,而不是

enter the number1:
enter the number2:
enter the number3:
enter the number4:
enter the number5:

应该像

Enter 5 numbers: _ _ _ _ _

当我两次写相同的最大数字时,我希望该程序也向我显示最大数字作为第二大数字。

例如:

Enter 5 integers: -88 53 41 53 -17
The largest one is: 53
The second largest one is: 53
53 is the multiple of 53
53 and 53 is equal to each other.
53 is an odd number.

这是我的代码:

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

int main(void)
{
    int sayi = 0;
    int sayac = 1;
    printf("Sayiyi Girin:");
    scanf("%d", &sayi);
    //ilk sayinin en buyuk oldugunu kabul ediyoruz.
    int enbuyuk = sayi;
    int ikinci_buyuk = sayi;
    while (sayac != 5)
    {
        sayac++;
        printf("Sayiyi Girin:");
        scanf("%d", &sayi);
        /*kitapligi ilk sayinin en buyuk oldugunu farz ediyor
         * eger ikinci sayi daha buyukse buyuk olanın yerini alacak
         * ayrica ikincisinide kontrol edecek
         */
        if (sayi > enbuyuk)
        {
            ikinci_buyuk  = enbuyuk;
            enbuyuk = sayi;
        }
        else if (sayi < enbuyuk)
        {
            // This to avoid if numbers are arranges descending
            if (sayac == 2)
            {
                ikinci_buyuk = sayi;
            }
            else if (sayi > ikinci_buyuk)
            {
                ikinci_buyuk = sayi;
            }
            //This to avoid if the user entered two equal numbers
            else if (enbuyuk == ikinci_buyuk)
            {
                ikinci_buyuk = enbuyuk;
            }
        }
    }
    printf("sayac: %d\n", sayac);
    printf("En buyuk sayi: %d\n", enbuyuk);
    printf("İkinci en buyuk sayi: %d\n", ikinci_buyuk);

    if (enbuyuk % ikinci_buyuk != 0)
    {
        printf("%d %d nin tam kati degildir. is not the multiple of", enbuyuk, ikinci_buyuk);
    }
    else
    {
        printf(" %d %d nin tam katidir. is the multiple of", enbuyuk, ikinci_buyuk);
    }

    if (enbuyuk != ikinci_buyuk)
    {
        printf(" %d ve %d birbirine esit degildir. not equal each other", enbuyuk, ikinci_buyuk);
    }
    else
    {
        printf(" %d ve %d birbirine esitir. equal each other", enbuyuk, ikinci_buyuk);
    }

    if (enbuyuk % 2 != 0)
    {
        printf("%d tek sayidir. odd number", enbuyuk);
    }
    else
    {
        printf("%d cift sayidir.even number", enbuyuk);
    }

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

从您的问题的标题开始:

if-else是一个无重复的条件代码流结构。没有任何其他指令(例如goto),就无法使其像while这样的循环。


但是我认为这不是您问题的核心。您似乎想阅读5个数字并进行检查。现在,您可以循环执行此操作,并且希望将其替换为其他循环。

您可以打印一个唯一的提示,然后为5个数字中的每个数字调用一个函数以进行检查。

由于您的变量没有被翻译且意图不明确,因此我将代码留在函数中作为练习。

printf("Enter 5 integers: ");
for (int i = 1; i <= 5; ++i)
{
    readnumber(/* you might need arguments */);
}

该功能将读取并检查一个数字。 scanf()只会读取一个数字,而将输入行的其余部分留给下次通话。

void readnumber(/* see above */)
{
    if (scanf("%d", &number) == 1)
    {
        /* handle the number */
    }
    else
    {
        /* handle the scan error */
    }
}

答案 1 :(得分:1)

您可以简单地通过输入一个printf()提示并读取5个变量或使用单个scanf()读取5个数组元素来读取5个数字:

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

int main(void) {
    int a[5];
    int first, second, i, j;

    printf("Enter 5 numbers: ");
    if (scanf("%d%d%d%d%d", &a[0], &a[1], &a[2], &a[3], &a[4]) != 5) {
        printf("Invalid input\n");
        return 1;
    }

    /* I cannot adapt the rest of the code because I cannot understand your language */
    /* Here is my quick implementation from the desired output */
    /* select the 2 largest numbers */
    for (i = 0; i < 2; i++) {
       for (j = i + 1; j < 5; j++) {
           if (a[i] < a[j]) {
               int tmp = a[i];
               a[i] = a[j];
               a[j] = tmp;
           }
        }
    }
    first = a[0];
    second = a[1];
    printf("The largest one is: %d\n", first);
    printf("The second largest one is: %d\n", second);
    if (second != 0 && first % second == 0)
        printf("%d is a multiple of %d\n", first, second);
    if (first == second)
        printf("%d and %d are equal\n", first, second);
    if (first % 2 != 0)
        printf("%d is an odd number.\n", first);
    return 0;
}