还剩47页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《程序设计》练习题C
一、单项选择题导读单项选择题要求从给出的四个备选答案中,选出一个最符合题意的答案在完成习题的过程中,不但要选出正确的答案,而且要清楚不正确的选项错在何处,以加深对概念的理解对于掌握不准的问题,应该通过上机实验来检验注选用普通整型数据占用个字节的编译器如2c Turbo、C
2.0Win-TC TurboC++
3.0[]以下不正确的语言标识符是L1CoA intB a_l_2C ablexeD_x[[]是正确的语言标识符是一
1.2CA#define B_123C%d D\n•••A printB iam C PxqD str_I•••_3d one_half My-book Cpp•••oodbs tart$it line#His.age pow•••aBc3pai while[]下列四组字符串中都可以用作语言程序标识符的一组是L3C[]下面各选项组中,均是语言关键字的组是
1.4CA auto,enum includeB switch,typedef,continue9C signedunion,scanf Dif,struct,type9不属于语言关键字的是[
1.
[5]C Adefault B register Cenum Dexternal语言程序从函数开始执行,所以这个函数要写在一[
1.
[6]C main程序文件的开始程序文件的最后A B它所调用的函数的前面程序文件的任何位置[]下列关于语言的叙述错误的是—C D
1.7C大写字母和小写字母的意义相同A不同类型的变量可以在一个表达式中B在赋值表达式中等号=左边的变量和右边的值可以是不同类型C同一个运算符号在不同的场合可以有不同的含义D【]在语言中,错误的类型长度为字节的常数是
1.8C int2A32768B0C037D OxAF[
1.
[9]语句printfC%x”,・l;int类型长度为2字节屏幕显示A4B1C-ffff Dffff[LIO]已知long i=32768;执行语句printf”%d”,i;屏幕显示—A-1B-32768C1D32768已知[
1.111long i=65539;执行语句printf%d”,i;屏幕显示程序不能执行A65539B-3C3D字符,选项在单引号内出现个字符,是错误的D4[
1.
[15]C[
1.
[16]D注释空字符和空格符是不同的两个字符,空格符的码值是空字符的值是ASCII32,ASCII Oo[
1.
[17]A:[
1.
[18]B[
1.
[19]A[
1.
[20]C[
1.
[21]B注释单纯从语言语法来说,选项、都是正确的,但是选项中第一个运算的两个对象都是C B C C整型常数,其结果也是整型数最后的运算结果也就是了0,0[
1.
[22]C[
1.
[23]A注释将条件表达式增加一个括号,此式变为它的运算顺序就清楚了由于条件运avba:cvdc:d,算符的结合性是从右向左,所以括号可以省略它的运算顺序是先算出右边的条件表达式“cvdc:T的值,然后求条件表达式的值aba:3:[
1.
[24]C[
1.
[25]B[
1.
[26]B注释当通过一个运算对象即可决定逻辑运算的结果时,则对另一个运算对象不做处理:[
1.
[27]D[
1.
[28]B注释数组元素在内存中按行排列,此数组的前个元素的值分别是、、表达式中虽然数组下3321,标的写法似乎每行有个元素,和定义时的行列不一致,但是语言引用数组元素时是根据数332C组的首地址和给出的下标进行运算决定元素的地址题中表达式引用了数组前个元素3:[
1.
[29]A[
1.
[30]C[
1.
[31]C[
1.
[32]D[
1.
[33]D:[
1.
[34]C[
1.
[35]D[
1.
[36]C注释在语言中,经常用一个变量来作为逻辑表达式,其含义就是当变量的值不为时关系成C0立[
1.
[37]D注释语句仅可跳出语句,不会跳出循环,这是一个死循环break switchwhile【】答案:138A:[
1.
[39]C[
1.
[40]C[
1.
[41]D注释当除数为时,程序发生溢出错误y[
1.
[42]C[
1.
[43]A[
1.
[44]C[
1.
[45]C注释答案的赋值号左侧是数组的首地址,是一个常量,赋值号右侧是一个字符串常量,不可C s能将一个字符串常量赋给一个地址常量:[
1.
[46]D注释选项缺少字符串结束标志D[
1.
[47]A[
1.
[48]D注释这里首先要明确一些基本概念在语言中,程序与文件是不同的概念,一个程序可以由一C个文件组成,也可以由多个文件组成;一个文件中又可以包含多个函数;函数是构成程序的基本C单位变量的作用域因变量的存储类型不同而不同和类型的变量的作用域是说明变量的当aut register前函数;外部变量的作用域是整个程序,即外部变量的作用域可以跨越多个文件;内部静态变量定义在一个函数内部的型的变量的作用域是当前函数,外部静态变量定义在函数外面的static static型的变量的作用域是当前文件,即可以跨越同一文件中的不同函数:[
1.
[49]A答案[
1.501A注释它和参数一样,数据类型说明被省略,按照语言的规定,在这种情况下,表示它们是a C int型[
1.
[51]C注释函数是值传递,函数的执行结果不能返回;函数中变量不是指针变量,所swapa swapbtemp以它不能接受地址量,用指针变量为它赋值是不对的;函数中虽然指针变量交换了地址,x swap即它们的指向的目标变量进行了交换,但是目标变量并没有行值的交换[
1.
[52]B:[
1.
[53]D[
1.
[54]D注释主调函数中在执行函数里的除法时发生溢出错误b=0,fiml[
1.
[55]B[
1.
[56]C[
1.
[57]C注释要注意与说明语句”的区别说明语句口;”说明的是一个指向数组的指int*p[];int*p针[
1.
[58]C注释题干中由于*和被小括号括起,所以应被解释为一个指针,而后的下标运算符口说明所p p指向的对象是一个有个型元素的一维数组;如果是则是指向函数的指针对于4int int*p,int*p
[4],则根据运算符的优先级,先考虑和口运算符的关系,所以它就是一个指针数组了p[
1.
[59]B注释选项有两处错误,一是数组名是常量,不能出现的赋值好的左侧,二是指针变量只能和整B数做加,不能和作为地址常量的数组名相加[
1.
[60]D注释作为数组名是地址常量,而§++是§=§+语言不允许对常量进行赋值s1,C[
1.
[61]C[
1.
[62]A注释是一个一级指针,选项中对它进行了两次*运算是错误的是一个指向一维数组的指P B ptr针,它所指向的数组有三个元素,对于这样一个指针,对它进行两次**运算才能取出地址单元中所存的数据,选项中*表示数组第一行的首地址,该地址是一维数组的地址,表示加上三个它C ptr+3所指向的数据类型的长度,所以是数组中数值的地址根据以上分析,选项对进*ptr+l+24D ptr行了两次地址操作*和口,所以结果应是数据,但是它加后指向数组第二行,根据后面口中它12的地址增加两个一维数组的长度,就指向数组的最后一行,再做*运算就是数即10,a
[3]
[0][
1.
[63]A[
1.
[64]BB[
1.
[65]D:[
1.
[66]B[
1.
[67]D注释答案是另一种交换两个变量值的算法D[
1.
[68]B[
1.
[69]C注释使用C对p进行赋值,则p・next是a
[0]的地址,引用其成员n再做前增1运算,结果就是2[
1.
[70]B[
1.
[71]D[
1.
[72]A[
1.
[73]C注释联合变量的成员是占用同一存储单元,它的长度是个字节的二进制表示是temp4266存放在存储单元的低端两个字节,如下图高字节100001010,00000001低字节00001010引用进行输出,只取最低的第一个字节temp.ch[
1.
[74]D注释由于结构指针指向了结构数组的0号元素,所以表达式p++・m的含义是先取出m变量a的地址,然后指针p加lo表达式*p++・m的含义是先取出m的内容变量a的值,然后指针p再加表达式的含义是取出变量的地址表达式的含义是先将指针加lo*p.m ma*++p4m p1,然后再取的内容变量的值m b[
1.
[75]D[
1.
[76]B[
1.
[77]C[
1.
[78]D[
1.
[79]D[
1.
[80]B答案[L81]B注释语句引用了两个宏定义语言是区分字母大小的,第二个宏定义中的直接z=2*N+Y5+l C N用替换,用替换则有结果是注意对于带参数的宏亦是直接的文本35+1n,z=2*3+3+l*5+l;48替换,此例中用去替换,结果是而不是n5+1N+1*5+1,N+l*5+l[
1.
[82]C注释宏替换后的结果是printfn%dH,10/3*3:[
1.
[83]C
二、阅读程序题导读学会阅读程序对于初学者来说很重要,一方面可以巩固所学的语法知识,另一方面通过阅读别人写好的程序来打开自己的思路,就所谓见多识广读者通过阅读理解程序,从给出的四个备选参考答案中,选择程序的正确输出如果选择有误,就要认真分析原因,是概念方面的错误还是对程序逻辑理解不对,从而加深对语法规则的理解,提高程序设计能力程序设计语言是开发程序的一个工具,学习语言的目的是为了编写程序来解决实际问题,所以特别提倡通过实际上机来检验备选答案,增强动手能力【】以下程序的输出结果是
2.1#include stdio.hvoid main{float a;a=l/100000000;printfM%g,\a;A
0.00000e+00B
0.0C
1.00000e-07D0程序的输出结果是—[
2.
[2]o#include stdio.hvoid main{int x=10;{int x=20;printfn%d,x;printf,,%d\n,\x;}A10,20B20,10C10,10D20,20程序的输出结果是—[
2.
[3]o#include stdio.hvoid main{unsigned int n;int i=-521;n=i;printfnn=%u\nn,n;A n=-521B n=521C n=65015D n=102170103【】以下程序的输出结果是
2.4#include stdio.hvoid main{int x=10,y=10;printfn%d%d\n”,x——,——y;}A1010B99C910D109程序的输出结果是—[
2.
[5]o#include stdio.hvoid main{int n=l;printfM%d%d%d\nH,n n++,n-;9A111B101C110D121程序的输出结果是—[
2.
[6]o#include stdio.hvoid main{int a=l;char c=a;float f=
2.0;printfM%d\nu,!a==O,f!=0c==,A,;A0B1程序的输出结果是[
2.
[7]o#include stdio.hvoid main{char s
[12]=Ha book”;printfn%.4st\s;}〈四个空格》A a book!B a book!格式描述错误,输出不确定Cabo D程序的输出结果是—[
2.
[8]o#include stdio.hvoid main{int a,b;scanfn%2d%3dn,a,b;printfna=%d b=%d\nH,a,b;语句有错误A a=12b=34B a=123b=45C a=12b=345D程序段的输出结果是[
2.
[9]int a=10,b=50,c=30;ifaba=b;b=c;c=a;printfna=%d b=%d c=%d\n”,ab,c;9A a=10b=50c=10B a=10b=30c=10C a=50b=30c=10D a=50b=30c=50程序的输出结果是[
2.
[10]include stdio.hvoid main{int a=0,b=l,c=0,d=20;ifa d=d-10;else if!bif!c d=15;else d=25;printf,,d=%d\n,\d;Ad=10Bd=15C d=20Dd=25程序的输出结果为[
2.
[11]#include stdio.hvoid main{int a=l,b=0;switcha{case1:switch b{case0:printf**0***;break;case1:break;}case2:printf**2**;break;}有语法错误A B**0****2**C**0****l****2**D程序的输出结果是[
2.
[12]#include stdio.hvoid main{char*s=H12134211H;int vl=0,v2=0v3=0,v4=0,k;fork=0;s[k];k++switchs[k]{case T:vl++;case3:v3++;case2:v2++;default:v4++;printfuvl=%d,v2=%d,v3=%d,v4=%d\nH,vl,v2,v3,v4;}A vl=4,v2=2,v3=l,v4=l Bvl=4,v2=9,v3=3,v4=lC vl=5,v2=8,v3=6,v4=l Dvl=4,v2=7,v3=5,v4=8程序的输出是[
2.
[13]#include stdio.hvoid main{int x=l,y=0,a=0,b=0;switchx{case1:switchy{case0:a++;break;case1:b++;break;case2:a++;b++;break;printfna=%d,b=%d\nH,a,b;A a=2,b=l B a=l,b=l Ca=l,b=0D a=2,b=2程序的输出是[
2.
[14]o#include stdio.hvoid main{int num=O;whilenum=2{num++;printfu%d,\num;A1B1234C123D12程序的输出结果是—[
2.
[15]o#include stdio.hvoid main{int a=l,b=0;do{switcha{case1:b=l;break;case2:b=2;break;default:b=0;}b=a+b;}while!b;printfna=%d,b=%dH,a,b;}A1,2B2,1Cl,1D2,2盘上输入时,下面程序的输出是[
2.
[16]“446755”#include stdio.hvoid main{int c;whilec=getchar!=*\n*switchc-12*{case0:case1:putcharc+4;case2:putcharc+4;break;case3:putcharc+3;default:putcharc+2;break;}printfM\nH;A888988B668966C88898787D66898787程序的输出结果是[
2.
[17]o#include stdio*hvoid main{int k=0;char c=A;do{switchc++{case A:k++;break;case B:k-;case C:k+=2;break;case D:k=k%2;contiue;case E:k=k+10;break;default:k=k/3;k++;}whilecvC;printfuk=%d\nu,k;}A k=l B k=2Ck=3Dk=4程序的输出结果是[
2.
[18]o#include stdio.hvoid main{int x,i;fori=l;i=100;i++{x=i;if++x%2==0if++x%3==0if++x%7==0printfu%d”,x;A3981B4284C2668D2870程序的输出结果是[
2.
[19]o#include stdio.hvoid main{int i,k,a
[10],p
[3];k=5;fori=0;i10;i++a[i]=i;fori=0;i3;i++p[i]=a[i*i+l];fori=0;i3;i++k+=p[i]*2;printfn%d\nn k;9A20B21C22D23从键盘上输入回车”,下面程序的输出是[
2.
[20]“
3.6,
2.4v#include math.h#include stdio.hvoid main{float x,y,z;scanfn%f,y;z=x/y;whilel{iffabsz
1.0{x=y;y=z;z=x/y;else break;printfn%f\nf\y;下A
1.500000B
1.600000C
2.000000[
2.21]D
2.400000面程序的输出结果是—o#include stdio.hvoid main{int i,j,x=O;fori=0;i2;i++{x++;forj=0;j-3;j++{ifj%2continue;x++;x++;printfux=%d\nn,x;}下面程序的输出结果是A x=4B x=8C x=6D x=12[
2.22]o#include stdio.hvoid main{int i,j,k=10;fori=0;i2;i++{k++;{int k=0;forj=0;j=3;j++{ifj%2continue;k++;}k++;printfnk=%d\n*\k;A k=4Bk=8C k=14D k=18程序的输出结果是[
2.
[23]o#include stdio.h void main{int n
[3]
[3],i,j;fori=0;i3;i++forj=0;j3;j++n[i][j]=i+j;fori=0;i2;i++forj=0;j2;j++n[i+UU+l]+=n[i][j];printfn%d\nn,n[i][j];不确定A14B0C6D程序的输出结果是—[
2.
[24]o#include stdio.h void main{int a
[4]
[5]={l,2,4,-4,5,3,6,・3,2,7,8,4;int ij,n;n=9;i=n/5;j=n-i*5-l;printfna[%d][%d]=%d\nf\i,j,a[i][j];不确定A6B-3C2D程序的输出结果是[
2.
[25]o#include stdio.hintm
[3]
[3]={{1},{2},{3}};intn
[3]
[3]={l,2,3};void main{printfu%d\n,\m[l]
[0]+n
[0]
[0];/*
①*/printfu%d\nn,m
[0][l]+n[l]
[0];/*
②*/A0B1C2D31A0B1C2D32程序的输出结果是[
2.
[26]o#include stdio.h void main{char sl
[50]={nsome strings2[]={ntestn};printfu%s\n\strcatsl^s2;A somestring*B testC some stritestD somestring*test程序的输出结果是—[
2.
[27]o#include stdio.h intfchar*s【
1.12】在C语言中,整数・8在内存中的存储形式是A1111111111111000B1000000000001000C0000000000001000D nilH1111110111语言中字符型数据在内存中的存储形式是一[
1.
[13]C char原码补码反码码A B C D ASCII符赋给字符变量正确的表达式是[
1.
[14]g c,A c=\147B c=n\147n C c=\147D c=,0147,转义字符中错误的一个是—[
1.
[15]oA000B0014C AxlirD\2格符赋给字符变量正确的赋值语句是—[
1.
[16]c,oA c=,\0,B c=NULL Cc=0D c=32[
1.
[17]chara=,\70*;则变量a中包含个字符包含个字符包含个字符说明非法A1B2C3D[
1.
[18]串“\EOF\n=・\61V5的长度是非法字符串A8B9C14D串皿的长度是—[
1.
[19]o非法字符串A0B1C2D已知L
1.20]char a;int b;float c;double d;执行语句,,”后,变量的数据类型是c=a+b+c+d;cA intB charC floatD double温度华氏和摄氏的关系是:已知由华氏求摄氏的正确的赋C=*GF-32float C,F;9值表达式是—OA C=5/9F-32BC=5*F-32/9三个表达式都正确C C=5/9*F-32D逗号表达式的值是[
1.22]”a=3*5,a*4,a+15”不确定A15B60C30D如果则条件表达式的值是[
1.231int a=l,b=2,c=3,d=4;“avba:cvdc:dA1B2C3D4出的值,则变量的类型应当为[
1.
[24]s=10!s以上三种类型均可A intB unsignedC longD表达式的值是[
1.
[25]inti=10;“
20.0v=iv=9A0B1C19D20执行下述语句后变量的值是[
1.
[26]int x=l,y;xy=++x5++x10;A1B2C3D4断字符变量的值不是数字也不是字母时,应采用下述表达式―[
1.
[27]c oAc=48||c=57c=65||c=90c=97||c=122B!c=48||c=57c=65||c=90c=97||c=122Cc=48c=57||c=65c=90||c=97c=122D!c=48c=57||c=65c=90||c=97c=122[
1.
[28]inta
[3]
[2]={3,2,1};则表达式「的值是“a
[0]
[0]/a
[0][l]/a
[0][2错误的表达式A
0.166667B1C0D[
1.
[29]int x=l,y=l,z=l;{char*p=s;while*p!=,\O,P++;returnp-s;void main{printfM%d\nt,,fnABCDEFn;A3B6C8D0程序的输出结果是[
2.
[28]o#include stdio.h#include string.h void main{char str
[100]=nHow do you do”;strcpy str+strlenstr/2,nes she;printfM%s\n,\str;下面程序的输出结果是A Howdoyoudo Bes sheC Howare youD Howdoes she[
2.29]o#include stdio.hint funcint a,int b{int c;c=a+b;returnc;void main{int x=6,y=7,z=8,r;r=funcx-,y++,x+y,z-;printfu%d\nn,r;A11B20C21D31程序的输出结果是[
2.
[30]o#include stdio.hvoid funint*s{static intj=0;do{s[j]+=s[j+l];}while++j2;}void main{int k,a
[10]={l,2,3,4,5};fork=l;k3;k++funa;fork=0;k5;k++printfM%dn,a[k];}A35756B23445C35745D12345程序的输出结果是[
2.
[31]o#include stdio.hint k=l;void main{void funint;inti=4;⑴;funprintfu\n%d,k;/*
①刃}void funint m{m+=k;k+=m;{char k=,B,;printfn\n%d,\k-,A,;/*
②*/}printfu\n%d,%dn,m,k;/*
③*/
①A4,1B5,6C4,6D A,B,C参考答案都不对
②A1B-59C-64D A,B,C参考答案都不对
③A5,66B1,66C5,6DA,B,C参考答案都不对程序的输出结果是[
2.
[32]oint w=3;#include stdio.hvoid main{int funint;int w=10;printfu%d\n,\fun5*w;int funint k{ifk==O returnw;returnfunk-l*k;A360B3600C1080D1200程序的输出结果是[
2.
[33]o#include stdio.hint funaint a{int b=0;static intc=3;a=c++,b++;returna;void main{int a=2,i,k;fori=0;i2;i++k=funaa++;printfM%d\n,\k;A3B0C5D4程序的输出结果是[
2.
[34]o#include stdio.hvoid num{extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;void main{int a=7,b=5;x=a-b;y=a+b;num;printfn%d,%d\n”,x,y;}输出不确定A12,2B5,25C1,12D程序的输出结果是[
2.
[35]o#include stdio.hvoid main{int fint;int a=2,i;fori=0;i3;i++printfM%4dH,fa;int fint a{int b=0;static intc=3;b++;C++;returna+b+c;A777B71013C7911D789程序的输出结果是[
2.
[36]o#include stdio.hint try{static int x=3;x++;returnx;void main{int ix;9fori=0;i=2;i++x=try;printfn%d\n,\x;}A3B4C5D6程序的输出结果是[
2.
[37]o#include stdio.hvoid main{void fl,f2int;int x=l;fl;f2x;printfH%d\n,\x;void fl{intx=3;printfn%d”,x;}void f2int x{printfn%d”,++x;}A111B222C333D321程序的输出结果是[
2.
[38]o#include stdio.h#define SUBX,Y X*Yvoid main{int a=3,b=4;printfn%d\n,\SUBa++,b++;A12B15C16D20程序的输出结果是[
2.
[39]o#include stdio.hvoid main{int a[]={l,2,3,4,5,6};int*p;P=a;print*%d,*p;printfH%d,*++p;printfn%d”,*++p;printfu%d[*p--;P+=3;printfn%d%d,*p,*a+3;A123354B123456C122345D123445程序的输出结果是[
2.
[40]o#define FMTn%X\nn#include stdio.h void main{static int a[]
[4]={1,2,,4,5,6,7,8,9,10,11,12};printf FMT,a
[2]
[2];/*
①*/printf FMT,**a+l+l;/*
②*/
①A9B11CA DB
②A6B7C8D前面三个参考答案均是错误的程序的输出结果是[
2.
[41]o#include stdio.h main{int a[]={l,2,3,4,5;int x,y,*p;p=a
[0];x=*p+2;y=*p+4;printf%d,%d,%d\n,*p,x,y;A1,3,5B1,2,3C1,2,4D1,4,5程序的输出结果是—[
2.
[42]o#include stdio.h voidiveint x[],n{int t,*p;p=x+n-l;whilexp{t=*x;*x++=*p;*p-=t;void main{inti,a[]={l,2,3,4,5,6,7,8,9,0};ivea,10;fori=0;i10;i++printfu%d a[i];printfH\nH;A1234567890B098765432101357924680D0864297531程序的输出结果是[
2.
[43]o#include stdio.h#include nstring.hn funcharint n{char t,*sl,*s2;sl=w;s2=w+n-l;whilesls2{t=*sl++;*sl=*s2—;*s2=t;void main{static char*p=1234567”;funp,strlenp;printfn%sn,p;}A7654321B1717171C7171717D1711717程序的输出结果是—[
2.
[44]o#include stdio.hchar*p=nabcdefghijklmnopqH;void main{int i=0;while*p++!=e;printf,,%c\n,,9*p;}Ac BdCe Df程序的输出结果是[
2.
[45]o#include stdio.hint fint x,int y{return y-x;}void main{int a=5,b=6,c;int*g int,int=f;printfn%d\nt\*ga,b;前面三个参考答案均是错误的A1B2C3D程序的输出结果是[
2.
[46]o#include stdio.hvoid main{int a=l,**pp;PP=P;p=a;a++;printf n%d,%d,%d\nn,a,*p,**pp;程序有错误下面程序的输出结果是—A2,1,1B2,1,2C2,2,2D[
2.47]o#include stdio.hvoid main{char*alpha
[7]={”ABCD”JEFGH”JlJKL JMNOP”JQRST”JUVWX”JYZ};char**p;int i;p=alpha;fori=0;i4;i++printfn%cH,*p[i];printfn\nn;A AEIMB BFJNC ABCDD DHLP程序的输出结果是[
2.
[48]o#include stdio.hchar*pp
[2]
[3]={nabcn,Hdefgh*\Hijkr\umnopqr*\nstuvw*\nxyzn;main{printfM%c\nH,***pp+l;/*
①*//*
②刃printf%c\n,**pp
[0];printfu%c\nu,*^pp+l+l
[4];/*
③刃printfu%c\nn,«pp[l]
[2]+2;/*
④刃printfC%s\n,**pp+l;/*
⑤*/A aBd CiD m1A aBd CiD m2A hB1Cq Dw3@Ak BoCu DzAijkl Bmnopqr Cstuvw D xyz5程序的输出结果是[
2.
[49]o#include stdio.hstruct strl{char c
[5];char*s;void main{struct strlsl
[2]={{,,ABCDnnEFGHt,},{MIJKH,nLMNM}};struct str2{struct strlsr;int d;}s2={OPQ JRST”,32767;struct strl*p⑵;p
[0]=sl
[0];p[l]=sl[l];
①/*printf,,%s,\++p[l]-s;/*V
②*/printfu%cn,s
2.sr.c
[2];A LMNB MNCND IJK1A OBP CQDR2程序的输出结果是—[
2.
[50]o#include stdio.hstruct st{int x,*y;*P;int s[]={10,20,30,40;struct st a[]={l,s
[0],2,s[l],3,s
[2],4,s
[3]};void main{P=a;printfn%d\nu,++*++p-y;}A10B11C20D21【阅读程序题参考答案】答案[
2.
[1]D注释程序中除法运算的两个操作数均是整型,运算结果也是整型答案[
2.
[2]B注释语言允许在程序块分程序中说明变量C答案[
2.
[3]C注释变量中的负号传送给变量后,因是无符号数,已不作为负号处理i n n答案[
2.
[4]D注释对变量的一一操作是后缀形式,变量的减操作要在执行完函数之后才进行,所x x1printf以变量的值在输出的时候仍然保持原值x10o答案[
2.
[5]B注释语言在执行时,对函数中的表达式表列的处理顺序是从后向前,即先处理再处理C printf最后处理而且每一个表达式作为一个处理单元,也就是说在不同的表达式中自增自减运算是n++,n,单独考虑的答案[
2.
[6]A注释逗号表达式的结果是用逗号分开的最后一个表达式的值,此题由于c==a,的值是o,所以逗号表达式的值为0答案:[
2.
[7]C注释在输出格式描述“%m.ns”中,m是输出总长度,n是实际字符的个数,这里m没有给出,则输出总长度就是实际输出字符的个数答案:[
2.
[8]C答案[
2.
[9]B答案[
2.
[10]C答案[
2.
[11]B答案[
2.
[12]D答案[
2.
[13]A参考答案;[2J4]C答案[
2.
[15]A答案:[
2.
[16]C注释在语句中,本身仅起到语句标号的作用,不会改变语句的流程,执行语句switch casebreak才能退出当前的语句switch答案:[
2.
[17]D注释siwtch语句的表达式中,变量c是后缀的增一运算,第一次执行do・while循环时,执行case A,后面的语句答案:[
2.
[18]D答案:[
2.
[19]B答案:[
2.
[20]B注释是浮点数绝对值函数fabs答案:[
2.
[21]A答案:[
2.
[22]C注释语言允许在程序块分程序内说明变量,如果在程序块内说明的变量和程序块外的变量同C名,在块外说明的变量在块内是不可见的可将此题和进行比较,加深理解答案:[
2.
[23]C答案:[
2.
[24]B[
2.
[25]答案
①D
②A答案[
2.
[26]D答案:[
2.
[27]B注释输出结果为字符串长度答案[
2.
[28]D注释字符串拷贝函数要求的两个参数都是字符串首地址本题中第二个参数是字符串常strcpy量,接受这个字符串的第一个参量不是直接给出字符数组名,而是进行了地址运算后的结果由于字符串的长度是除取整后是第一个参数给出的地址是字符数组的首地址加也就是原str13,26,str6,来字符串中第二个空格的位置,把从该处放入,字符串变为s she”str Howdoes she答案:[
2.
[29]C注释函数调用函数时,第一个实参使用的是逗号表达式的值,也就是的结果由main fimcx+y于对变量、、进行的是后缀运算,所以函数的参数值是和x y z fimc138答案[
2.
[30]C[
2.
[31]答案
①C
②A
③C答案:[
2.
[32]B注释函数进行了递归调用,实际进行的运算是主函数内说明的局部变fun5X4X3X2X1X3X10量屏蔽了外部变量所以在主函数中外部变量是不可见的,在调用函数时表达w w,w printf式””中的值是fug5*w w10o答案:[
2.
[33]D注释函数三次调用了函数在函数中的静态变量仅在第一次调用时进行了初始化,main funa,funa c再次调用时不再对静态变量赋初值答案:[
2.
[34]B注释函数和函数中都说明了变量和由于它们是内部变量,所以它们分别在说明它main numab,们的函数内有效外部变量和在函数之后被说明,而在函数中又要引用它们,所以在x ynum num函数中用关键字说明变量和是一个外部变量,也就是通知计算机这两个变量在num xtem”x yfun函数以外被说明,此处不是定义两个型变量int答案:[
2.
[35]D注释函数中的变量是静态变量,仅在第一次调用函数时它被初始化为第二次调用函数f cf3,f时的值是第三次调用函数时的值是c4,f c5答案:[
2.
[36]D答案:[
2.
[37]D注释程序中有三个””分别在三个不同的函数中,这三个”“都是自动变量,所以三个、”分别局部于三不同的函数,在三个函数中对“”的操作互不影响答案:[
2.
[38]A答案:[
2.
[39]A注释和*++都是指针变量值前加第一次指向第二次指向是的地址*++p p1,a[l],a
[2];a+3a
[3][
2.
[40]答案
①D
②A注释如果FMT定义为“%x\n”,则输出的16进制数据用小写字母表示参考答案:[
2.411A注释语句“二表示将数组中元素的地址赋给指针变量则就是指向数组首元素p a[0F aa
[0]p,p的指针变量,”「是取数组首元素的地址对于指向数组首址的指针,或是数组a
[0]a[0p+i a+i元素的地址,或就是的值a[i]*p+i*a+i a[i]答案:[
2.
[42]B答案:[
2.
[43]D答案:[
2.
[44]D答案:[
2.
[45]A注释变量是指向函数的指针,是调用指针所指向的函数g*ga,b g答案:[
2.
[46]C注释是指针,是指向指针的指针p pp答案:[
2.
[47]A注释对于指向数组的指针变量可以做下标运算,和都是指向字符串的首地址,取p[i]alpha[i]*p[i]出字符串的第一个字符[
2.
[48]答案
①D
②A
③D
④D
⑤B注释是一个二维指针数组,指向数组的第二维,是第二维的起始地址,是pp pp+1*pp+l**pp+l第二维第一个元素的地址,是第二维第一个元素的内容,所以,
①的参考答案应选***pp+l Do是第二维第二个元素的地址,是第二维第二个元素,则是第二*pp+l+l**pp+l+l**pp+l+l
[4]维第二个元素所指字符串下标为的元素,即是字符故
③应当选4w,D[
2.
[49]答案
①B
②C答案:[
2.
[50]D
三、程序填空题导读在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能这类习题的设计就是要引导读者逐步掌握编程的方法本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率下面程序的功能是根据近似公式]兀求兀值[
3.11〜1/12+1/22+1/32+……+1/*#include math.hdouble pilong n{double s=
0.0;long i;fori=l;i=n;i++表达式的x+++y+++z++”值是o表达式错误A3B4C5D执行语句[
1.
[30]int x=5,y=5,z=5;x%=y+z;后,的值是一xoA0B1C5D6[
1.
[31]语句scanfnx=%f,y=%f\x,y;输入变量、的值口代表空格,正确的输入是一x yoA
1.25,
2.4B
1.
2502.4C x=l.25,y=
2.4Dx=
1.25Qy=
2.4循环语句中有语法错误的是—[
1.
[32]oA whilex=y5;B whileO;C do2;whilex==b;D dox++whi!ex==10;变量的值是[
1.
[33]int x=l,2,3,4;xA1B2C3D4式衣是[
1.
[34]si ofdouble函数调用型表达式型表达式非法表达式A B double C int D[
1.
[35]int x,y;double z;则以下语句中错误的函数调用是A scanfH%d,%lx,%len,x,y,z;B scanfH%2d*%d%lf\x,y,z;C scanfH%x%*d%on,x,y;D scanfn%x%o%
6.2fn,x,y,z;[
1.
[36]件表达式”nc++:c・・广中的表达式n等价的表达式是A n==0B n==l Cn!=0D n!=l执行下面语句后的值是[
1.
[37]inti=l,j=O;jowhileiswitchi{case1:i+=l;j++;break;case2:i+=2;j++;break;case3:i+=3;j++;break;default:i-;j++;break;死循环A1B2C3D[
1.
[139]forforx=0,y=10;y0x4;x++,y-;是无限循环循环次数不定A B循环执行次循环执行次C4D3已知执行语句[
1.40]int i=l;while i++4;后,变量的值为ioA3B4C5D6s=s+
①;return
②;下面的程序的功能是求一维数组中的最小元素
13.2]#include stdio.hvoid flndminint int t,int*k{int p;forp=0,*k=p;pt;p++ifs[p]s[^k]
①;}void main{int a
[10],i,*k=i;fori=0;i10;i++scanfH%du,a[i];findmina,10,k;printfn%d,%d\n,a[*k];[
3.
[3]程序的功能是计算1・3+5・7+……-99+101的值void main{int i,t=l,s=0;fori=l;i=101;i+=2{
①;s=s+t;
②;printfu%d\n,\s;下程序段[
3.
[4]s=
1.0;fork=l;k=n;k++s=s+
1.0/k*k+l;printfH%AnM,s;填空完成下述程序,使之与上述程序的功能完全相同s=
0.0;
①;k=0;do{s=s+d;
②;d=
1.0/k*k+l;}while
③;printfM%f\nH,s;程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当[
3.
[5]输入为负数时结束输入#include stdio.hvoid main{float x,amax,amin;scanfn%fn,x;amax=x;amin=x;while
①{ifxamax amax=x;if
②amin=x;scanfH%fH,x;printfn\namax=%f\namin=%f\nu,amax,amin;程序的功能是输出到之间每位数的乘积大于每位数的和的数例如数字数位[
3.
[6]110026,上数字的乘积大于数字之和128o#include stdio.hvoid main{int n,k=l,s=0,m;forn=l;n=100;n++{k=l;s=0;
①;while
②{k*=m%10;s+=m%10;
③;ifksprintfu%dn,n;程序的功能是统计用至之间的不同的数字组成的三位数的个数[
3.
[7]09#include stdio.hvoid main{int i,j,k,count=0;fori=l;i=9;i++forj=0;j=9;j++if
①continue;else fork=0;k=9;k++if
②count++;printfn%dM,count;程序的功能是输出以内的个位数为、且能被整除的所有数[
3.
[8]10063#include stdio.hvoid main{int ij;fori=0;
①;i++{j=i*10+6;if
②countinue;printfn%dnJ;程序的功能是用辗转相除法求两个正整数和的最大公约数[
3.
[9]m ninthcfint m,int n{int r;ifmn{r=m;
①;n=r;}r=m%n;while
②{m=n;n=r;r=m%n;
③;程序的功能是使用冒泡法对输入的个浮点数从小到大进行排序排好序的个数[
3.
[10]1010分两行输出程序如下#include stdio.hvoid main
①;int ij;printfMInput10numbers please\nn;fori=0;
②;i++scanfn%f\a[i];printfM\nH;fori=2;3;i++forj=0;
④;j++if
⑤{x=a[j];
⑥;a[j+l]=x;printfnThe sorted10numbers;\nn;fori=0;
⑦;i++{if
⑧printfu\nH;printfn%f\tn,a[i];printfu\nH;下面程序的功能是读入个整数,统计非负数个数,并计算非负数之和20#include stdio.hvoid main{int i,a
[20],s count;9s=count=0;fori=0;i20;i++scanfn%du,
①;fori=0;i20;i++{ifa[i]0
②;s+=a[i];count++;}printfns=%d\t count=%d\nH,s count;9程序的功能是删除字符串中的空格[
3.
[12]s#include stdio.hvoid main{char*s=HBeijing ligongdaxuen;int ij;fori=j=0;s[i]!=,\0,;i++二一
①;ifs[i]!else
②;s「]=\0;printfu%sn,s;程序的功能是将字符串中所有的字符P删除请选择填空[
3.
[13]s#includestdio.hvoid main{char s
[80];int ij;getss;fori=j=0;s[i]!=\0;i++ifs[i]!=Q
①;s[j]=\0;putss;程序的功能是输出两个字符串中对应相等的字符请选择填空[
3.
[14]#include stdio.hchar x[]=nprogrammingn;char y[]=HFortranH;void main{int i=0;whilex[i]!=\0y[i]!=\0ifx[i]==y[i]printfn%c,\
①;else i++;程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相[
3.
[15]同字符的ASCH码之差例如输入的两个字符串分别为“abcdefg和“abceef,则输出为#includestdio.h void main{char strl
[100],str2[1001,c;int i,s;printfuEnter string1:n;getsstrl;printfnEnter string2:getsstr2;i=0;whilestrl[i]==str2[i]strl[i]!=
①i++;s=
②;printfn%d\nu,s;程序的功能是显示具有个元素的数组中的最大元素[
3.
[16]n s#include stdio.h#define N20void main{int i,a[N];int fmaxints[],int n;fori=0;iN;i++scanfn%dn,a[i];printfn%d\ii,\
①;int fmaxints[],int n{intk,p;forp=0,k=p;pn;p++ifs[p]s[k]
②;returnk;程序是计算学生的年龄已知第一位最小的学生年龄为岁,其余学生的年龄一个[
3.
[17]10比一个大岁,求第个学生的年龄25#include stdio.hint ageint n{intc;if n==l c=10;elsec=
①;returnc;}voidmain{int n=5;printfMage:%d\n*\
②;的函数完成计算的累加和[
3.
[18]sumintn l~nint sumint n{ifn=0printfudata error\nu;ifn==l
①;else
②;}的函数是一个求阶乘的递归调用函数[
3.
[19]int factoint n{if n==1
①;else return
②;}函数是求一个字符串的长度[
3.
②;【用递归实现将输入小于的整数按逆序输出如输入则输出
3.23276812345,54321#includestdio.hvoid main{int n;void rint m;printfnInput n:;scanfH%dn,
①;rn;printfn\nH;void rintm{printfM%dn,
②;m=
③;if
④⑤;下面程序的功能是实现数组元素中值的逆转[
3.22]#include string*h#include stdio.hvoid main{int i,n=10,a
[10]={l,2,3,4,5,6,7,8,%10};void invertint int num;inverta,n-1;fori=0;i10;i++printfn%4dH,a[i];printfu\nn;void invertint*s,int num{int*t,k;t=s+num;while
①{k=*s;*s=*t;*t=k;
②;
③;}【】下面程序的功能是从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串
3.23#include stdio.hvoid main{char str
[81],*sptr;int i;fori=0;i80;i++{str[i]=getchar;ifstr[i]==,\n break;str[i]=
①;sptr=str;while*sptrputchar*sptr
②;下面程序的功能是输入学生的姓名和成绩,然后输出[
3.24]#include stdio.hstruct stuinf/*学生姓名刃{char name
[20];/*学生成绩*/int score;}stu,*p;voidmain{p=stu;printfnEnter name:;gets
①;printfuEnter score:scanfn%dn,
②;printfnOutput:%s,%d\iT\
③,
④;以下程序的功能是读入一行字符如、、按输入时的逆序建立一个链接式的结点
13.25]a…yz,序列,即先输入的位于链表尾如下图,然后再按输入的相反顺序输出,并释放全部结点#include stdio.hvoid main{struct node{char info;struct node*link;}*top,*p;char c;top=NULL;whilec=getchar@{p=struct node*mallocsizeofstruct node;p-info=c;p-link=top;top=p;while top{
②;top=top-Iink;putcharp-info;freep;}}【程序填空题参考答案】[
3.
[1]
①
1.0/floati*i
②sqrt6*s
①[
3.
[2]*k=p[
3.
[4]:
①t=t*i
②t=tO-l:l[
3.
[5]
①d=l
②k++
③k=n[
3.
[6]
①x=0
②xamin【
3.6]答案
①m=n
②m0
③m=m/10[
3.
[7]
①i==j
②k!=ik!=j[
3.
[8]
①i=9
②j%3!=0[
3.
[9]
①m=n
②r!=0
③returnn[
3.
[10]
①float a
[10],x
②i=9
③i=8
④j=9-i
⑤a[j]a[j+l]
⑥a[j]=a[j+l]
⑦i=9
⑧i%5==0[
3.
[11]
①a[i]
②continue注释
①是基本概念,使用函数输入数组元素的值当输入的元素值小于时,应当跳过后scanf0面的语句,取下一个数,所以
②要填入continue[
3.
[12]
①s[j++]=s[i]
②s[j]=s[i]
①[
3.
[13]s[j++]=s[i]
①[
3.
[14]x[i++][
3.
[15]
①\0
②strl[i]-str2[i][
3.
[16]:
①a[fmaxa,N]
②k=p[
3.
[17]
①2+agen-l
②age5注释由于程序是递归算法,因此首先要建立问题的递归数学模型根据原题的描述可以写出如下递归公式agen=10n=lagen=2+agen-l nl对照程序和递归公式可以看出的含义是第位学生很显然,要求第位学生的年龄,
②处应n n5当是调用函数实参的值应当是在
①处应该是函数的递归调用,根据递归公式,应当填写age,52+agen-lo[
3.
[18]
①returnl
②return sumn-l+n注释按照常规的编程方法,此问题可采用一个循环语句实现阅读程序,没有发现循环语句,这时,应当认为原来的编程者使用的是非常规的算法对于这样常规算法需要用循环实现而没有使用循环的程序,就可以肯定地认为,一定是使用了递归算法将问题”求的累加和”的公式写成递归定义,可以是如下形式;1〜n当时sumn=l n=l当时sumn=sunn-l+n nl根据此递归定义,可以很容易完成程序[
3.
[19]
①returnl
②n*facton-l注释我们熟悉的求的算法一般是采用循环语句实现,但在此程序中根本没有循环语句这时我n!们应该想到是采用递归算法实现的首先写出求的递归公式;n!当时n!=l n=l当时n!=n*n-l nl根据此递归定义,可以很容易完成程序[
3.
[20]
①*str==,\0,
②l+strlenstr+l注释求串长算法的关键是确定串结束标记的位置根据求串长的方法,可以得到如下递归算T法指针指向字符串的首字符str如果当前字符串结束标记,*str==F则串长=0否则串长除第一个字符之外的剩余字符串的串长=1+因此,在
①的位置上应当填写“*str==,\F”,以判断当前字符*str是否是串结束标记、
0、在
②的位置应当是根据上面的递归算法进行递归调用,因此应当填写叮+stHenstr+l”[
3.
[21]
①n
②m%10
③m/10
④m0
⑤rm[
3.
[22]
①st
②s++
③t-[
3.
[23]
①XT或0
②++注释在语言中,进行字符串处理时,必须注意串结束标记、它是在进行串处理时的最基本的C T,要求,所以
①中要填入为了使用输出一个字符串,则必须有改变指针的运算,这里只\0putchar能使用++运算【
3.24】答案
①stu.name
②stu.score
③p-name
④p-score注释这是结构中的最基本概念[
3.25]答案:
①!=\n
②p=top
四、编写程序题及参考答案[[]银行整存整取存款不同期限的月息利率分别为
4.1期限一年
0.315%期限二年
0.330%月息利率=期限三年
0.345%期限五年
0.375%期限八年
0.420%要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计))输入年份和月求该月有多少天判断是否为闰年,可用如下语言表达式
1.2year month,C year%4==0若表达式成立(即表达式值为)则为闰年;否则,表达式不成立year%100!=0||year%400==0o1,year(即值为),为平年0year*♦♦**♦♦♦***♦*♦**♦****♦**)]输入值,输出如图所示高为的等腰三角形
1.3n n图巧时的等腰三角形
4.3n[[]程序,输出如图所示上三角形式的乘法九九表
4.4123456789141618212427283236354045424854495663647281上三角乘法九九表图
4.26123456789[[]程序求出的约数中最大的三位数是多少
4.5555555[[]程序计算下列序列的值:
4.6执行下述程序后,[
1.
[41]int x=12,y=3;变量的值是一X Odo69118260511221218M3O3605{x/=y-;}whilexy;程序运行有错误A1B2C3D[
1.
[42]char a[]
[20]={MBeijingH,HshanghaiH,HtianjinH,nchongqingn}语句printf%c[a
[30];的输出是空格不定数组定义有误A vB nC D数组名作为函数调用时的实参,则实际上传递给形参的是[
1.
[43]数组首地址数组的第一个元素值A B数组中全部元素的值数组元素的个数C D维数组的正确说明是一[
1.
[44]o⑵口A int a[][]={l,2,3,4,5,6};B inta={1,2,3,4,5,6;Cinta[]
[3]={l,2,3,4,5,6};D inta[2,3]={1,2,3,4,5,6;符数组赋值,不合法的一个是—[
1.
[45]s oAchar s[]=HBeijmgH;B char s
[20]={nbeijingn};C char s
[20];s=nBeijingH;D char s
[20]={B,e,i,j,i,n,g};符数组赋初值,[
1.
[46]str不能作为字符串使用的一个是—str oAchar str[]=*1shanghai**;B char str[]={nshanghain;C charstr
[9]={s,h,a,n,g,h,a,i};D charstr
[8]={s,h,a,n,g,h,a,i};【如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量
1.47]的存储类型应该被说明为一o静态变量动态变量外部变量内部变量A BC D个源程序文件中,•若要定义一个只允许在该源文件中所有函数使用的变量,则该[
1.
[48]C变量需要使用的存储类别是A externBregisterC autoD static【】在语言中,函数的数据类型是指―
1.49C函数返回值的数据类型函数形参的数据类型A B调用该函数时的实参的数据类型任意指定的数据类型C D已知如下定义的函数[
1.50]funla{printfn\n%dH,a;则该函数的数据类型是—O与参数的类型相同型A aB void没有返回值无法确定C D11111一+一+一+一+……+--------------------------------1+()1X22X33X44X5NX N+1要求最后一项小于时、或者当时尚未达到精度要求,则停止计算
0.001N=20【
4.7】输入一个正整数,要求以相反的顺序输出该数例如输入12345,输出位54321匹马驮担货,大马一匹驮担,中马一匹驮担,小马两匹驮担试编写程序计[
4.
[8]100100321算大、中、小马的数目[
4.
[9]200以内的完全平方数和它们的个数(完全平方数A2+B2=C2,求A、B、C)证以内的哥德巴赫猜想,对于任何大于的偶数均可以分解为两个素数之和[
4.
[10]20004的数组,编写程序实现[
4.
[11]5X5⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置样一个三位数,该三位数等于其每位数字的阶乘之和[
4.
[12]即abc=a!+b!+c!找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上[
4.131的最小值二维数组也可能没有鞍点程序,读入一个以符号”.”结束的长度小于字节的英文句子,检查其是[
4.
[14]20否为回文(即正读和反读都是一样的,不考虑空格和标点符号)例如读入句子它是回文,所以输出MADAM IM ADAM.YES读入句子)它不是回文,所以输出ABCDBA.NO函数,通过指针将一个字符串反向[
4.
[15]【
4.16】编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量如输入字符串abcedabcdcd则输出a=2b=2c=3d=3e=lo[
4.17利用结构struct complx{int real;int im;;编写求两个复数之积的函数并利用该函数求下列复数之积cmult,13+4i X5+6i210+20iX30+40i编写成绩排序程序按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名[
4.18]次、该名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输出个学10号【编写程序题参考答案】答案[
4.
[1]#include stdio.hvoid main{int year;本金月利率本利合计*/float money,rate,total;/*money:rate:total:printfMInput moneyand year=;scanfH%f%dn,money,year;/*输入本金和存款年限*//*根据年限确定利率*/ifyear==l rate=
0.00315;else ifyear==2rate=
0.00330;else ifyear==3rate=
0.00345;else ifyear==5rate=
0.00375;else ifyear==8rate=
0.00420;else rate=
0.0;/*计算到期的本利合计*/total=money+money*rate*12*year;printfM Total=total;答案[
4.
[2]#inciude stdio.hvoid main{int year,month,days;printfMEnter yearand month:;scanfn%d%du,year,month;switch month{case1:case3:case5:case7:case8:case10:case12:/*处理大”月*/days=31;break;case4:case6:case9:case11:/*处理小月*/days=30;break;case2:ifyear%4==0year%100!=0||year%400==0/*处理闰年平月*/days=29;/*处理不是闰年平月*/else days=28;break;default:printfHInput error!\nn;/*月份错误*/days=0;}if days!=Oprintfn%d,%d is%d days\n*\year,month,days;[]分析此题和上题的区别在于每行”的数量逐行减少,可以使用上题控制空格个数的思路来
4.3控制,*,号的个数,请注意每行仲的个数都是奇数参考答案#include stdio.hvoid main{int ij,n;printfu\nPlease Entern:H;scanfn%dn,n;fori=l;i=n;i++{fora=l;j=n-i;j++printfn H;forj=l;j=2*i-l;j++printfH*H;printfn\nn;}]参考答案
4.5#include stdio.hvoid main{intj;/*使用长整型变量,以免超出整数的表示范围*/longn;printfnPlease inputnumber:;scanfH%IdH,n;可能取值范围在到之间,从大到小*/fora=999;j=100;j-/^999100j若能够整除贝是约数,输出结果*/ifn%j==0/*j,Jj{printfnThe maxfactor with3digits in%ld is:%d.\nn,n,j;/*控制退出循环*/break;参考答案[
4.6]#include stdio.hvoid main{int i;float s=l;fori=l;i=
201.0/i/i+l
0.001;i++s=s+
1.0/i/i+l;printfnResult=%f i=%d\nn,s,i;参考答案
14.71#include stdio.hvoid main{int n;printfnPlease entern:n;scanfn%du,n;whilen0{printfn%dH,n%10;n=n/10;分析此题采用穷举法[
4.81参考答案#include stdio.hvoid main{intx,y,z,j=O;forx=0;x=33;x++fory=0;y=100-3*x/2;y++{z=100-x-y;if z%2==03*x+2*y+z/2==100printfn%2d:l=%2dm=%2d s=%2d\nn,++j,x,y,z;}此题采用穷举法[
4.
[9]参考答案#include stdio.hvoid main{long int i,j,k count=0;9fori=l;i*i=200;i++forj=l;j*j=200;j++fork=l;k*k=200;k++ifi*i==j*j+k*k{printfu\nAA2==BA2+CA2:%4Id%41d%41dn,i,j,k;count++;printf11\ncount=%Id H,count;答案[
4.
[10]#include stdio.h voidmain{int i,j,k m,error;9fori=6;i=2000;i+=2{error=l;穷举法分解为两个素数和之和*/forj=2;ji;j++/*i jm检验是否素数*/{fork=2;kj;k++/*j能够被小于它的一个数整除就不是素数*/ifj%k==O/*j break;是素数*/ifk=j Pj{m=i-j;检验是否素数*/fork=2;km;k++/*m ifm%k==0break;ifk=m/*m也是素数,输出结果*/{printfn%4d=%4d+%4d\nn,ij,m;error=0;break;}iferrorprintfn%4d error!**;答案:[
4.
[11]#include stdio.hvoid main{int i,j,sl=0,s2=l,a
[5]
[5];fori=0;i5;i++forj=0;j5;j++{printfH%d%d:scanfn%df\a[i][j];fori=0;i5;i++{forj=0;j5;j++printfH%5dH,a[i][j];printfu\nn;j=0;fori=0;i5;i++{sl=sl+a[i][i];ifi%2==0s2=s2*a[i][i];ifa[i][i]aU][j]j=i;printfnSUN=%d\nACCOM=%d\na[%d]=%d\n,\si,s2,j,a[j][j];答案[
4.
[12]#include stdio.h voidmain{inta
[5],i,t,k;for i=100;i1000;i++{fort=0,k=1000;k=10;t++{a[t]=i%k/k/10;k/=10;}iffa
[0]+fa[l]+fa
[2]==i printfu%d”,i;}fm intm;{int i=0,t=l;while++i=m t*=i;returnt;}答案[
4.
[13]#include stdio.h voidmain{inti JJ,n,m,k,a
[20]
[20];printfnPlease entern,m=n;scanfn%d,%d”,n,m;fori=0;in;i++forj=0;jm;j++{printfCa[%d][%d]=MJ;scanfH%dn,a[i][j];fori=0;in;i++{forj=0;jm;j++printfn%6d,\a[i][j];printfH\nn;fori=0;in;i++{forj=0,k=0;jm;j++/*找出该行最大值列ifa[i][j]a[i][k]k=j;判断是否为该列最小*//*该列有一个数比forl=0;ln;1++/*a[i][k]ifa[l][k]a[i][k]break;a[i][k]小*/ifl=n/*没有比a[i][k]小的数,循环变量1就超过最大值*/printfMPoint:a[%d][%d]==%dH,i,k,a[i][k];答案[
4.
[14]#include stdio.hvoid main{chars
[21],*q;getss;P=s;q=s;while*q!=\0q++;q-=2;指针指向字符串首,指针指向串未*/whilepq/*p qif*p++!=*q・・/*指针p、q同时向中间移动,比较对称的两个字符*/{printfuNO\nn;break;ifp=qprintfnYES\nn;答案:[
4.
[15]strchgschar*s;{char c,*p;P=s;while*p!=\0p++;P-;whilesp{c=*s;*s++=*p;*p-=c;参考答案[4J6]#include stdio.hstruct strnum{int i;char ch;}voidmain{char c;int i=0,k=0;struct strnums
[100]={0,NULL};whilec=getchar!=*\n*{fori=0;s[i].i!=0;i++{ifc==s[i].ch[s[i].i++;break;}ifs[i].i==0{s[k].ch=c;s[k++].i=l;}i=0;whiles[i].i0{printfn%c=%d s[i].ch,s[i].i;i++;【】分析程序中函数的形式参数是结构类型,函数的返回值也是结构类型在
4.17cmult cmult运行时,实参和为两个结构变量,实参与形参结合时,将实参结构的值传递给形参结构,在za zb函数计算完毕之后,结果存在结构变量中,函数中将返回的结构变量的值存入到w maincmult w结构变量中这样通过函数间结构变量的传递和函数返回结构型的计算结果完成了两个复数相乘z的操作参考答案:#include stdio.hstruct complx为复数的实部*/为复数的虚部*/{int real;/*real int im;/*im;voidmain说明结构静态变量并初始化*/{static struct complx za={3,4}/*static struct complx zb={5,6};struct complxx,y,z;说明函数的返回值类型是结构型*/struct complxcmult;/*cmult complxvoid cpr;/*以结构变量调用函数,返回值赋给结构变量/*以结构变z=cmultza^zb;cmult z*/cpr za,zb,z;量调用函数,输出计算结果*/cprx.real=10;x.im=20;/*下一组数据*/y.real=30;y.im=40;z=cmult x,y;cpr x,y,z;计算复数函数的返回值为结构类型*//*形struct complxcmultza zb/*zaXzb,struct complxza zb;99式参数为结构类型*/{structcomplxw;w.real=za.real*zb.real-za.im*zb.im;w.im=za.real*zb.im+za.im*zb.real;/*返回计算结果,返回值的类型为结构*/return w;输出复数void cprza,zb,z/*za Xzb=z*//*形式参数为结构类型*/structcomplxza,zb,z;{printf n%d+%di*%d+%di=H,za.real,za.im,zb.real,zb.im;printfH%d+%di\nf,,z.real,z.im;参考答案[
4.18]#include stdio.hstruct student{int n;int mk;};voidmain{int i,j,k count=0,no;9struct studentstu
[100],*s
[100],*p;printfH\nPlease entermarkif mark0is end\nH;fori=0;i100;i++{printfnNo.%04d==H,i+1;scanfH%dM,stu[i].mk;s[i]=stu[i];stu[i].n=i+l;ifstu[i].mk=0break;forj=0;ji;j++fork=j+l;k=i;k++ifs[j]-mks[k]-mk{P=s[j];s[j]=s[k];s[k]=p;forno=l,count=l,j=0;ji;j++{ifs[j]-mks[j+l]-mk{printfn\nNo.%3d==%4d%4d:,no,s[j]-mk,count;fork=j-count+l;k=j;k++{printfn%03d s[k]-n;ifk-g-count%10==0k!=j printfH\nn;}count=l;no++;else count++;定义一个函数实现交换和的值,并将结果正确返回能够实现此功能的是x yA swapaint x,int y B swapbint*x,int*y{int temp;{int temp;temp=x;x=y;y=temp;temp=x;x=y;y=temp;}}C swapcint*x,int*y Dswapdint int*y{int temp;{int*temp;temp=*x;*x=*y;*y=temp;temp=x;x=y;y=temp;}}个角的正弦函数值的平方能够实现此功能的函数是一[
1.
[52]oA sqofsinafloatx{returnsinx*sinx;Bdoublesqofsinbfloat x{returnsindoublex*sindoublex;C doublesqofsincx{returnsinx*sinx;}D sqofsindfloatx{returndoublesinx*sinx;一个函数内有数据类型说明语句如下[
1.
[53]double x,y,z10;关于此语句的解释,下面说法正确的是—O是一个数组,它有个元素Az10是一个函数,小括号内的是它的实参的值Bz10是一个变量,小括号内的是它的初值Cz10语句中有错误D函数定义如下[
1.
[54]float funlintx,int y{float z;z=floatx/y;returnz;}主调函数中有可以正确调用此函数的语句是—inta=l,b=0;oA printfu%f”,funla,b;B printfn%f”,funla,b;C printfn%fn,*b;D调用时发生错误函数的功能是[
1.
[55]ovoid acharsl[]^chars2[]{while*s2++=*sl++;字符串比较字符串复制字符串连接字符串反向A BC D列结论中,只有一个是错误的,它是—[
1.
[56]o语言允许函数的递归调用A C语言中的语句,可以通过改变程序的结构而省略BCcontinue有些递归程序是不能用非递归算法实现的C语言中不允许在函数中再定义函数D C语句的含义是[
1.
[57]int*p;”o是一个指向一维数组的指针变量Ap是指针变量,指向一个整型数据Bp是一个指向函数的指针,该函数的返回值是一个整型Cp以上都不对D说明其中的标识符是[
1.
[58]int*p
[4];p o个指向整型变量的指针变量A4指向个整型变量的函数指针B4一个指向具有个整型元素的一维数组的指针C4具有个指向整型变量的指针元素的一维指针数组D4则在下列语句中,错误的语句是[
1.
[59]chars
[10],*p=s,A p=s+5;B s=p+s;Cs
[2]=p
[4];D*p=s
[0];[
1.
[60]B^lchars
[100];inti;则引用数组元素的错误的形式是As[i+10]B*s+i C*i+s D*s+++i则正确的赋值语句是[
1.
[61]chars
[6],*ps=s;As=n12345n;B*s=12345”;C ps=n12345H;D*ps=12345”;[
1.
[62]inta
[4]
[3]={l,2,3,4,5,6,7,8,9,10,11,12;int*ptr
[3]=a,*p=a
[0];则以下能够正确表示数组元素⑵的表达式是a[l]A**a+l+2B**p+5C*ptr+l+2D*ptr+l
[2]则值为的表达式是[
1.
[63]inta[]={l,2,3,4,5,6,7,8,9,10,ll,12},*p=a;3A p+=2,*p++B p+=2,*++p C p+=2,*p++D p+=2,++*p[
1.
[64]2,3,4},y,*p=a;则执行语句y=*++p・・;之后,数组a各元素的值变为oA0,1,3,4B1,1,3,4C A2,2,4D1,2,3,3变量的值是一yA1B2C3D4为使变量的值为下列语句正确的是[
1.
[65]inta[]={l,3,5,7},y,*p=a;y3,A y=++*p++;B y=++*p++;C y=++*p++;D y=*++p++;则能够正确引用数组元素的语句是[
1.661intx[]={1,3,5,7,9,11,*ptr=x;A xB*ptr・・C x
[6]D*・・ptr的功能是交换变量和中的值,且通过正确调用返回交换的结果能正确执行此功[
1.
[67]x yAvoid funaint*x,int*yBvoid funbintx,int y{int{int*p;t;p=x;*x=*y;*y二*p;t=x;x=y;y=t;D voidfunc int*x,int*yC voidfunc int*x,int*y{*x=*x+*y**y=*x.*y・*x=*x.*y・{*X=*y・*y—*x•能的函数是义如下:[
1.
[68]struct sk{inta;float b;}data,*p;如果则对于结构变量的成员的正确引用是一p=data;data a:[
1.
[69]struct st{intn;struct st*next;;static structsta
[3]={l,a[l],3,a
[2],5,a
[0]},*p;如果下述语句的显示是则对的赋值是—2,p oprintfn%dn,++p-next-n;A p=a
[0];Bp=a[l];Cp=a⑵;D p=a
[3];:[
1.
[70]struct person{char name
[10];int age;}class
[10]={uLiMing,\29,HZhangHongf\21,nWangFangn,22};下述表达式中,值为的一个是一72oA class
[0]-age+class[l]-age+dass
[2]-ageB class[l].name
[5]C person[X].name
[5]D clase-name
[5][
1.
[71]struct{inti;char c;float a;}test;则的值是sizeoftestA4B5C6D7[
1.
[72]union{inti;char c;float a;}test;则的值是sizeoftestA4B5C6D7[
1.
[73]union u_type{inti;char ch;float a;}temp;现在执行的结果是temp.i=266;printf%d”,temp.ch”A266B256C10D1以下程序段[
1.
[74]struct dent{intn;int*m;;inta=l,b=2,c=3;struct dents
[3]={{101,a},{102,b},{103,c}};struct dent*p=s;则以下表达式中值为的是2A p++-m B*p++・mC*p.m D*++p・m以下说明语句,则对结构变量中域的正确引用是[
1.
[75]pup sexstructpupil{char name
[20];int sex;}pup,*p;p=pup;A p.pup.sex Bp-pup.sex C*p.pup.sex D*p・sex对结构变量中成员的非法引用是[
1.
[76]stul agestructstudent{int age;int num;}stul,*p;p=stul;A stul.age Bstudentage Cp-age D*p.age以下定义和语句[
1.
[77]union data{inti;char c;float f;}a;intn;则以下语句正确的是o Aa=5;Ba={2,
1.2};C printfn%d\nn,a.i;D n=a;则正确的赋值语句是[
1.
[78]enum week{sun,mon,tue,wed,thu,fri,sat}day;A sun=0;B san=day;C sun=mon;D day=sun;执行下述语句的输出结果是[
1.
[79]enum color{red,yellow=2,blue,white,black}ren;printfn%dH,ren=white;A0B1C3D4下述关于枚举类型名的定义中,正确的是—n.80]oA enema={one,two,three};B enema{one=9,two=l,three};C enema={nonen,ntwon,nthreen};D enema{one”Jtwo/three};宏定义[
1.
[81]#define N3#define YnN+l*n执行语句后,变量的值是z=2*N+Y5+l;z o出错A42B48C52D[
1.
[82]宏定义#define SQxx*x,执行语句printfn%d,\10/SQ3;后的输出结果是A1B3C9D10宏定义如下[
1.
[83]#define PRprintf#define NLu\nu#defineD M%dn#define DID NL若程序中的语句是经预处理后展开为一PRD1,a;oA printf%d\n,a;B printfn%d\nH,a;C printfn%dnn\nn,a;D原语句错误【单项选择题参考答案】:[
1.
[1]A注释是语言的关键字int C:[
1.
[2]B[
1.
[3]A[
1.
[4]B注释是预处理命令;是函数名;不是语言的关键字include scanftype C[
1.
[5]D答案[L6]D[
1.
[7]A[
1.
[8]A注释int型表示整数的范围是・32768~32767:[
1.
[9]D注释整型常量“在计算机中表示为补码用十六进制显示这个数时,最左边的不会被uniinnnun,1解释为符号位,而是与右边其它位共同转换为十六进制数[
1.
[10]B注释长整型数32768在计算机内的表示是1000000000000000,以一般整型进行输出时,此数恰是・的补码32768:[
1.
[11]C注释长整型数在计算机内的表示是以一般整型进行输出时,仅将6553900010000000000000011,右侧位二进制数转换为十进制数16[
1.
[12]A注释语言中,型的负数是采用补码表示的Cint[
1.
[13]D[
1.
[14]C注释变量是字符型,可用字符常量为它赋值字符常量必须用单引号括起来,所以是错误的;c B在单引号或双引号内的反斜线用于表示转义字符,选项在无引号时使用反斜线是错误的;选项A C单引号内出现反斜线表示它与后面的数字组成一个转义字符;单引号只允许括起一个。
个人认证
优秀文档
获得点赞 0