广州大学C语言程序设计期末考试试卷含答案

更新时间:2023-12-21 16:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

院、系领导 审批并签名 参考答案

A 卷 广州大学 2009-2010 学年第 1 学期考试卷

课程 程序设计 1 考试形式(闭卷,考试)

学院 数学与信息 系 专业 信安,计 班级 学号 姓名_ 题次 一 评分 二 三 四 五 六 七 八 九 十 总分 评卷人 100 分数 40 20 20 20 一、单项选择题(每小题 2 分,共 40 分)

1. 十六进制数 CDE 转换成八制数是(A )

A) 6336 B) 6363 C) 7337 D) 7373

2. 以下所列的C语言常量中,错误的是( B )

A) 1UL B) e0.5 C) “A” D) '\\b'

3. 已知字母c的ASCII码为十进制的99,下面程序的输出是( A )

int main() {

char c=?c?;

printf (\}

A) 101, f B) 99, f C) 101, e D) 101, 102

4. 表达式 5-3/2-1 的值是( B )

A) 0 B) 3 C) 2.5 D) 2

5. 设x、z均为int型变量,x 的值为 1, 则求值表达式 z=x--, ++x 后,x, z的值

分别为( C )

A) 0, 1 B) 1, 0 C) 1,1

D) 0, 0

6. 设x、z均为int型变量,x 的值为 1, 则求值表达式 z=x--||x++ 后,x, z的值

分别为( A )

A) 0, 1 B) 1, 0 C) 1,1 D) 0, 0

7. 若函数 f 为

int f (int x)

1

{

return -(x<0)+(x>0); }

则 f(2009), f(-2008) 和 f(0) 的值分别为 ( C ) A) 0 1 2 B) 1 1 0 C) 1 -1 0 D) -1 1 0

8. 下面函数的输出为:(B)

int x=1; int main() {

int x=2; {

extern int x;

printf (“%d ”, x); }

printf(“%d\\n”, x); }

A) 1 1 B) 1 2 B) 2 1

9. 下列程序的输出为:(A)

D) 2 2

int main() {

char *p=”hello”, *q; for (q=p; *q; q++);

printf (“%d\\n”, (int)(q-p)); }

A) 5

B) 4 C) 6 D) 不是一个确定的值

10. 想要表示若 x 既不能被 3 整除,又不能被 5 整除,则把 S 的值加 x,下面哪条语

句是错的?( B )

A) if ((x%3)*(x%5)) S+=x;

B) if ((x%3==0)+(x%5==0)-(x==0)) S+=x; C) if ((x%3)==0||!(x%5)); else S+=x; D) if ((x%3)!=0) if ((x%5)!=0) S+=x;

11. 下列程序段的输出结果是( C )

void fun(int * x, int * y) {

printf(\ *x=3, *y=4; }

2

int main() {

int x=1,y=2; fun(&x,&y);

printf(\}

A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2

12. 若有定义: float x;int a,b; 则正确的switch 语句是( C )

A) B)

switch(x) switch(x) { {

case 1.0:printf(\case 1,2:printf(\ case 2.0:printf(\case 3:printf(\} } C) D) switch (a+b) switch (a+b); { {

case 1:printf(\ case 1:printf(\

case 1+2:printf(\ case (int)x: printf(\} }

13. 以下程序的输出结果是 ( C )

int main() {

int i, x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)

printf(\}

A) 9,5,3 B) 7,4,3 C) 7,5,3 D)9,6,1

14. 以下程序输出的结果是( D )

int main() {

char w[][5]={\ int k;

for (k=1; k<3; k++)

printf(\}

A) B) C) D) ABCD JKL EFG FGH FGH OP JK KL

3

15. 以下程序的输出结果是( B )

#define Zero(X) X-X int main() {

printf(\}

A) -6 B) -4 C) -2 D) -0

16. 若有代码

struct point {int x; int y;} pt, *p; p = & pt;

现要输出 pt 的成员 x,错误的语句为: ( D )

A) printf (“%d\\n”, p->x); C) printf (“%d\\n”, *p.x);

B) printf (“%d\\n”, p[0].x); D) printf (“%d\\n”, *p->x);

17. 下列代码的输出为: (D)

printf (“%s\\n”, “HelloWorld”+4);

A) Hello B) HelloWorld C) World D) oWorld

18. 下列语句的输出结果是( B )

putchar (putchar (?a?))

A) a B) aa C) A D) ab

19. 下面代码的输出是( B )

char foo[]=“Hello World”;

printf (“%d %d”, strlen(foo), sizeof(foo)); A) 11 11 B) 11 12 C) 12 11 D) 12 12

20. 有如下代码

main () {

___ int x=1;

printf (“%d\\n”, int); }

横线出不可填入的关键词为 ( C ) A) auto B) register C) extern D) static

二、填空题(每空 2 分,共 20 分)

1. 若想通过以下输入语句给a赋于1,给b赋于2,

4

int a,b;

scanf(\”,&a,&b);

则输入数据的形式应该是____【1】1 2

2. 写出能正确表示a是正偶数的关系表达式_____【2】(a>0) && ((a%2)==0)

3. x 的类型为 doule, y 的类型为 float,用一个 printf 语句输出这两个值:

____【3】printf (“%f %f\\n”, x, y);____

4. 若有如下代码

double s;

double a[4][4] = {{1,2,3,4},{2,3,4,1}, {3,4,1,2},{4,1,2,3}}; s = det4 (a);

推测函数 det4 的原型

____【4】double det4 (int [][4])

5. 函数 stup 逆序输出一个字符串,并返回打印的字符总数,请补充空白部分。

int stup (const char *s) {

int n=0;

if (____【5】*s!=0 _____)

{

n=1+stup(s+1);

_____【6】putchar(*s); }

return _____【7】n; }

6. 以下程序的输出为_____【8】1 3 6 10 15 int acc(int n) {

static int f; f=f+n; return f; }

main() {

int i;

for(i=1;i<=5;i++)

printf(\}

7. 若 z, i 均为 int 类型,i 的当前值为 1, 则对表达式 z=i++, i++, i++ 求值

5

后,z 的值为 _____【9】1

8. 给指针p申请四个long 型动态内存单元,请填空

p=【10】malloc(sizeof(long)*4); ;

三、程序阅读题(每题4分,共20分)

1.写出下列程序的运行结果: 41 int f(int x, int y, int z) {

if ((x>z) && (y>z)) return x*x+y*y; else

return f(y, z, x); }

int main() {

int n;

n = f(3,4,5);

printf (“%d\\n”, n); }

2.以下程序的运行结果是:Hello World Hello World

void f (char *s, const char *t) {

while (*s++=*t++); }

int main() {

char a[1024];

char b[]=”Hello World”; f(a,b);

printf (“%s\\n”, b); printf (“%s\\n”, a); }

3.写出程序输出:45

6

long f(long n) {

if (n!=0)

return (n + f(n/10)); else

return 0;

}

int main() {

long n=1234567890;

printf(“%ld\\n”,f (n)); }

4.以下程序的运行结果是:15 int f (int (*p) [3]) {

int s=0, i;

for (i=0; i<3; i++) s+=(*(p+i))[i]; return s; }

int main( ) {

int a[3][3]={1,2,3,4,5,6,7,8,9}; printf(“%d\\n”, f(a)); }

5.下面程序的运行结果是: int main( ) {

char *str[]={“Pascal”,”C language”,”Dbase”,”Cobol”}; char **p; int k; p=str;

for (k=3; k>=0; k--)

printf(“%s\\n”, *(p++)); }

四、编程题(共20分)

7

1. 实现一个函数 sum,对给定输入 n,若 n>0, 返回 1+2+ …… + n 的值; 若 n<0,则返回 -1-2-……-n 的值;若 n=0,返回 0。(5分)

int f (int n) {

int s=0; if (n<0)

return –f(-n);

while (n>0) s+=n--;

return s; }

处理负号 1 分, 循环 2 分,返回值 1 分,初始化 1 分。

2. 用牛顿迭代求 a 平方根的递推公式为 x ← 0.5(x+a/x), 初始值可选 1. 利用这个公式实现函数 double Sqrt(double a); 此函数返回 a 的平方根。 (7分)

double Sqrt(double a) {

double x=1, err;

do {

x=0.5*(x+a/x); err=x*x-a;

if (err<0) err=-err; }

while (err>1e-6);

return x; }

变量类型 1分,初始化 1 分,循环迭代 2 分,误差控制 2 分,返回值 1分。

3. 实现一个程序,实现文件复制功能。(8分)

int main (int argc, char **argv) {

char buf[1024]; FILE *rfp, *wfp; int n;

8

if (argv<3) {

printf (“useage: %s file1 file2\\n”, argv[0]); return -1; }

rfp=fopen(argv[1], “rb”); wfp=fopen(argv[2], “rb”); if (rfp==NULL || wfp==NULL) {

Printf (“fail to open file”); return -1; }

while ((n=fread (buf, sizeof(char), sizeof(buf), rfp)>0) fwrite (buf, sizeof(char), n, wfp);

return 0;

}

命令行处理 2 分,打开文件模式 2 分,判断是否成功打开文件 2 分,读写文件 2 分。

9

本文来源:https://www.bwwdw.com/article/um85.html

Top