C语言程序设计考试A卷答案(共8页).doc
精选优质文档-倾情为你奉上系领导审批并签名A 卷广州大学2008-2009学年第一学期考试卷课程C语言程序设计考试形式(闭卷,考试)物理与电子工程学院 系 专业 学号 姓名 题号一二三总分评卷人123分数5020101010100评分一、 选择题(每题2分,共50分)下列每题A、B、C、D四个选项中,只有一个选项是正确的。1、以下说法正确的是( B )A)C语言程序总是从第一个函数开始执行B)C语言程序总是从main()函数开始执行C)在C语言程序中,要调用函数必须在main()函数中定义D)C语言程序中的main()函数必须放在程序的开始部分2、若有定义 int k=5; ,表达式k+=k-=k*=k运算后k的值是( C )A)90 B)25 C)0 D)-153、有输入语句:scanf(“%d,%d,%d”,&a, &b, &c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式为( D )(其中,“ ”表示空格,<CR>表示Enter键)A)132<CR> B)a=1,b=3,c=2<CR> C) a=1b=3c=2<CR> D) 1,3,2<CR>4、以下程序段的输出是( C )printf(“|%8.5f|n”,3461.45); A)|61.45000| B) |3461.450| C) |3461.45000| D) | 3461.4500|5、在x值处于-2x2 或 4x8时值为“真”否则为“假”的表达式是( D )A) (-2x2)|(4x8) B) (x<=2)&&(x>=-2)&&(x>=4)&&(x<=8)C) (x>=-2)&&(x>=2)|(x<=8)&&(x<2) D) (-2<=x)&&(x<=2)|(4<=x)&&(x<=8) 6、下列程序的执行结果是: ( A ) #include <stdio.h> void main() int i=9,j=8,m,n;m=+i;n=j+;printf("%d %dn",m,n); A) 10 8 B) 8 9 C) 9 9 D) 9 87、假设所有变量均为整数,则表达式(a=2,b=5,a+,b+,a+b)的值为( C )A)7 B)8 C)9 D)108、有以下程序,执行后输出结果是 ( A )#include <stdio.h>void main() int i=1,j=1,k=2;if(j+|k+)&& i+)printf("%d,%d,%dn",i,j,k);A)2,2,2 B)2,2,1 C)1,1,2 D)2,2,39、有如下程序,该程序的输出结果是( D )#include <stdio.h>void main() int x=1,a=0,b=0;switch(x) case 0: b+;case 1: a+;case 2: a+;b+;printf("a=%d,b=%dn",a,b);A)a=2,b=2 B)a=1,b=1 C)a=1,b=0 D)a=2,b=1 10、下述程序的输出结果是: ( C ) #include <stdio.h>main( ) int k=4,n=0;for(;n<k;) n+; if(n%4!=0) continue;k-;printf(“k=%d,n=%dn”,k,n); A)k=1,n=1 B)k=2,n=2 C)k=3,n=4 D)k=4,n=511、不正确的赋值或赋初值的方式是( B )。A) char str="string";B) char str10;str="string"; C) char str7='s', 't', 'r', 'i', 'n', 'g';D) char str7='s', 't', 'r', 'i', 'n', 'g', 0;12、以下程序的输出结果是( A )#include <stdio.h>void function1(int a,int b)int c;c=a;a=b;b=c;main()int x=3,y=4;function1(x,y);printf(“x=%d ,y=%dn”, x , y); A) x=3,y=4 B)x=4,y=3 C) 不确定 D) 3 , 413、以下程序的输出结果是:( B )# include <stdio.h> int f(int); main() int w=2,k,e; for (k=0;k<3;k+) e=f(w); printf(“%d,”,e); int f(int x) int y=0; static z=10; y+;z+; return (x+y+z); A) 14,14,14, B)14,15,16, C) 14 14 D) 14 1514、以下程序的输出结果是:( B )#include <stdio.h>int func(int n)if(n=1) return 10; else return func(n-1)+3;void main()printf(“%d”,func(3);A) 13 B) 16 C) 19 D) 2215、以下程序的运行结果是 ( C ) #include <stdio.h>#define DOUBLE(r) r*rmain ( ) int x=9,y=6,t; t = DOUBLE(x+y) ; printf (“%dn”,t);A)29 B)81 C)69 D)22516、若有函数fuction1(a,b),并且已使函数指针变量p指向函数function1,当调用该函数时,正确的调用方法是: ( C ) A)(*p)function1(a,b); B) *p function1(a,b) C)(*p)(a,b); D) *p(a,b);17、有如下定义:struct int x; char * y; tab2=1,ab,2,cd,*p=tab;则表达式(*p->y)的结果是:( A )A) a B) b C) c D) d18、若有定义:int x34=1,2,3,4,5,6,7,8,9,10,11,12,(*p)4=x;则能够正确表示数组元素x23的表达式是: ( B ) A) *(*p+2)3) B) *(*(p+2)+3) C) (*p+2)+3 D) *(*(p+5)19、若有定义:int b,*pb;则以下正确的赋值表达式是( A )A) pb=&b B)pb=b C)*pb=&b D)*pb=*b20、以下程序的输出结果是( C )#include <stdio.h>void sub(int x,int y,int *z)*z=x-y;void main()int a=0,x=5,y=10; sub(y,x,&a);printf(“%d”,a);A)-5 B) 0 C) 5 D) 不确定21、以下程序的输出结果是( B )#include <stdio.h>void main()int a5=10,20,30,40,50;int *p=&a2;printf("%d,",*p+);printf("%d",*p);A)20,30 B)30,40 C)21,30 D) 31,4022、若已建立下面的链表结构,指针p、q分别指向图中所示结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是( B )A) free(q);p->next=q->next;B) (*p).next=(*q).next;free(q);C) q=(*q).next;(*p).next=q;free(q);D) q=q->next; p->next=q;p=p->next; free(p);23、以下程序的输出结果是( D )#include <stdio.h>typedef struct dateint cat;long L;char c10; TOO;main( )printf(“%dn”,sizeof(TOO);A) 15 B) 26 C) 10 D) 1624、以下程序中c的二进制值是( A )char a=3,b=6,c;c=a|(b<<2);A) B) C) D) 25、表达式strcmp(“box”, “boss”) 的值是一个( A )。A) 正数 B) 负数 C) 0 D) 不确定的数二、填空题(每空2分,共20分)1. 写出下列程序段的输出结果 d 。 char str="hellotworldn" printf("%cn", *(str+10);2.以下程序的输出结果是: 4 #include <stdio.h>fun2(int a,int b)int c; c=a*b%3;return c;fun1(int a,int b)int c; a+=a;b+=b; c=fun2(a,b);return c*c;main()int x=11,y=19; printf("%dn",fun1(x,y);3. 下列程序的功能是求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串,输入字符1,则输出3,请填空。#include <conio.h>#include <stdio.h>#define M 81int fun(char *ss, char c) int i=0;for(; *ss ;ss+)if(*ss=c)i+;return i ;main() char aM, ch;clrscr();printf("nPlease enter a string: "); gets(a);printf("nPlease enter a char: "); ch=getchar();printf("nThe number of the char is: %dn", fun(a,ch);4.以下程序在主函数中输入10个整数,调用sort函数实现10个整数按从小到大排序(使用选择排序法),在主函数中输出排序结果。请填空: #include <stdio.h>void sort( int a ,int n) int i,j,k;int t; for (i=0;i<n-1;i+) k=i ; for(j=i+1;j<n;j+) if ( ak>aj ) k=j; t=ak;ak=ai;ai=t; main( ) int s10;int i;for(i=0;i<10;i+) scanf(“%d”,&si); sort(s,10) ; printf(“the sorted array:n”); for(i=0;i<10;i+)printf(“%d ”,si); printf(“n”);5.下面程序把从终端读入的文本(用作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。#include "stdio.h"#include “stdlib.h”FILE *fp;void main() char ch;if(fp=fopen( “bi.dat” , “w”)=NULL)exit(0);while(ch=getchar( )!=)fputc (ch, fp );fclose(fp);三、编程题(每题10分,共30分)1、编写一个程序,求一个5×5矩阵对角线元素之和。#include <stdio.h>add_duijiaoxian(int b55,int m) int i,j,total=0; for (i=0;i<m;i+) for (j=0;j<m;j+) if (i= =j)|(i+j=4) total=total+bij; return(total);main() int i,j,a55; int total=0,k=1; for (i=0;i<5;i+) for (j=0;j<5;j+) aij=k+; total=add_duijiaoxian(a,5); printf("the total of duijiaoxian is %dn",total);2、有一个分数数列: 求出这个数列前20项之和。#include <stdio.h>void main()int i;int deno,fenzi;float term,sum;sum=0 ;term=2.0 ;fenzi=2;deno=1;for(i=0;i<20;i+)sum+=term; fenzi=deno+fenzi; deno=fenzi-deno; term=(float)fenzi/deno; printf("sum=%fn",sum);3、存在这样的一个3位正整数,它的前两位和后两位都能被3整除,中间一位也能被3整除,例如:300、393、603等。找出100999之间满足以上条件的正整数并输出。#include <stdio.h>#include <string.h>main() int i,k=0; clrscr(); printf("n"); for (i=100;i<999;i+) if (i/10%3=0)&&(i-i/100*100)%3=0)&&(i/10%10)%3=0) if (k%5=0) printf("n"); printf("i=%4d ",i); k+; 专心-专注-专业