选择题1:以下属于C语言保留字的是DA.fopenB.includeC.getD.unsigned2:设enumcolor{red,yellow=2,blue,white,black}r=white;,执行printf(%d,r);后的输出结果是DA.0B.1C.3D.43:对于while语句,错误的说法是BA.用条件控制循环体的执行次数B.循环体至少要执行一次C.循环体有可能一次也不执行D.循环体中可以包含若干条语句4:在C语言中,′a′和″a″存储所占用的字节数分别是BA.1,1B.1,2C.2,1D.2,25:设inta,*p;则语句p=&a;中的运算符“&”的含义是DA.位与运算B.逻辑与运算C.取指针内容D.取变量地址6:编译程序的功能是CA.将汇编语言程序转换为目标程序B.将汇编语言程序转换为高级语言程序C.将高级语言程序转换为目标程序D.将高级语言程序转换为汇编语言程序7:执行语句“k=5|3;”后,变量k的当前值是CA.1B.8C.7D.28:设有变量说明语句inta=1,b=0;则执行以下程序段的输出结果为()。Bswitch(a){case1:switch(b){case0:printf(**0**);break;case1:printf(**1**);break;}case2:printf(**2**);break;}printf(\n);A.**0**B.**0****2**C.**0****1****2**D.有语法错误9:设int型变量x有初始值3,则表达式x++*5/10的值是BA.0B.1C.2D.3C10:在下述选项时,没有构成死循环的程序是AA.inti=100while(1){i=i%100+1;if(i100)break;}B.for(;;);C.intk=1000;do{++k;}while(k=10000);D.ints=36;while(s);--s;A11:以下合法的数组说明是A.chara[6]=string;B.inta[5]={0,1,2,3,4,5};C.chara=string;D.INTa[]={0,12,3,4,5};D12:数组定义为“inta[4][5];”,下列哪一个引用是错误的A.*aB.*(*(a+2)+3)C.&a[2][3]D.++aB13:设intx=-1;执行表达式++x||++x||++x后,x的值是DA.0B.1C.2D.314:1.若定义了charch[]={″abc\0def″},*p=ch;则执行printf″%c″,*p+4;语句的输出结果是CA.defB.dC.eD.015:设struct{shorta;charb;floatc;}cs;则sizeof(cs)的值是DA.4B.5C.6D.7简答题16:找出32位数中是回文数,且其开方为整数的数。17:Security公司的网络管理工程师Mr.leak最近发现有不少来自公司外部IP的请求,试图非法访问公司内部资源,为了不影响数据访问流程。他不得不写一个高效的程序——一个工作在Ipv4上的防火墙,如果请求来自非授权的ip地址,则将请求丢弃。为了便于管理,通过文本文件IP.TXT来配置授权的IP地址,文件格式为每行(’/n’)一个IP地址(或IP段),范围不超过一个B类。例如:162.105.91.16359.66.105.059.66.105.255211.71.0.0211.71.255.255限制:IP段的起止地址间以空格隔开。文件不超过10万行,内存不超过4M字节。要求:请编写一个程序,读入IP.TXT文件。并从标准输入接受一个IP地址。如果该地址在授权范围内,则在标准输出上打印Y,否则打印N.如果输入为一个空行,程序结束。请给出思路(文字描述),完成代码,分析你采用算法的优劣。请列举测试方法和思路18:谈谈COM的线程模型。然后讨论进程内/外组件的差别。单线程(STA)一个对象只能由一个线程访问多线程(MTA)对象可以被多线程访问中立线程套间(na)一个线程可以被任何线程访问,与MTA不同的是任何线程。COM只有两种公寓,一种叫单线程公寓(Single-ThreadApartment),简称STA,一种叫多线程公寓(Multi-ThreadApartment),简称MTA,顾名思义,一种只能容纳一个线程,另一种能容纳多个线程。在一个进程中,MTA只有一个,而STA可以有很多。进程内组件指DLL在客户程序的进程空间内运行,从你调用组件的时候起,DLL开始存在内存中,当客户端程序终止时,DLL也结束而进程外组件在客户程序的外部进程空间运行!当客户端程序终止时,DLL不结束,它所在进程与客户进程不相关!他由服务器决定,这在DCOM中非常有用!19:假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点。voiddeleteItem(Node*p){While(NILL!=p-next){P-item=p-next-item;P=p-next;}Deletep;P=NULL;}20:定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。typedefstructDATA{intyear;intmonth;intday;}date;intleap_year(inta);intcal_day(datea);intleap_year(inta){if((a%4==0&&a%100!=0)||a%400==0)return1;elsereturn0;}intcal_day(datea){intsum=0;intb[]={31,28,31,30,31,30,31,31,30,31,30,31};for(inti=0;ia.month-1;i++)sum+=sum+b[i];if(a.month2)sum=sum+a.day+leap_year(a.year);elsesum=sum+a.day;returnsum;}voidmain(){datea;intn;scanf(%d,%d,%d,&a.year,&a.month,&a.day);n=cal_day(a);printf(%d,n);}21:执行下述程序的输出结果是______3600__________。#includeintw=3main(){intw=10;printf(%d\n,fun(5)*w);}intfun(intk){if(k==0)return(w);return(fun(k-1)*k);}22:设有一个顺序表A,包含n个元素,要求写出一个将该表逆置的算法,并只允许在原表的存储空间少再加一个附加的工作单元。23:用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR(60*60*24*365)UL24:阅读下列程序,将输出结果写到各题右侧的空白处。20,4030,60main(){intx=20,y=40,*p;p=&x;printf(″%d,″,*p);*p=x+10;p=&y;printf(″%d\n″,*p);*p=y+20;printf(″%d,%d\n″,x,y);}25:写出不带头结点的双向链表的插入排序算法。#includeiostreamusingnamespacestd;typedefstructnode{floatdata;structnode*pre;structnode*next;}*DoubleNode;voidsort_DoubleNode(DoubleNode&head,floatdata){DoubleNodenode=(DoubleNode)malloc(sizeof(structnode));DoubleNodep,q;node-data=data;if(head==NULL){head=node;head-next=NULL;head-pre=NULL;return;}p=head;while(p!=NULL&&p-datadata){q=p;p=p-next;}if(p==head){node-next=head;node-pre=NULL;head-pre=node;head=node;}else{q-next=node;node-pre=q;node-next=p;if(p!=NULL)p-pre=node;}}voidout_DoubleNode(DoubleNode&head){DoubleNodep=head;while(p!=NULL){printf(%.4f,p-data);p=p-next;}printf(\n);}voidmain(){intn;floatdata;inti;DoubleNodehead=NULL;scanf(%d,&n);for(i=0;in;++i){scanf(%f,&data);sort_DoubleNode(head,data);}out_DoubleNode(head);}1:定义了intb[][3]={1,2,3,4,5,6,7};,则b数组第一维的长度是BA.2B.3C.4D.无确定值2:main()A{intx,y;x=y=1;y=++x;printf(″%d,%d\n″,x,y);}程序运行结果为A.2,2B.1,2C.2,1D.1,13:下列各语句定义了数组,其中一个不正确的是BA.staticinta[5],b[2][3];B.charno[30],rec[30,6];C.intx[]={2,4,6,8,10};D.intx[10]={1,2,3,4,5};4:设floatm=4.0,n=4.0;使m为10.0的表达式是DA.m-=n*2.5B.m/=n+9C.m*=n-6D.m+=n+25:下列各个错误中,属于编译错误的是DA.数组下标超界B.“==”误写为“!=”C.死循环D.括号不配对6:C语言程序编译时,程序中的注释部分DA.参加编译,并会出现在目标程序中B.参加编译,但不会出现在目标程序中C.不参加编译,但会出现在目标程序中D.不参加编译,也不会出现在目标程序中7:若定义了()Bunion{chara[10];shortb[4][5];longc[5];}u;则执行printf(″%d\n″,sizeof(u));语句的输出结果是A.10B.20C.40D.708:调用函数时,若实参是一个数组名,则向函数对应的形参传送的是BA.数组的长度B.数组的首地址C.数组第一个元素的值D.整个数组元素的值9:对于如下定义的枚举型enumlist1{x1,x2,x3,x4=6,x5,x6};枚举常数x2和x6的值分别是BA.1,6B.1,8C.2,6D.2,810:若变量已正确定义并且指针p已经指向变量x,则*&x相当于AA.xB.pC.&xD.&*p11:在下述选项时,没有构成死循环的程序是CA.inti=100while(1){i=i%100+1;if(i100)break;}B.for(;;);C.intk=1000;do{++k;}while(k=10000);D.ints=36;while(s);--s;B12:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算13:执行语句printf(|%9.4f|\n,12345.67);后的输出结果是BA.|2345.6700|B.|12345.6700|C.|12345.670|D.|12345.67|14:设inta;,则表达式a=2,4,a+1的值是CA.1B.2C.3D.415:设#defineL(x