2013 c语言试题及答案
- 格式:doc
- 大小:64.50 KB
- 文档页数:13
计算机学院2012-2013学年第2学期C语言程序设计考试试卷A卷(或B卷): A卷闭卷(或开卷):闭卷考试时间:2013年 7 月 5 日专业班级学号学生姓名题号一二三四五六七总分核对人题分10 10 10 10 20 20 20 100得分注意:试卷后面附有运算符的优先级和结合性表。
一、单项选择题(在下面每小题的A、B、C、D四个选项中,只有一个选项得分评卷人是正确的,请选择正确的选项并填写到括号内,选择正确得分。
本大题共10小题,每小题1分,共10分。
)1、以下为正确的标识符是【】A、forB、u.3C、3cD、DO2、以下为合法的整型常量是【】A、-1UB、01111001BC、ffffD、01383、下列数据中属于字符串常量的是【】A、'a'B、"a"b"c"C、'123'D、"a\"b\"c"4、表达式-a+++b中记号(token)的个数是【】A、3个B、4个C、5个D、6个5、 -3的16位补码是【】A、0xfffdB、0x1011C、0x7ffdD、0x00036、以下为正确的转义字符是【】A、'\'B、'\\'C、'\0x12'D、'\0f1'7、设有声明:enum {U,V,W=0,X,Y=0,Z} a; 则值为1的枚举常量的个数是【】A、1个B、2个C、3个D、4个8、设有声明: 【】union U{ long a; short b; char c; char s[20];} v={0x01020304},*p=&v;则下列选项正确的是A、printf("%d\n",sizeof(v))输出4B、printf("%d\n",p->s[0])输出4C、printf("%d\n",v.c)输出1D、printf("%x\n",v.b)输出1029、设有声明和语句:FILE *fp; fp=fopen("c:\\abc.dat","r+"); 【】则下列选项正确的是A、打开文件的文件名为\abc.datB、打开的是二进制文件C、打开的是文本文件D、打开的文件只能进行读操作10、设有如下代码片段:【】int a[]={1,2,3,4,5},i;char *p=(char *)a;for(i=0;i<3;i++)printf("%d ",*((p+=sizeof(int))-sizeof(int)));printf("\n");则该代码片段的输出结果是A、1 2 3 4 5B、1 2 3C、1 1 1D、2 3 4二、 多项选择题(下面每小题的A 、B 、C 、D 备选项中,有两个或两个以上的选项是正确的,请选择正确的选项并填写到括号内。
习题答案习题1(参考答案)1.计算的本质是什么?计算的本质就是基于规则的符号串变换。
2.三大科学思维是指什么?理论思维、实验思维、计算思维3.什么是计算思维?计算思维的基本特征有哪些?计算思维是指运用计算机科学的思想、方法和技术进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。
从计算科学的角度分析,计算思维包括6个方面的特征:抽象性、数字化、构造性、系统化、虚拟化和网络化。
4.什么是算法?算法的基本特征有哪些?算法(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。
通俗地讲,就是计算机解题的步骤。
一个算法应该具有以下五个重要特征。
(1)有穷性:一个算法必须保证执行有限步之后结束。
(2)确定性:算法的每一步骤必须有确定的定义。
(3)输入:一个算法有0个或多个输入,以刻画运算对象的初始情况。
0个输入是指算法本身给定了初始条件。
(4)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
(5)可行性:算法上描述的操作在计算机上都是可以实现的。
5.算法的复杂度分为哪两种?算法的复杂性用复杂度来说明,分为时间复杂度和空间复杂度。
时间复杂度:执行该算法所需要的计算工作量,一般用所需基本运算的执行次数来度量。
空间复杂度:执行该算法所需的内存空间,一般用算法程序本身占的空间+输入的初始数据占的空间+算法执行过程中所需的额外空间的总和来表示。
6.什么是程序?程序与算法的区别是什么程序是为了实现特定目标或解决特定问题而用计算机语言编写的指令序列,它由算法和数据结构组成。
算法与程序的区别:计算机程序是算法的一个实例,同一个算法可以用不同的计算机语言来表达。
7.简述程序设计语言发展的过程。
计算机程序设计语言从最初的机器代码到今天接近自然语言的表达,经过了四代演变。
一般认为机器语言是第一代,符号语言即汇编语言为第二代,面向过程的高级语言为第三代,面向对象的高级语言为第四代。
参考答案第一套题二、程序填空题本题是根据给定的公式来计算函数的值。
第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。
第二处:当i等于1时,则返回f1函数的值,所以应填:f1。
第三处:如果i不等于1,则返回f2函数的值,所以应填:f2。
三、程序修改题解题思路:第一处: 试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t)第二处: 取字符串指针ss的下一个位置,所以应改为:ss++;。
第三处:取字符串指针tt的下一个位置,所以应改为:tt++;。
四、程序设计题解题思路:本题是考察字符串的操作。
1. 由于函数fun1是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串。
2. 利用循环for语句来操作多少个字符(m)需要循环左移。
参考答案:void fun(char *w, int m) /* 可调用fun1函数左移字符*/{int i;for(i = 0 ; i < m ; i++) fun1(w);}第二套题一、选择题解题思路:第一处:计算好的平均值通过形参av返回,所以应填:*av。
第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。
第三处:返回该数,所以应填:x[j]。
三、程序修改题解题思路:第一处:函数的返回是浮点型数,所以应改为:float fun(int n)。
第二处:for的终止条件应是i<=n。
四、程序设计题解题思路:本题是利用两重循环给二维数组右上三角元素中的值乘以m。
参考答案:int fun ( int a[][N], int m ){int i, j;for(i = 0 ; i < N ; i++)for(j = i ; j < N ; j++)a[i][j] *= m ;}第三套题一、选择题解题思路:第一处:如果n是奇数,则中间的元素不动,所以应填:1。
习题答案习题2(参考答案)一、选择题二、填空题习题 3 (参考答案)1.编程实现:用字符输入/输出函数输入3个字符,将它们反向输出。
参考代码(尽量运用本章所学知识)#include <stdio.h>main( ){ char c1,c2,c3;c1=getchar(); c2=getchar(); c3=getchar();putchar(c3); putchar(c2); putchar(c1);}2.编程实现:用格式输入/输出函数输入3个字符,将它们反向输出并输出它们的ASCII值。
参考代码(尽量运用本章所学知识)#include <stdio.h>main( ){ char c1,c2,c3;scanf ("%c%c%c", &c1, &c2, &c3) ;printf("%c %d,%c %d,%c %d ", c3,c3,c2,c2,c1,c1) ;}3.变量k为float 类型,调用函数:scanf("%d", &k);不能使变量k得到正确数值的原因是:scanf("%d", &k);中的格式控制类型与变量k的定义类型不匹配,应将%d改为%f.4. (略)习题4答案一选择题1-20 DBDCA CBDDA ACABC BCBBC二、写出下列程序的运行结果1. z=362. 20 03. 124. 48,485. 136. 02三编程题(参考答案)1.输入4个整数a,b,c,d,编写程序,将它们按从大到小顺序输出。
#include<stdio.h>main(){ int a,b,c,d,t;scanf("%d%d%d%d",&a,&b,&c,&d);if(a<b) {t=a;a=b;b=t;}if(a<c) {t=a;a=c;c=t;}if(a<d) {t=a;a=d;d=t;}if(b<c) {t=b;b=c;c=t;}if(b<d) {t=b;b=d;d=t;}if(c<d) {t=c;c=d;d=t;}printf("%4d%4d%4d%4d",a,b,c,d);}2.据所输入的3条边长值,判断它们能否构成三角形,如能构成,再判断是等腰三角形、直角三角形还是一般三角形?源程序:#include<stdio.h>#include "math.h"main(){float a,b,c,s,area;scanf("%f%f%f",&a,&b,&c);if((a+b>c)&&(a+c>b)&&(b+c>a)&&(fabs(a-b)<c)&&(fabs(a-c)<b)&&(fabs(b-c )<a)){if(a==b&&b==c)printf("等边三角形");else if(a==b||b==c||a==c)printf("等腰三角形");else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))printf("直角三角形");else printf("一般三角形");}else printf("不能组成三角形");}3.输入一个整数,如果能被3,4,5同时整除,则输出“YES”,否则输出“NO”。
2012—2013学年第2学期《程序设计语言(C)》考试试卷专业班级姓名学号开课系室计算机应用技术系考试日期一.选择题1.以下说法中正确的是(C)A.总是从第1个函数开始执行B.要调用的函数必须在函数main中定义C.总是从函数main开始执行D.函数main必须放在程序的开始部分2.下列为字符常量的是( C )A."a" B.'ab' C.'\n' D.'\084'3.在C语言中,下面字符串能用作变量名的是( D )A.a+b B.auto C.2-and D.a24.在C语言中运算对象必须是整型的运算符是( A )A.% B./ C.== D.<=5.int x=10, y=3, z;则语句printf("%d\n", z=(x%y,x/y));的输出结果为( D )A.1 B.0 C.2 D.36.表达式( A )的值是整数类型A.15/2 B.15/2+2.0 C.25/5.0 D.0.5*107.若double x=2, y;则执行y=x+3/2;后,y的值是( B )A.3.500000 B.3.000000 C.2.000000 D.38.C语言程序的基本单位是( C )A.程序行B.语句C.函数D.字符9.设int类型的数据长度为2字节,则int类型数据的取值范围是( B )A.0~255 B.-32768~32767 C.-256~255 D.0~65535 10.语句int (*p)()的含义是( C )A.p是一个指向一维数组的指针变量B.p是指针变量,它指向一个整型数据的指针C.p是一个指向函数的指针,该函数的返回值为整型D.以上答案都不对11.main(){ int x=10, y=10; printf("%d,%d\n", x--,y--); }的结果是( A )A.10,10 B.9,9 C.9,10 D.10,912.( A )是C语言的标准函数名A.scanf B.case C.while D.int13.下面程序的输出结果是( D )main(){ int i=10;switch(i){case 9: i+=1;case 10: i+=1;case 11: i+=1;case 12: i+=1;}printf("i=%d\n", i);}A.10 B.11 C.12 D.1314.以下定义语句中,错误的是( D )A.int a[]={ 1, 2 }; B.int a[][3]={ 1, 2, 3, 4, 5 };C.char s[10]= "test"; D.int n=5, a[n];15.在一个源文件中定义的全局变量的作用域为(B)A.本文件的全部范围B.从定义该变量开始至本文件结束C.本函数的全部范围D.本程序的全部范围16.int型变量在内存中占4个字节,若int a[10]={ 0 , 2, 4 };则数组a所占字节数是( C )A.3 B.10 C.12 D.4017.#include <string.h>main(){ char a[7]="China";int i=sizeof(a), j=strlen(a);printf("%d %d\n", i,j);}的结果是( C )A.5 5 B.7 6 C.7 5 D.6 618.下面程序运行时,如果从键盘上输入5,结果是( B )main(){ int x;scanf("%d",&x);if(x--<5) printf("%d\n", x);else printf("%d\n", x ++);}A.3 B.4 C.5 D.619.若有以下说明和语句,且已知char型占1个字节,int型、float型占4个字节。
全国计算机等级考试二级C语言真题2013年9月(总分:100.00,做题时间:90分钟)一、选择题(总题数:40,分数:40.00)1.一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是______。
(分数:1.00)A.12345ABCDEB.EDCBA54321 √C.ABCDE12345D.54321EDCBA解析:[解析] 栈是按照先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B。
2.下列叙述中正确的是______。
(分数:1.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定的√解析:[解析] 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B与C错误。
3.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是______。
(分数:1.00)A.O(n)B.O(n2)C.O(log2n) √D.0(nlog2n)解析:[解析] 当有序线性表为顺序存储时才能用二分法查找。
可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次。
4.下列叙述中正确的是______。
(分数:1.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的√B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间解析:[解析] 链式存储结构既可以针对线性结构也可以针对非线性结构,所以B与C错误。
c语言真题-试卷答案及解释(2013年3月)一、选择题(1)B 【解析】N-S图是由Nassi 和Shneiderman 提出的一种符合程序化结构设计原则的图形描述工具。
它的提出是为了避免流程图在描述程序逻辑时的随意性上灵活性。
(2)D 【解析】结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用goto语句,总的来说可使程序结构良好、易读、易理解、易维护。
(3)B【解析】模块的独立程度可以由两个定性标准度量:耦合性和内聚性。
耦合性是衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚性是衡量一个模块内部各个元素彼此结合的紧密程度。
一般来说,要求模块之间的耦合尽可能地低,而内聚性尽可能地高。
(4)D 【解析】需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。
选项A)软件开发方法是在总体设计阶段需完成的任务;选项B)软件开发工具是在实现阶段需完成的任务;选项C)软件开发费用是在可行性研究阶段需完成的任务。
(5)A 【解析】算法具有5个特性:①有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;⑤输出:一个算法有一个或多个输出。
(6)D 【解析】在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都为n(n-1)/2,堆排序需要的比较次数为nlog2n。
(7)B 【解析】由栈"后进先出"的特点可知:A)中e1不可能比e2先出,C)中e1不可能比e2先出,D)中栈是先进后出的,所以不可能是任意顺序。
2013年浙江省c语言二级考试试卷及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的关键字?A. intB. IntegerC. INTD. integer答案:A2. C语言中,一个整型变量占用的字节数是多少?A. 1B. 2C. 4D. 8答案:C3. 下列哪个选项不是C语言中的控制语句?A. ifB. switchC. forD. case答案:D4. C语言中,哪个函数用于计算字符串的长度?A. strlen()B. strlength()C. length()D. strleng()答案:A5. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable2C. _variableD. variable-2答案:B6. C语言中,哪个运算符用于计算两个数的和?A. +B. -C. *D. /答案:A7. C语言中,哪个函数用于将字符串连接到另一个字符串的末尾?A. strcat()B. strjoin()C. strappend()D. strconcat()答案:A8. C语言中,哪个函数用于将字符串从大写转换为小写?A. tolower()B. toupper()C. strlower()D. strupper()答案:A9. C语言中,哪个函数用于输出格式化的字符串?A. printf()B. sprintf()C. fprintf()D. scanf()答案:A10. C语言中,哪个函数用于计算两个浮点数的差?A. fabs()B. fmod()C. diff()D. subtract()答案:B二、填空题(每题2分,共20分)1. 在C语言中,定义一个整型数组时,数组的下标从____开始。
答案:02. C语言中,使用____运算符可以对变量进行自增操作。
答案:++3. C语言中,使用____函数可以获取当前时间。
答案:time()4. C语言中,使用____函数可以打开一个文件。
理论考试(120分钟)一、单项选择题(在每小题的4个备选答案中,选出一个最佳答案,共15小题;每小题2分,共30分)1.一个C程序的执行是从( A)A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束2.已知int x=10,y=20,z=30; 以下语句执行后x,y,z的值是( B) if (x>y) z=x; x=y;y=z;A. 10,20,30B. 20,30,30C. 20,30,10D. 20,30,20 3.int a=1,b=2,x=3; 表达式:x*=a+b计算后x的值为:( B )A. 5B. 9C. 3D. 64.下列选项,在C语言中能作为合法标识符的是( D)A. %xB. a+bC. 2_int_12_D. int_2_5.#include<stdio.h> (A)void main(){int sum,pad;sum=pad=5;pad=sum++;pad++;++pad;printf("%d %d\n",pad, sum);}A.7 6B. 6 5C. 7 5D. 6 6 6.若有说明:int a[10];则对a 数组元素的正确引用是( D )A. a[10]B. a[3, 5]C. a(5)D. a[10-10] 7.请读程序#include<stdio.h>#define MUL(x,y) (x)*yvoid main(){ int a=3, b=4, c;c=MUL(a++, b++);printf("%d\n", c);}上面程序的输出结果是(A)。
A. 12B. 15C. 20D. 168.若用数组名作为函数调用的实参,传递给形参的是数组的( A )A. 数组的首地址B. 数组第一个元素的值C. 数组中全部元素的值D. 数组元素的个数9.阅读以下程序void main(){ int a=5,b=0,c=1;if(a=b+c) printf(“***\n”);else printf(“$$$\n”);}以上程序( C)A. 语法有错不能通过编译B. 可以通过编译但不能通过连接C. 输出***D. 输出$$$10.下列关于函数定义正确的是( D )A. fun(int x,y){ int z;return z;}B. void fun(int x,int y){ return x+y;}C. fun(x,y){int x,y;double z;z=x+y;return z;}D. double fun(int x,int y) { double z;z=x+y;return z;}11.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B )A. 地址传递B. 单向值传递C. 由实参传给形参,再由形参传回实参D. 传递方式由用户指定12.具有相同基类型的指针变量P和数组Y,下列写法中不合法的是( D ) A.P = Y B.*P = Y[i]C.P = &Y[i] D.P = &Y13.设x和y均为int型变量,则下列语句:x+=y; y=x-y; x- =y;的功能是(D ) A.把x和y按从大到小排列。
B.把x和y按从小到大排列。
C.无确定的结果。
D.交换x和y中的值14.若已定义:char s[10];则在下面表达式中不表示s[1]的地址的是( B )A. s+1B. s++C. &s[0]+1D. &s[1]15.以下定义语句中,错误的是( D)A. int a[]={1,2};B. char *a[3];C. char s[10]="text";D. int n=5, a[n];二、完善程序(本大题5小题,每空1分,共10分)1.下面程序是将一个字符串的内容颠倒过来,请补充完整程序。
#include <stdio.h>#include <string.h>void change(char str[]) (1) /*函数头*/{int len ,i , j;char c;len=strlen(str);for (i=0,j=len-1;i<len/2;i++,j--){c=str[i];str[i]=str[j] (2) ;str[j]=c;}}void main(){char str[80];printf("Enter string:");gets(str);change(str);printf("\n result is: %s\n",str);}2.输入一个整数,并在数组中查找这个数。
如果找到这个数,就将对应元素的取值改变为它的相反数。
void main(){ int i,x,a[]={3, 5, 8, 2, 5, 7, 9, 4};scanf("%d", &x); /*输入所要查找的数,并把这个数赋值给x*/for(i=0;i<8;i++ ) /*在数组中查找这个数*/if( a[i]==x)a[i]=-x;}3.用折半查找法填空(需要查找的数为m):int binary(int a[10],int m){ int low=0,high=9,mid;while(low<=high){ mid=(low+high)/2;if(m<a[mid]) mid=high (5) ;else if(m>a[mid]) mid=low (6) ;else return(mid);}return(-1);}4.下面程序是判断输入的字符串是否是回文(顺读和倒读都一样的字符串称为回文),请完成程序。
void main( ){ char s[81],*p1,*p2;int n; gets(s); n=strlen(s);p1=s; p2= s[n-1] ;while(p1<p2 ){ if(*p1!=*p2) break;else{p1++ ; p2-- (8) ;}}if(p1<p2) printf("No\n");else printf("Yes\n");}5.下面程序由终端键盘输入字符,存放到文件中去,用!结束输入。
完善程序。
#include "stdio.h"void main(){ FILE *fp;char ch,fname[10];printf("Input name of file\n"); gets(fname);if((fp=fopen(fname,"w"))==NULL){ printf("cannot open this file!\n");exit(0);}printf("Enter data:\n");while( (ch=getchar()) !='!')fputc( ch,fp );fclose(fp);}三、读程序写结果(本大题5小题,每题4分,共20分)1.以下程序的输出结果是 2 1 4 3 。
void fun(int *x, int *y){printf(“%d %d”, *x, *y);*x=3;*y=4;}void main( ){ int x=1,y=2;fun(&y, &x);printf(“%d %d”, x, y);}2.以下程序的输出结果是 2 4 9 。
#include <stdio.h>int fun(int n){static int f=1;int m=2;f=f*n;m++;return (f+n);}void main( ){int i;for(i=1;i<=3;i++)printf("%d ", fun(i) );}3.若输入的值是-125,以下程序的运行结果是-125= -5*5*5。
#include "math.h"void main(){ int n; scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}fun(int n){ int k,r;for(k=2;k<sqrt(n);k++){ r=n%k;while(r==0){ printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0 1 3 6 。
#include <stdio.h>void main(){ int i, k ;for(i=0;i<4;i++){ k=sub(&i);printf("%3d",k);}printf("\n");}int sub(int *s){ static int t=0;t=*s+t ; return t;}5.以下程序段的输出结果是70 ,10 。
#include "stdio.h"struct sp{ int a;int b;}*p ,*q;struct sp t[3]={70, 10,80, 20,90, 30};void main(){ p=t;q=p++;printf("%d, %d ",q->a, q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。
(简单,自己写)#include<stdio.h>void main(){int score[10],i,j=0,sum=0;float avg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d ",score[i]);j++;}sum+=score[i];}avg = sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。