2017年10月江苏省计算机二级C语言真题第1套 |
第1套 (2017秋1) 1、 移动通信指的是处于移动状态的对象之间的通信,最有代表性的是手机——个人移动通信系统。下列有关移动通信的叙述中,错误的是___________。 A. 基站是个人移动通信系统的重要组成部分,它负责与其周围区域内所有手机进行通信 B. 无论是最早的第1代个人移动通信,还是处于发展中的5G,均是采用数字通信技术 C. 第2代移动通信以语音传输技术为核心,但可提供收发短信息等数据量很少的数据业务 D. 目前智能手机分为多种产品类型,全网通手机一般可以接入国内三大运营商的所有网络 B 解析: 最早的第1代个人移动通信采用模拟通信技术。 4 2、 数十年来,硬盘一直是计算机中最重要的外存储器。下列有关硬盘的叙述中,错误的是_________。 A. 通常硬盘的盘片两面均可记录数据,因而盘片两侧各有一个磁头 B. 所有的硬盘均有多个盘片组成,一般不会仅使用一个盘片,盘片数越多则容量越大 C. 硬盘盘片直径一般为3.5、2.5、1.8英寸等,台式PC通常采用3.5或2.5英寸硬盘 D. 目前内置硬盘的接口大多数为SATA接口,它以告诉串行方式传输数据 B 解析: 硬盘一般由1到4个或1到5个盘片组成,盘片宜少不宜多,单碟盘片的容量越大越好。 2 3、 下列有关信息、信息技术、信息产业、信息化的叙述中,错误的是_________。 A. 信息的表现形式多种多样,其分类也不计其数 B. 所有的信息技术均采用电子技术(含激光技术)进行信息的收集、传递、加工、存储等 C. 信息产业是战略性先导产业,其科技创新含量高,知识、智力和技术密集 D. 信息化是当今世界发展的大趋势,是我国增强国际竞争力和提高综合国力的关键之一 B 解析: 信息技术的历史非常长,主要是为了提高人们的信息器官功能,协助人们进行信息处理的技术,现代信息技术采用电子技术(含激光技术)进行信息的收集、传递、加工、存储等 。 1 4、 根据不同的应用需求,数字音频采用的编码方法有多种,文件格式也各不相同。下列的音频格式中,由美国Dolby公司开发的、在DVD和数字电视等领域广泛使用的是______ A. WAV B. MP3 C. AC3 D. ACC C 解析: MP3是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3;WMA是微软制订的音频压缩文件格式,比mp3标准晚,比mp3还小,比mp3音质还好 , 采用未压缩编码方式;美国杜比公司开发的AC3, 在DVD和数字电视等领域广泛使用;相对于mp3,AAC格式的音质更佳,文件更小。 。 5 5、 主机上用于连接I/O设备的各种插头、插座,统称为I/O接口。下列I/O接口中,近年来生产的大多数笔记本电脑通常不具有的接口(或者说通常不配备的接口)是______ A. PS/2 B. USB C. SATA D. VGA A 解析: PS/2是早期连接有线鼠标的接口,现在主要使用USB接口了 。 2 6、 数值、文字、图像、声音等不同的信息在计算机中的表示方法是不同的。下列相关叙述中,错误的是______。 A. 数值为负的整数在计算机中通常采用“反码”的方法进行表示 B. 文字由一系列“字符”构成,每个字符通常使用1-4个字节的二进制编码表示 C. 黑白图像在数据库时,每个像素一般采用8位二进制无符号整数表示 D. 声音信息在数字化时,每个取样的样本一般使用8位、12位、14位或16位二进制数表示 A 解析: 数值为负的整数在计算机中通常采用“补码”的方法进行表示 。 1 7、 字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。下列有关汉字编码的叙述中,错误的是______ A. 在我国最早颁布的汉字编码字符集GB 2312仅包含6000多个汉字,其中没有繁体汉字 B. 无论是GB 2312、GBK,还是GB 18030,其中西文字符均为单字节编码,汉字均为双字节编码 C. 目前在互联网的许多应用中采用UTF-8编码,该编码方案采用可变长度字符编码 D. 目前在Windows操作系统中常使用UTF-16编码,在该编码方案中汉字编码使用2个字节表示 B 解析: GB 2312中字符全部采用双字节 。 5 8、 操作系统是计算机中重要的一种系统软件,应用软件必须在操作系统的管理和支持下运行。下列有关操作系统的叙述中,错误的是______ A. 操作系统承担着资源分配和调度等任务,以保证程序正常有序地运行 B. 目前大多数操作系统都向用户提供图形用户界面,它以窗口形式显示程序运行状态 C. 操作系统通常由操作系统内核和许多配套软件、程序库等组成 D. 所有的计算机都必须安装操作系统才能工作,操作系统的运行不依赖任何其他软件 D 解析: 操作系统启动前依赖于底层的BIOS程序,通过引导加载程序将操作系统加载到内存中并运行。 3 9、 按照软件权益的处置方式来分类,软件可以分为商品软件、共享软件、自由软件等多种类型,下列相关叙述中,错误的是______ A. 所有的商品软件都需要用户付费购买其使用权,且软件升级均需要再次付费 B. 共享软件通常是"买前免费试用"的具有版权的软件,过了试用期则付费可继续使用 C. 自由软件倡导的软件"非版权"原则,允许拷贝、修改和自由传播 D. 大多数开源软件都是多人合作,义务开发的成果,其发展促进了软件共享和技术创新 A 解析:商品软件升级有的需要付费,有的不需要付费。 3 10、 随着互联网技术和应用的发展,Web已经从信息发布与查询平台发展成为多种信息处理应用的平台,下列有关叙述中,错误的是_______ A. 静态网页通常指那些内容基本不变的网页,除非网页作者(发布者)对其修改并重新发布 B. 动态网页的内容通常不是预先确定的,而是根据用户请求提供的参数实时生成的页面 C. Web平台上运行的信息处理系统(如淘宝、京东等)都是使用动态网页技术开发实现的 D. 目前所有的动态网页都是使用微软公司的ASP.NET技术开发而成的 D 解析:动态网页技术有多种,如Asp.net, Php,Jsp等 。 3 【程序设计理论】 1. 执行以下程序时输出_______。 #include<stdio.h> float p=1.5; void fun(void) { int p=1; } #define p 2.5 int main() { fun(); printf( "%d" , (int)p) ;return 0; } A.1 B.2 C.1.5 D.2.5 B 解析: 本题考核的是,变量名称相同时,访问作用范围小的变量,具体见题目详细讲解。 7 2. 以下库函数中能将键盘输入的一串数字字符串转换为int类型数据的库函数是______。 A.scanf B.gets C.getchar D.gerch A 解析:通过scanf(“%d”,变量内存地址) 可以实现将键盘输入的一串数字字符串转换为int类型数据,gets用于给字符数组赋值,getchar用于给字符变量赋值 。 4 3. 已有声明"int a[5],*b=a,(*c)[3],*d[3];",以下表达式中有语法错误的是____。 A. a[0]=0 B. b[0]=0 C. c[0]=0; D. d [0]=0 C 解析: 变量声明中 int (*c)[3]的含义是声明一个变量c,指向一块内存空间,这块内存空间中只能存放行地址的内存编号,具体见视频讲解。 10 4. 已知a和b为参加某逻辑运算的两个操作数,该逻辑运算规则为当且仅当a、b中只有一个为真时结果才为真,其他情况下结果均为假。以下用于表示该逻辑运算的表达式是____。 B.a&&!b C.(a&&b) &&!(a||b) D.(a||b) &&! (a&&b) D 解析: 可以分别采用当a=1,b=1或a=0,b=0或a=1,b=0或a=0,b=1时带入公式计算,只有D选项符合题目要求。 3 5. 执行语句”fp=fopen(“my.dat”,”r+”);”后,程序对文件my.dat中数据的读写操作权限为_______。 A. 只读 B. 只写 C. 可读且可覆盖写 D. 可读且可追加写 C 解析:只读通过r实现,只写通过w实现,通过r+实现对数据进行读且可覆盖写, 可读且可追加写通过a或a+实现 。 13 6. 以下程序运行时,输出结果中第一行是____________ ,第二行是____________ 。 #include<stdio.h> int main() { int n,s=0,t=1; for(n=1;n<=3;n++) t=t*n,s=s+t; printf( "%d\n%d" , t,s ) ; return 0; } 6@9 解析: 因文字解析不如视频讲解清晰,具体见视频详细讲解。 6 7. 以下程序运行时,输出结果中第一行是____________ , 第二行是____________ ,第三行是____________ 。 #include <stdio.h> int funp(int m ) { int i; for(i=2;i<=m/2;i++) if(m%i==0)return 0; return 1; } int guess(int a[][3],int m,int n ) { int i,k,j,t=0; if(m%2)m++; for(i=m;i<=n;i+=2) { for(k=3;k<=i/2;k+=2) if(funp(k)) { j=i-k; if(funp(j)) { a[t][0]=i;a[t][1]=k;a[t][2]=j; t++; break; } } } return t; } int main() { int a[100][3],i,k; k=guess(a,6,10); for(i=0;i<k;i++) printf("%3d%3d %3d\n ",a[i][0],a[i][1],a[i][2]); return 0; } 6 3 3@8 3 5@10 3 7 解析: 因文字解析不如视频讲解清晰,具体见视频详细讲解。 7 8. 以下程序运行时,输出结果中第一行是_____________,第二行是______________。 #include<stdio.h> int strmerge(char *a,char *b,char *c) { int i=0,j=0,k=0; char t; while(a[i]!='\0' && b[j]!='\0') { if(a[i]==b[j]) t=a[i],i++,j++; else if(a[i]<b[j]) t=a[i++]; else t=b[j++]; if(k==0) c[k++]=t; else if(t!=c[k-1]) c[k++]=t; } while (a[i]!='\0') { if(k==0) c[k++]=a[i]; else if(a[i]!=c[k-1]) c[k++]=a[i]; i++; } while(b[j]!='\0') { if(k==0) c[k++]=b[j]; else if(b[j]!=c[k-1]) c[k++]=b[j]; j++; } c[k]='\0'; return i+j-k; } int main() { int n; char s1[10]="ccp",s2[10]="oppy",s3[20]; n=strmerge(s1,s2,s3); puts(s3); printf("%d",n); return 0; } copy@3 解析: 因文字解析不如视频讲解清晰,具体见视频详细讲解。 7 9. 以下程序运行时,输出结果中第一行是_______,第二行是____________,第三行是________。 以下程序运行时,输出结果中第一行是,第二行是,第三行是。 #include<stdio.h> struct node { int d; struct node *next; }; int copylist( struct node *head ,int x[]) { int data,k=0; struct node *pk,*pj,*pm,*pn; while(head!=0) { pk=head; data=pk->d; pn=pk; while(pk->next!=0) { pj = pk->next; if(pj->d < data) { data=pj->d; pm=pk; pn=pj; } pk=pj; } x[k++]=pn->d; if(pn!=head) pm->next=pn->next; else head=pn->next; } return k; } int main() { int n,i,b[10]; struct node a[]={{4},{2},{3}},*head=a; a[0].next=a+1;a[1].next=a+2; n=copylist(head,b); for(i=0;i<n;i++) printf("%d\n",b[i]); return 0; } 2@3@4 解析: 因文字解析不如视频讲解清晰,具体见视频详细讲解。 11 1(完善程序): 【要求】 1.打开T盘中文件myf0.c,按以下程序功能完善文件中的程序。 2.修改后的源程序仍保存在T盘myf0.c文件中,请勿改变myf0.c的文件名。 【程序功能】 已知方程x2-3x+2=0在区间[0,1.5]内有一实根。以下程序中函数root为递归函数,采用二分法(半分区间法)求方程f(x)=0在区间[a,b]内的一个近似实根x。当|f(x)|<10-8时,x即为所求的近似实根。 【测试数据与运行结果】 输出:One root is 1.000000 【待完善的源程序】 #include <stdio.h> #include<conio.h> #include <math.h> double f ( double x ) { return x*x-3*x+2; } double root ( double a,double b ) { double m= 【1】 ,x=0 ; if(fabs(f(m))<1e-8) x= 【2】 ; else { if( 【3】 *f(m)>0 ) a=m; else b=m; x=root( 【4】 ); } return x ; } int main() { printf("One root is %lf",root(0,1.5)); getch(); return 0; } 2(改错题): 【要求】 1.打开T盘中文件myf1.c,按以下程序功能改正文件中程序的错误。 2.可以修改语句中的一部分内容,调整语句次序,增加变量声明或预处理命令,但不能增加其他语句,也不能删去整条语句。 3.修改后的源程序仍保存在T盘myf1.c文件中,请勿改变myf1.c的文件名。 【程序功能】 以下程序中函数sort的功能是对a指向的数组中前n个元素作如下处理: (1)若数组元素值的十进制表示不足四位,则取原数加上十进制数1000作为该元素的值,若超过四位数则取其低三位数加上十进制数1000作为该元素的值,否则其值保持不变。 (2)按每个数组元素值的十进制表示中的高两位数升序排序;如果高两位数相等,则按低两位数降序排序。 【测试数据与运行结果】 测试数据: 7115,5405,505,810,7108,9016,9005,3412,13511,4509 输出: 1511 1505 1810 3412 4509 5405 7115 7108 9016 9005 【含有错误的源程序】 #include <stdio.h> #include<conio.h> #define N 10 void sort(int a[],int n); int main() { int i; int a[n]={7115,5405,505,810,7108,9016,9005,3412,13511,4509}; sort(a,N); for(i=0;i<N;i++) printf((i+1)%5 ? "%7d":"%7d\n",a[i]); getch(); return 0; } void sort(int a[], int n) { int i,j,k,x; for(i=0;i<n;i++) { if(!(1000<=a[i]<=9999)) a[i]=1000+a[i]%1000; } for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n-1;j++) if((a[k]/100)>(a[j]/100)) k=j; else if(a[k]/100=a[j]/100&&a[k]%100<a[j]%100) k=j; if (k!=i) x=a[i],a[i]=a[k],a[k]=x; } } 3(编程题): 【要求】 1.打开T盘中文件myf2.c,在其中输入所编写的程序。 2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 3.请勿改变myf2.c的文件名。 【程序功能】 统计字符串中出现的不同英文字母(不区分大小写)各自出现的次数。 【编程要求】 1.编写函数int tongji(char x[],char a[],int c[])。函数功能是统计仅在x指向的字符串中出现的不同英文字母各自出现的次数(字母不区分大小写),按字典序依次将字符串中出现的字母保存到a指向的数组中,将每个字母出现的次数对应保存到c指向的数组中,函数返回字符串中出现的不同字母的数量。 2.编写main函数。函数功能是声明3个一维数组并用测试字符串初始化其中一个数组,用3个数组作实参调用tongji函数,将统计结果输出到屏幕及文件myf2.out 中。最后将考生本人准考证号输出到文件myf2.out中。 【测试数据与运行结果】 测试字符串:“Good Lucky” 输出: C: 1 D: 1 G: 1 K: 1 L: 1 O: 2 U: 1 Y: 1 #include <stdio.h> int tongji(char x[],char a[],int c[]) { int i=0,k=0; char b; while(x[i]) { if(x[i]>='A' && x[i]<='Z') { b=x[i]; c[b-65]++; } if(x[i]>='a' && x[i]<='z') { b=x[i]; c[b-65-32]++; } i++; } for(i=0;i<26;i++) { if(c[i]>0) { a[k]=i+65; c[k]=c[i]; k++; } } return k; } int main() { FILE *fp; int k,i; char x[]="Good Lucky"; char a[26]; int c[26]={0}; fp=fopen("myf2.out","w+"); if(fp==NULL) { printf("ERROR"); return 0; } k=tongji(x,a,c); for(i=0;i<k;i++) { printf("%c:%d\n",a[i],c[i]); fprintf(fp,"%c:%d\n",a[i],c[i]); } fprintf(fp,"My Exam Number is 001122"); fclose(fp); return 0; } #include <stdio.h> int tongji(char x[],char a[],int c[]) { int i=0; int k=0; char b; char a1[26]={0}; int c1[26]={0}; while(x[i]) { if(x[i]>='A' && x[i]<='Z' || x[i]>='a' && x[i]<='z') { b=x[i]; if(x[i]>='a' && x[i]<='z') { b=x[i]-32; } a1[b-65]=b; c1[b-65]++; } i++; } for(i=0;i<26;i++) { if(c1[i]>0) { a[k]=a1[i]; c[k++]=c1[i]; } } return k; } int main() { FILE *fp; char x[]="Good Lucky"; char a[26]={0}; int c[26]={0}; int i,k; fp=fopen("myf2.out","w+"); k=tongji(x,a,c); for(i=0;i<k;i++) { printf("%c:%d\n",a[i],c[i]); fprintf(fp,"%c:%d\n",a[i],c[i]); } fclose(fp); return 0; } |