c语言试题月考2012年9月_第1页
c语言试题月考2012年9月_第2页
c语言试题月考2012年9月_第3页
c语言试题月考2012年9月_第4页
c语言试题月考2012年9月_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机应用类专业2012年9月份月考C语言试题一、选择题( 5分*10=50分)1、运行以下程序的输出结果是( D )main( ) int x=10,y=10,i;for( i=0;x>8;y=+i)printf("%d %d",x-,y);A、10 1 9 2 B、9 8 7 6 C、10 9 9 0 D、10 10 9 1【解析】 本题中变量x值的变化取决于自增运算符,而变量y值的改变取决于循环语句表达3中变量i的变化,也就是执行循环体后再改变y的值。但最后一轮由于条件不满足而不输出y值。 循环次 数xy执行输出语句后x的值变量i的值执行表达3后y的值11010

2、90à110à129181à21à22、运行以下程序的输出结果是( B )main( ) int y=18,i=0,j,a8; do ai=y%2; i+;y=y/2;while(y>0);for( j=i-1;j>=0;j-)printf("%d",aj);printf("n"); A、10000 B、10010 C、00110 D、10100【解析】 本题中包含两个循环语句,do语句是分别给数组元素赋值,得a0=0,a1=1,a2=0,a3=0,a4=1,结束后变量i的值变为5。再执行for语句时是

3、采用由后到前输出数组元素的值。3、已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( D )(注:<CR>表示回车、表示空格) int a1,a2; char c1,c2; scanf(“%d%d”,&a1,&a2); scanf(“%c%c”,&c1,&c2); A)1020AB<CR> B)1020<CR> AB<CR> C)10 20 AB<CR> D)1020AB<CR>4、设x 和y均为int 型变量,

4、则执行以下循环后, y 的值为(C)#include "stdio.h"main() int x,y;for (y=1,x=1;y<=50;y+) if(x>=10) break; if(x%2=1) x+=5; continue; x-=3; printf("%d",y);A、2 B、 4 C、6 D、10【解析】根据程序可知,程序每次循环状态如表所示循环次数本次循环开始时的x的值本次循环结束时的x的值执行一轮循环后变量y的值116226333384485555106循环执行到第6次时,由于x10所以退出循环。因此本题答案为C5、运行以下程

5、序的输出结果是( A )#include< stdio.h>void main( ) char s16="123450ttt" printf("%d %dn",strlen(s),sizeof(s);A、 5 16 B、 9 16 C、 5 13 D、 13 16【解析】本题主要考查字符串处理函数strlen( ),sizeof( ),strlen( )是长度测试函数,在测试过程中如遇到字符串结束标志符时自动停止读取,题中第6个字符为字符串结束标志符就停止,所以有效字符数为5。sizeof( )函数是求某一数据类型所占的内存空间的长度,此题中

6、测试的是字符数组s所占内存空间的长度,而数组s的长度在定义时已明确指出为16,所以sizeof( )测出的值是16。所以本题答案为A。6、运行以下程序的输出结果是( B )#include< stdio.h>void main( ) int i,a10=0,1,2,3,4,5,6,7,8,9;for(i=1;i<9;i+) ai=ai-1+ai+1;printf("%d%d",a5,a7); A 、1014 B、 2035 C、 812 D、 2744【解析】本题主要考查数组元素的算术运算与其值的变化特点。循环次数控制变量i值的值数据元素ai的值11a1=

7、a0+a2=222a2=a1+a3=533a3=a2+a4=944a4=a3+a5=1455a5=a4+a6=2066a6=a5+a7=2777a7=a6+a8=3588a8=a7+a9=44循环到第8次后,变量i的值变为9,不符合条件,退出循环。根据表格所示本题答案为B。7、以下程序的输出结果是( A ) main( ) int n=4;while(n-) printf("%d ",-n);A、2 0 B、3 1 C、3 2 1 D、2 1 0【解析】本题考查while循环语句和自减运算符的运用。由程序段可知,循环的控制表达式while(n-)中,n相当于while(n)

8、 n-;所以每循环一次,n值减1,n值的变化是 4,3,2,1,0。但由于在printf("%d ",-n);语句中又存在-n的变化,所以程序中n的变化实质是每循环一轮其值递减2,即4à2à0,当n变为0时while(n)条件不满足,退出循环。8、若变量a,i已正确定义,且i已正确赋值,合法的语句是( B )。A)a=1 B)+i;C)a=a+=5;D)a=int(i)【解析】本题考查C语言语句的特点,C语言中语句的结束是以“;”为标志。由此可排除选项A和D。其二常数不可以赋值给一个表达式也不可以常量赋给常量,由此可排除选项C。故答案为B。9、运行以下程

9、序的输出结果是(C)#include<stdio.h>void main() char i,s5="abc","defgh","ijk","xyz"for(i=1;i<3;i+)printf("%sn",si);A abc B defgh C defghijk D defghijk defgh ijk ijk xyz ijk【解析】此题考查字符串数组的含义,字符串数组实质是数组中每一个元素又都是存放一个字符串的数组,所以可以将一个字符数组视为一个二维字符数组。其中的元素按行占连

10、续的存储单元,且其中有些存储单元是空闲的,各字符串并不是一串连着一串存放,总是从每行的第0个元素开始存放一个新的串。此题中第二行由于数组长度刚好与字符个数相等,即长度不够,则字符串结束标志符'O'未能存入s中,而是存在s数组之后的一个单元里,所以本题的存放形式如图示。S0abc0S1defghS2ijk0S3xyz0题中使用了printf()函数的"s"格式符来输出字符串,实现时从数组的第一个字符开始逐个字符输出,直到遇到第一个'0'为止(其后即使还有字符亦不输出)。是开始输出否结束输入K<N是否10、某店一个月的收入和支出总共记录了

11、N个数据,。,其中入记为正数,支出记为负数。该店用右边的程序框图计算月总收入S和月净盈利V,那么在图中空白的判断框和处理框中,应分别填入下列四个选项中的( C )(A)A0,VST(B) A0,VST (C) A0, VST (D)A0,VST 【解析】月总收入为S,因此A0时归入S,判断框内填A0,支出T为负数,因此月盈利VST。二、填空题(4分*5=20分)1、有int a=3,b=4,c=5,x,y;,则以下表达式的值为 0 。! (x=a)&&(y=b)&&0【解析】对于C语言中逻辑表达式有且只有“1”和“0”两个逻辑值,在运算过程中按从左至右的顺序进行

12、运算,但要考虑运算符的优先级别。2、以下程序对输入两个整数,按从大到小顺序输出.请在 内填入正确内容.main() int x,y,z;scanf(“%d,%d”,&x,&y);if ( x<y ) z=x; x=y;y=z; pringf(“%d,%d”,x,y);【解析】本题是要求按从大到小的顺序输出,程序中的z是用来交换x,y的中间变量,根据后一空中z=x;可知只有当x的值小于y的值时才会进行交换。3、以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。请填空。sub(int k,int n) int a1,a2;a2= k%10; a2=

13、 k%10 ; a2=k/10 ;a1= k/10; a2=(k-a2)/10; a2=k-a2*10 ;if(k%3=0 &&a2=5)|(k%3=0&&a1=5) printf("%d",k);n+;return n;else return -1;main()int n=0,k,m;for(k=10;k<=99;k+) m=sub(k,n);if(m!=-1) n=m;printf("nn=%d",n);【解析】本程序是要求选出能被3整除且至少有一位是5的两位数,根据这一特点就说明要成立必须包含两个方面(1)能被

14、3整除;(2)其中个位或者十位上有个数字5且同时成立,题中if语句中的条件中包含的第一个方面,所以只需从这个两位数中分别分离出个位或十位与其结合就可以。n=6三、阅读程序写结果(5分*5=25分)1、#include<stdio.h>void main()3,1 4,3 2,4 1,2int x,y,z;x=y=2;z=3;y=x+-1;printf("%d,%dt",x,y);y=+x-1;printf("%d,%dt",x,y);y=z- +1;printf("%d,%dt",z,y);y=-z+1;printf(&q

15、uot;%d,%dt",z,y);【解析】本题主要考查自增与自减运算符的应用及变量在按顺序执行过程中其值是否发生改变,变量的值一经改变必须使用改变后的值进行下一步的运算,同时一定要考虑其输出格式。4,7,102、#include< stdio.h>void main( ) int i,a34=1,2,3,4,5,6,7,8,9,10,11,12;for( i=0;i<3;i+)printf( "%d,",ai3-i);【解析】此题主要考查二维数组中的元素值与下标号的对应关系。3、12#include< stdio.h>void fun

16、( int x,int y,int z )z=x+y;void main( ) int a=12;f(5,6,a);printf("%dn",a);【解析】本题是考查函数参数的传递关系,题中的参数是传值的关系,所以形参的改变不会影响实参。故输出时a的值为12。4、#include< stdio.h>63void main() int i,j=3,a=1,2,3,4,5,6,7,8,9,10;for(i=0;i<5;i+) ai=i*(i+1);for(i=0;i<4;i+) j+=ai*3;printf("%d",j);【解析】本

17、题考查(1)二维数组元素与该元素下标号的对应关系;for循环语句的运行特点;题中所包含的两个for循环语句和一个输出语句这,这三条语句是并列关系而不是嵌套关系,且第一个for循环的作用是改变下标号为0,1,2,3,4的元素的值,分别对应为0,2,6,12,20,其它的元素值不变。第二个for语句是求出当变量i改变时求出变量j的值,但要注意变量j值的改变后,要用变化后的值而不能用原有的初值,同时最后只有一个值,因为每循环一次并没有输出。45、#include<stdio.h> main() int x; scanf(”%d”,&x); if(x-<5) printf(”

18、%d”,x); else printf(”%d”,x+); 程序运行后,如果从键盘输入5,则输出结果是( )【解析】本题考查双分支if结构的变化关系及自增、自减的变化特点。四、改错题(指出错误行为2分,更改正确后得3分,分值为25分)阅读程序,修改程序中的错误,不得增行和删行,也不得更改程序结构。请指出错误所在的行号,并给出该行修改后的程序代码。1、以下程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 #include <stdio.h>#include <conio.h>long fun(

19、long num)long k; do k*=num%10;num=10; while(num); return(k);main() int n; printf("Please enter a number: "); scanf("%ld", n); printf("n%ldn",fun(n);错误行:long k; 更正:long k=1;错误行:num=10; 更正:num/=10;错误行:scanf("%ld", n); 更正:scanf("%ld", &n);【解析】本题要求是“

20、计算正整数num各位上的数字之积”,所以必须要分解各位上的数字,其中求余是取个位上的数,除法是取整求出前两位数,下一轮循环再分解取整求出的前两位数。根据这一点来对照(1)求积时某一变量的初值必须为1。(2)各种运算符的写法(3)输入语句要注意什么?2、下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。 #include <stdio.h>int fun(int k) int m=0,mc=0, j; while(k>=2)&&(mc<10) if(

21、k%13=0)|(k%17=0) m=m+k;mc+; k-;(此处要加大括号) return m;void main() system("CLS"); printf("%dn ",fun(500);错误行:if(k%13=0)|(k%17=0) 更正:if(k%13=0)|(k%17=0)错误行:缺少大括号 更正:加大括号【解析】本题是“计算并输出k以内最大的10个能被13或17整除的自然数之和”,由此看出(1)在k以内能满足条件的数最多为10个;(2)求和;(3)能被13或17整除的自然数;对照这三点看if(k%13=0)|(k%17=0) m=m+

22、k;mc+;可知m是用来存储和数,mc是记录满足条件的个数,同时可以看出要整除其余数等于0,而if(k%13=0)|(k%17=0)中是赋值所以存在错误;任意函数的返回值是指整个函数运行结束后,才把值返回,所以return语句在此程序中不能位于while循环语句中。故缺少花括号。五、程序设计题(每空5分,共25分)1、下列给定程序中,函数fun的功能是:实现两个整数的交换。例如,给a和b分别输入60和65,输出为:a=65 b=60 #include <stdio.h>void fun(【 int *a,int *b 】) int t;【t=*b;*b=*a;*a=t; 】 void main()int a,b; system("CLS"); printf("Enter a, b: "); scanf("%d%d"

温馨提示

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

评论

0/150

提交评论