2018年3月江苏省计算机二级C语言真题第1套 |
1. 高级语言编写的程序可以由编译程序将其翻译转换为可执行程序,这些程序在Windows环境下查看其类型时显示为“MS-DOS应用程序”“应用程序”或“应用程序扩展”,显示为” 应用程序”的文件,其文件扩展名通常是__________。 A. COM B. APP C. EXE D. DLL C 解析:APP是iOS手机可执行程序的简称, EXE显示为应用程序,DLL是应用程序扩展。 3 2. 下列关于IP地址(IPv4)和路由器的叙述中,错误的是______ A.IP地址中包含有网络号和主机号两个内容,由IP地址与子网掩码进行逻辑加运算可得到网络号 B. IP地址(IPv4)长度仅为32位,大约只有40亿个地址可用,目前已分配完毕 C. 路由器除了在两个不同网络之间传输IP数据报,通常还具有流量控制、性能管理等功能 D. 目前家用无线路由器是一种将以太网交换机,无线AP和路由器等集成在一起的产品 A 解析: IP地址中包含有网络号和主机号两个内容,由IP地址与子网掩码进行逻辑与运算可得到网络号 。 4 3. 在有些HTML文档中,嵌入了动态修改网页内容或控制文档展现的脚本程序,许多脚本程序是采用_________语言编写的。 A. VBA B. VBScript C. Objective-C D. Python B 解析:VBA是嵌入到office中的编程语言,VBScript是嵌入到HTML中的脚本语言,Objective-C主要是应用于苹果操作系统中的编程语言,Python是一门编程语言。 3 4. 在现代通信系统中,为了能有效地提高数据链路的利用率、降低通信成本,一般使用多路复用技术让多路信号同时共用一条传输线进行传输,在使用光纤传输信息时,主要是采用____________技术。 A. TDM B. WDM C. FDM D. CDM B 解析: 时分多路复用(TDM)是各终端设备按不同时间来轮流使用同一线路来传输数据,是计算机网络传输使用的主要方式,频分多路复用(FDM)是将不同信源发出的信号调制在不同频率的载波上(例如收音机与电视机),波分多路复用(WDM)是在一根光纤传输不同波长的光波。 4 5. 下列图像文件格式中,_________格式在高档的数码相机中使用较多,它不但包含未经处理的像素数据,而且还记录了拍摄时相机的一些设置信息。 A. BMP B. RAW C. JPEG D. TIF B 解析: RAW文件格式在数码相机中使用较多,其含义是未经加工的图像,包含了感光器件捕获到的未经处理的像素数据,还包含了拍摄照片时的很多参数 。 5 6. 下列关于常用操作系统(产品)的叙述中,错误的是_________ 。 A. UNIX操作系统是广泛的操作系统之一,目前已经研制和开发了若干不同分支的UNIX产品 B. Linux内核是最有名的自由软件之一,目前全球已有上百个Linux操作系统发行版 C. 目前Linux已经被移植到多种硬件平台,但该类操作系统还不能用于大型和超级计算机 D. 目前PC不仅可以使用Windows操作系统,也可以使用Linux操作系统 C 解析: 目前Linux已经被移植到多种硬件平台,该类操作系统可以应用于大型和超级计算机 。 3 7. 通俗地说,算法就是解决问题的方法和步骤,下列关于算法表示及算法分析的叙述中,错误的是______ A. 与采用文字描述算法相比,采用流程图表示算法则更简明、更容易理解 B. 在设计算法时人们常用伪代码表示算法,这比采用具体的程序设计语言表示更方便,效率更高 C. 从算法复杂度来看,若算法的复杂度为常数阶则效率更高,若为指数阶则效率极低 D. 一个问题的求解可以有多种不同的算法,通过算法优化,其时间和空间复杂度相差通常不大 D 解析: 一个问题的求解可以有多种不同的算法, 其时间和空间复杂度通常相差很大 。 3 8. 通俗地说,算法就是解决问题的方法和步骤,下列相关叙述中,错误的是______ A. 算法的一个显著特征是,其解决的是一类问题而不是一个特点的问题 B. 所谓设计算法,就是寻找解决问题的方法与规则,并将其表示成算法 C. 算法设计一般采用由细到粗,由具体到抽象的逐步求精的方法 D. 枚举性、迭代法、递推法、回溯法等都是用于算法设计的基本方法 C 解析: 算法设计一般采用由粗到细,由抽象到具体的逐步求精的方法 。 3 9. 计算机绘制的图像也称为矢量图形,用于绘制矢量图形的软件称为矢量绘图软件。下列软件中,属于矢量绘图软件的是______。 A. ACDSee B. CorelDraw C. Photoshop D. Lightroom B 解析:流行的矢量绘图软件包括AutoCAD、CorelDraw,Illstrator, FreeHand,Visio等。 5 10. 字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。目前在Windows中文版操作系统中,通常使用_______来表示和处理文本,在数据文件需要保存到外存时会转换成操作系统所默认的本地编码(方案)。 A. ASCII B. UTF-8 C. UTF-16 D. GB18030 C 解析: UCS有两种标准UTF-8和UTF-16,UTF-8采用ASCII码用1个字节编码,拉丁字母,标点符号等采用2字节编码,汉字采用3个字节编码,其他极少字符采用4字节编码,UCS-16是指ASCII和汉字都采用2字节编码,其他不常用字符采用4字节编码,在Windows中文版上现在使用UTF-16,也是Java,.NET软件开发环境等默认的编码标准。 5 以下程序段中第_______行有语法错。 int x; //第1行 int f(int y) //第2行 { return w; } //第3行 int w=1; //第4行 int main() //第5行 { int z=2; f(z) ; return 0; } //第6行 A. 2 B. 3 C. 4 D. 6 B 解析:函数f中有一个w变量,因为w值的声明在f函数的下方,根据C规定,变量的作用域是从声明处开始的,所以会报错。 8 以下程序的输出结果是______。 #include #define H(x) x/(x-1) int main() { int a=1, b=2; printf ("%d\n", H (a-b)) ; return 0; } A. 2 B. 0.5 C. 0 D. -4 A 解析:H(a-b)调用#define H(x)后换算为1-2/(1-2-1),根据C语言运算顺序,首先执行2/(1-2-1)结果是-1,然后用1减去-1,结果即2 。 3 已有如下数据类型定义和变量声明: struct person { int num; char name[20],sex; struct { int year,month,day; }birthday; }a={20,"Li ning",'M',{1998,1,1}},*p=&a; 以下语句中正确的是____ A. printf("%s",a->name); B. printf("%d",p->birthday.year); C. printf("%s",*p.name); D. printf("%d",p-> birthday->year); B 解析: 运算符->要求左边必须是内存编号,运算符.要求左边必须是变量;A选项中的a是普通变量,不是其所在的内存编号,所以a->name错误,A选项修改为a.name就对了;B选项中,因为p是指针变量,所以p->birthday返回普通变量,然后通过.year获取值,所以正确;C选项中.的优先级高于*,所以实际是*(p.name),因为p是指针变量,所以不能用.,修改为(*p).name就对了;D选项错误的原因参考B选项。 11 已有声明“int k,a,b; unsigned long y=5;double x=10;”,以下表达式中语法正确的是______。 A. x%5 B. x=*y C. k=(a+1)++ D. a+=(a=3)*(b=2) D 解析:A错,运算符%要求左右两边都是整数,不能是double或float类型;B错,表达式*y因为*处于表达式的第1个位置,所以要求y必须是一个指针变量,不能是普通常量 ,修改为x*=y,表示x=x*y;就可以了;C错,++必须放到变量的前面或后面,不能放到表达式或常量的前面或后面; D选项执行后,a的值是9。 3 以下跳转语句中可以选择不唯一的跳转目的地的语句是______。 A. continue B. break C. goto D. return C 解析:continue表示直接跳转到循环开始处;break表示跳出所在的循环或switch过程;return表示返回函数调用处;通过 goto 可以调转到指定的位置。 6 6(填空题 <2空> ) : 以下程序运行时, 输出结果中第一行是____________ ,第二行是____________ 。 #include int f(int a[],int m,int b[],int n,int c[]) { int i,j,k=0,t; for(i=0;i { for(t=0,j=0;j if( a[i]==b[j] ) { t=1; break; } if(t) c[k++]=a[i]; } return k; } int main() { int x[]={7,2,3,6,1},y[]={5,10,7,9,8,6},z[10],w,j; w=f(x,5,y,6,z); for(j=0;j printf("%d\n",z[j]); return 0; } 7@6 解析: 因为文字描述不如视频讲解清楚,详细见视频讲解 8 7(填空题 <3空> ) : 以下程序运行时,输出结果中第一行是____________ ,第二行是____________ ,第三行是____________ 。 #include int main() { int a,b,j,k,w,s[4]; for(a=10;a<=16;a++) { b=2*a; s[0]=a/10; s[1]=a; s[2]=b/10; s[3]=b; w=1; for(j=0;j<3;j++) for(k=0;k<4;k++) if(s[k]==0||j!=k && s[j]==s[k] )w=0; if(w) printf("%d\n",a); } return 0; } 13@14@16 解析: 因为文字描述不如视频讲解清楚,详细见视频讲解 7 8 (填空题 <2空> ) : 以下程序运行时, 输出结果中第一行是____________ ,第二行是____________ 。 #include #include int main() { char *p1="student",p2[]="student"; if(p1==p2) puts("yes"); else puts("no"); if(!strcmp(p1,p2)) puts("yes"); else puts("no"); return 0; } no@yes 解析: 因为文字描述不如视频讲解清楚,详细见视频讲解 10 9 (填空题 <3空> ) : 以下程序运行时,输出结果中第一行是____________ ,第二行是____________ ,第三行是____________ 。 提示:函数int toupper(int ch)功能是将小写字母转换为对应大写字母。 #include #include long fun(char *s) { long n, sign, base=10,t; for(; *s==' ';s++); sign=(*s=='-')?-1:1; if(*s=='+'||*s=='-') s++; if(*s=='0'&& s++) { if(*s=='x'||*s=='X') { base=16; s++; } else base=8; } for(n=0,t=1;t &&(isdigit(*s)||isalpha(*s));s++) switch(base) { case 10: if(isdigit(*s)) n=n*base+*s-'0'; else t=0; break; case 8: if(*s >='0'&& *s <='7') n=n*base+*s-'0'; else t=0; break; case 16: if(isdigit(*s)) n=n*base+*s-'0'; else if(toupper(*s)>='A' &&toupper(*s)<='F') n=n*base+toupper(*s)-'A'+10; else t=0; } return sign*n; } int main() { char c1[]="0xc",c2[]="015",c3[]="-17"; printf("%ld\n%ld\n%ld",fun(c1),fun(c2),fun(c3)); return 0; } 12@13@-17 解析: 因为文字描述不如视频讲解清楚,详细见视频讲解 10
1(完善程序): 【要求】 1.打开T盘中文件myf0.c,按以下程序功能完善文件中的程序。 2.修改后的源程序仍保存在T盘myf0.c文件中,请勿改变myf0.c的文件名。 【程序功能】 已知main函数内结构数组p中前3个元素值已按成员index升序排列。以下程序先在p数组前3个元素中插入结构变量s1中保存的数据,再输出p数组前4个元素的值。要求插入s1数据后p数组前4个元素值仍按成员index升序排列。 【测试数据与运行结果】 测试数据:p数组中原始数据为 {5,"wang",},{10,"li",},{15,"zhao"} s1变量中数据为 {3,"zhang"} 输出: 3 zhang 5 wang 10 li 15 zhao 【待完善的源程序】 #include #include typedef struct s { int index; char name[10]; }ST; int insert(ST *p, ST s, int n) { int k,j; if(s.index>p[n-1].index) { p[n]=s; return n+1; } for(k=0;k if( 【1】 >s.index ) break; for(j=n; 【2】 ;j--) p[j]=p[j-1]; 【3】 =s; return n+1; } int main() { int n=3; ST p[8]={{5,"wang",},{10,"li",},{15,"zhao"}},s1={3,"zhang"},*q; n = insert( 【4】 ); for(q=p;q printf("%d %s\n",q->index,q->name); getch(); return 0; } p[k].index@j>k@p[k]@p,s1,n (1)p[k].index (2)j>k (3)p[k] (4)p,s1,n
2(改错题): 3(编程题): |