C程序设计试卷及答案.doc_第1页
C程序设计试卷及答案.doc_第2页
C程序设计试卷及答案.doc_第3页
C程序设计试卷及答案.doc_第4页
C程序设计试卷及答案.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言考试样卷及参考答案C语言考试样卷及参考答案一、选择题(40题,每题1.5分,共60分)【1】以下关于C语言标识符的描述中,正确的是 。A)标识符可以由汉字组成 B)标识符只能以字母开头C)关键字可以作为用户标识符 D)Area与area是不同的标识符答案:D)Area与area是不同的标识符(C语言标识符中大小写字母被认为是不同的字符)【2】以下不属于C语言关键字的是 。A)case B)byte C)enum D)sizeof答案:B)byte【3】C语言中,以下 不是正确的常量。A)543210L B)05078 C)-0x41 D)12345答案:B)05678 (0开头表示八进制数,其各位数码不应8)【4】以下不正确的转义字符是 。A) B)0101 C)n D)x1f答案:B)0101【5】使下列程序段输出“123,456,78”,由键盘输入数据,正确的输入是 。 int i,j,k; scanf(“%d,%3d%d”,&i,&j,&k); printf(“%d,%d,%dn”,i,j,k);A)12345678 B)123,456,78 C)123,45678 D)123,*45678答案:C)123,45678【6】判断char类型的变量c1是否为数字字符的正确表达式为 。A) (c1=0)&(c1=0)&(c1=9)C) 0=c1=0)|(c1=0)&(c1=9)【7】若有语句int a=1,b=2,c=3;则以下值为0的表达式是 。A)a&b B)ab)|(bc) D)(!(a+b)=c&a)答案:D)(!(a+b)=c&a) /*!(a+b)=c的结果为0*/【8】以下四个运算符,按优先级由高到低的排列顺序是 。A)!、/、=、= B)/、!、=、= C)/、=、=、! D)!、/、=、=答案:D)!,/,=,=数组a:1 2 34 5 06 0 00 0 0【9】以下程序的运行结果是什么?void main()int a3=1,2,3,4,5,6,0;clrscr();printf(%d,%d,%dn,a11,a21,a31);结果:5,0,0【10】以下各语句或语句组中,不正确的操作是 。A) char s =”abcde” B) char *s;gets(s);C) char *s;s=”abcde” D) char s300;scanf(“%s”,s);答案:B (指针*s没有指向确定的变量)【11】以下叙述中不正确的是 。A) 在不同的函数中可以使用相同名字的变量B) 程序中有调用关系的函数必须放在同一个源文件中C) 在一个函数内定义的变量,其变量名只在本函数范围内有效D) 函数中的形式参数是局部变量答案:B【12】以下程序的运行结果是什么?void main() int i=1,v1=0,v2=0,v3=0;for (i=5;i0;i-);后,变量i的值为 。A)10 B)9 C)0 D)1答案:C【15】求以下程序的运行结果。void main()char *pc=#Fujian#Province#;clrscr();while (*pc) while(*pc=#) pc+; if (*pc=0) break; printf(%c,*pc); pc+; printf(n);结果:FujianProvince【16】以下对C语言函数的描述中,不正确的是 。A)C语言中,函数可以嵌套定义 B)C语言中,函数可以递归调用C)C语言中,函数可以没有返回值 D)C语言程序由函数组成答案:A)C语言中,函数可以嵌套定义【17】以下程序的运行结果是什么?#include fun(int *i) static int a=1; *i+=a+; void main() int k=0;clrscr();fun(&k);fun(&k);printf(%dn,k);第一次调用fun(&k)后,k=*i=1,a=2;第二次调用fun(&k)后,k=*i=3,a=3;结果:3【讨论】如果fun()函数中没有static,结果呢?(2)【18】求程序运行结果。int a; /*定义全局变量a*/ fun(int i) a+=2*i; /*a=a+2*i=0+210*,此处a为全局变量/return a; void main() int a=10; /*定义局部变量a*/ printf(%d,%dn,fun(a),a); /*此处a为局部变量*/结果:20,10【19】以下语句中,指针s所指字符串的长度为 。 char *s=”HellotWorldn”;答案:13 检验方法: void main() printf(“%d”,strlen(“HellotWorldn”); (注:指针s所指字符串输出结果是:Hello World )【20】运行下列程序,当输入字符序列AB$CDE并回车时,程序的输出结果是什么?#include rev() char c; c=getchar(); if (c=$) printf(%c,c); else rev(); /*此处为递归调用rev()函数*/ printf(%c,c); void main()rev();结果:$BA【21】以下程序的运行结果是什么?void main()int a=12,b; b=0x1f5 & a3; printf(%d,%dn,a,b);已知:0x1f5为1 1111 0101且:a=12为1100 a(y)?(x):(y)void main() int a=1,b=2,c=3,d=2,t;t=10*(MAX(a+b,c+d); /*替换成: t=10*(a+b)(c+d)?(a+b):(c+d)*/printf(%dn,t);结果:50【27】使用#include “文件名”,寻找被包含文件的方式为 。A) 直接按系统设定的方式搜索目录B) 仅搜索源程序所在目录C) 先搜索源程序所在目录,再按系统设定的方式搜索目录D) 仅搜索当前目录答案:C【28】以下程序的运行结果是什么?void main() int i,j; clrscr();i j 输出1 1 *#2 3 *#2 (执行break语句) $ for (i=1;i0;j-) if (j%2) printf(*); else break; printf(#); printf($n);结果:*#*#$【29】已知TEST.C的源程序如下: (此部分内容可参见教材P210211)void main(int argc,char *argv) while (argc1) printf(%s ,argv-argc); printf(n);将该文件编译后,在命令行输入:test abc 123则该程序运行结果是什么?结果:123 abc【分析】执行时, argc的值为3(从命令行输入test abc 123共计三项)argv0=”test” argv1=”abc” argv2=”123”【30】以下程序的运行结果是什么?void main()int a=1,b=3,c; c=(a+=+b,b+=a); /*c=(a=1+4,b+=a) ;c=(b=5+4)=9*/ printf(%d,%d,%dn,a,b,c);结果:5,9,9【31】若有语句组typedef int AR5;AR a;则以下叙述中正确的是 。A)a是一个新类型 B)a是一个整型变量C)a是一个整型数组 C)a是一个变量名答案:B)a是一个整型数组【32】已有定义语句int *p;以下能动态分配一个整型存储单元,并把该单元的首地址正确赋值给指针变量p的语句是 。A)*p=(int *)malloc(sizeof(int); B) p=(int *)malloc(sizeof(int);C) p=* malloc(sizeof(int); D) free(p);答案:B) p=(int *)malloc(sizeof(int);【33】以下与库函数strcpy(char *s1,const char *s2)功能不相等的函数上 。A) funa(char *s1,const char *s2) B) funb(char *s1,const char *s2) while (*s1+=*s2+); while (*s2) s1+=s2+; C) func(char *s1,const char *s2) D) fund(char *s1,const char *s2) while (*s1=*s2) while (*s1+=*s2+)!=0);s1+;s2+; 答案:B 说明:以(*s2) 为循环条件,使s2的字符串结束符不能复制到s1中。【34】以下程序的运行结果是什么?f(int b ,int n)int i,t; t=0; for (i=1;i=n;i+) t=t+bi; /*b1=2,b2=3,b3=4*/ return t; void main() int x,a=1,2,3,4,6; x=f(a,3); printf(%dn,x);结果:9【35】以下程序的运行结果是什么?void main()struct stype int i; struct stype *next; a=1,3,5,7,*p=a;int j;for (j=1;jnext=&aj; /*建立链表如下*/a0 a1 a2 a313567inextprintf(%d, ,a0.next-i);printf(%d,+(*a1.next).i); printf(%dn,a2.i);结果:3,6,6【要点】如果p为指向某个结构体变量的指针,则以下三种形式等效: 结构体变量.成员名 (*p).成员名 p-成员名 同时注意next是指针类型的。所以a0.next实际上指向是结构体a1的首地址(即a1中第一个成员变量i的地址)。而(*a1.next)等效于a2。【36】如果要以只读方式打开一个文本文件,应使用的打开方式是 。A)r+ B)w C)r D)rb答案:C【37】以下程序的运行结果是什么?str0AA=*str或*(str+0)str1BBCC=*(str+1)str2CC=*(str+2)void main()char *str=AA,BB,CC;str1=str2;printf(%s,%s,%sn,*str,str1,*(str+2);结果:AA,CC,CC【38】以下函数utoh将十进制正整数n转换成无符号十六进制并输出,选择正确答案完成函数功能。utoh(unsigned n)int h; char ch; h=n%16; /*取n除以16的余数h*/ ch=h9,则转换为A、BF*/ if (n/160) utoh( 【 】 ); /*将n除以16后的整数部分作为一个新数递归处理*/ printf(%c,ch);A)n/16 B)ch C)n D)n%16答案:n/16 主函数(参考):void main()int n;clrscr();printf(Input n=);scanf(%d,&n);utoh(n);运行:Input n=9999结果:270F【39】要求函数在数组a1到an中查找x,若找到则把该元素的下标存入a0,若未找到则a0的值为0。下面函数中不能正确实现此功能的是 。A)funa(int a , int n, int x) int *p=a+n; a0=x; while(*p!=x) p-; a0=p-a;B) funb(int a , int n, int x) int *p=a+n;while(pa) if(*p=x) break; a0=p-a;C)func(int *a, int n, int x) *a=x; while (an!=x) n-; a0=n;D)fund(int *a, int n, int x) int k;for(k=1;k,=n;k+)if ak=x) break;a0=kn?0:k 答案:B 原因:指针p的值在循环中未作任何改变,除非an的值正好等于x,否则因为p=a+n永远大于a,陷入死循环。【40】已有如下定义: struct nodeint data; struct node *next;*p,*q;并已建立了如下图所示的单向链表,p,q分别指向图中所示的结点,将q所指的结点插入到链表未尾组成单向链表,以下不能实现该功能的程序段是 。Pq102030A)(*p).next=q; B) q-next=p-next; (*q).next=NULL; p-next=q;C) q-next=NULL; D) p-next=q; p-next=q; q-next=p-next;答案:D【解答】 p-next=q; /*此句执行后,p-next指向q所指的结点首地址*/ q-next=p-next; /*q-next中应存放NULL,而上句已使p-next中不再是NULL*/二、填空题(共20空,每空2分,共40分)。1以下程序段的输出结果是 【1】 。int a32=1,2,3,4,5,6,(*p)2;p=a;printf(%dn,*(*(p+2)+1);答案:【1】6【提示】*(*(p+i)+j) 表示aij的值。2、invert( )函数的功能是将一个字符串str的内容倒序存放。例如:字符串str原内容为:abcde,函数调用后变为:edcba。void invert(char str) int i,j,k; j= 【2】 ; for (i=0;istrlen(str)/2;i+,j-) k=stri; stri=strj; strj= 【3】 ; void main() char test=abcde; invert(test); printf(%sn,test);答案:【2】strlen(str)-1 【3】k3、下列程序打印出1000以内的所有“完全数”。“完全数”是指一个正整数,其所有小于该数的因子之和等于该数本身。例如:6=1+2+3,又如:28=1+2+4+7+14#include void main() int i, j, s; for (j=2;j=1000;j+) s=0; for (i=1;ij;i+) if ( 【4】) s+=i; if ( 【5】) printf(%4d,j); 【4】j%i=0或 !(j%i) 【5】j=sa55分析:a00 a01 a02 a03 a04a10 a11 a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32 a33 a34a40 a41 a42 a43 a444、下列程序的功能是显示如下图形:1 0 0 0 02 1 0 0 03 2 1 0 04 3 2 1 05 4 3 2 1void main()int a55,i,j; clrscr(); for (i=0;i5;i+) for (j=0;j5;j+) if ( 【6】 ) aij=0; else aij=【7】; printf(%3d,aij); printf(n); 答案:【6】ij 【7】i+1-j【分析】这类题的元素值排列很有规律,所以一般要从分析行数i、列数j与元素值的关系着手。分析上图可知,当i=j时,元素值随行数i增加而增加,随列数j增加而减小,这样就很容易得出其元素值与i,j的关系是i+1-j。5、下面程序将键盘输入和文件file1.dat中的数据按由小到大排序后,存入file2.dat中。file1.dat中已有由小到大的整型数据,键盘输入的10数据存入数组a中。#include stdio.h# 【8】 N 10void sort (int b,int n) /*sort()的功能是由小大对数组b排序*/ int i,j,k,temp; for (i=0;in-1;i+) /*用选择法将存入在数组中的整型数据按小到大排序*/ k=i; for(j=i+1;jbj) 【9】 ; if (k!=i) temp=bi; bi=bk; bk=temp; void main()FILE *fpr,*fpw; int aN,i,data; clrscr(); for (i=0;iN;i+) scanf(%d,&ai); /*从键盘输入10个数据到数组a */ sort(a,N); /*调用sort()函数对数组a 排序*/ if (fpr=fopen(file1.dat,r)=NULL) /*打开文件file1.dat,文件指针变量为fpr*/ printf(Can not open file1.dat.n); /*如果file1.dat打不开,提示出错并退出*/ exit(1); if (fpw=fopen(file2.dat, 【10】)=NULL) /*打开文件file2.dat,文件指针变量为fpw*/ printf(Can not open file2.dat.n); /*如果file2.dat打不开,提示出错并退出*/ exit(2); i=0;while (!feof(fpr) /*判断文件file1.dat是不是到最后一个数据*/fscanf(fpr,%d,&data); /*从文件file1.dat中读一个数据*/ 【11】 (ai=data&iN) /*如果数组a 中的数据小于文件中的数据*/ fprintf(fpw,%d ,ai+); /*将数组a 中的数据写入file2.dat中*/ fprintf(fpw,%d ,data); /*将文件file1.dat中读出的数据写入file2.dat*/ while (iN) fprintf(fpw,%d ,ai+); fclose(fpr); /*关闭文件file2.dat*/ 【12】 ; /*关闭文件file2.dat*/ 答案:【8】define 【9】k=j 【10】w 【11】while 【12】fclose(fpw)【分析】 (参见上面红字注释)1、【8】因为是#开头,肯定是编译预处理语句,而且显然只有可能是宏定义语句。2、【9】此处使用选择法排序,故应为下标交换。3、【10】此处打开文件file2.dat,依题意,该文件在程序执行过程中是可写的。4、【11】此处用键盘输入值与file1.dat中读出的数据比较,如果前者小于或等于后者,就把它先写入file2.dat中。5、【12】文件file2.dat需要关闭。注:如果上机调试本程序,应先在源程序所在目录下建立一文本文件file1.dat,其内容为由小到大排列的若干整型数据,每个数据占一行。运行结果在同一目录的file2.dat下。6、以下程序输入学生姓名,查询其学习成绩。查询可连续进行,直到键入0时结束。#include #include void main()struct student int no; /*学号*/ char name8; /*姓名*/ int score; /*学习成绩*/; 【13】 stu=10,Tom,90,11,Jerry,80,12,Harold,70;void main()char str10;int i;do printf(Enter a name:); scanf(%s,str); for (i=0;i=3) printf(Not Foundn);while (strcmp(str,0)!=0);答案:【13】struct student 【14】!strcmp(str,) 或 strcmp(str,)=0【15】7、已知sin(x)的多项式公式为:以下程序对输入的x,按上述公式计算sin(x)的近似值,要求误差小于10-6。#include #include void main() double x,s,y=0.0,y0; int j; printf(Enter x:); scanf(%lf,&x);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论