目前共有97篇帖子。
【期末複習】C語言期末複習
65樓 巨大八爪鱼 2016-1-16 16:50
為了降低編譯失敗的次數,寫好代碼後我必須仔細檢查代碼才編譯。一定要爭取一次編譯通過。
66樓 巨大八爪鱼 2016-1-16 18:58
#include <stdio.h>

int decompose(int num, int m[])
{
    int i, j, count = 0;
    for (i = 2; i <= num; i++) // 尋找2~num之間的質數
    {
        // 判斷i是不是質數
        for (j = 2; j < i; j++)
        {
             if (i % j == 0)
                 break;
        }
        if (i == j)
        {
            // 如果是質數
            // 判斷這個數是否能被這個質數整除
            // 把原本的if改為while就能判斷有多少個當前質數相乘
            while (num % i == 0)
            {
                m[count++] = i;
                num /= i;
            }
        }
    }
    return count;
}

void main()
{
    int i, n, count, a[100];
    scanf("%d", &n);
    count = decompose(n, a);
    printf("%d = ", n);
    for (i = 0; i < count; i++)
    {
        printf("%d", a[i]);
        if (i + 1 < count)
            putchar('*');
        else
            putchar('\n');
    }
}
67樓 巨大八爪鱼 2016-1-16 18:58
樓上是第五章的最後一題——【15】
68樓 巨大八爪鱼 2016-1-16 19:00
由於15題比較難,所以再做一遍。
69樓 巨大八爪鱼 2016-1-16 19:32
#include <stdio.h>

int decompose(int n, int q[])
{
    int i, count = 0;
    for (i = 2; i <= n; i++)
    {
        while (n != i && n % i == 0)
        {
            q[count++] = i;
            n /= i;
        }
    }
    q[count++] = n;
    return count;
}

void main()
{
    int q[255], n, m, i;
    printf("Please input a positive integer: ");
    scanf("%d", &n);
    m = decompose(n, q);
    printf("m = %d\n", m);
    printf("%d = ", n);
    for (i = 0; i < m - 1; i++)
        printf("%d*", q[i]);
    printf("%d\n", q[m - 1]);
}
這是經過標準答案修改過的程序。
因為在考慮2的時候已經把2的所有倍數除盡了,到了最後不能再被2整除的時候才開始考慮3 。所以4根本就不可能出現,因此也就無需一個一個地去找質數了。
70樓 巨大八爪鱼 2016-1-16 19:33
至於為什麼要在while裡面多加一句n!=i,主要是為了確保當輸入的n為質數時,返回的數組q至少有一個元素,不至於是空數組。
71樓 巨大八爪鱼 2016-1-16 19:34
因此,這個程序還可以這樣改:
int decompose(int n, int q[])
{
    int i, count = 0;
    for (i = 2; i <= n; i++)
    {
        while (n % i == 0)
        {
            q[count++] = i;
            n /= i;
        }
    }
    if (count == 0)
        q[count++] = n;
    return count;
}
72樓 巨大八爪鱼 2016-1-16 19:44
第五章已複習完畢。
接下來先複習簡單一點的:第九章——文件。
73樓 巨大八爪鱼 2016-1-16 19:53
【9-1】
#include <stdio.h>
#include <stdlib.h>

void fun(int nums[])
{
    int count = 0;
    int i;
    for (i = 0; count < 10; i++)
    {
        if (i % 2 == 1 && i % 3 == 1 && i % 5 == 1)
            nums[count++] = i;
    }
}

void main()
{
    int nums[10];
    int i;
    FILE *fp;
    if ((fp = fopen("tmp.txt", "w")) == NULL)
    {
        printf("文件打不開。\n");
        exit(0);
    }
   
    fun(nums);
    for (i = 0; i < 10; i++)
    {
        printf("%d ", nums[i]);
        fprintf(fp, "%d ", nums[i]);
    }
    printf("\n");
    fclose(fp);
}
注意fprintf不要忘了第一個參數fp。
74樓 巨大八爪鱼 2016-1-16 19:58
【9-2】
#include <stdio.h>
#include <stdlib.h>

void main()
{
    char str[100];
    int i;
    FILE *fp;
    if ((fp = fopen("tmp2.txt", "w")) == NULL)
    {
        printf("文件打不開\n");
        exit(0);
    }
    printf("Please enter a string:\n");
    gets(str);
    for (i = 0; str[i] != '\0'; i++)
    {
        printf("%c(%d)", str[i], str[i]);
        fprintf(fp, "%c(%d)", str[i], str[i]);
    }
    printf("\n");
    fclose(fp);
}

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2024 Arslanbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。