作者共發了97篇帖子。 內容轉換:不轉換▼
 
點擊 回復
4158 96
【期末複習】C語言期末複習
一派護法 十九級
34樓 發表于:2016-1-9 23:10
【8】
#include <stdio.h>

void main()
{
    int i, j;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= 9 - i; j++)
            printf("       ");
        for (; j <= 9; j++)
            printf("%d*%d=%-2d ", i, j, i * j);
        putchar('\n');
    }
}
特別注意在%-2d後有一個空格,減號表示靠左顯示。
一派護法 十九級
35樓 發表于:2016-1-9 23:10
減號靠左顯示可以按如下方法記憶:
-+
左右
一派護法 十九級
36樓 發表于:2016-1-9 23:15
【第7題和第8題一模一樣】
寫的時候注意printf("%d*%d=%-2d ", i, j, i * j);一定要把最後三個參數寫全,不要疏忽大意寫成了:printf("%d*%d=%-2d ", i * j);導致不必要的丟分。
一派護法 十九級
37樓 發表于:2016-1-9 23:18
【6】
#include <stdio.h>

void main()
{
    int i, j;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j < i; j++)
            printf("       ");
        for (; j <= 9; j++)
            printf("%d*%d=%-2d ", i, j, i * j);
        putchar('\n');
    }
}
一派護法 十九級
38樓 發表于:2016-1-9 23:20
【5】
#include <stdio.h>

void main()
{
    int i, j;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= i; j++)
            printf("%d*%d=%-2d ", i, j, i * j);
        putchar('\n');
    }
}
一派護法 十九級
39樓 發表于:2016-1-9 23:34
【4】
#include <stdio.h>

void main()
{
    int y, m, d;
    int sum = 0;
    int month;
    int leap = 0;
    scanf("%d%d%d", &y, &m, &d);
    if (y % 100 == 0 && y % 400 == 0)
        leap = 1;
    if (y % 100 != 0 && y % 4 == 0)
        leap = 1;
   
    for (month = 1; month <= m - 1; month++)
    {
        switch (month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            sum += 31;
            break;
        case 2:
            if (leap)
                sum += 29;
            else
                sum += 28;
            break;
        default:
            sum += 30;
        }
    }
    sum += d;
    printf("第%d天\n", sum);
}
一派護法 十九級
40樓 發表于:2016-1-9 23:40
最后还剩下第2题和第3题。
一派護法 十九級
41樓 發表于:2016-1-16 13:30
今天接着复习。
一派護法 十九級
42樓 發表于:2016-1-16 13:53
【2】
#include <stdio.h>

void main2()
{
    long int i, bonus;
    scanf("%ld", &i);
   
    if (i <= 100000)
        bonus = i * 0.1;
    else if (i <= 200000)
        bonus = 0.1 * 100000 + 0.075 * (i - 100000);
    else if (i <= 400000)
        bonus = 0.05 * (i - 200000);
    else if (i <= 600000)
        bonus = 0.03 * (i - 400000);
    else if (i <= 1000000)
        bonus = 0.015 * (i - 600000);
    else
        bonus = 0.01 * (i - 1000000);
    printf("%d\n", bonus);
}
【3】
#include <stdio.h>
#include <math.h>

void main()
{
    long int i, j;
    for (i = 0; i < 100000; i++)
    {
        j = sqrt(i + 100);
        if (j * j == i + 100)
        {
            j = sqrt(i + 268);
            if (j * j == i + 268)
                printf("%ld\n", i);
        }
    }
}
一派護法 十九級
43樓 發表于:2016-1-16 13:55
特别注意,在输出long int的时候要写%ld,而不是%d,这个特别容易出错。
一派護法 十九級
44樓 發表于:2016-1-16 13:56
第三章复习完毕。
接下来是,第五章。
一派護法 十九級
45樓 發表于:2016-1-16 14:03
一派護法 十九級
46樓 發表于:2016-1-16 14:31
一派護法 十九級
47樓 發表于:2016-1-16 14:32
求最大公因数时,只需记住m=n, n=r就行。
一派護法 十九級
48樓 發表于:2016-1-16 14:33
// the least common multiple
int lcm(int m, int n)
{
    return m * n / gcf(m, n);
}

// the greatest common factor
int gcf(int m, int n)
{
    int r;
    do
    {
        r = m % n;
        m = n;
        n = r;
    } while (r != 0);
    return m;
}
一派護法 十九級
49樓 發表于:2016-1-16 14:38
【1】
#include <stdio.h>

int gcf(int m, int n)
{
    int r;
    do
    {
        r = m % n;
        m = n;
        n = r;
    } while (n != 0);
    return m;
}

int lcm(int m, int n)
{
    return m * n / gcf(m, n);
}

void main()
{
    int m, n;
    scanf("%d%d", &m, &n);
    printf("%d\n", lcm(m, n));
}
一派護法 十九級
50樓 發表于:2016-1-16 14:58
【2】
#include <stdio.h>
#define N 4

void convert(int A[][N])
{
    int i, j, temp;
    for (i = 0; i < N - 1; i++)
    {
        for (j = i + 1; j < N; j++)
        {
            temp = A[i][j];
            A[i][j] = A[j][i];
            A[j][i] = temp;
        }
    }
}

void main()
{
    int i, j;
    int A[][N] = {{1, 2, 3, 4}, {3, 4, 5, 6}, {5, 6, 6, 7}, {7, 8, 9, 0}};
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%d ", A[i][j]);
        printf("\n");
    }
    printf("\n");
    convert(A);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%d ", A[i][j]);
        printf("\n");
    }
}
一派護法 十九級
51樓 發表于:2016-1-16 15:11
【3】
#include <stdio.h>
#define N 100

int filter(int a[], int n, int b[])
{
    int i, j;
    double ave = 0.0;
    for (i = 0; i < n; i++)
        ave += a[i];
    ave /= n;
   
    j = 0;
    for (i = 0; i < n; i++)
    {
        if (a[i] > ave)
            b[j++] = a[i];
    }
    return j;
}

void main()
{
    int i, n, a[N], b[N], count;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    count = filter(a, n, b);
    for (i = 0; i < count; i++)
    {
        printf("%-5d", b[i]);
        if ((i + 1) % 5 == 0)
            printf("\n");
    }
    printf("\n");
}
   
一派護法 十九級
52樓 發表于:2016-1-16 15:16
【4】
#include <stdio.h>
#define N 10

int sum(int n)
{
    return (n / 100 + n % 100 / 10 + n % 10);
}

void main()
{
    int a[N];
    int i, count = 0;
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
        if (sum(a[i]) == 5)
            count++;
    }
    printf("%d\n", count);
}
一派護法 十九級
53樓 發表于:2016-1-16 15:20
【5】
#include <stdio.h>

int fact(n)
{
    if (n == 1 || n == 0)
        return 1;
    else
        return n * fact(n - 1);
}

void main()
{
    int x, a;
    scanf("%d", &x);
    a = fact(x);
    printf("%d\n", a);
}

注意要考虑0!
一派護法 十九級
54樓 發表于:2016-1-16 15:22
【6】
#include <stdio.h>

int str2int(char *str)
{
    int n = 0;
    while (*str != '\0')
    {
        if (*str >= '0' && *str <= '9')
            n = n * 10 + (*str - '0');
        str++;
    }
    return n;
}

void main()
{
    char str[50];
    int n;
    gets(str);
    n = str2int(str);
    printf("%d\n", n);
}
一派護法 十九級
55樓 發表于:2016-1-16 15:28
【7】
#include <stdio.h>

void _strcpy(char *target, char *src)
{
    while (*src != '\0')
        *target++ = *src++;
    *target = '\0'; // 这句话非常重要
}

void main()
{
    char str[256];
    char str2[256]/* = "there is a key, there is a hat"*/;
    gets(str);
    _strcpy(str2, str);
    puts(str2);
}
一派護法 十九級
57樓 發表于:2016-1-16 15:35
【8】
#include <stdio.h>
#include <string.h>

char *getFileExtName(char *filename)
{
    int len = strlen(filename);
    int i;
    for (i = len - 1; i >= 0; i--) // 注意是i>=0,不是i>0
    {
        if (filename[i] == '.')
            return filename + i + 1;
    }
    return filename + len; // 获取最后一个\0的位置,无需加1
}

void main()
{
    char filename[100];
    gets(filename);
    printf("Extension: %s\n", getFileExtName(filename));
}
一派護法 十九級
58樓 發表于:2016-1-16 15:59
【9】
#include <stdio.h>

int _strcmp(char *str1, char *str2)
{
    while (*str1 == *str2 && *str1 != '\0' && *str2 != '\0')
    {
        str1++;
        str2++;
    }
    if (*str1 > *str2)
        return 1;
    else if (*str1 < *str2)
        return -1;
    else
        return 0;
}

void main()
{
    char str1[100];
    char str2[100];
    int rs;
    gets(str1);
    gets(str2);
    rs = _strcmp(str1, str2);
    if (rs == 1)
        printf("str1 > str2\n");
    else if (rs == -1)
        printf("str1 < str2\n");
    else if (rs == 0)
        printf("str1 == str2\n");
}
一派護法 十九級
59樓 發表于:2016-1-16 16:13
【10】
#include <stdio.h>

void draw(int level)
{
    int i, j;
    for (i = 0; i < level; i++)
    {
        for (j = 0; j < level - 1 - i; j++)
            putchar(' ');
        for (j = 0; j < 2 * i + 1; j++)
            putchar('*');
        putchar('\n');
    }
}

void main()
{
    int i;
    scanf("%d", &i);
    draw(i);
}
一派護法 十九級
60樓 發表于:2016-1-16 16:25
【11】
#include <stdio.h>

int prime(int a[])
{
    int count = 0, i, j;
    int flag;
    for (i = 2; i < 1000; i++) // 必须以2开头
    {
        flag = 1;
        for (j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                flag = 0;
                break; // 注意break无法跳出两层循环,所以只能设置flag
            }
        }
        if (flag == 1)
            a[count++] = i;
    }
    return count;
}

void main()
{
    int a[1000];
    int i;
    int count = prime(a);
    printf("共有%d个素数。\n", count);
    for (i = 0; i < count; i++)
    {
        printf("%4d", a[i]);
        if ((i + 1) % 10 == 0)
            printf("\n");
    }
}
一派護法 十九級
61樓 發表于:2016-1-16 16:26
也可以不设置flag,直接判断内层循环结束后i是否等于j就行:
int prime(int a[])
{
    int count = 0, i, j;
    for (i = 2; i < 1000; i++) // 必须以2开头
    {
        for (j = 2; j < i; j++)
        {
            if (i % j == 0)
                break;
        }
        if (i == j)
            a[count++] = i;
    }
    return count;
}
一派護法 十九級
62樓 發表于:2016-1-16 16:39
【12】
#include <stdio.h>

double H(int n, double x)
{
    switch (n)
    {
    case 0:
        return 1;
    case 1:
        return 2 * x;
    default:
        return 2 * x * H(n - 1, x) - 2 * (n - 1) * H(n - 2, x);
    }
}

void main()
{
    int n;
    double x;
    scanf("%d%f", &n, &x);
    printf("%.2f", H(n, x));
}
一派護法 十九級
63樓 發表于:2016-1-16 16:43
【13】
#include <stdio.h>

int fibon(int n)
{
    switch (n)
    {
    case 0:
    case 1:
        return n;
    default:
        return fibon(n - 1) + fibon(n - 2);
    }
}

void main()
{
    int n;
    scanf("%d", &n);
    printf("fn = %d\n", fibon(n));
}
一派護法 十九級
64樓 發表于:2016-1-16 16:49
【14】
#include <stdio.h>

int narcis(int m[])
{
    int i, count = 0;
    int a, b, c;
    for (i = 100; i <= 999; i++)
    {
        a = i / 100;
        b = i % 100 / 10;
        c = i % 10;
        if (a * a * a + b * b * b + c * c * c == i)
            m[count++] = i;
    }
    return count;
}

void main()
{
    int m[1000];
    int i;
    int count = narcis(m);
    for (i = 0; i < count; i++)
    {
        printf("%4d", m[i]);
        if ((i + 1) % 5 == 0)
            putchar('\n');
    }
    putchar('\n');
}

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:4158 回複數:96
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-1-17 22:13
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。