C语言题目汇总_第1页
C语言题目汇总_第2页
C语言题目汇总_第3页
C语言题目汇总_第4页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

ー、单项选择题1、分布式计算机系统与计算机网络系统的重要区别是(D).A.硬件连接方式不同B.系统拓扑结构不同C,通信控制方式不同D.计算机在不同的操作系统支持下,工作方式不同2、计算机网络是计算机技术和通信技术相结合的产物,这种结合开始于(A)〇A.20世纪50年代B.20世纪60年代初期C.20世纪60年代中期 D.20世纪70年代3、计算机网络可分为两个子网,即(D)。A.物理和逻辑子网 B,通信和应用子网C.物理和虚拟子网 D.通信和资源子网4、计算机网络中负责节点间通信任务的那一部分称为(D)。A.节点交换网B.节点通信网C.用户子网D.通信子网5、计算机网络中可以共享的资源包括(A)〇A.硬件、软件、数据、通信信道B.主机、外设、软件、通信信道C.硬件、程序、数据、通信信道D.主机、程序、数据、通信信道6、若网络形状是由站点和连接站点的链路组成的ー个闭合环,则称这种拓扑结构为(C)A.星形拓扑 B.总线拓扑 C.环形拓扑 D.树形拓扑7、网络协议主要要素为(C).A.数据格式、编码、信号电平B,数据格式、控制信息、速度匹配C.语法、语义、同步D.编码、控制信息、同步8、在组成网络协议的三要素中,用户数据与控制信息的结构与格式是指(A)«A.语法 B.语义 C.时序 D.接口9、网络中,具体实现比特流发送和接收的层次是(A)〇A.物理层 B,数据链路层 C.网络层D.应用层10、在OSI中,为实现有效、可靠数据传输,必须对传输操作进行严格的管理和控制,完成这项工作的层次是(D)»A、物理层 B,数据链路层 C、网络层 D、运输层11、在OSI参考模型中,NIC属于(B)。A.物理层 B,数据链路层 C.网络层 D.运输层12、OSI中,实现系统见二进制信息块的正确传输,为上ー层提供可靠、无错误的数据信息

的协议层是( B)。A.的协议层是( B)。A.物理层 B.数据链路层D.运输层13、数据链路层中的数据块常被称为(C)。A.信息 B.分组 C.帧 D.比特流14、OSI七层结构模型中,处于数据链路层与运输层之间的是(B).A.物理层 B.网络层 C.会话层 D.表示层け、在OSI中,完成整个网络系统内连接工作,为上ー层提供整个网络范围内两个终端用户之间数据传输通路工作的是(C)。A.物理层 B,数据链路层 C.网络层 D.运输层16、完成路径选择功能是在OSI模型的(C)〇A.物理层 B.数据链路层 C.网络层 D.运输层17、OSI模型中,N层提供的服务是(A)与对等层交体交换信息来实现的。A.利用N-1层提供的服务以及按N层协议B.利用N层提供的服务以及按N-1层协议C・利用N+1层提供的服务以及按N层协议D.利用N层提供的服务以及按N+1层协议二、填充题:1、计算机网络的主要功能为共享、数据通信共享、用户之间的信息交换。2、计算机网络系统发展的第一阶段是联机系统,实质上是联机多用户 系统。3、网络中各种被共享的资源按特性可以分为四类:硬件、软件、数据和通信信道。4、ー个计算机网络典型系统可由资源子网和通信子网组成。5、OSI模型有物理层、数据链路层、网络层、运输层、会话层、表示层和应用层七个层次。6、OSI体系结构中,(N)层通过对等实体通信操作得到(N-1)层提供的服务。7、在OSI参考模型中,数据链路的上层是物理层,下层是网络层。8、传输层向上提供的服务是用ー组原语来描述的,原语分为请求、指示、响应和确认四类三、计算问答题1、什么是网络协议?由哪几个基本要素组成?答:网路协议为计算机网络中进行数据交换而建立的规则,标准或约定的集合。网络协议三要素:语法,语义,同步2、计算机网络的拓扑结构种类有哪些?各自的特点是什么?答:总线型拓扑,星型拓扑,环形拓扑,树形拓扑,混合型拓扑。总线型结构由一条高速公用主干电缆即总线连接若干个结点构成网络。网络中所有的结点通过总线进行信息的传输。这种结构的特点是结构简单灵活,建网容易,使用方便,性能好。其缺点是主干总线对网络起决定性作用,总线故障将影响整个网络。总线型拓扑是使用最普遍的一种网络。星型拓扑由中央结点集线器与各个结点连接组成。这种网络各结点必须通过中央结点才能实现通信。星型结构的特点是结构简单、建网容易,便于控制和管理。其缺点是中央结点负担较重,容易形成系统的“瓶颈”,线路的利用率也不高。环型拓扑由各结点首尾相连形成ー个闭合环型线路。环型网络中的信息传送是单向的,即沿ー个方向从ー个结点传到另ー个结点;每个结点需安装中继器,以接收、放大、发送信号。这种结构的特点是结构简单,建网容易,便于管理。其缺点是当结点过多时,将影响传输效率,不利于扩充。树型拓扑是ー种分级结构。在树型结构的网络中,任意两个结点之间不产生回路,每条通路都支持双向传输。这种结构的特点是扩充方便、灵活,成本低,易推广,适合于分主次或分等级的层次型管理系统。主要用于广域网,由于结点之间有多条线路相连,所以网络的可靠性较搞高。由于结构比较复杂,建设成本较高。混合型拓扑可以是不规则型的网络,也可以是点一点相连结构的网络。3、设有一个系统具有n层协议,其中应用进程生成长度为m字节的数据,在每层都加上长度为h字节的报头,试计算传输报头所占用的网络带宽百分比。答:在同一结点内,当应用进程产生数据从最高层传至最底层时,所添加的报头的总长度为nh字节,数据部分仍为m字节。因此,为传输报头所占用的网络带宽百分比为nh/(nh+m)*100%ー、用流程图表示下述算法:1)有3个数a、b、c,要求输出其中的最大数。2)判断一个数能否同时被3和5整除。二、利用伪代码表示下述算法:1)将100~200之间的所有素数输出。#include<stdio.h>intmain()(doublex,y,i;inta,b;x=100;do{i=2.0;do(y=x/i;a=(int)y;if(y!=a)〃用于判断是否为整数{if(i==x-1)(b=(int)x;printf(M%d\nn,b);}}i++;}while(y!=a);x++;}while(x<=200);//100到200的素数return0;ー、单项选择题Putchar函数可以向终端输出ー个(D)。A,整型变量表达式值B,实型变量值C.字符串D,字符或字符型变量值printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5歹(]。如果字符串长度大于5,则输出按方式(B);如果字符串长度小于5,则输出按方式(C)。A,从左起输出该字符串,右补空格B,按原字符长从左向右全部输出C,右对齐输出该字符串,左边补空格D,输出5个字符已有如下定义和输入语句,若要求al,a2,cl,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是(C)。(注1表示空格,<CR>表示回车)intal,a2;charc1,c2;scanf("%d%c%d%c”,&aI,&cl,&a2,&c2);10A120BくCR>10iA=20t^BVCR〉10A20B<CR>10A20^B<CR>有输入语句:scanf("a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据正确的形式应当是(D)。(注1表示空格,くCR>表示回车)132<CR>1,3,2<CR>a二11b二3=c二2くCR>a=l,b=3,c=2<CR>以下能正确地定义整型变量a,b和c,并未它们赋初值5的语句是(B)ointa=b=c=5;inta,b,c=5;a=5,b=5,c=5;a=b=c=5;已知ch是字符型变量,下面不正确的赋值语句是(A)och='a+b';ch=‘、〇';ch='7+'9';ch二5+9;二、填充题1、假设变量a、b和c均为整型,以下语句借助中间变量t把a、b和c中的值进行交换,即把b中的值给a,c中的值给b,a中的值给c。例如:交换前a为10,b为20,c为30,交换后a为20,b为30,c为10。请填空。t=a;a=b;b=c;c=t;2、求下面算术表达式的值。x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7答:x+a%3*(int)(x+y)%2/4=2.5+7%3*(int)(2.5+4.7)%2/4=2.75(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5答:(float)(a+b)/2+(int)x%(int)y=(float)(2+3)/2+(int)3.5%(int)2.5=43、写出程序运行的结果。main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d”,ij,m,n);)答:8.10,9,104、写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。(1)a+=a(2)a-=2 (3)a*=2+3 (4)a/=a+aa%=(n%=2),n的值等于5a+=a-=a*=a答:(1)24 (2)10(3)60 (4)0.5(5)0 (6)-120三、编程题1、要将”China”译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A”后面第4个字母是“E”.セ”代替“A”。因此,”China”应译为”Glmre”。请编ー程序,用赋初值的方法使去、c2、c3、c4、c5五个变量的值分别为,‘C’、’h’、’i’、’n‘、‘a',经过运算,使cl、c2、c3、c4、c5分别变为‘G‘Jジ、‘m’、’r‘、‘e',并输出。#include<iostream>usingnamespacestd;intmain()(chara[5]={,c,,*h,,,iVn',,a,);for(inti=0;i<5;i++)a[i]+=4;cout«a[i];2、设圆半径口1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。#include<stdio.h>#include<math.h>voidmain()(doubler,h,yz,ym,qbm,qt,yzt,pi=3.1415926;primf("请输入半径和髙:\n");scanf(H%lf%lf',&r,&h);yz=2*pi*r;ym=pi*pow(r,2);qbm=4*pi*pow(r,3);yzt=pi*pow(r,2)*h;printf("圆的周长%9.2f\n",yz);printf(”圆的面积%9.2ハガJm);printf(”球的表面积%9.22"磔01);printf(”球的体积%9.2自ガ,qt);printf("圆柱的体积%9.2f\n”,yzt);2)求方程ax2+bx+c=0的根,分别考虑①有2个不等的实根;②有2个相等的实根。#include<stdio.h>#include<math.h>intmain()(doublea,b,c,d,p;printf("请输入a,b,c的值:M);scanf(H%lf%lf%ir,&a,&b,&c);if(a==0)printf("不是二次方程”);else(d=b*b-4*a*c;if(d==O)(printf("有两个相等的根\nx=%7.21f\n”「b/(2*a));)if(d>0)(printf(H有两个不相等的根\nXl=%7.21f\nX2=%7.21f\n,',(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));/if(d<0)j1p=sqrt(-d/(2*a));printf(" 有 两 个 共\nXl=%7.21fi-%7.21f\nX2=%7.21fi-%7.21f\n",p,b/2,-p,b/2);)物复根)return0;)ー、单项选择题1、逻辑运算符两侧的运算对象的数据类型(D)。A,只能是〇或1B,只能是〇或非。正数C,只能是整型或字符型数据D.可以是任意类型的数据2、能正确表示“当x的取值在[1,10]和[200,210]的范围内为真,否则为假”的表达式是(A)。A.(x>=l)&&(x<=10)&&(x>=200)&&(x<=210)(x>=l)||(x<=10)||(x>=200)||(x<=210)(x>=l)&&(x<=10)||(x>=200)&&(x<=210)(x>=l)||(x<=10)&&(x>=200)||(x<=210)3、判断字符型变量ch是否为大写字母的正确表达式是(C)。tA,<=ch<=,Z,(ch>='A')&(ch<=,Z,)C.(ch>='A')&&(ch<=,Z,)D.('A'<=ch)AND(Z>=ch)4、已知x=43,chゴA,,y=0S则表达式(x>=y&&chvB&&!y)的值是(C)oA.OB.语法错1D.假5、以下不正确的if语句形式是(C)。if(x>y&&x!=y);if(x==y)x+=y;if(x!=y)scanf("%d”,&x)elsescanf("%d”,&y);if(x〈y){x++;y++;}6、以下程序运行的结果是(B)。intmain()(intm=5;if(m++>5)primf("%d\n”,m);elseprintf(<*%d\n,,,m一);return0;45C.6D.77、当a=l,b=3,c=5,d=4时,执行完下面一段程序后x的值是(C)。if(a<b)if(c<d)x=l;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;12368、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是(A)。w=1;x=2;y=3;z=4;m=(w<x)?w:x;m=(m<y)?m:y;m=(m<z)?m:z;A.1B.2C.3D.4二、程序填充1、输入一个字符,如果它是ー个大写字母,则把它转换为小写字母:如果它是一个小写字母,则把它转换成大写字母,在下面的横线上填入正确的内容。intmain()(charch;scanf("%c”,&ch);if(ch>='A'&&chv='Z')ch=ch+32;elseif(ch>=,a,&&ch<='z")ch=ch-32:printf("%c”,ch);return0;2、以下程序的运行结果是( 20)。intmain()inta,b,c,d,x;a=c=O;b=l;d=20;if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printfC4%d\nM,d);return0;)3、以下程序的功能是判断输入的年份是否是闰年,请在横线上填入正确的内容。intmain()(inty,f;scanf("%d”,&y);if(y%400==0)f=l;elseif(y%4==0&&y%100!=0 )f=l;elsef=0;if(Dprintf(M%dis",y);elseprintf("%disnot);printf("aleapyear\n");return0;)4、根据以下嵌套的if语句所给条件,填写switch语句,使它完成相同的功能。(假设mark的取值在1〜100之间)if语句if(mark<60)k=l;elseif(mark<70)k=2;elseif(mark<80)k=3;elseif(mark<90)k=4;elseif(mark<=100)k=5;switch语句switch((int)(markハ0))(case1:case2:case3:case4:case5: k=1;break;k=2;break;k=3;break;k=4;break;k=5;三、编程题1、从键盘输入ー个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是则输出“数据部合要求!”的信息。intmain()(inta;doubleb;prinlf(”请输入小于1000的正数”);scanf(M%dM,&a);if(a>0&&a<1000)(b=sqrt(a);printf("平方根是:%2.0f',b);)else(printf("数据部合要求!'n");2、给ー个百分制成绩,要求输出等级’A’、’B’、’C‘、‘D‘、'E'。90分以上为‘A',80-90分为‘B',70~79分为‘C',60~69分为D,60分以下为‘E'。 intmain()(inta;charb;printf(”请输入百分制成绩つ;scanf(',%d",&a);if(a>=0&&a<=!00)(swith((int)(a/10))(case10:case9:b='A';break;case8:b='B,;break;case7:b='C,;break;case6:b='D,;break;default:b=*E*;break;)printf("当前成绩等级:“+b);)else(printf("成绩超出范围,请重新输入百分制成绩\ガ);3、输入4个整数,要求按由大到小的顺序输出。intmain()inta[4];inti,j;inttemp;printf("请依次输入四个整数”);for(i=0;i<4;i++)(scanf("%d",&a[i]);)for(i=0;i<4;i++)(for(j=0;j<(4-i);j++){if(a[j]>a[j+l])|temp=a[j];a|j]=a[j+l];a[j+l]=temp;}))printf("这4个数由小到大的排列顺序如下:");for(i=0;i<4;i++)(printf(H%dn,a[i]);)printf(M\nM);return0;ー、单项选择题.对于整型变量x,与while(!x)等价的是(B).A.while(x!-0)B.while(x==0)C.while(x!=1)D.while(〜x).以下程序运行后,循环体运行的次数为(B).inti=10,x;for(;i<10;i++)x=x+i;A.10B.0C.1D.无限.设有整型变量x,下述语句(B)不会出现死循环。A、for(;;x+=l);B、for(;(x=getchar())!='\n';);

C、while(1){x++;}D、for(x=10;;x-);4、在C语言中while循环和do—while循环的主要区别是(B)Ando—while循环体内可以使用break语句,while循环体内不能使用break语句B>do—while的循环至少无条件执行一次,while的循环体不是Cndo—while循环体内可以使用continue语句,while循环体内不能使用continue语句Dnwhile的循环体至少无条件执行ー次,do一while的循环体不是5、对于整型变量x和y,语句for(x=0,y=0;(y!=123)&&(x<4);x++)y++;中的“y++;”被执行(A)An4次Bn0次C、123次Dn3次.以下程序段运行后变量n的值为(A)inti=l,n=l;for(;i<3;i++)(continue;n=n+i;}A.4B.3C.2D.1.以下程序段(D)〇x=l;do{x=x*x;}while(!x);A)是死循环B)循环执行二次〇循环执行ー次 D)有语法错误.执行语句for(i=l;i++<4;);后变量i的值是(B)〇A)3 B)4 C)5D)不定.下面程序的运行结果是(A).#include<stdio.h>intmain()(inti;for(i=l;i<=5;i++){if(i%2)printf(“*");elsecontinue;printff铲);}printf("$\n");return0;)A)*#*#*#$B)#*#*#*$C)*#*#$D)#*#*$.下面不是死循环的语句是(A)〇B)for(i=0;B)for(i=0;;i++)D)while(l)x++;C)for(x=0,y=0;(y!=123);x++二、程序填充1、运行以下程序后若从键盘输入:654V回车》,则输出结果是: 1 #include<stdio.h>intmain()(intm,n;printfC'Entermtn:");scanf("%d%d”,&m,&n);while(m!=n)(while(m>n)m-=n;while(m<n)n-=m;)printf("m二%d\n”,m);return0;)2、以下程序的运行结果是( 6)〇#include<stdio.h>intmain(){intsum=O,item=O;while(item<5)(item++;sum十二item;if(sum>=6)break;)printf(tt%d\n,,,sum);return0;)3、以下程序的运行结果是( x=8)0#include<stdio.h>intmain()(inti,j,x=0;for(i二〇;iく2;i++)(x++;for(j=0;j<3;j++)if(j%2)continue;x++;x++;}printf("x=%d\n”,x);return0;)4、下面的程序是从键盘输入学号,然后输出学号中百位数字是3的学号,当输入。时结束循环,请在横线处填上所需的内容,完成指定的功能。#include<stdio.h>intmain0{longintnum;scanf(,&num);while(num!ニ。 )(if(num/100%10) //判断百位数是否为3printf(rt%ldw,num);scanf("%ld",&num);}return0;}5、以下程序的输出结果是 8 0#include<stdio.h>intmain(){inta,b;for(a=l,b=l;a<=100;a++)(if(b>20)break;if(b%3==l){b+=3;continue;)b-=5;}printf(ut%d\n,,,a);return0;)6、以下程序的输出结果是 50〇#include<stdio.h>intmain()(intx=15;while(x>10&&x<50)(x++;if(x/3==l){x++;break;)elsecontinue;)printf(u%d\n,,,x);return0;)7、下面程序的功能是计算1-3+5-7+…-99+101的值,请在横线上填上适当的内容完成功能。#include<stdio.h>intmain()(inti,t=l,s=O; 〃s存放结果值for(i=l;i<=101;i+=2){s=s+t-i;匸i;)printf(tt%d\n,\s);return0;)8、以下程序的输岀结果是一 a=2y=2 〇#include<stdio.h>intmain()(inta,y;a=10;y=0;do(a=+2;y+=a;if(y>50)break;|while(a==14);printf(44a=%dy=%d\n,,,a,y);return0;三、编程题1、输入两个正整数m和n,求其最大公约数和最小公倍数。#include<stdio.h>intmain(){printfCU输入两个正整数川和n,求其最大公约数和最小公倍数。\ぺ);int叫n,t,r;scanf(*%d%d",&m,&n);if(m<n){t=m;m=n;n=t;)r=m%n;inta=m*n;while(r!=0)(m=n;n=r;r=m%n;}printf("这两个数的最大公约数为%d,最小公倍数为%d\n”,n,a/n);return0;)2、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include<stdio.h>voidmain()(intspace=0,letters=0,digit=0,other二。;chara;printf("输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。'n");while((a=getchar())!='\n'){if(a='')(space=++space;]elseif(a>='a'&&a<=*z*)(letters=++letters;)elseif(a>='A'&&a<="Z')(letters=++letters:}elseif(a>=’〇'&&a<='9")(digit=++digit;}else{other=++other;})printf("空格字符为刎个,英文字母为如个,数字为%d个,其他字符为刎个、n”,space,letters,digit,other);}3、有一分数序列:235813211'2*3'5'8'13'求出这个数列的前20项之和。#include<stdio.h>voidmain()(printf("3,有一分数序列:\出这个数列的前20项之和?212/1,3,2,5ノ/3,8ノ5,1318,21/13,••••"\n求doublea=2,b=l,t,sumニ〇;for(inti=0:i<20:i++)(sum=sum+a/b;t=a;a=a+b;〃从第二项起,每ー项分子=前ー项的分子+前ー项的分母b=t;〃从第二项起,每ー项分母=前ー项的分子)printf("\n这个数列的前20项之和为2f\n”,sum):ー、单项选择题1、有如下定义inta[][3]={1,2,3,4,5,6,7,8,};,则数组a的行数(BA.2 B.3C.4 D.无法确定2、以下数组定义中,正确的是(B).inta[2][3]={1,2,3,4,5,6,7};intaロ[3]={{1,2,3},{4,5,6},{7,8,9}};inta[2][]={l,2,3,4,5,6};inta[][4]={6};3、若有声明charsi口="tree";s2ロ="flower”;,则下列输出语句正确的是(〇〇A.printf("%s%s",si[5],s2[7]);B.printf("%c%c",si,s2);C.puts(si);puts(s2); D.puts(si,s2);4、若已有定义charsi[8],s2ロ={“123456”};inti;,现要将字符串"123456”赋给si,下述语句中错误的是(C).A.strcpy(si,s2); B.strcpy(si,"123456");C.sl="123456"; D.for(i=0;i<7;i++)sl[i]=s2[i];5、若有定义:charstr[6]="abcdm",*ps,*str2="abcdef"J正确的是(B)〇stycpy(strl,str2);B.表达式strcmp(strl,str2)的值>0strl=str2; D.表达式strlen(strl)的值为66、以下能对ー维数组a进行正确初始化的语句是(D),A.inta[5]=(0,0,0,0,0,) B.inta[5]=[0]inta[5]={l,2,3,4,5,6,7}D.inta[]={〇}7、下面程序运行结果是(B)„inti=0,a[]={1,2,3,4,5};do{a[i]+=10;}while(a[++i]>2);for(i=0;i<5;i++)printf("%d",a[i]);A.112345 B.12345C.1112131415 D.11123458、若有定义:inti=0,x=0;inta[3][3]={1,2,3,4,5,6,7,8,9}则以下程序段运行后x的值为(C)。for(;i<3;i++)x+=a[i][2-i];A.O B.12C.15D.189、下列数组定义中,正确的是(A).A.inta[10] B.intn=10a[n];C.intN=10;inta[N]; D.intn;scant("%d",&n);inta[n]10、已知inta[10]!则对a数组元素引用不正确的是(A)。A.a[10]B.a[3+5]C.a[10-10]D.a[5]11、设有以下变量定义:charstrl[]="string”,str2[8],*str3,*str4="string";则(A)是正确的。A.strcpy(strl,"china"); B.str2="china";C.strcpy(*str3,"china"); D.strcpy(str4[0],"china");12、下列字符数组初始化语句中,不正确的是(A),A.charc[]="Itisfine'; B.charc[ll]="Itisfine";C.charc[]={'F','I','n','e'};D.charc[]={"Itisfine"};13、若有定义:inta[3][4]={{l,2},{0},{1,2,3}};则的值为(A).A.0. B.{1,2} C.1 D.314、下列初始化语句中,正确且与语句floata[]={0,3,8,0,9,0};等价的是(C)。A.floata[6]={0,3,8,0,9}; B.floata[]={0,3,8,0,9};C.floata[6]={0,3,8,0,9,0}; D.floata[5]={0,3,8,0,9};15、判断字符串si是否大于s2,应当使用(D)。A.if(sl>s2) B.if(strcmp(s1,s2))C.if(strcmp(s2,s1)>0) D.if(strcmp(s1,s2)>0)二、程序填充1、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请在横线上填空完成功能。#include<stdio.h>intmain()(inta[2][3]={{l,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");for(i=0;i<=l;i++){for(i=0;i<=2 :i++){printf("%5d”,a[i][j]);bEfil=afilfil; 〃做互换)printf("\n”);}printf("arrayb:\n");for(i=0;i<=2 ;i++)for(j=0;j<=l;j++)printfC%5d5;b[i]U]);printf("\n'');)return0;2、下面程序的运行结果是1345 。#include<stdio.h>intmain()(inti=l,n=3j,k=3;inta[5]={1,4,5);while(i<=n&&k>a[i])i++;for(j=n-l;j>=i;j-)a[j+l]=a[j];a[i]=k;for(i=0;i<=n;i++)printf("%3d”,a[i]);return0;)3、下面的程序运行后,输出结果是ー153426 。#include<stdio.h>intmain(){inta[10]={l,2,3,4,5,6),i,j;for(i=0;i++<3;)(j=a[i];a[i]=a[5-i];a[5-i]=j;)for(i=0;i<6;i++)printグ%3d”,a[iI);return0;)4、下面程序运行后,输出结果是5234567#include<stdio.h>#include<string.h>intmain()inti=0;charsl[10]=Ml234,\s2[l〇]ゴ567”;strcat(sl,s2);while(s2[i++]!=,\0,)s2[i]=sl[i];puts(s2);return0;)5、以下的程序的功能是统计输入的数据中正数的个数,并计算它们的和,请在横线上填入需要的内容完成功能。#include<stdio.h>intmain()(intI,a[10],sum,count;sum=count=0;for(i=0;i<10;i++)sacnf(t4%d",afi]); 〃输入每个元素for(i=0;i<10;i++)if(叩]>0)(count++;sum=sum+a[i]; 〃进行正数的累加}Printf("sum二%d count=%d",sum,count);return0;)6、下列程序使用选择法按升序对a数组中的5个数进行排序,请在横线上填充完成功能。注:所谓选择法,比如第1轮,从a[〇卜a[4]找到(选择)ー个最小数与a[0]交换,第2轮则从a[l]~a[4]选择最小的与a[l]交换,依此类推,直至排序结束。#include<stdio.h>intmain()(inta[5]={2,5,l,3,4),Ij,k,t;for(i=0;i<4;i++)(k=I; 〃存放最小值的下标for(j=i+l;j<5j++)if(a[jl<a(kl) 〃进行比较k=j;〃进行数据交换t=a[i];a[i]=a[k];a[kl=t}for(i=0;i<4;i++)printfC%3dM,a[i]);return0;7、下面程序的功能是在三个字符串中找出最小的字符串,#include<stdio.h>#include<string.h>intmain()最后输出。charstr[3][20];chars[20]; //inti;for(i=0;i<3;i++)

gets(str[i]);if(strcmp(str[O],str[1])>0)strcpy(s,str[l]);elsestrcpy(s,str[O]); //if(strcmp(str[2Ls) < 0)strcpy(s,str⑵); ////定义二维字符数组,存放三个字符串定义ー维字符数组,存放最小的字符串printf(”\n最小的字符串是:\n%s\n”,.return0;//若str[0]小于等于str⑴把str[l]的字符串赋给字符数组string/Z比较str⑵和s把str⑵的字符串赋给字符数组s.);/Z输出最小字符串8、下面程序的运行结果是 #&*&%#include<stdio.h>intmain(){charsロゴ’ABCCDA”;intk;charc;for(k=l;(c=s[k])!='\O,;k++){switch(c){case'A':putchar('%');continue;case'B':++k;break;default:putchar(6*');casekC':putchar(fc&,);continue;putchar,#');)return0;)三、编程题1、用选择法对10个整数从小到大排序。#include<stdio.h>intmain(){inta[10],i,j,n;printf("输入10个数(以空格或回车换行):");for(i=0;i<10;i++)(scanf("%d",&a[i]);)for(i=0;i<10;i++)(for(j=(i+1);j<10;j++)(if(a[i]>a[j])(n=a[i];a[i]=a[j];a[j]=n;)})printf("该十个数升序为:");for(i=0;i<10;i++)printf("%2d",a[i]);getch();return0;)2、求一个3X3矩阵正对角线元素之和。#include<stdio.h>intmain()(inta[3][3],sum=0;inti,j;printf("输入ー组3*3矩阵数据:");for(i=0;i<3;i++)for(j=0:j<3;j++)scanf("%d",&a[i][j])"/输入矩阵的值printf("输出对角线数值之和:");for(i=0;i<3;i++)sum+= 〃对角线求和printf("%d”,sum);getch();return0;}3、有个15数按由小到大顺序存放在ー个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出“无此数"^include<stdio.h>^include<conio.h>intmain(){inta[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);inti,num,n=15,low,high,mid;printf("数组为:\n");for(i=0;i<n;i++)printf(*%3d*»a[i]);printf("\n请输入数组中的ー个数:つ;scanf("%d”,&num);//n=15;low=0;high=n-1;while(low<=high){mid=(low+high)/2;if(numくa[mid])high-mid-1;elseif(num>a[mid])low=mid+1;elseif(num==a[mid]){printf("机!是数组中第%d个元素的值",num,mid+1);break;))if(num!=a[mid])printf("无此数”);getch();return0;)4、有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。#include<stdio.h>intmain(){printf("请输入三行文字,统计其中英文大写字母、小写字母、空格以及其它字符的个数:、、);intmaxChar=80;chartext[3][80];〃定义三行,每行最多不超过80个字符的二位数组charc;inti,j;intupCase,lowCase,num,space,others;upCase=lowCase=num=space=others=0;for(i=0;i<3;i++){gets(text[i]);for(j=0;j<maxChar&&((c=text[i][j])!=‘、〇');j++){if(c>='A'&&cく二'Z'){upCase++;}elseif(c>='a'&&c<='z'){lowCase++;}elseif(c>='0'&&c<=*9'){num++;)elseif(c==''){space++;}else{others++;}))prinlf("upCase二%d,lowCase=%d,num二%d,space=%d,olhers=%d”,upCase,lowCase,num,space,others);getch();return0;5、编ー・程序,将两个字符串连接起来,不要strcat函数。#include<stdio.h>intmain()inti;chara[20]=for(i=0;i"helloworld",b[5]=<20&&a[i];i++);"你好”;)for(intj=puts(a);getchO;return0;i,k=0;k<5;a[j++]=b[k++]);ー、单项选择题.关于C语言函数的描述中,正确的是(B)A,函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C,函数的定义和函数的调用都可以嵌套D,函数的定义和函数的调用都不可以嵌套.以下正确的说法是(B),A.用户若需要调用标准库函数,调用前必须重新定义B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义C.系统根本不允许用户重新定义标准库函数D,用户若需要调用标准库函数,调用前不必使用预编译指令将该库函数所在文件包括到用户源文件中,系统自动去调.以下正确的函数定义形式是(C)〇A.doublefun(intx,inty) B.doublefun(intx;inty)C.doublefun(intx,inty); D.doublefun(intx,y).以下不正确的说法是(B)»A.实参可以是常量、变量或表达式B,形参可以是常量、变量或表达式C.实参可以是任意类型D.形参应与其对应的实参类型一致.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式(B)«A.地址传递B.单向值传递C.由实参传给形参,再由形参传回给实参D,由用户指定传递方式.C语言规定,函数返回值的类型是由(D).A.return语句中的表达式类型所决定B.调用该函数时的主调函数类型所决定C.调用该函数时系统临时决定D,在定义该函数时所指定的函数类型所决定.在一个C源程序文件中,若要定义ー个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类型是(D).A.extern B.register C.autoD.static.以下正确的说法是(AA.实参和与其对应的形参各占用独立的存储单元B.实参和与其对应的形参共占用ー个存储单元C.只有当实参和与其对应的形参同名时オ共占用存储单元D,形参是虚拟的,不占用存储单元9,若用数组名作为函数调用的实参,传递给形参的是(C)。A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数.以下正确的说法是(A)«如果在ー个函数中的复合语句中定义了一个变量,则该变量A,只在该复合语句中有效B,在该函数中有效C.在本程序范围内有效D,为非法变量.以下不正确的说法是(D)。A.在不同函数中可以使用相同名字的变量B.形式参数是局部变量C.在函数内定义的变量只在本函数范围内有效D.在函数内的复合语句中定义的变量在本函数范围内有效.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为(A)〇A,自动(auto) B.静态(static)C.外部(extern) D,寄存器(register)二、程序填充.以下程序的运行结果为(33)〇#include<stdio.h>voidf(inti)(inta=2;a=i++;printfぐ‘%d",a);)intmain()(inta=l,c=3;f(c);a=c++;printf("%d",a);return0;).若有以下函数定义:intfun()staticintk=0;return++k;}以下程序段运行后屏幕输出为(6 )。inti;for(i=l;i<=5i++)fun();printf(,fun());.以下程序运行后屏幕输出为(4)〇#include(stdio.h)inta=2,b=3;intmax(inta,intb)(intc;c=a>b?a:b;return(c);}intmain()(inta=4;printf("%d”,max(a,b));return0;).以下程序的输出结果是(23 ).#include(stdio.h)intmain()(inta=0,b=l;intmm(int,int);printf(,mm(a,b));printf("%d”,mm(a,b));return0;}intmm(intm,intn){statics=l;s++;return(s*(m+n));}.以下程序的运行结果是(15 )。#include<stdio.h>intmain(){intsub(intn);inti=5;printf(w%d\nw,sub(i));return0;}intsub(intn){inta;if(n==l)return1;a=n+sub(n-l);return(a);}.函数swap(inta,inty)可完成对x和y值的交换,在调用函数中运行以下语句后,a[0]和a[l]的值分别为(1,2),原因是(只对形参进行了数据修改,不会影响到实参),a[O]=l;a[l]=2;swap(a[O],a[l]);.函数swap(intarr[],intn)可完成对arr数组从第1个元素到第n个元素两两交换,在调用函数中运行以下语句后,a[O]和a[l]的值分别为(2,1 ),原因是(函数实参为数组名,主函数与子函数共享数组内存 ).a[0]=l;a[l]=2;swap(a,2);.以下程序的运行结果是(-735710),其算法是(冒泡排序 )。#include<stdio.h>intmain()(voidsort(inta[]);inta[5]={5,10,-7,3,7},i,t,j;sort(a);for(i=0;i<=4;i++)primf("%d”,a[i]);)voidsort(inta[])(inti,j,t;for(i=0;i<4;i++)for(j=0;j<4-I;j++)if(a|j]>aO+l]){t=a[j];a|j]=a|j+1];a[j+l]=t;})9以下程序的运行结果是(-13689),其算法是( )。#include<stdio.h>intmain()(voidsort(inta[]);inta[5]={9,6,8,3,-l),i,t,j;sort(a);for(i=0;i<=4;i++)printf(''%d'',a[i]);]voidsort(inta[])(inti,j,t,p;for(j=0;j<4;i++){P=j;for(i=j;i<=4;i++)if(a[i]>a[p)P=i;t=a[p];a[p]=a|j];a[j]=t;)三、编程题.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。#include<stdio.h>intgys(inta,intb)(while(<i%b!=0){intt;t=ci%b;a=b;b=t;returnb;)intgbs(inta,intb)(returna*b/gys(a,b);)intmain()(intx,y;scanf("%d%d”,&x,&y);printf("%d%d”,gys(x,y),gbs(x,y));return0;).写ー个判断素数的函数,在主函数输入ー个整数,输出是否是素数的消息。#include<stdio.h>intdone(intx){inti=1;for(i=1;i<x;i++){if(x%i==0&&x>2)return0;elsereturn1;})intmain(){intdone(intx);intb;printf("输入整数:\n");scanf("%d",&b);if(done(b)==0)printf("非素数");elseprintf("素数");return0;).写ー函数,使输入的ー个字符串按反序存放,在主函数中输入字符串、调用函数、输出字符串。#include<stdio.h>#include<conio.h>#include<string.h>voidinvert(chararray[20]){inti;for(i=strlen(array)-1;i>=0;i—)print",array[i]);)intmain(){charinvert(chararray[10]);chara[20];printf("请输入字符串:'n");gets(a);invert(a);return0;getch();}.写ー函数,由实参传来ー个字符串,统计此字符串中字母、数字、空格和其它字符的个数(使用全局变量存放这些值),在主函数中输入字符串以及输出上述结果。#include<stdio.h>#includeくconio.h>intmain(){intcount(charaiiay[20]);chara[20]=*1239f9afafafdfa*;count(a);getch();)intcount(chararray[20])(inta=0,b=0,c=0,d=0,i;for(i=0;i<20;i++){if(array[i]ニニ'')a++;elseif(array[i]>=>0'&&array[i]く二'9')b++;elseif(array[i]>=*a'&&array[i]く二,z'||array[i]>二,A'&&array[i]くニ'Z')c++;elsed++;printf("空格有%d个,数字有%d个,字母有%d个,其他字符有%d个",a,b,c,d);.写ー函数用起泡法对输入的10个整数按由小到大的顺序排列。#include<stdio.h>intmain()(inta[10];inti,j,k,1,temp;printf("请输入卜个整数:");for(i=0;i<10;i++){printf(*a[%d]=*,i);scanf("%d",&a[i]);printfC\n");)for(j=0:j<10;j++)(for(k=0;k<9-j;k++){if(a[k]>a[k+1])temp=a[k];a[k]=a[k+1];a[k+1]=temp;0;1<10;1++)printf("a[%d]=%d",1,a[l]);printf("\n");return0;ー、单项选择题1、下面的叙述中,正确的是(D)〇A.语句int*pt中的*pt是指针变量名B.定义inta[10],*pt=a;等效于inta[10],*pt;pt=&a[0];C.运算符・和&都是取变量地址的运算符D,已知指针变量p指向变量a,则&a和・p值相同,都是变量a的值2、设有以下语句,则(D)是对。数组元素的不正确引用,其中。inta[10]={0,1,2,3,4,5,6,7,8,9},*p=aA.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))3、以下程序段运行后・(++p)的值为(C)〇chara[6]="work";char*p;p=a;A、'w'B、存放7的地址 C、‘〇' D、存放的‘〇’地址4、以下程序运行段运行后x的值为(D)。inta[]={l,2,3,4,5,6,7,8);inti,x*p;x=l;p=&a[2];for(i=0,i<3,i++)x*=*(p+i);A,不确定 B.24C.120D.605、执行以下程序段的输出结果是(B)。inta=10,*p=&a;printf("%d",++*p);A.10B.11C.变量a的地址 D.变量a的地址加16、以下程序的输出结果是(D)。chara[l0]={9,8,765,4,3,2丄〇},*p;p=a+5;printf(44%d\n,,,*-p);A.5B.3 C.a[4]的地址D.47、有如下说明:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是(B)。A.*p+9B.*(p+8) C.*p+=9D.p+88、下面程序中把数组元素中的最大值放入a[0]中,则if语句中的条件表达式应该是(A)〇#include<stdio.h>intmain()(inta[10]={l,2,3,4,5,6,7,8,9,l0},*p=a,i;for(i=0;i<10;i++,p++)if()*a=*p;printf("%d\n”,*a);return0;A.p>aB.*p>a[O]C.*p>*a[O]D.*p[O]>*a[O]9、已有定义intk=2;inl*ptrl,*ptr2;且plrl和plr2均已指向变量k,下面不能正确执行的赋值语句是(C)〇k=*ptrl+*ptr2; B. ptr2=k;ptrl=ptr2; D. k=*ptrl*(*ptr2);10、下面能正确地进行字符串赋值操作的是(CA.chars[5]={uABCDEM}; B.chars[5]={'A','B','C','D','E'};char*s;s=,,ABCDE,\D.char*s;scanf(tt%s,,,s);11、以下正确的叙述是(C)〇C语言允许main函数带形参,且形参个数和形参名均可由用户指定C语言允许main函数带形参,形参名只能是argcheargvC.当main函数带有形参时,传给形参的值只能从命令行中得到D.若有说明:main(intargc,char*argv),则形参argc的值必须大于112、若有以下定义和语句,则能正确表示a数组元素地址的表达式是(B)。doublea[5],*pl;pl=a;A.a B.pl+5C.*plD.&a[5]13、若有定义:int*p[4];则标识符p(B)〇A,是ー个指向整型变量的指针B,是ー个指针数组名C.是ー个指针,它指向ー个含有4个整型元素的ー维数组D.说明不合法14、若有定义:inta[2][3];则对a数组的第i行第j列(假设i,j已正确声明并赋值)元素值得正确引用为(A)。A.*(*(a+i)+j) B.(a+i)[j] C.*(a+i+j)D.*(a+i)+j15、下列程序的运行结果是(B)。#include<stdio.h>#include<string.h>intmain(){char*sl=^^AbDeG,,;char*s2="AbdEg”;sl+=2;s2+=2;printf("%d\n”,strcmp(sl,s2));return0;}A,正数 B.负数C,零D,不确定的值16、假设pl和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(B)。A.c=*pl+*p2; B.p2=c;C.pl=p2;D.c=*pl*(*p2)二、程序填充1、以下程序的输出结果是(99 ).#include<stdio.h>intmain()char*s=,,abcd,\s+=2;primf(“%小屋,*s);return0;2、以下程序执行后,y的值为(16 )«#include<stdio.h>intmain()(inta[ド{1,3,5,7,9};inty=l,i,*p;p=&a[l];for(i=0;i<3;i++)y+=*(p+i);printf("%d\n'',y);return0;}3、ー个ー维数组中元素通过键盘输入,然后再通过键盘输入体格数给x,查找该数是否在数组中,若在输出其下标,否则输出/。用指针或地址实现,填充下列程序完成功能。#include<stdio.h>intmain(){inta[101,x,i,*p;for(i=0;i<10;i++)scanf("%d”,);〃输入!0个数scanf("%d'',&x);p=a+9;for(i=9;i>=0;i-)if(x!=*p)elsebreak;printf("%d\n”;i);}4、下面程序的运行结果是(aabcabc)。#include<stdio.h>#include<string.h>intmain()char*pl,*p2,str[50]="abc";plゴabc”;p2ゴabc";strcpy(str+1,strcat(p1,p2));printf("%s\n”,str);return0;)5、下面程序的运行结果是(*ptrl=7,*ptr2=5a=7,b=5)〇#include<stdio.h>voidswap(int*pl,int*p2)(intp;P二・pl;*pl=*p2;*p2=p;)intmain()(inta=5,b=7,*ptrl,*ptr2;ptrl=&a;ptr2=&b;swap(ptrl,ptr2);printf("*ptr1=%d,*ptr2=%d\n,,,*ptrl,*ptr2);printf("a二%d,b二%d\n”,a,b);return0;)6、以下程序对数组a中的数据进行降序排列,请填空完成功能。#include<stdio.h>#defineN10intmain()(inta[N],ij,k;kN;for(i二。;i〈N;i++)scanf(“%d”,a+i);for(k=0;vk :k++)for(i=0;i<N-k;i++)if(*(a+i)<*(a+i+l))(j=*(a+i);*(a+i)=*();*( )=j;for(i=0;i<N;i++)printf(“%4d”,*(a+i));return0;)7、下面程序的运行结果是(5 )。#include<stdio.h>ints(char*s)(char*p=s;while(*p)P++;retum(p-s);)intmain()(char*a=''abded”;inti;i=s(a);printf(“%ザ,i);return0;)8、下面程序的运行结果是(china)〇#include<stdio.h>#include<string.h>voidfun(char*s)(chara[7];s=a;strcpy(a,"look");)intmain()(char*p=''china”;fun(p);puts(p);return0;)三、编程题(使用指针完成)1、输入三个整数,按由小到大的顺序输出。#include<stdio.h>//#include<string.h>voidexchange(int*(jl,int*q2,int*q3)voidswap(int*()t1,int*pt2)if(*qlく・q2)swap(ql,q2);if(*ql<*q3)swap(q1,q3);if)(*q2<*q3)swap(q2,q3);voidswap(int*pt1,int*pt2)(inttemp;temp=*pt1;*pt1=*pt2;*pt2=temp;}intmain()(inta,b,c,*pl,*p2,*p3;scanf("%d,%d,%d*,&a,&b,&c);pl=&a;p2=&b;p3=&c;exchange(pl,p2,p3);printf(*%d,%d,%d\n”,a,b,c);return0;}2、输入三个字符串,按由小到大的顺序输出#include<stdio.h>#includeくstring.h>intmain()(voidsort(char*psi,char*p_s2);charstrl[100],str2[100],str3[100];char*p_sl=strl,*p_s2=str2,*p_s3=str3;printf("请随意输入三个字符串:\n");gets(p_sl);gets(p_s2);gets(ps3);sort(p_sl,p_s2);sort(p_sl,p_s3);sort(ps2,p_s3);printf("按照由小到大的顺序输出如下:\n%s\t%s\t%s\t*,p_sl,p_s2,p_s3);return0;)voidsort(char*psi,char*p_s2)(chartemp[100];if(strcmp(psi,ps2)>0){strcpy(temp,psi);strcpy(psi,ps2);strcpy(ps2,temp);))3、写ー函数,求一个字符串的长度。在主函数中输入字符串,调用函数得到并输出其长度。^include<stdio.h>intmain()(intlength(char*p);intlen;charstr[20];printftinputstring:);scanfC'%s,str);len=length(str);printf(*Thelengthofstringis%d.\n*,len);return0;)intlength(char*p)(intn;n=0;while(*p!=‘、〇'){n++;p++;)return(n);)4、已知一数组中用于存放ー个班30人某门课的成绩,输入成绩后计算全班成绩总和和平均值.^include<stdio.h>voidaverage(float*p,intn)(float*p_end;floatsum二〇,avg=0;p_end=p+n-1;for(;p<p_end;p++){sum=sum+(*p);)avg=sum/n;printf("学生总分=%5.2f\n",sum);printf("学生平均分=%5.2f\n",avg);)intmain()(fl

温馨提示

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

评论

0/150

提交评论