iT邦幫忙

0

c語言課程作業問題

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

int main() {
	double z = 0;
	while(z<3){
		int i = 1;int j;
		enum boolean isprime;
		enum boolean {false,true};
		clock_t i,j;
		double z;
		i=clock();
		j=clock();
		isprime = true;
		switch(i){
			case 1 :
				isprime =false;
				break;
			case 2 :
				break;
			default :
				for(j=2;j<i;j++){
					if((i%j)==0){
						isprime = false;
						break;
					}
					else;
				}
		z=(double)(j-i);
		printf("Use Time:%f\n",(z/CLOCKS_PER_SEC));
		}
	}
}

我是這學期剛接觸到c語言的,還不是很熟悉,這是今天上課的題目,題目是打一個前一個質數與後一個質數之間需要3秒鐘時間去搜尋的程式碼。如果超過3秒鐘就會停下來,我打的這一些有些是課本裡的有些是查網路的,希望有人可以點出我哪邊有錯,哪邊需要改正或提醒我都可以。/images/emoticon/emoticon02.gif

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2020-09-28 20:54:25 檢舉
image in image out
小魚 iT邦大師 1 級 ‧ 2020-09-28 21:12:53 檢舉
翻譯:
不要貼圖片,
請貼文字,
並且上下用兩個```包起來.
這樣對嗎
我貼文字就會變成這樣
你貼圖的那個按鈕的「往左邊第二個」按鈕
是「新增程式碼」
把程式碼貼在
```
```
裡面
好了!!
1
小魚
iT邦大師 1 級 ‧ 2020-09-28 21:52:54

上面跟下面各加一個```
就可以有這樣的效果,

這是程式碼

話說

int i = 1;int j;
clock_t i,j;

都是i跟j竟然不會報錯...

看更多先前的回應...收起先前的回應...

我把int那行去掉了然後編譯之後出現了3個ERROR!https://ithelp.ithome.com.tw/upload/images/20200928/20130984oojBREuCHp.jpg

小魚 iT邦大師 1 級 ‧ 2020-09-29 00:41:07 檢舉

原本沒有報錯嗎?
他意思是你要把定義放在前面(其實可以放迴圈外面),
你把定義放後面他不知道那是甚麼意思.
enum的用法可以參考 列舉 (C++)

不過C++應該本來就有bool函數了...

然後我覺得先找本書來打基礎,
學習程式語言需要領悟的,
尤其是開始的時候.

我是剛開學才接觸到馬上就要出題目讓我們做所以會比較沒有相關知識 我也會借書增加一點基礎(;´༎ຶД༎ຶ`)但是我剛剛把enum放在while上面還是一樣原本的那幾個錯誤⋯

我現在不知道我打的那些程式碼的大概意思是對還是錯的 我目前的想法是先執行找質數的過程然後當2個質數中間的時間超過3秒就會停下來然後答案會印出2個質數還有花的時間

1
微甜的酸
iT邦新手 3 級 ‧ 2020-09-29 05:54:26

盡力惹~

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

int prime(int n) {
    int i, flag = 1;
    for(i = 2; i * i <= n; i++) {
        if(!(n % i)) {
            flag = 0;
            break;
        }
    }
    return flag;
}

int main() {
    int a, b;
    printf("請輸入兩個整數: ");
    scanf("%d %d", a, b);
    int start = clock();
    prime(a); prime(b);
    while (clock() < CLOCKS_PER_SEC * 3 - start) {}
    printf("Use Time:%f\n", difftime(start, clock()));
    return 0;
}

程式已經停止運作...

QRG%Vhah4A$@HKL

QAQ

看更多先前的回應...收起先前的回應...

可是老師要的是找到2個質數中間尋找時間是3秒的 所以最後需要出現2個質數是什麼

我猜題目是英文,3秒其實指的是3次。
請問是用Google翻譯嗎?

不是 是老師親口說出來的 他說他要我們去打一個程式碼然後找到2個質數中間尋找時間是3秒的

這怎麼看都不像是新手題目...

要不是老師想考倒你們
就是我想太多了
/images/emoticon/emoticon06.gif

484我們都誤會你老師了?u?

剛剛問助教也是一樣的說法...
老師說很簡單 可是課堂上都沒人做出來

是我誤會了

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-09-29 21:25:42

https://ithelp.ithome.com.tw/upload/images/20200929/20001787gNA6xOlcED.png

改寫微甜的酸大大的程式如下
你自己手動去改50000005000100兩個數字(從1,100開始試)
一直改到那個時間有超過 3 秒為止就是答案

#include <stdio.h>
#include <time.h>
int prime(long int n) {
    long int i, flag = 1;
    for(i = 2; i * i <= n; i++) {
        if(!(n % i)) {
            flag = 0;
            break;
        }
    }
    return flag;
}

int main() {
    long int n = 5000000;
    long int previous_n;
    clock_t start_t, end_t;
    double diff_t = 0;
    start_t = clock();
    while ((n < 5000100)&&(diff_t < 3.0)) {
        if (prime(n)>0) {
            end_t = clock();
            diff_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
            // if (diff_t >= 3.0) {
                printf("It cost %.5f seconds between finding prime %d and %d\n", diff_t, previous_n, n);
            // }
            start_t = clock();
            previous_n = n;
        } else {
            // printf("%d is not prime.\n", n);
        }
        n++;
    }
    return 0;
}

我自己用了一點「偷吃步」
得到結果如下
https://ithelp.ithome.com.tw/upload/images/20200929/200017878GYRdbhZCQ.png

另外,點這裡是我這次鐵人賽唯一的一篇文章,喜歡的話左上角點 Like

後來又想到
題目只有「兩個質數」
沒有「兩個連續質數」
那就改如下

#include <stdio.h>
#include <time.h>
int prime(long int n) {
    long int i, flag = 1;
    // for(i = 2; i * i <= n; i++) {
    for(i = 2; i < n; i++) {
        if(!(n % i)) {
            flag = 0;
            // break;
        }
    }
    return flag;
}

int main() {
    long int n = 1;
    long int previous_n;
    clock_t start_t, end_t;
    double diff_t = 0;
    start_t = clock();
    while ((n < 60000)&&(diff_t < 3.0)) {
        if (prime(n)>0) {
            end_t = clock();
            diff_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
            if (diff_t >= 3.0) {
                printf("It cost %.5f seconds between prime 1 and %d\n", diff_t, n);
            }
            // start_t = clock();
            previous_n = n;
        } else {
            // printf("%d is not prime.\n", n);
        }
        n++;
    }
    return 0;
}

我要發表回答

立即登入回答