2013年春江苏省计算机等级考试 二级C语言 试卷
第一部分 计算机基础知识
一、选择题(用答题卡答题,答案依次填在1-20题号内)
1.下列关于信息、信息技术、信息产业与信息化的叙述中,错误的是_______。
A.信息是人们认识世界、改造世界的一种基本资源,没有信息则任何事物都没有意义
B.雷达、卫星遥感等感测与识别技术不属于现代信息技术
C.进入21世纪以来,信息产业已经成为全球第一大产业
D.目前我国正处于工业化的中期阶段,因此必须走适合我国国情的信息化道路,既要充分发挥工业化信息化的基础和推动作用,又要使信息化成为带动工业化升级的强大动力
2.下列关于数字技术与微电子技术的叙述中,错误的是________。
A.数字技术的处理对象是“比特”,一个触发器可以存储2个比特
B.在数据通信时,远距离传输或者无线传输是需要用比特对载波进行调制
C.现代集成电路使用的半导体材料主要是硅
D.我国第2代居民身份证中使用了非接触式IC芯片
3.对二进制数01与01分别进行算术加和逻辑加,其结果的二进制形式分别是_____。
A.01、10 B. 01、01 C.10、01 D.10、10
4.下列关于PC机CPU的叙述中,错误的是_______。
A.目前CPU芯片的主频越来越高,主流CPU芯片的主频已达8GHz以上
B.AMD公司也是重要的PC机CPU生产厂商,其CPU芯片与Intel保持指令系统兼容
C.目前Intel公司的Core i7是一种高端CPU芯片,它有4个或6个内核
D.为了提高CPU性能,目前主流CPU芯片都采用了流水线处理技术和超线程技术
5.下列关于台式PC机芯片组的叙述中,错误的是_______。
A.芯片组是主板上最为重要的部件之一,存储器控制、I/O控制等功能主要由芯片组实现
B.芯片组与CPU同步发展,有什么样功能和速度的CPU,就需要什么样的芯片组
C.芯片组决定了主板上能安装的内存最大容量及可使用的内存条类型
D.同CPU一样,用户可以很方便、很简单地更换主板上的芯片组
6.下列四种I/O总线(接口)标准中,数据传输速率最高的是_______。
A. PS/2 B. USB 3.0 C. IEEE-1394 D.SATA
7.下列关于I/O设备的叙述中,错误的是______。
A. 目前平板电脑、智能手机的触摸屏大多为“多点触摸屏”,可以同时感知屏幕上的多个触控点
B.扫描仪可分为手持式、平板式和滚筒式等类型,目前普通家用/办公用扫描仪大多为滚筒式
C.目前一些型号的数码相机已具有拍摄视频和进行录音的功能
D.为了降低成本,目前许多PC机采用集成显卡,其显示控制器被集成在芯片组中
8.下列关于PC机外存储器的叙述中,错误的是______。
A.目前PC机采用的硬盘,其盘片的直径通常为3.5英寸、2.5英寸或1.8英寸
B.U盘和存储卡都是采用闪烁存储器制作的,目前其容量大多为几GB至几十GB
C.目前固态硬盘的存储容量大多为数百GB,但其读写速度远不如传统硬盘(硬磁盘)
D.蓝光光盘是目前最先进的大容量光盘,单层盘片的存储容量可达25GB
9.下列关于软件的叙述中,正确的是_______。
A.BIOS是固化在主板ROM芯片中的程序,它既不属于系统软件、也不属于应用软件
B.Microsoft Access等数据库管理系统属于应用软件
C.大多数自由软件为免费软件,但免费软件不全是自由软件
D.所有商品软件均保证百分百正确,软件厂商对软件使用的正确性、精确性、可靠性做出承诺
13春 Page 1 of 9
10.下列关于Windows操作系统功能的叙述中,错误的是_______。
A.对于多任务处理,系统一般采用按时间片轮转的策略进行处理器调度
B.系统采用了虚拟存储技术进行存储管理,其页面调度算法为“最近最少使用”(LRU)算法
C.系统支持多种文件系统(如FAT32、NTFS、CDFS等)以管理不同的外存储器
D.系统支持任何I/O设备的“即插即用”和“热插拔”
11.下列关于程序语言的叙述中,错误的是_______。
A.虽然机器语言不易记忆、机器语言程序难以阅读和理解,但目前还是有很多人使用其编写程序
B.汇编语言与计算机的指令系统密切相关,不同类型的计算机,其汇编语言通常不同
C.VBScript语言是VB的子集,用其编写的程序可以嵌入在HTML文档中以扩充网页的功能
D.Java语言是一种适用于网络环境的程序设计语言,目前许多手机软件就是用Java编写的
12.下列关于通信技术的叙述中,错误的是_________。
A.调制与解调技术主要用于模拟通信,在数字通信中不需要使用调制与解调技术
B.使用多路复用技术的主要目的是提高传输线路的利用率,降低通信成本
C.在数据通信中采用分组交换技术,可以动态分配信道资源,提高传输效率和质量
D.数据通信网络大多采用分组交换技术,但不同类型网络的数据包格式通常不同
13.下列是我国第2代和第3代移动通信采用的一些技术标准,其中我国自主研发的是____。
A.GSM B.TD-SCDMA C.CDMA2000 D.WCDMA
14.下列因特网接入技术的叙述中,理论上数据传输速率最高的是_______。
A.ADSL接入 B.无线局域网(WLAN)接入
C.GPRS移动电话网接入 D.3G移动电话网接入
15.Internet使用TCP/IP协议实现了全球范围的计算机网络的互连,连接在Internet上的每一台主机都有一个IP地址。目前使用的是IPv4标准(32位地址),下一代互联网将会采用IPv6标准,其IP地址为________。
A.48位 B.64位 C.96位 D.128位
16.下列关于网络信息安全与计算机病毒防范的叙述中,错误的是______。
A.网络信息安全不仅需要相关技术的支持,更要注重管理
B.目前Windows XP等操作系统内置软件防火墙,在一定程度上可以保护本地用户计算机免受攻击
C.“木马”病毒是一种后门程序(远程监控程序),黑客常用她它来盗窃用户账号、密码和关键数据
D.目前所有防病毒软件均为商品软件,例如金山毒霸、360杀毒软件等均需要用户付费才能使用
17.下列关于字符编码标准的叙述中,错误的是_______。
A.在ASCII标准中,每个字符采用7位二进制编码
B.在绝大多数情况下,GB2312字符集包含的1万多个汉字足够使用
C.Unicode字符集既包含简体汉字,也包含繁体汉字
D.中文版Windows XP及其后的Windows系列操作系统均支持国际GB18030
18.由于采用的压缩编码方式及数据组织方式的不同,图像文件形成了多种不同的文件格式。在下列四种图像文件中,常用于网页上发布并可具有动画效果的是_______。
A.BMP B.JPEG C.GIF D.TIF
19.下列四种声音文件中,不可能用于保存歌曲的是________。
A.WAV B.MP3 C.MIDI D.WMA
20.下列关于Microsoft Office软件(2003/2007版本为例)功能的叙述中,错误的是_______。
A.Word、Excel、PowerPoint文件均不可设置打开文件的密码
B.Word文档中设置为标题样式的内容可以直接导入到PowerPoint演示文稿中
C.可以将Access数据直接导入到Excel工作表中
D.PowerPoint制作幻灯片时,可以在幻灯片中直接插入“Excel工作表”对象
13春 Page 2 of 9
第二部分 C语言程序设计
一、选择题(用答题卡答题,答案依次填在21-30答题号内,共10分)
21.以下选项中,不能将字母A的编码保存到变量ch的声明是______。
B.char ch='A'; C.char ch='101'; D.char ch=65;
22.以下关于while语句和do-while语句的描述中,错误的是_______。
A.while语句和do-while语句都可以使一段程序重复执行多遍
B.while语句和do-while语句都包含了控制循环的表达式
C.while语句和do-while语句都包含了循环体
23.已有声明”int a=3,b=4,c=5,d=0;”,执行语句“print("%d ",d=a>b?(a>c?a:b):(b>c?b:c));”时输出__。
A.3 B.4 D.0
24.已有声明”int a;char b;”,执行语句”scanf(“%d%c”,&a,&b);”时,若要求将整数2输入到变量a、将字符u输入到变量b,则以下输入形式中正确的是_____。
C.2,u D.2‟u‟
25.已有声明”char s[]=”Hello”,i; ”,以下语句中,与
26.”for(i=0;s[i];i++)putchar(s[i]);”的执行效果相同的是________。
A.putchar(s); B.printf(“%c”,*s); C.printf(“%c”,s); 27.已有声明”int a[4]={2,0,1,2}, *pa=a, i;”,以下语句中有语法错误的是________。
B.for(i=0;i<4;i++) (*a)++
B.for(i=0;i<4;i++) pa++; D.for(i=0;i<4;i++) (*pa)++
28.已有fun函数定义:
void fun(int x[ ], int n)
{ while(n>0)
x[--n]++;
}
若main函数中已声明”int a[6]={0};”,则以下main函数调用fun函数的语句中,正确的是____。
A.fun(a); B.fun(a,a) D.fun(1,a);
28.已知main函数中有声明”int a=3,b=4;”,若在main函数中通过执行语句”swap(&a,&b);”交换a、b变量的值,则下列swap函数定义中正确的是__________。
A.void swap(int x,int y){ int t; t=x; x=y; y=t;}
C.void swap(int *x,int *y){int *p; p=x; x=y;y=p;}
D.void swap(int *x,int *y){int *p; p=*x; *x=*y; *y=p;}
29.已有声明”char s1[4], *s2=”character”;”,能实现”将s2指向的字符串中最后3个字符组成的子串复制到s1数组”功能的语句是_________。
A.s1=s2+strlen(s2)-3; B.s1[0]=s2[strlen(s2)-3];
C.strcpy(s1[0],s2[strlen(s2)-3]); 30.已有数据类型定义及数组声明如下:
struct person
{ char name[20];
int age;
}p[10]={{“John”,18},{”Mary”,17},{”Adam”,16},{”Paul”,19}};
以下语句中,能输出字符串”John“的是_______。
13春 Page 3 of 9
A.printf(”%s”,p.name[0]); B.printf(“%s”,p.name);
D.printf(“%s”, p[0].name[0]);
二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)
1.已有声明”char c=255;”,执行语句”c++;”后变量c的值是__(1)_0___。
2.若要在C程序中以十六进制形式表达十进制数35,表示形式是____(2)__0X23__。
3.表示数学式”0<x<5”的C语言表达式是_____(3)____0<x & x<5___。
4.已知f函数的定义是”int f(double x){ return x+1; }”,
若main函数中有声明”double y=f(3.7);”,则变量y的初值为____(4)__4.0 ___。
5.用系统库函数fprintf写到磁盘文件中的数据通常应当用系统库函数___(5)_scanf__读出。 阅读程序(13分)
6.以下程序运行时,输出到屏幕的结果中第一行是__(6)__8__,第二行是___(7)_5__。 #include<stdio.h>
#define A(x) x/2
int B(int x)
{ return x/2; }
int main()
{ printf(“%dn%d”, A(7+3),B(7+3));
return 0;
}
7.以下程序运行时,输出到屏幕的结果中第一行是_0__(8)__,第二行是__(9)_1__。 #include<stdio.h>
void fun(int *x,int y) //x: &a[0] y:0
{ x++, y++; //x: &a[1] y:1
*x=y; a[1]=1;
}
int main()
{ int a[2]={0};
fun(a,a[0]);
printf(“%dn%d”,a[0],a[1]); //0 1
return 0;
}
8.以下程序运行时,输出到屏幕的结果中第一行是___(10)__,第二行是__(11)__。
#include<stdio.h>
int main()
{ int i,m=1,n=1;
printf(“%4d%4d”,m,n);
for(i=2;i<9;i++)
{ n=n+m;
m=n-m;
if(i%3==0)putchar(„n‟);
printf(“%4d”,n);
}
return 0;
13春 Page 4 of 9
}
9.以下程序运行时,输出到屏幕的结果是____(12)______。
#include<stdio.h>
int fun(int a,int b)
{ int c;
if(b<1) c=0;
else
if(b==1) c=a*a;
else c=fun(a,b-1)+a*a;
return c;
}
int main()
{ int a=5,b=4;
printf(“%dn”,fun(a,b));
return 0;
}
10.以下程序运行时,输出到屏幕的结果是_____(13)______。
#include<stdio.h>
void fun(char str[])
{ int i,j;
for(i=j=0;str[i];i++)
if(str[i]>=‟a‟&&str[i]<=‟z‟)
str[j++]=str[i];
str[j]=‟ ‟;
}
int main()
{ char ss[80]=”Very Good!”;
fun (ss); printf(“%sn”,ss);
return 0;
}
11.以下程序运行时,输出到屏幕的结果中第一行是___(14)_____。
#include<stdio.h>
int main()
{ int c[4]={2,1,3,4},p,q,t,i;
p=c[3],q=1;
for(i=2;i>=0;i--)
{ t=c[i]*p+q; q=p; p=t; }
printf(“%dn%dn”,p,q);
return 0;
}
12.以下程序运行时,输出到屏幕的结果中第三行是___(15)____,第四行是___(16)____。 #include<stdio.h>
#defing N 10
void setdata(int s[][N],int n);
int main()
13春 Page 5 of 9
{ int i,j,y[N][N],n=5;
setdata(y,n);
for(i=0;i<n;i++)
{ for(j=0;j<=i;j++) printf(“%dt”,y[i][j]);
printf(“n”);
}
return 0;
}
void setdata(int s[][N],int t)
{ int i,j;
for(i=0;i<n;i++)
{ s[i][i]=1;
s[i][0]=1;
}
for(i=2;i<n;i++)
for(j=1;j<i;j++)
s[i][j]=s[i-1][j-1]+s[i-1][j];
}
13.以下程序运行时,输出到屏幕的结果中第一行是___(17)____,第二行是___(18)____。 #include<stdio.h>
int main()
{ char*s[]={“Apple”,”Pear”,”Banana”,”Orange”,0},*p;
int i,j,n;
for(n=0;s[n];n++);
j=n-1;
for(i=0;i<j;i++,j--)
p=s[i],s[i]=s[j],s[j]=p;
for(i=0;i<n;i++) puts(s[i]);
return 0;
}
完善程序(12分)
14. 一下程序输出3~3000000范围内的全部梅森素数,并统计输出梅森素数的个数。
梅森数是指值为2p-1的正整数(记为Mp),其中指数p为素数,若Mp是素数,则称Mp为梅森素数。例如,7=23-1,3和7均为素数,因此7是梅森素数。
#include <stdio.h>
int prime(long n)
{ long i;
if(n%i==0) return 0;
return 1;
}
int isMersennePrime(long n) /* 判断n是否是梅森素数*/
{ long m=n,k=0;
while(m)
13春 Page 6 of 9
{ if(m%2==0) return 0;
;
K++;
}
else return 0;
}
int main()
{ long n,k=0,M=3000000;
for(n=3;n<=M;n+=2)
{ if(isMersennePrime( n))
{ printf(“%ldn”,n);
;
}
}
printf(“%ld~%ld:%ldn”,3L,M,k);
return 0;
}
15. 以下程序的功能是统计并输出在一个字符串中某个字符子串的出现次数,记录并输出子串在该字符串中每一次出现的起始下标。
#include <string.h>
#include <stdio.h>
int count(char *str,char *substr,int c[])
{ int i,j,k,num=0;
for(i=0;str[i]!=‟ ‟;i++)
{ j=i; k=0;
while(substr[k]!=‟ ‟&& /*判断str指向的字符串中是否出现str1指向的子串*/ k++,j++;
if(substr[k]==‟ ‟)
{ ; /* 记录子串在字符串中出现的起始下标*/ i=i+strlen(substr)-1;
}
}
return ;
}
int main()
{ char str[80],substr[80];
int i,num=0,c[80];
gets(str);
gets(substr);
if(num)
{ printf(“%dn”,num);
for(i=0;i<num;i++)
13春 Page 7 of 9
printf(“%d”,c[i]);
}
else
printf(“%s is not substring!n”,substr);
return 0;
}
16. 约瑟夫问题:n个人围成一圈,从第一个人开始顺序报数,从1报到m,报到m的人出列;从出列的下一个人开始重新报数,报到m的人又出列;如此重复直到所有人出列为止。最后出列的人是谁?
struct node *create(int n)函数创建具有n个结点的单项循环链表,并将1~n(代表n个人的编号)顺序保存到每个结点的num成员中,函数返回新建链表首结点的地址。单向循环链表是指尾结点指向首结点的单向链表。
void Del(struct node *head,int n,int m)函数模拟约瑟夫问题报数的过程,输出依次出列的所有人的编号,其中形参n表示有n个人参加报数,形参m表示报数的终值。例如,当n=10、m=3时表示有10个人参加报数,报到3的人出列,因此应输出“3 6 9 2 7 1 8 5 10 4”。
#include <stdio.h>
#include<stdlib.h>
struct node{ int num;struct node *next; };
struct node *create(int n)
{ int i; struct node *p,*head=NULL,*rear;
for(i=0;i<n;i++)
{ p=(struct node*)malloc(sizeof(struct node));
p->num=i+1;
if(head==NULL)
{ head=_____(27)______; rear=p; }
else { _____(28)_________=p; rear=p; }
}
rear->next=head; /* 使尾结点指向首结点 */
return head;
}
void Del(struct node *head,int n,int m)
{ int i,j; struct node *p,*q=head,*front=head;
while(q->next!=head)q=q->next;
for(j=0;j<n;j++)
{ for(i=1;i<m;i++)
{ q=front; front=_____(29)_______; }
print(“%dt”,front->num); /*front指向的结点出列*/
p=front;
_____(30)________=front->next; /*从head链表中删除front指向的结点*/
front=front->next;
free(p);
}
}
int main()
{ int m,n; struct node *head;
13春 Page 8 of 9
printf(“输入报数人数n:”);scanf(“%d”,&n); printf(“输入报数终值m:”);scanf(“%d”,&m); head=create(n);
if(n>0&&m>0){ Del(head,n,m); head=0; } return 0;
}
13春 Page 9 of 9
百度搜索“爱华网”,专业资料,生活学习,尽在爱华网