虹软笔试题目
- 格式:doc
- 大小:473.00 KB
- 文档页数:16
选择题1:以下属于C语言保留字的是 DA.fopenB.includeC.getD.unsigned2:设enum color {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:设int a,*p;则语句p=&a;中的运算符“&”的含义是 DA.位与运算B.逻辑与运算C.取指针内容D.取变量地址6:编译程序的功能是 CA.将汇编语言程序转换为目标程序B.将汇编语言程序转换为高级语言程序C.将高级语言程序转换为目标程序D.将高级语言程序转换为汇编语言程序7:执行语句“ k=5 | 3; ”后,变量 k 的当前值是 CA.1B.8C.7D.28:设有变量说明语句int a=1,b=0;则执行以下程序段的输出结果为()。
Bswitch (a){case 1:switch (b){case 0:printf("**0**");break;case 1:printf("**1**");break;}case 2: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.3C 10:在下述选项时,没有构成死循环的程序是 AA.int i=100 while (1) { i=i%100+1; if (i>100) break; }B.for (;;);C.int k=1000; do { ++k; }while(k>=10000);D.int s=36; while (s);--s;A 11:以下合法的数组说明是A.char a[6]="string";B.int a[5]={0,1,2,3,4,5};C.char a="string";D.INT a[]={0,12,3,4,5};D 12:数组定义为“ int a [ 4 ][ 5 ];”,下列哪一个引用是错误的A.*aB.*(*(a+2)+3)C.&a [ 2 ][ 3 ]D.++aB 13:设int x=-1;执行表达式++x||++x||++x后,x的值是 DA.0B.1C.2D.314:1.若定义了char ch[]={″abc\0def″ },*p=ch;则执行printf″%c″,*p+4;语句的输出结果是 CA.defB.dC.eD.015:设struct{ short a;char b;float c;}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.0 59.66.105.255211.71.0.0 211.71.255.255限制:IP段的起止地址间以空格隔开。
文件不超过10万行,内存不超过4M字节。
要求:请编写一个程序,读入IP.TXT文件。
并从标准输入接受一个IP地址。
如果该地址在授权范围内,则在标准输出上打印Y,否则打印N.如果输入为一个空行,程序结束。
请给出思路(文字描述),完成代码,分析你采用算法的优劣。
请列举测试方法和思路18:谈谈COM的线程模型。
然后讨论进程内/外组件的差别。
单线程(STA)一个对象只能由一个线程访问多线程(MTA)对象可以被多线程访问中立线程套间(na)一个线程可以被任何线程访问,与MTA不同的是任何线程。
COM只有两种公寓,一种叫单线程公寓(Single-Thread Apartment),简称STA,一种叫多线程公寓(Multi-Thread Apartment),简称MTA,顾名思义,一种只能容纳一个线程,另一种能容纳多个线程。
在一个进程中,MTA只有一个,而STA 可以有很多。
进程内组件指DLL在客户程序的进程空间内运行,从你调用组件的时候起,DLL 开始存在内存中,当客户端程序终止时,DLL也结束而进程外组件在客户程序的外部进程空间运行!当客户端程序终止时,DLL不结束,它所在进程与客户进程不相关!他由服务器决定,这在DCOM中非常有用!19:假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点。
void deleteItem(Node *p){While(NILL!=p->next){P->item=p->next->item;P=p->next;}Delete p;P=NULL;}20:定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。
由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。
typedef struct DATA{int year;int month;int day;}date;int leap_year(int a);int cal_day(date a);int leap_year(int a){if((a%4==0&&a%100!=0)||a%400==0)return 1;elsereturn 0;}int cal_day(date a){int sum=0;int b[]={31,28,31,30,31,30,31,31,30,31,30,31}; for(int i=0;i<a.month-1;i++)sum+=sum+b[i];if(a.month>2)sum=sum+a.day+leap_year(a.year);elsesum=sum+a.day;return sum;}void main(){date a;int n;scanf("%d,%d,%d",&a.year,&a.month,&a.day);n=cal_day(a);printf("%d",n);}21:执行下述程序的输出结果是______3600__________。
#includeint w=3main(){int w=10;printf("%d\n",fun(5)*w);}int fun(int k){if (k==0)return (w);return (fun(k-1)*k);}22:设有一个顺序表A,包含n个元素,要求写出一个将该表逆置的算法,并只允许在原表的存储空间少再加一个附加的工作单元。
23:用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60*60*24*365)UL24:阅读下列程序,将输出结果写到各题右侧的空白处。
20, 4030, 60main( ){int x=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:写出不带头结点的双向链表的插入排序算法。
#include<iostream>using namespace std;typedef struct node{float data;struct node *pre;struct node *next;}*DoubleNode;void sort_DoubleNode(DoubleNode &head,float data){DoubleNode node = (DoubleNode)malloc(sizeof(struct node));DoubleNode p,q;node->data = data;if(head == NULL){head = node;head->next = NULL;head->pre = NULL;return;}p = head;while(p != NULL && p->data < data){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;}}void out_DoubleNode(DoubleNode &head) {DoubleNode p = head;while(p != NULL){printf("%.4f ", p->data);p = p->next;}printf("\n");}void main(){int n;float data;int i;DoubleNode head = NULL;scanf("%d", &n);for(i=0; i<n; ++i){scanf("%f",&data);sort_DoubleNode(head, data);}out_DoubleNode(head);}1:定义了int b[][3]={1 ,2,3,4,5,6,7};,则b数组第一维的长度是 BA.2B.3C.4D.无确定值2:main() A{ int x,y;x=y=1;y=++x;printf( ″ %d,%d\n ″ ,x,y);}程序运行结果为A.2,2B.1,2C.2,1D.1,13:下列各语句定义了数组,其中一个不正确的是 BA.static int a [ 5 ] ,b [ 2 ][ 3 ] ;B.char no [ 30 ] ,rec [ 30,6 ];C.int x [] ={2,4,6,8,10};D.int x [ 10 ] ={1,2,3,4,5} ;4:设float m=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{ char a[10];short b[4][5];long c[5];}u;则执行printf(″%d\n″,sizeof(u));语句的输出结果是A.10B.20C.40D.708:调用函数时,若实参是一个数组名,则向函数对应的形参传送的是 BA.数组的长度B.数组的首地址C.数组第一个元素的值D.整个数组元素的值9:对于如下定义的枚举型enum list1{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.int i=100 while (1) { i=i%100+1; if (i>100) break; }B.for (;;);C.int k=1000; do { ++k; }while(k>=10000);D.int s=36; while (s);--s;B 12:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算13:执行语句 printf( " |%9.4f|\n " ,12345.67); 后的输出结果是 BA.|2345.6700|B.|12345.6700|C.|12345.670|D.|12345.67|14:设int a;,则表达式a=2,4,a+1的值是 CA.1B.2C.3D.415:设 #define L(x) 2*3.14*x,则 L(x) 是 DA.函数名B.函数调用C.无参的宏名D.带参的宏名16:C语言中,错误的int类型的常数是 AA.1E5B.0C.037D.0xaf17:若main()函数带参数,参数个数最多是 CA.0B.1C.2D.3简答题18:#includeclass Value{public:Value(int nVal) {m_nVal=nVal;printf(\"Call Value::Value(int nValue)n\");}~Value() {printf(\"Call Value::~Value()n\");}Value& operator=(int nVal){m_nVal=nVal;printf(\"Call Value::operator=n\");return *this;}void Dump() {printf(\"Value::m_nVal=%dn\",m_nVal);}protected:int m_nVal;};class Base{public: Base() {Init();}virtual ~Base() {Release();}virtual void Init() {printf(\"Call Base::Init()n\");}virtual void Release() {printf(\"Call Base::Release()n\");} virtual void Dump() {printf(\"Call Base::Dump()n\");}};class Derive:public Base{public:Derive() {printf(\"Call Derive::Derive()n\");}~Derive() {printf(\"Call Derive::~Derive()n\");}virtual void Init() {m_Val=2;printf(\"Call Derive::Init()n\");} virtual void Release() {printf(\"Call Derive::Release()n\");} virtual void Dump() {m_Val.Dump();}protected:static Value m_Val;};Value Derive::m_Val=0;void DestroyObj(Base* pOb)pOb->Dump();delete pOb;}void main(){Derive *pOb=new Derive;DestroyObj(pOb);}写出结果19:假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到 1000(包括1000)之间。