2011级C语言期终考试复习
【考试时间】
2012年1 月9日 (周一)下午14:00-15:30
题型:
1 2 3 4 | 选择题:30分,15题x2 填空题:20分,10题x2 改错题:10分,5题x2 编程题:40分,4题x10 |
说明1:
考试中如果出现没有讲过的内容,请根据常识作答。
说明2:
学习C语言有利于培养严谨求实的学习作风,请严格按照要求作答。
实例1:请写出下面程序的输出结果
1 2 3 4 5 6 7 8 | #include <stdio.h> int main(int argc, char *argv[]) { int a=3, b=4; printf("a+b=%d\n", a+b); printf("a-b=%d\n", a-b); return 0; } |
唯一正确结果:
1 2 | a+b=7 a-b=-1 |
如果把输出结果写出一行,或者只写 7 和 -1 的,均不给分。
【复习材料】
下载 PPT 选择题/填空题复习资料
指针部分的题目:
【strlen 字符串的长度】
1 2 3 4 5 6 7 | int strlen(char *s) { char *p = s; while (*p != '\0') p++; return p - s; } |
【swap 交换两个整数】
1 2 3 4 5 | void swap(int *px, int *py) { int t; t = *px; *px = *py; *py = t; } |
现在编写主函数,利用上面的 swap 函数来交换变量 a 和 b 的值。
1 2 3 4 5 6 7 8 | int main(int argc, char *argv[]) { int a, b; scanf("%d%d", &a, &b); swap(&a, &b); printf("a=%d, b=%d\n", a, b); return 0; } |
如果你对程序的运行过程不清楚,可以使用 printf 语句输出更多的信息来帮助理解,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> void swap(int *px, int *py) { int t; printf("px: %d, content is %d\n", px, *px); printf("py: %d, content is %d\n", py, *py); t = *px; *px = *py; *py = t; printf("px: %d, content is %d\n", px, *px); printf("py: %d, content is %d\n", py, *py); } int main() { int a, b; scanf("%d%d", &a, &b); printf("address a: %d\n", &a); printf("address b: %d\n", &b); swap(&a, &b); printf("a=%d, b=%d\n", a, b); return 0; } |
【打印1-100之间的所有素数】
理解 break 和 continue:continue的功能和break有点类似,区别是continue只是终止本次循环,接着开始下次循环。而break则是完全中止循环。可以理解为continue的作用是略过档次循环中剩下的语句,重新开始新的循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int is_prime(int n) { int i; for (i = 2; i < n; i++) if (n % i == 0) break; return (i==n); } int main() { int i; for (i = 1; i <= 100; i++) { if ( !is_prime(i) ) continue; printf("%d\n", i); } return 0; } |
这个程序是理解 break 和 continue 的很好例子。
continue 表示执行下一次循环。当 i=1时,if 条件满足,执行 continue,跳过 printf,直接执行 i++;当 i=2时,if 条件不满足,执行 printf 语句。
continue不是必须的。实际上,下面的代码更容易理解。
1 2 3 4 5 6 7 8 9 | int main() { int i; for (i = 1; i <= 100; i++) { if (is_prime(i)) printf("%d\n", i); } return 0; } |
is_prime 是判断 n 是否是素数的函数。 例如,n =15,当 i=2,不满足整除的条件,i 递增为3,这是满足整除的条件,执行 break,跳出循环。由于 i==n 的条件不满足,返回值为 0。
说明:break 语句只能出现在 switch 和 循环语句(for 和 while)中。
1 2 3 4 5 6 7 8 9 10 | int is_prime(int n) { int i=2; while (i < n) { if (n % i == 0) break; i++; } return (i==n); } |