windows网络编程第二版答案杨秋(windows网络编程第二版杨秋黎附

http://www.itjxue.com  2023-02-12 20:00  来源:未知  点击次数: 

谁能提供点C语言的试题给我,最好能有答案的,非常感谢!

本试卷共5页共5大题,考生在作答前应先检查是否有缺页、白页、以防漏答。查对无误后,请先填写学号、姓名、专业,再答卷。

一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。(共10小题,每小题2分,共20分)。

1、不是C语言基本数据类型的是( )。

A、指针类型 B、整型

C、字符型 D、实型

2、设有:int a=3, b= 4, c= 5,x , y; 表达式(x=a)(y=b)0的值为( )。

A、1 B、0 C、3 D、4

3、设有语句 int a=3 ; 则执行了语句 a+ = a - = a后,变量a 的值是( )。

A、3 B、0 C、9 D、-12

4、执行以下程序后,y的值是( )

main()

{ int a[]={2,4,6,8,10};

int y=0,i,*p;

p=a[0];

for(i=0;i5;x++)

y+=*(p+i);

printf(“%d\n”,y);

}

A、17 B、18 C、19 D、30

5、有定义语句:float a[4];则分配给数组a的空间为( )字节。

A、 20 B、 12 C、 16 C、10

6、以下描述错误的是( )。

A、break语句可用于do~while语句

B、break语句和continue语句的作用是一样的

C、在循环语句中使用break语句是为了跳出循环,提前结束循环

D、在循环语句中使用continue语句是为了结束本次循环,而不终止整个循环

7、C语言中规定,if语句的嵌套结构中,else总是( )。

A、与最近的if 配对 B、与第一个if 配对

C、按缩进位置相同的if配对 D、与最近的且尚未配对的if 配对

8、说明语句“int (*p)( ); ”的含义是( ) 。

A、p是一个指向一维数组的指针变量

B、p是指针变量,指向一个整型数据

C、p是一个指向函数的指针,该函数返回一个int型数据

D、以上都不对

9、以下对二维数组c的正确声明是 ( ) 。

A、int c[3][ ]; B、int c(3,4); C、int c(2)(2); D、int c[3][2];

10、下述程序段执行后输出结果是( )。

int x=100, y=200;

printf ("% d", (x, y));

A、100 B、200 C、100,200 D、编译出错

二、填空题。(共10空,每空1分,共10分 )

1、C语言提供的三种逻辑运算符是 、 || 和!;

2、函数的返回值是通过函数中的 return 语句获得的。

3、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"定义后,a[2][2]的值为_6__ _;

4、对于"int *pa[5];" pa是一个具有5个元素的_数组指针_,每个元素是一个指向int型变量的__指针__;

5、单向链表的尾节点next指针应赋值__ NULL___;

6、for(int x=0,y=1;xy〈=5;y++)中循环体执行的次数是 0 。

7、int a[5];数组a的首地址为2000,则元素a[1]的地址为 2002 ,元素a[2]的地址为 2004 。

三、程序填空题。(共8空,每空2分,共16分 )

1、以下程序中子函数返回数组s中最大元素,数组中元素的个数由t传入。

Int findmax(int s[],int t)

{

int m,n,*p;

max=0;

p= s ;

for(n=1;nt;n++)

if(*(p+max)*(p+n)) max=n ;

return(*(p+max));;

}

Void main( )

{ int a[10];

int i;

for(i=0;i10;i+=)

scanf(“%d”,a[i]);

printf(“%d”,findmax{a,10});

}

2、以下程序完成计算1-1/2+1/3-1/4+..前n 项和的功能,请填空。

#include stdio.h

int main( )

{ int i, n, flag;

float sum;

scanf("%d", n);

flag= 1 ;

sum=0;

for(i=1;i=n; i++ )

{ sum+=(float)flag/i;

flag=-flag ;

}

printf("%.3f\n", sum);

}

3、以下程序的功能是从键盘输入n个整数,统计其中正数、0、负数的个数,请填空。

#include stdio.h

int main( )

{int a, i, count1,count2,count3;

count1=cout2=count3=0 ;

for(i=1;i=n;i++)

{ scanf(“%d”, a);

If(a0) count1++;

Else if(i==0) count2++ ;

Else count3++;

}

printf(“正数:d个,零:%d个,负数:%d个\n”, count1,count2,count3);

}

四、运行程序结果。(共4小题,每小题6分,共24分)

1、运行时输入100,200,请写出程序运行结果。

Void main( )

{

int a, b,*p1,*p2 ;

scanf ( " % d ", a , );

scanf ( " % d ", b );

printf(“a=%d,b=%d”,a,b);

p1=a; p2=b;

swap ( p1,p2);

printf(“a=%d,b=%d”,a,b);

}

Void swap ( int *p1, *p2)

{

int t ;

t=*p1; *p1=*p2; *p2=t;

}

运行结果为:

a=100,b=200a=200,b=100

2、运行时若输入1 2 3 4 -5回车,写出程序运行结果。

#include stdio.h

int main( )

{

int x, sum;

scanf("%d", x);

sum=0;

while(x0)

{ if(x%2!=0) sum+=x;

scanf("%d", x);

}

printf("sum=%d\n", sum);

}

运行结果为:

sum=4

3、写出程序运行结果。

#includestdio.h

int max(int a,int b)

{ int c;

c=ab?a:b;

return(c);

}

int min(int a,int b)

{int c;

c=ab?a:b;

return(c);

}

void main()

{ int a=2,b=6;

printf("max=%d\n",max(a,b));

printf(“min=%d\n”,min(a,b));

}

运行结果为:

max=6

Min=2

4、运行时若输入4 1 2 3 0回车,写出程序运行结果。

#include stdio.h

int main( )

{

int i, index, n;

int a[10];

scanf("%d", n);

for(i=0; in; i++)

scanf("%d", a[i]);

index=0;

for(i=1;in;i++)

{ if(a[i]a[index]) index=i; }

printf("min=%d,index=%d\n", a[index],index);

}

运行结果为:

min=0,index=3

五、程序设计.( 共3小题,每小题10分,共30分)

1、输入10个字符串,将其按由小到大排序。

#includestdio.h

#includestring.h

Void main( )

{ char c[10][20],t[10];

Int I, j,k;

For(i=0;i10;i++)

Gets(c[i]);

For(i=0;i9;i++)

{ k=I;

For(j=i+1;j10;j++)

If(strcmp(c[k],c[j])0) k=j;

If(k!=i) { strcpy(t,c[k]); strcpy(c[k],c[i]); strcpy(c[i],t); }

For(i=0;i10;i++)

Puts(c[i]);

}

2、求出1!+2!+3!+…+8!。

#includestdio.h

Float fact(int n)

{ float f;

If(n==1||n==0) f=1;

Else f=fact(n-1)*n;

Return(f);

}

Void main( )

{float sum;

Int I;

Sum=0;

For(i=1;i=8;i++)

Sum+=fact(i);

Printf(“sum=%d\n”,sum);

}

3、请写出在一个单向链表中插入一个结点的函数:

struct student *insert(struct student *head, struct student *stud)

(说明:链表结点有两个成员:数据成员data和指针成员next)。

#include stdio.h

#include malloc.h

#define NULL 0

#define LEN sizeof(struct student)

struct student

{ int data;

struct student *next;

};

int n;

struct student *insert(struct student *head, struct student *stud)

{struct student *p0,*p1,*p2;

p1=head;p0=stud; if(head==NULL)

{head=p0; p0-next=NULL;}

else{while((p0-datap1-data) (p1-next!=NULL))

{p2=p1; p1=p1-next;}

if(p0-data=p1-data) {if(head==p1) head=p0;

else p2-next=p0; p0-next=p1;}

else {p1-next=p0; p0-next=NULL;}}

n=n+1; return(head);

}

网络安全有哪些主要技术?

一:学网络安全需要的知识:

1、必须精通TCP/IP协议族。

2、学习和了解各种OS 平台,如:linux,UNIX,BSD 等。

3、随时关注网络安全最新安全动态。

4、熟悉有关网络安全的硬软件配置方法。尤其交换机和路由的配置。

5、多泡网络安全论坛。

6、终身学习。

二:网络安全必修课程:(后面的教材仅为参考)

0、专业基础:

1)C/C++:【C++Primer中文版 还有题解c++ primer 需要一定的C++基础,如果要比较基本的话,钱能的那本不错,清华大学出版社的。 c programming languge 全球最经典的C语言教程 中文名字c程序设计语言】

2)汇编语言 asm

3)操作系统【linux,UNIX,BSD】UBUNTU是linux操作系统 鸟哥的linux私房菜】

4)计算机网络

1、系统编程:(Windows核心及网络编程)

1、精通VC/C++编程,熟悉windows网络SOCKET编程开发

1)《Windows网络编程(第二版)》(附光盘),(美)Anthony Jones, Jim Ohlund著;杨合庆译;清华大学出版社,2002.1

2)《Windows 核心编程(第四版)》(附光盘),(美)Jetfrey Richter著,王建华 等译;机械工业出版社,2006.9

2、逆向工程:

1)《加密与解密(第二版)》(附光盘),段钢 著,电子工业出版社;2004.5

3、网络协议:

1)《计算机网络实验教程》(《COMPUTER NETWORKS: INTERNET PROTOCOLS IN ACTION》),(美)JEANNA MATTHEWS著,李毅超 曹跃 王钰 等译,人民邮电出版社,2006.1

2)《TCP/IP协议详解?卷一:协议》、《TCP/IP详解?卷2:实现》、《TCP/IP详解?卷3:TCP 事务协议、HTTP、NNTP和UNIX域协议》,美 W.Richard Stevens 著,机械工业出版社,2004.9

?或《用TCP/IP进行网际互联第一卷:原理、协议与结构》、《用TCP/IP进行网际互联第二卷:设计、实现与内核》、《用TCP/IP 进行网际互联第三卷:客户-服务器编程与应用》(第四版)、(美)Douglas E.Comer林瑶 等,电子工业出版社,2001 年5月

4、网络安全专业知识结构:

1)《信息安全原理与应用(第三版)》(《Security in Computing》),(美)CharlesP Pfleeger,Shari Lawrence Pfleeger著;李毅超,蔡洪斌,谭浩 等译; 电子工业出版社,2004.7

2)《黑客大曝光--网络安全机密与解决方案》(第五版),(美)Stuart McClure,Joel Scambray, George Kurtz;王吉军 等译,清华大学出版社,2006年4月

三:英语学好,也是有用的,尤其是考一些比较有用的证。

请比较Linux与Windows在网络编程方面的特点

找了一段,大致涉及到了您的问题:

一、socket的模式

socket一般有两种模式:同步和异步(windows网络编程技术中也可叫锁定和非锁定,Linux网络编程叫阻塞和非阻塞)。

二、socket的类型

socket一般有三种类型,基于TCP的流式套接字,基于UDP的数据报套接字和原始套接字。

三、socket的IO模型

socket

的IO模型是编程中使用socket两种模式的策略,它们适用的场合不同,在不同的操作系统上支持的模型也不同,例如windows从NT版本才开始支持

完成端口模型。Linux和Windows所支持的模型也有区别,当然也有相同的地方,可能叫法不一样,但大致思路是一样的,下面分别介绍windows

和Linux的IO模型

1、 Windows下的套接字IO模型:

A、 Select(选择)模型

用于同步socket的状态检测模型,又叫(Linux)多路复用,可以同时检测多个socket的状态

B、 WSAAsyncSelect(异步选择)模型

用于异步socket的异步事件设置,它是基于Windows消息的模型,必须先打开一个窗口,然后把窗口和socket的消息绑定,这样,在socket有消息通知时,操作系统便通知窗口,然后在窗口进行处理。

C、 WSAEventSelect(异步事件)模型

于异步socket的异步事件,它是基于网络事件的模型,先使用CreateEvent创建一个事件,然后使用WSAEventSelect进行事件绑

定,然后可以使用WaitForMultipleObject(Event)进行事件监听,可以同时监听多个事件,不光是socket的,比如可以监听使

用CreateWaitableTimer创建的Timer等。

D、 重叠IO模型

于异步socket,在创建socket时需要在创建函数WSASocket中使用WSA_FLAG_OVERLAPPED标志,然后在投递IO请求的时

候将一个Overlapped结构体指针赋给投递函数,可以使用WSAWaitForMultipleObject来监听事件,然后使用

WSAGetOverlappedResult来获取IO的状态,也可以在Overlapped结构体中使用完成例程来处理,即在投递函数中把完成例程赋

给投递函数。

E、 完成端口模型

是迄今为止最复杂的一种IO模型,当应用程序需要管理众多的套接字并且希望随着系统内安装的CPU数目的增多,应用程序的性能也可以线性增加,就可以使用

这种模型,它的原理是每个CPU可以单独负责一个线程的执行,避免线程的频繁切换。使用这种模型往往可以达到最佳的系统性能。

先需要使用CreateIOCompletePort来创建完成端口,然后将IO句柄和此端口绑定,绑定也是使用此函数,当然也可以一次完成。接着是创建

工作者线程,工作者线程会使用GetQueuedCompletionStatus进入完成端口维护的线程池,当有完成事件时,会激活一个线程。

2、 Linux下的IO模型

A、阻塞IO

B、非阻塞IO

C、IO多路复用(选择)

D、信号驱动

用于异步socket,首先设定信号处理函数,然后使用fcntl函数设定socket的拥有者,像windows下使用WSAAsncSelect设定socket的窗口一样。使用这种模型,当内核操作可以被操作的时候通知我们的应用程序

E、异步IO

当内核在所有操作完成后才会通知应用程序

四、socket的一些使用上的优化

A、缓冲区的优化,可以考虑让应用程序使用比较小的缓冲区,但同时使用多个WSARecv

B、使用socket选项SO_SNDBUF和SO_RCVBUF设置socket缓冲区大小,如果设为0,操作体系统会使用应用程序的缓冲区,这样避免了从系统缓冲区向用户区复制的开销

五、注意这些IO模型有些不光是针对socket的,其他的IO操作也可以使用,最常用使用的是WriteFile,ReadFile等函数。

其它查考网址:

(责任编辑:IT教学网)

更多

推荐其他营销文章