动态数组:要多少借多少
人数 n 运行时才输入,所以用 malloc 借一块正好放 n 个 int 的内存(C89 不允许 int a[n]; 这种变长数组)。 程序已经能读、能原样输出、也记得 free。先运行,看画布上借了多少字节;再改输出的循环,让它倒序输出
母题:高于平均分的有几人
输入班级人数 n 和 n 个成绩,输出高于平均分的人数。要先求平均、再回头比,所以成绩得存下来;n 不确定,就用 malloc 借。例如输入: 4 90 70 80 40 平均分 70,输出: 2 程序已经借好内存、读完成绩、算好总分。补上
变式 1:函数里借内存,挑出及格的
函数 pick_pass 借一块新内存,把及格(≥ 60)的成绩挑出来放进去,返回这块内存的地址,个数通过 *m 带回。 和第 6 关的局部数组不同,malloc 借来的内存函数返回后还在,所以能交回去——但 main 用完要负责 free
变式 2:复制一份全大写的名字
upper_copy 借一块新内存,把 s 复制过去并转成大写,原来的 s 不变。字符串要多借 1 个字节放结尾的 '\0',所以是 malloc(strlen(s) + 1)。 输出原串和新串,例如输入 zhangsan,
变式 3:拼出宿舍号 B12-305
输入楼栋和房间号,拼成 楼栋-房间号。join 借的大小是 strlen(a) + strlen(b) + 2:多的 2 个字节一个放 -,一个放 '\0'。 例如输入 B12 305,输出: B12-305 现在中间的 -
变式 4:合并两份有序的成绩单
两个班的成绩各自已经从低到高排好,merge 借一块能放 n + m 个 int 的内存,把它们合并成一份有序的。 输入第一行 n 和 n 个成绩,第二行 m 和 m 个成绩(n、m 都不超过 100,至少 1 个)。例如输入: 3 60
二级 · 程序填空:函数里申请、main 里归还
make_seq 借一块内存放 0、1、4、9、16 并交回,程序输出 0 1 4 9 16。请在【】处填入正确的内容。 #include <stdio.h> #include <stdlib.h> int *ma
二级 · 程序改错:倒序复制到新数组
函数 rev_copy 借一块新内存,把 a 中的 n 个数倒序复制进去并返回。例如输入: 4 1 2 3 4 输出: 4 3 2 1 程序中有两处错误。请改正 found 下面一行中的错误,不要改动其他地方,也不要增删行。
二级 · 选择:free 之后的悬空指针
读程序,回答问题: #include <stdio.h> #include <stdlib.h> int main(void) { int *p; p = (int *)malloc(3 * siz
二级 · 程序设计:申请新串,只留字母
函数 fun 的功能:借一块新内存,把 s 中的英文字母按原顺序复制进去(其他字符去掉),返回新串的地址。例如输入 B12-305room,输出: Broom main 已经写好,不要改动,只在 fun 的花括号里写代码(输入保证至少有一个