2012-10-29 49 views
0

你好,在編碼方面還算新穎,我有這個程序每次運行程序都要加一個數字,它計算1 + 2 + 3 + ......(n-1 )+ n 以及一個將該值與(n *(n + 1))/ 2進行比較的if語句,然後顯示相同或不同的消息。C,同時每次添加編號

#include <stdio.h> 

int main(void) 
{ 

    int value = 0, n_data_value, count = 0, second_value; 

    printf("Enter a number\n"); 
    scanf("%lf", &n_data_value); 

    while (count < 10) { 
    value = (1 + value) + (n_data_value - 1) + n_data_value; 
    printf("%f\n", value); 
    second_value = (n_data_value * (n_data_value + 1))/2; 
    printf("The number is %f\n", value); 
    count = count + 1; 

    if(value = second_value){ 
    printf("value = %f and second_value = %f", value, second_value); 
    } 
    } 
return 0; 
} 

當我運行它,我只是得到這個

輸入號碼3

0.000000

數量爲0.000000

0.000000

數爲0.000000

0.000000

數0.000000

0.000000

數爲0.000000

0.000000

數爲0.000000

0.000000

數0.000000

0.000000

數0.000000

0.000000

數爲0.000000

0.000000

數爲0.000000

0.000000

數量爲0.000000

+0

當你讓你的程序工作並修復你的循環邏輯和數學,你會發現在'N = 65535'後公式和循環值之間存在差異。見http://stackoverflow.com/questions/12923523/how-to-write-program-that-takes-a-number-as-its-argument-and-return-the-sum-of-1/12924209#12924209 – paddy

回答

0

:只需添加類似的東西:

#include <stdio.h> 

int main(void) 
{ 

    int value = 0, n_data_value, count = 1, second_value; 
    char char_quit=''; 

    do //Infinite loop 
    { 

     printf("Enter a number\n"); 
     scanf("%d", &n_data_value); 

     while (count <= n_data_value) {//while loop to calculate 1+2+3+...+n 
     value = value + count; 
     count = count + 1; 
     } 
    second_value = (n_data_value * (n_data_value + 1))/2;//calculates n(n+1)/2 
    printf("The number is %d\n", second_value); 

    if(value == second_value)//compares value 
    { 
     printf("value = %d and second_value = %d", value, second_value); 
    } 

    //Ask to continue ? 
    printf("Do you want to continue ? Y/N \n"); //Y or any other key will force to continue the program 
    scanf("%c", &char_quit); 

    }while (char_quit == 'n' || char_quit == 'N'); 

    return 0; 
} 

你自然可以使用這樣的:而( 1)如果你想要一個無限循環,可以使用「do while」。

1

使用%dscanf/printfint變量。

%lf是針對double的值。

+0

啊,好的,謝謝你,試試吧! – Winkz

1

value匹配second_value的測試也是錯誤的。使用==來測試是否相等

即改變

if(value = second_value){ 

if(value == second_value){ 

注意,與(-Wall的GCC,/W4的MSVC)打開了警告編譯會檢舉這件事給你。

+0

剛剛做到了,謝謝! – Winkz

+0

嗯如何在編譯器中啓用警告?只需添加-wall或? :) – Winkz

+0

如果您從命令行進行編譯,請爲gcc添加-Wall或爲msvc添加/ W4。如果您使用的是IDE,將會有一個編譯設置對話框,它接受編譯器標誌 – simonc

0

我認爲,如果你想這樣做超過1點時,你只需要這個

#include <stdio.h> 

int main(void) 
{ 

    int value = 0, n_data_value, count = 1, second_value; 

    printf("Enter a number\n"); 
    scanf("%d", &n_data_value); 

    while (count <= n_data_value) {//while loop to calculate 1+2+3+...+n 
    value = value + count; 
    count = count + 1; 
    } 
    second_value = (n_data_value * (n_data_value + 1))/2;//calculates n(n+1)/2 
    printf("The number is %d\n", second_value); 

if(value == second_value){//compares value 
    printf("value = %d and second_value = %d", value, second_value); 
    } 
return 0; 
} 
+0

是的,但是如果我想多運行該程序會怎樣? :) – Winkz

相關問題