作者共发了97篇帖子。 内容转换:不转换▼
 
点击 回复
4156 96
【期末複習】C語言期末複習
一派护法 十九级
1楼 发表于:2016-1-6 16:12
【冒泡排序法】
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, n, temp, *nums;
    scanf("%d", &n);
    nums = (int *)calloc(n, sizeof(int));
   
    for (i = 0; i < n; i++)
        scanf("%d", nums + i);
   
    for (i = 1; i <= n - 1; i++) // 大循環:[1, n-1],共比較n-1輪,特別注意這裡是1開頭
    {
        for (j = 0; j < n - i; j++) // 小循環:[0, n-i),每輪進行n-i次
        {
            if (nums[j] < nums[j + 1]) // 這裡寫<是從大到小, >是從小到大
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
   
    for (i = 0; i < n; i++)
        printf("%d ", nums[i]);
    putchar('\n');
    free(nums);
    return 0;
}
一派护法 十九级
2楼 发表于:2016-1-6 16:38

#include <stdio.h>

#define N 10

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

int main()
{
    int i;
    int nums[N];
    FILE *fp;
    if ((fp = fopen("tmp.txt", "w")) == NULL)
    {
        printf("文件打不開!\n");
        return 1;
    }
   
    fun(nums);
    for (i = 0; i < N; i++)
    {
        printf("%d ", nums[i]);
        fprintf(fp, "%d ", nums[i]);
    }
   
    fclose(fp);
    return 0;
}

/*void fun(int *nums)
{
    int i, num = 0;
    for (i = 0; i < N; num++)
    {
        if (num % 2 == 1 && num % 3 == 1 && num % 5 == 1)
        {
            nums[i] = num;
            i++;
        }
    }
}*/

编写中出现的错误:3处

以后练习时要尽量做到写一次就编译通过且正常运行。因为考试时根本无法在电脑上实际调试。
一派护法 十九级
3楼 发表于:2016-1-9 13:27
【冒泡排序法复习】
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *nums, n, i, j, temp;
    scanf("%d", &n);
    nums = (int *)calloc(n, sizeof(int));
    for (i = 0; i < n; i++)
        scanf("%d", nums + i);
   
    for (i = 1; i <= n - 1; i++)
    {
        for (j = 0; j < n - i; j++)
        {
            if (nums[j] > nums[j + 1])
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
   
    for (i = 0; i < n; i++)
        printf("%d ", nums[i]);
   
    free(nums);
    return 0;
}
一派护法 十九级
4楼 发表于:2016-1-9 13:31
回复3楼 @巨大八爪鱼 的内容:
【冒泡排序法复习】
#include <stdio.h>
#include <stdlib.h>
int main()
{...
错误1:最后忘了putchar('\n')!!!!!!!!!!
错误2:之前忘了 int *nums, n, i, j, temp;最后的 分号
一派护法 十九级
5楼 发表于:2016-1-9 13:44
#include <stdio.h>


int main()
{
    char s1[20] = "成都";
    char *s2 = "大学";
    int i;
    for (i = 0; s1[i] != '\0'; i++);
    while (*s2 != '\0')
        s1[i++] = *s2++;
    s1[i] = '\0';
    puts(s1);
    return 0;
}
存在的错误:忘了最后的s1[i] = '\0';
一派护法 十九级
9楼 发表于:2016-1-9 13:58
Both *p++ and (*p)++ return the current value of *p.
But *p++ increases the pointer while (*p)++ makes the value incremented.
一派护法 十九级
10楼 发表于:2016-1-9 14:04
#include <stdio.h>

int main()
{
    int a[3][4];
    int b[4][3];
    int i, j;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            scanf("%d", *(a + i) + j);
            b[j][i] = a[i][j];
        }
    }
    
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 3; j++)
            printf("%4d", b[i][j]);
        putchar('\n');
    }
    return 0;
}
一派护法 十九级
11楼 发表于:2016-1-9 14:14
#include <stdio.h>
#include <string.h>

int main()
{
    char strs[10][100];
    int i;
    int max_i = 0;
    for (i = 0; i < 10; i++)
        gets(strs[i]);
    
    for (i = 1; i < 10; i++)
    {
        if (strcmp(strs[max_i], strs[i]) < 0)
            max_i = i;
    }
    printf("最大的串是:%s\n", strs[max_i]);
    return 0;
}
一派护法 十九级
12楼 发表于:2016-1-9 14:17
#include <stdio.h>

int main()
{
    int nums[3][4];
    int i, j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 4; j++)
            scanf("%d", &nums[i][j]);
    
    for (j = 0; j < 4; j++)
        nums[2][j] = nums[0][j] + nums[1][j];
    
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
            printf("%4d", nums[i][j]);
        putchar('\n');
    }
    return 0;
}
一派护法 十九级
13楼 发表于:2016-1-9 14:25
#include <stdio.h>
#include <string.h>

int main()
{
    char str[21];
    int i, len;
    int flag = 0;
    
    gets(str);
    len = strlen(str);
    for (i = 0; i < len - i - 1; i++)
    {
        if (str[i] != str[len - i - 1])
        {
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        puts("不構成回文\n");
    else
        puts("構成回文\n");
    return 0;
}
一派护法 十九级
14楼 发表于:2016-1-9 14:26
  for (i = 0; i < len - i - 1; i++)也可以寫成  for (i = 0; i < len / 2; i++)
一派护法 十九级
15楼 发表于:2016-1-9 19:27
【選擇法排序字符串】
#include <stdio.h>
#include <string.h>

#define N 10

int main()
{
    char strs[N][100];
    char *sorted[N], *temp;   // 注意,這裡的temp是char *型,不再是int類型了
    int i, j, max_j;
    for (i = 0; i < N; i++)
    {
        gets(strs[i]);
        sorted[i] = strs[i];
    }
   
    for (i = 0; i < N - 1; i++)
    {
        max_j = i + 1;
        for (j = i + 2; j < N; j++)
            if (strcmp(sorted[max_j], sorted[j]) > 0)  //// 這兩個運算符決定是升序還是降序排列
                max_j = j;
        if (strcmp(sorted[i], sorted[max_j]) > 0)   ///
        {
            temp = sorted[i];
            sorted[i] = sorted[max_j];
            sorted[max_j] = temp;
        }
    }
   
    puts("\nResult: "); // 用了puts的話末尾就不要加\n
    for (i = 0; i < N; i++)
        puts(sorted[i]);
   
    return 0;
}
一派护法 十九级
16楼 发表于:2016-1-9 19:32
#include <stdio.h>

int main()
{
    int nums[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int key, i, len, flag = 0;
    scanf("%d", &key);
   
    len = sizeof(nums) / sizeof(int);
    for (i = 0; i < len / 2; i++)
    {
        if (nums[i] == key || nums[len - i - 1] == key)
        {
            flag = 1;
            break;
        }
    }
    if (flag)
        puts("found");
    else
        puts("not found");
    return 0;
}
一派护法 十九级
17楼 发表于:2016-1-9 19:41
#include <stdio.h>
#define N 50

int main()
{
    char str[N];
    char digital[N];
    int i;
    int j = 0;
    gets(str);
    
    for (i = 0; i < N; i++)
        if (str[i] >= '0' && str[i] <= '9')
            digital[j++] = str[i];
    
    for (i = 0; i < j; i++)
        printf("%c ", digital[i]);  // 注意這裡是digital[i],不是[j],不要寫錯了
    putchar('\0');
    return 0;
}
一派护法 十九级
18楼 发表于:2016-1-9 19:48
#include <stdio.h>
#include <string.h>

int main()
{
    char password[13];
    int i, pass = 0;
    for (i = 0; i < 3; i++)
    {
        printf("請輸入密碼:");
        gets(password);
        if (strcmp(password, "admin") == 0)
        {
            pass = 1;
            break;
        }
    }
    if (!pass)
        puts("sorry");
    return 0;
}
一派护法 十九级
19楼 发表于:2016-1-9 19:53
#include <stdio.h>
#include <string.h>

int main()
{
    int minlen = -1;
    int min_i;
    int i, len;
    char name[15][20];
    for (i = 0; i < 15; i++)
    {
        gets(name[i]);
        len = strlen(name[i]);
        if (minlen == -1 || minlen > len)
        {
            minlen = len;
            min_i = i;
        }
    }
    printf("名字最短的學生是:%s\n", name[min_i]);
    return 0;
}
一派护法 十九级
20楼 发表于:2016-1-9 20:00
#include <stdio.h>

int main()
{
    int nums[3][4] = {7, 8, 9, 10, 11, 52, 76, 38, 34, 55, 2, 1};
    int i, j, r, c, max;
    max = nums[0][0];
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (max < nums[i][j])
            {
                max = nums[i][j];
                r = i;
                c = j;
            }
        }
    }
    printf("nums[%d][%d] = %d\n", r, c, max);
    return 0;
}
一派护法 十九级
21楼 发表于:2016-1-9 20:08
#include <stdio.h>

int main()
{
    char str[100];
    char ch;
    int i;
    printf("請輸入字符串:");
    gets(str);
    printf("請輸入字符:");
    ch = getchar();
    for (i = 0; str[i] != '\0'; i++)
    {
        if (str[i] == ch)
            break;
    }
    if (str[i] != '\0')
    {
        for (; str[i + 1] != '\0'; i++)
            str[i] = str[i + 1];
        str[i] = '\0';
    }
    puts(str);
    return 0;
}
一派护法 十九级
22楼 发表于:2016-1-9 20:24
#include <stdio.h>

int main()
{
    int a[4][4] = {{1}, {6, 1}, {8, 7, 1}, {9, 5, 3, 1}};
    int i, j;
    for (i = 0; i <= 2; i++)
        for (j = 1; j <= 3; j++)
            a[i][j] = a[j][i];
    
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
            printf("%d ", a[i][j]);
        putchar('\n');
    }
    return 0;
}
一派护法 十九级
23楼 发表于:2016-1-9 20:25
第4章已全部复习完!
一派护法 十九级
24楼 发表于:2016-1-9 20:52
现在开始复习第3章。
已看完第15题(最后一题),现在开始从第一题看起。
一派护法 十九级
25楼 发表于:2016-1-9 20:57
【1】
#include <stdio.h>

int main()
{
    int i, j, k;
    int count = 0;
    for (i = 1; i <= 4; i++)
    {
        for (j = 1; j <= 4; j++)
        {
            for (k = 1; k <= 4; k++)
            {
                if (i != j && i != k && j != k)
                {
                    printf("%d ", i * 100 + j * 10 + k);
                    count++;
                }
            }
        }
    }
    printf("\n共有%d个数\n", count);
    return 0;
}
一派护法 十九级
26楼 发表于:2016-1-9 21:32
【9】
#include <stdio.h>

void main()
{
    int i, j;
    for (i = 0; i < 8; i++)
    {
        for (j = 0; j < 8; j++)
        {
            if ((i + j) % 2 == 0)
                printf("%c%c", 0xa1, 0xf6);
            else
                printf("  ");
        }
        putchar('\n'); // 注意每一行的回车符不要忘了
    }
}
一派护法 十九级
27楼 发表于:2016-1-9 21:34
【10】
#include <stdio.h>

void main()
{
    int i = 0, j = 0;
    while (i < 8)
    {
        j = 0;
        while (j < 8)
        {
            if ((i + j) % 2 == 0)
                printf("%c%c", 0xa1, 0xf6);
            else
                printf("  ");
            j++;
        }
        putchar('\n'); // 注意每一行的回车符不要忘了
        i++;
    }
}
一派护法 十九级
28楼 发表于:2016-1-9 21:35
【11】
#include <stdio.h>

void main()
{
    int i = 0, j = 0;
    do
    {
        j = 0;
        do
        {
            if ((i + j) % 2 == 0)
                printf("%c%c", 0xa1, 0xf6);
            else
                printf("  ");
            j++;
        } while (j < 8);
        putchar('\n'); // 注意每一行的回车符不要忘了
        i++;
    }
    while (i < 8);
}
一派护法 十九级
29楼 发表于:2016-1-9 22:34
【12】
#include <stdio.h>

void main()
{
    long f1, f2;
    int i;
    f1 = f2 = 1;
    for (i = 0; i < 20; i++)
    {
        printf("%12ld %12ld", f1, f2);
        if (i % 2 == 1) // 注意换行的条件是余数等于1!
            putchar('\n');
        f1 = f1 + f2;
        f2 = f1 + f2;
    }
}
一派护法 十九级
30楼 发表于:2016-1-9 22:45
【13】
#include <stdio.h>

void main()
{
    int a, n, i, j;
    long int num, sum;
    printf("please input a and n\n");
    scanf("%d,%d", &a, &n);
    printf("a=%d,n=%d\n", a, n);
    sum = 0;
    i = 1;
    while (i <= n)
    {
        num = 0;
        j = 1;
        while (j <= i) // 特别注意这里是<=i,不是n
        {
            num = num * 10 + a;
            j++;
        }
        sum += num;
        i++;
    }
    printf("a+aa+...=%ld\n", sum);
}
一派护法 十九级
31楼 发表于:2016-1-9 22:58
【14】
#include <stdio.h>
#define N 10

void main()
{
    double height = 100.0;
    double length = height; // 第一次落地時,距離就等於其高度
    int i = 1; // i嚴格代表落地次數
    while (i <= N)
    {
        if (i >= 2)
            length += height * 2; // 第二次及以上落地時,加上反彈高度乘2
        height /= 2.0;
        i++;
    }
    printf("the total of road is %f\n", length);
    printf("the tenth is %f meter\n", height);
}
一派护法 十九级
32楼 发表于:2016-1-9 23:02
回复31楼 @巨大八爪鱼 的内容:
【14】
#include <stdio.h>
#define N 10
void main()
{...
注意,最後是%f不再是%d,這個特別容易疏忽而導致扣分
一派护法 十九级
33楼 发表于:2016-1-9 23:02
接下來是第2~8題。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:4156 回复数:96
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-1-17 22:13
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。