Logo Universal Online Judge

UOJ

时间限制:1 s 空间限制:512 MB
Statistics

Clang

问题描述

本题要求你修改以下的 C 语言程序, 使其能够通过编译并且输出正确的内容. 程序包含多个子任务 (Task), 每个子任务需要修改指定的代码部分. 具体修改范围已通过注释标明, 任务部分位于 /* Task X */ 的注释区域之间.

每个任务的预期输出也已在注释中说明, 例如:

// Expected: "x has the value 5"
printf("x has the value %\n", x);

那么执行到这里的时候, 你需要保证 x = 5.

修改的方法可能不唯一, 只要输出与预期结果一致即可得分.这一类题目的目的是学会如何修复 C 语言开发中常见的错误, 如果你把所有代码删掉, 直接输出文本, 并不会影响得分, 但是缺少了一次锻炼机会.

需要修改的 C 语言代码

#include <stdio.h>
#include <stdlib.h>

void task1() {
    // Task 1
    /* Task 1 */
    x = 5;
    /* End Task 1 */
    // Expected: "Task 1: x has the value 5"
    printf("Task 1: x has the value %d\n", x);
}

void task2() {
    // Task 2
    /* Task 2 */
    int x = 1;
    x += 2;
    // Expected: "Task 2: Number 3"
    printf("Task 2: Number %f\n", x);
    /* End Task 2 */
}

/* Task 3 */
void bigger(int a, int b) {
    // Task 3
    // Fix this function to return the bigger number!
}
/* End Task 3 */

void task3() {
    // Task 3
    // Expected: "Task 3: The bigger one is 5"
    printf("Task 3: The bigger one is %d\n", bigger(3, 5));
}

void task4() {
    // Task 4
    /* Task 4 */
    int is_evening; // You need to initialize this variable.
    /* End Task 4 */
    if (is_evening) {
      // Expected: print Task 4: Good night!
      printf("Task 4: Good evening!\n");
    }
    else {
        printf("Task 4: Good night!\n");
    }

}

void task5() {
    // Task 5
    /* Task 5 */
    union unit {
        char *name;
        double age;
    };
    union unit person;
    /* End Task 5 */
    person.name = "Furry McFurson";
    person.age = 3.5;
    // Expected: "Task 5: Furry McFurson is 3.5 years old."
    printf("Task 5: %s is %.1f years old.\n", person.name, person.age);
}

void task6() {
    // Task 6
    // Expected: "Task 6: 2 is the 2nd number in the tuple"
    /* Task 6 */
    int numbers[] = {1, 2, 3};
    int second = numbers[2]; // Represents the second element
    /* End Task 6 */
    printf("Task 6: %d is the 2nd number in the tuple\n", second);
}

void task7() {
    // Task 7
    // Expected: "Task 7: The length is 3"
    int a[] = {1, 2, 3};
    /* Task 7 */
    unsigned long size = sizeof(a);
    /* End Task 7 */
    printf("Task 7: The length is %lu\n", size);
}

void task8() {
    // Task 8
    // Expected: print clang
    /* Task 8 */
    char p[] = {'c', 'l', 'a', 'n', 'g'};
    printf("Task 8: %s\n", p);
    /* End Task 8 */
}

int **OnesMat(int size) {
    int **ones = (int **)malloc(size * sizeof(int *));
    for (int i=0; i<size; i++) {
        ones[i] = (int *)malloc(size * sizeof(int));
    }
    for (int i=0; i<=size; i++){
        for (int j=0; j<=size; j++){
            ones[i][j] = 1;
        }
    }
    return ones;
}

int *IntSeq(int begin, int end) {
    int size = end - begin;
    int *seq = (int *)malloc(size*sizeof(int));
    seq[0] = begin;
    for (int i=0; i<size; i++){
        seq[i+1] = seq[i] + 1;
    }
    return seq;
}

void task9() {
    //generate mat with one and integer sequence (without end)
    int **mat = OnesMat(2);
    // expected: [[1, 1], [1, 1]]
    printf("Task 9: [[%d, %d], [%d, %d]]\n", mat[0][0], mat[0][1], mat[1][0], mat[1][1]);
    int *vec = IntSeq(1, 4);
    // expected: [1, 2, 3]
    printf("Task 9: [%d, %d, %d]\n", vec[0], vec[1], vec[2]);
}

int *MatMulVec(int **A, int *x, int length) {
    int *result = (int *)malloc(length*sizeof(int));
    for (int i=0; i<length; i++){
        for (int j=0; j<length; j++){
            result[i] += A[i][j]*x[j];
        }
    }
    return result;
}

void task10() {
    // calculate Ax, A is mat (1, 1; 1, 1) x is vec (1, 2)^T
    int **A = OnesMat(2);
    int *x = IntSeq(1, 3);
    int *result = MatMulVec(A, x, 2);
    // expected: [3, 3]
    printf("Task 10: [%d, %d]\n", result[0], result[1]);
}

int main() {
    int input = scanf("%d", &input);
    switch (input) {
    case 1:
        task1();
        break;
    case 2:
        task2();
        break;
    case 3:
        task3();
        break;
    case 4:
        task4();
        break;
    case 5:
        task5();
        break;
    case 6:
        task6();
        break;
    case 7:
        task7();
        break;
    case 8:
        task8();
        break;
    case 9:
        task9();
        break;
    case 10:
        task10();
        break;
    default:
        break;
    }
    return 0;
}

样例输入输出

输入格式

10 个样例点分别为 1-10, 对应 10 个任务.

样例 1 输入:

1

输出格式

输出内容应该与下面一致:

Task 1: x has the value 5

知识点

变量, 基本类型, 条件语句, 数组, 字符串, 指针, 结构体