2023年山东省青岛市全国计算机等级考试网络技术模拟考试(含答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2023年山东省青岛市全国计算机等级考试网络技术模拟考试(含答案) 学校:________ 班级:________ 姓名:________ 考号:________
一、单选题(10题)
1.下列对IEEE 802.11系列标准的描述中,错误的是()。

A.IEEE 802.11 g的最大传输速率是54Mbps
B.IEEE 802.11b的实际吞吐量是5~7Mbps
C.IEEE 802.11 a的最大容量是432Mbps
D.IEEE 802.11g工作在5GHz ISM频段
2.不同AS之间使用的路由协议是()。

A.BGP一4
B.ISIS
C.OSPF
D.RIP
3. 关于光纤分布式数据接口FDDI的叙述错误的是______。

A.FDDI是一种以光纤为传输介质的高速主干网
B.FDDI具有动态分配带宽的能力
C.FDDI能支持同步和异步数据传输
D.FDDI标准采用了IEEE 803的体系结构
4.一个功能完备的计算机网络需要指定一套复杂的协议集。

对于复杂的计算机网络协议来说,最好的组织方式是( )。

A.连续地址编码模型
B.层次结构模型
C.分布式进程通信模型
D.混合
结构模型
5. 关于Linux操作系统的描述中,错误的是
A.Linux是开放性的自由软件
B.Linux支持多任务、多用户
C.Linux的图形界面有KDE和GNOME
D.Linux不具有标准的兼容性
6.第49题电子商务的交易类型主要包括()。

A.企业与个人的交易(B to C)方式、企业与企业的交易(B to B)方式
B.企业与企业的交易(B to B)方式、个人与个人的交易(C to C)方式
C.企业与个人的交易(B to C)方式、个人与个人的交易(C to )方式
D.制造商与销售商的交易(M to S)方式、销售商与个人的交易(S to C)方式
7.按照ITU-标准,传输速度为155.520Mbit/s的标准是()。

A.OC-3
B.OC-12
C.OC-48
D.OC-192
8.下列关于综合布线的描述中,错误的是()。

A.多介质信息插座是用于连接双绞线和同轴电缆
B.干线线缆铺设经常采用点对点结合和分支结合两种方式
C.终端有高速率接入要求时,水平子系统可采用光纤直接铺设到桌面
D.采用在管理子系统中更改、增加、交换、扩展线缆的方式来改变线缆路由
9.在OSI参考模型中,对等层之间互相通信需要遵守一定的规则如通信的内容、通信的方式,通常将其称为()。

A.协议
B.标准
C.TCP/IP
D.会话
10.下列关于TCP/IP传输层协议的描述中,错误的是( )。

A.TCP/IP传输层定义了TCP和UDP两种协议
B.TCP协议要完成流量控制功能
C.UDP协议主要用于不要求按分组顺序到达的传输
D.UDP协议与TCP协议都能够支持可靠的字节流传输
二、填空题(10题)
11.
第65 题OSl参考模型中,网络层的主要功能有:___________、拥塞控制和网络互联等。

12. 在软磁盘存储器中,软磁盘适配器是______。

13. 组播允许一个发送方发送数据包到多个接收方。

不论接收组成员的数量是多少,数据源只发送______数据包。

14. 在OSI参考模型中,每层可以使用______层提供的服务。

15.
16.(10)Novell公司收购了SUSE,以便通过SUSE ________Professional 产品进一步发展网络操作系统业务。

17. 通信线路是因特网的基础设施,对于通信线路的传输能力通常用______来描述。

18.
19.(13)IP数据报的源路由选项分为两类,一类为严格源路由,另一类为____原路由。

20. 在存储器管理中常用【】的方式来摆脱主存容量的限制。

三、2.填空题(8题)
21. 网桥和路由器都是网络互联的设备,它们之间的区别主要表现在
______的级别上。

22. 电子商务的安全要求包括传输的安全性、交易各方的身份认证、【】和交易的不可抵赖性四个方面。

23. 进程间的直接相互作用构成进程同步,进程间的间接相互作用构成进程______。

24. 中断系统应具有的功能包括:实现中断响应、______实现中断排队和中断嵌套。

25. 计算机网络OSI参考模型中的7个层次从高层至低层分别是:应用层、表示层、会话层、运输层、网络层、【】层和物理层。

26. 宽带网络可分为传输网、交换网和______。

27. 如果电缆调制解调器使用4MHz的频带宽度,那么,在利用256QAM 时,它可以提供的速率为【】
28. 网桥按照路由表的建立方法分为两类:______和源路由网桥。

四、C语言程序设计题(2题)
29.已知数据文件in.dat中存有200个四位数,并已调用读函数readDat 把这些数存入数组a中,请考生编制一函数isVat,其功能是:如果四位数各位上的数字均是奇数,则统计出满足此条件的个数cnt并把这些四位数按从大到小的顺序存入数组b中。

最后main函数调用写函数writeDat把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。

注意:部分源程序存在test.c文件中。

程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件in.dat中的任何数据、主函数main、读函数readDat 和写函数writeDat的内容。

30. 函数readDat是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。

请编制函数jsSort,其函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat把结果xx输出到文件out.dat中。

条件:字符串从中间一分为二,左边部分按字符的ASCII值降序排序,
右边部分不作处理,排序后,左边部分与右边部分按例子所示进行交换。

如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。

注意:部分源程序存在test.c文件中。

请勿改动数据文件in.dat中的任何数据、主函数main、读函数readDat 和写函数writeDat的内容。

五、1.选择题(3题)
31. 从软件工程的观点看,软件包括( )。

A.程序
B.程序和程序研发文档
C.程序的开发、使用和维护所需的所有文档的总和
D.可执行的程序以及程序中的说明
32. IP地址的32位二进制数被分成( )段。

A.2
B.4
C.5
D.6
33. 以下说法正确的是______。

A.虚拟网络中逻辑工作组的节点组成不受节点所在的物理位置的限制
B.虚拟网络中逻辑工作组的节点组成要受节点所在的物理位置的限制
C.采用虚拟网络技术,网络中的逻辑工作组的节点必须在同一个网段上
D.以上说法都不正确
六、1.程序设计题(3题)
34. 已知数据文件IN77.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果一个4位数的干位数字上的值加十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且此4位数是偶数,则统计㈩满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT77. DAT文件中。

注意:部分源程序已给出。

程序中已定义数组:a[200], b[200], 已定义变量:cnt。

请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。

试题程序:
#include<stdio. h>
#define MAX 200
int a[MAX] ,b[MAX] ,cnt=0;
void jsVal( )
{
}
void readDat ( )
{
int i;
FILE *fp;
fp=fopen ( "IN77. DAT", "r" );
for (i=0; i<MAX; i++)
fscanf (fp, "%d",&a [i] );
fclose (fp);
}
main ( )
{
int i;
readDat ();
jsVal ();
printf ("满足条件的数=%d\n", cnt)
for (i=0; i<cnt; i++)
printf ("%d",b [i] );
printf ("\n");
writeDat ();
}
writeDat ()
{
FILE *fp;
int i;
fp= fopen ( "OUT7 7. DAT", "w" );
fprint f (fp, "%od\n", cnt);
for (i=0;i<cnt; i++)
fprintf(fp, "%d\n",b[i]);
fclose (fp);
}
35. 编写一个函数findStr(),该函数统计一个长度为2的字符串在另一个字符串中出现的次数。

例如,假定输入的字符串为"asd asasdfg asd as
zx67 asd mklo",子字符串为“as”,函数返回值是6。

函数ReadWrite()的功能是实现从文件in40.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out40.dat中。

注意:部分源程序已给出。

请勿改动主函数main()和其他函数中的任何内容,仅在函数findStr()的花括号中填入你所编写的若干语句。

试题程序:
#include<stdio.h>
#include<string.h>
#include<conio.h>
int findStr(char *str,char *substr)
{
}
main ( )
{
char str[81],substr[3];
int n;
clrscr ( );
printf("输入原字符串:");
gets (str);
printf("输入子字符串:");
gets (substr);
puts (str);
puts (substr);
n=findStr (str, substr);
printf ("n=%d\n", n);
ReadWrite ();
}
ReadWrite ( )
{
char ch, str[81],substr[3];
int n, len, i=0;
FILE *rf,*wf;
rf=fopen ("in40.dat", "r");
wf=fopen ( "out40.dat", "w");
while (i<5)
{
fgets(str, 80,rf);
fgets(substr, 10,rf);
len=strlen (substr)-1;
ch=substr [len];
if(ch=='\n'||ch==0x1a)
substr [len]=0;
n=findStr (str, substr);
fprintf (wf,"%d\n", n);
i++;
}
fclose(rf);
fclose(wf);
}
36. 已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价由(整型)、数量s1(整型)、金额je(长整型)几部分组成。

其中:金额=单价×数量。

函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell 中。

请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT16.DAT 中。

注意:部分源程序已给出。

请勿改动主函数main()、渎函数ReadDat()和写函数WriteDat()的内容。

试题程序:
#include 〈stdio.h>
#include 〈mem.h>
#include 〈string.h>
#include 〈conio.h>
#include 〈stdlib.h>
#define MAX 100
typedef struct
{
char dm[5]; /* 产品代码*/ char mc[11]; /* 产品名称*/ int dj; /* 单价*/
int s1; /* 数量*/
long je; /* 金额*/
} PRO;
PRO sell [MAX];
void ReadDat ();
void WriteDat();
void SortDat ()
{
}
main ( )
{
memset (sell, 0, sizeof(sell)); ReadDat ();
SortDat ();
WriteDat ();
}
void ReadDat ()
{
FILE *fp;
char str[80], ch[11];
int i;
fp = fopen("IN16.DAT", "r");
for(i=0; i〈100; i++)
{
fgets (str, 80, fp);
memcpy(sell[i].dm, str, 4);
memcpy (sell [i] .mc, str + 4, 10);
memcpy(ch, str + 14, 4);
ch[4] = 0;
sell[i] .dj = atoi(ch);
memcpy(ch, str +18, 5);
ch[5] = 0;
sell[i].s1 = atoi(ch);
sell[i].je = (long) sell[i].dj * sell[i].s1;
}
fclose(fp);
}
void WriteDat()
{
FILE *fp;
int i;
fp = fopen("OUT16.DAT", "w");
for(i = 0; i〈100; i++)
{
fprintf(fp, "%s %s %4d %5d %101d\n", sell[i] .dm, sell[i] .mc,
sell[i].dj, sell[i].s1, sell[i].je);
}
felose (fp);
}
参考答案
1.DIEEE 802.11g工作在2.4GHz ISM频段。

故选择D选项。

2.A外部网关协议是不同自治系统的路由器之间交换路由信息的协议。

1989 年发布了主要的外部网关协议一边界网关协议(BGP)。

新版本BGP
一4是在1995年发布的,并采用路由向量路由协议。

中间系统到中间系统(IS—IS,Intermediate system to intermediate system,读作“i—sys”)是一种内部网关协议,是电信运营商普遍采用的内部网关协议之一。

故选项B错误;OSPF(Open Shortest Path First开放式最短路径优先)是内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。

题目的要求是不同的自治系统,故选选C错误;路由信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。

RIP是一种内部网关协议。

故选项D错误。

3.D【解析】光纤分布式数据接口FDDI标准采用了IEEE 802的体系结构和逻辑链路控制LLC协议。

4.B解析:网络体系结构仅仅是人们对于网络功能的描述,这些功能的实现要通过具体的硬件和软件来完成。

从这个意义上讲,网络体系结构由两方面组成。

一方面是网络层次结构模型,另一方面是各层的协议。

所以,也可以认为网络体系结构是网络层次结构模型和各层次协议的集合。

5.D解析:Linux操作系统具有标准的兼容性,它符合POSIX标准,它所构成的子系统支持所有相关的ANSI、ISO、IETF、W3C等业界标准。

6.A
\r\n
电子商务的交易类型主要包括:企业与企业之间的交易(B to B)、企业与个人之间的交易(BtoC)。

7.AOC-n:OpticalCarrieR1eveln(光载体等级)。

oc是OpticalCarrier的缩写,这是光纤传输的一种单位,它通常表示为OC-n,其中,n是多路传
输技术中基本速率51.84Mbit/s的倍数。

155.520Mbit/s÷51.84Mbit /s=3。

故选A选项。

8.A多介质信息插座用于连接光纤和铜缆,用以解决用户对“光纤到桌面”的需求。

故选A选项。

9.A
10.D解析:①TCP/IP参考模型的传输层定义了两种协议,即传输控制协议(TCP,Transport Control Protocol)与用户数据报协议(UDP,User Datagram Protocol)。

②TCP协议是一种可靠的面向连接的协议,它允许将一台主机的字节流无差错地传送到目的主机。

TCP协议同时要完成流量控制功能,协调收发双方的发送与接受速度,达到正确传输的目的。

③UDP协议是一种不可靠的无连接协议,它主要用于不要求按分组顺序到达的传输中,分组传输顺序检查与排序由应用层完成。

④UDP是不可靠的无连接协议。

TCP是一种可靠的面向连接的协议。

11.路由选择
【解析】OSI参考模型中,网络层要实现路由选择、拥塞控制和网络互联等功能。

12.软盘驱动器与CPU进行信息交换的通道口软盘驱动器与CPU进行信息交换的通道口解析:软磁盘存储器主要有软磁盘、软盘驱动器和软磁盘适配器组成。

软磁盘适配器是CPU与软盘驱动器进行信息交换的通道口。

13.一次一次解析:组播就是数据源一次性地向接收组的所有成员发送数据包。

14.FF 解析:OSI参考模型将整个通信功能划分为7个子层,划分层次
的原则如下:网中各结点都有相同的层次;不同结点内相邻层之间通过接口通信;同一结点内相邻层之间通过接口通信;每一层使用下层提供的服务,并向其上层提供服务;不同结点的同等层按照协议实现对等层之间的通信。

15.
16.(10) Linux
【解析】2003年11月4日,Novell表示将会对SUSE提出收购,收购的工作于2004年1月完成。

2005年8月4日,Novell公共关系科的领导及代言人表示,SUSE Linux Professional系列的开发将变得更开放以及让社群参与当中的工作。

17.数据传输速率数据传输速率解析:通信线路的传输能力通常用数据传输速率来描述,另一种更为形象的描述通信线路传输能力的术语是带宽。

18.
19.松散
【解析】源路由选项可以分为两类,一类是严格源路由选项,一类是松散源路由选项。

严格源路由选项规定lP数据报要经过路径上的每一个路由器,相邻路由器之间不得有中间路由器,并且所经过的路由器的顺序不可更改;松散源路由选项只是给出lP数据包必须经过的一些“要点”,并不给出一条完备的路径,无直接连接的路由器之间的路由尚需IP软件的寻址功能补充。

20.虚拟存储器虚拟存储器解析:在存储器管理中常用虚拟存储器的方式来摆脱主存容量的限制。

21.互联协议互联协议解析:网桥是在数据链路层实现局域网互联的设备,对于使用不同物理层协议的局域网,可以由网桥来进行连接。

路由器工作在网络的网络层上,当数据包要在不同协议、不同体系结构的网络之间进行传输时,路由器不仅可以进行路由选择,还可以进行数据包的格式转换以适应这种传送。

22.数据的完整性或数据完整性数据的完整性或数据完整性解析:数据传输的安全性。

保证数据传输的安全性就是要保证在公共因特网上传送的数据信息不被第三方监视和窃取。

数据的完整性。

保证数据的完整性就是要保证在公共因特网上传送的数据信息不被篡改。

身份认证。

在电子商务活动中,交易的双方或多方常常需要交换一些敏感信息,这时就需要确认对方的真实身份。

交易的不可抵赖。

电子商务交易的各方在进行数据信息传输时,必须带有自身特有的、无法被别人复制的信息,以防发送方否认和抵赖曾经发送过该消息,确保交易发生纠纷时有所对证。

23.互斥互斥解析:进程同步是指进程之间一种直接的协同工作关系,是一些进程相互合作,共同完成一项任务,进程间的直接相互作用构成进程的同步;各进程互斥使用临界资源,进程间的这种关系是进程的互斥,进程间的间接相互作用构成进程互斥。

24.中断服务及返回中断服务及返回解析:为了满足各种情况下的中断要求,中断系统应具有的功能包括:实现中断响应、中断服务及返回、
实现中断排队和中断嵌套等。

25.数据链路或链路或Datalink数据链路或链路或Datalink 解析:网络的OSI参考模型分为以下7层:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。

26.接入网接入网解析:宽带网络从功能上可以分成传输网、交换网和接入网三大部分,其相关技术也分为3类,即传输技术、交换技术和接入技术。

27.32Mbps。

32Mbps。

解析:如果电缆调制解调器使用4MHz的频带宽度,那么,在利用256QAM时,它可以提供的速率为32Mbps。

28.透明网桥透明网桥解析:网桥按照路由表的建立方法分为两类:透明网桥和源路由网桥。

这两种网桥标准分别由IEEE 802.1与IEEE 802.5两个分委员会制定。

29.【审题关键句】各位都是奇数,从大到小排序。

\n【解题思路】
\n本题类似第32套试题,通过审题可以发现主要是对四位数的筛选条件有所不同,即判断四位数的每一位数都为奇数,参考答案的第8条语句,只需将每位数的判断条件改为奇数判断即可。

\n【参考答案】
\n
30.【审题关键句】以行为单位从字符串左边部分降序排序,排序后左边部分与右边部分进行交换。

如果原字符串长度为奇数,则最中间的字符不参加处理。

\n【解题思路】①定义循环变量i、j、k和整型变量len、P。

\n②第一层for循环中,循环变量i从0开始,依次递增直到其值等于20,实现对20行数据的逐行处理。

在循环体中,对于i行首先调用函数strlen(xx[i])求得第i行字符串的长度,并把其值赋给变量len,再用len 除以2,得到第i行字符串长度的一半,赋给变量P。

在第二层for循环中,循环变量j从0开始,依次递过来增直到其值等于(p-1),在第三层for循环中,循环变量k从j+1开始,依次递过来增直到其值等于P,比较字符xx[i][j]ASCII码值与xx[i][k]ASCII码值的大小,如果字符xx[i][j]的ASCII码值小于xx[i][k]的ASCII码值,则两者进行互换实现对第i 行字符串左半部分的字符串按降序排列。

\n③用变量len的值对2求余数,如果余数为1,则调用函数字符串拷贝函数strcpy,把从字符串xx[i]+P+1开始直到字符串xx[i]的结尾的子字符拷贝到字符串变量str中,再调用字符串连接函数stmcat把字符串xx[i]的中间字符连接到字符串变量s仃的后面,再调用字符串连接函数stmcat把字符串xx[i]的左半部分的子字符串连接到变量str的后面;如果余数不等于l,则调用字符串拷贝函数strcpy,把从字符串xx[i]+P开始直到字符串xx[i]的结尾的子字符拷贝到字符串变量str中,再调用字符串连接函数strncat把字符串xx[i]的左半部分的子字符串连接到变量str的后面,实现字符串xx[i]左右部分子字符串的交换。

\n④调用字符串拷贝函数strcpy,把字符串变量str的值拷贝到字符串xx[i],实现把排序后的结果仍按行重新存入字符串数组xx中。

\n【参考答案】
\n
31.C解析:软件是为了使用户使用并充分发挥计算机性能和效率的各种程序和数据的统称。

软件工程中,编程只是其中一个阶段的工作。

软件除了必须有程序外,还必须有相应的文档。

在编程的前期要作设计,后期要作测试,每个阶段都有许多工作,并用文档记录下来。

32.B解析:IP地址由32位字节组成(4个字节),将4个字节的二进制数值转换成4个十进制数值。

33.A解析:采用虚拟网络技术,网络中逻辑工作组的节点组成不受节点所在的物理位置的限制。

34.void jsVal( ) { int i thou hun ten data j; int ab cd; for (i=0; i<MAX; i++) { thou=a [i]/1000; /*求四位数的千位数字*/ hun=a [i] %1000/100; /*求四位数的百位数字*/ ten=a [i] %100/10; /*求四位数的十位数字*/ data=a [i] %10; /*求四位数的个位数字*/ if ((thou+ten==hun+data) &&a [i] %2 !=1) { /*如果千位数加十位数等于百位数并且此数是偶数*/ b [cnt]=a [i]; /*则将满足条件的数存入数组b中*/ cnt++; /*统计满足条件的数的个数*/ } } for (i=0; i<cnt-1; i++) /*将数组b中的数按从小到大的顺序排列*/ for (j=i+1; j<cnt; j++) if (b[i]>b[j]) { da ta=b [i]; b[i]=b[j]; b
[j] =data; } }void jsVal( )\r\n {\r\n int i, thou, hun, ten, data, j;\r\n int ab, cd;\r\n for (i=0; i<MAX; i++)\r\n {\r\n thou=a [i]/1000; /*求四位数的千位数字
*/\r\n hun=a [i] %1000/100; /*求四位数的百位数字*/\r\n ten=a [i] %100/10; /*求四位数的十位数字*/\r\n data=a [i] %10; /*求四位数的个位数字*/\r\n if ((thou+ten==hun+data) &&a [i] %2 !=1)\r\n { /*如果千位数加十位数等于百位数,并且此数是偶数*/ \r\n b [cnt]=a [i]; /*则将满足条件的数存入
数组b中*/\r\n cnt++; /*统计满足条件的数的个数*/\r\n }\r\n }\r\n for (i=0; i<cnt-1; i++) /*将数组b中的数按从小到大的顺序排列*/\r\n for (j=i+1; j
<cnt; j++)\r\n if (b[i]>b[j])\r\n {\r\n da ta=b [i];\r\n b[i]=b[j];\r\n b [j] =data;\r\n }\r\n } 解析:本题考查的知识点如下:
(1)将一个4位整数各位上的数转变成单独的个位数。

(2)判断结构中多个条件的布尔运算。

(3)数据的排序。

在本题中,首先要将一个4位数的千位、百位、十位、个位拆成独立的
数字。

这里借助特殊运算符号“%” (取余)和“/” (整除)。

将一们位数整除1000则可得到其千位上的数字,除以1000取余再整除100则可得百位
上的数字,除以100取余再整除10则可得—卜位上的数字,除以10取
余则得个位上的数字。

若一个数除以2取余为0,则这个数是偶数。


目中的两个条件必须同时满足,所以两条件之间用“与”运算。

先将满足
条件的数存入数组b中,再对数组中的数据进行排序。

最后的排序采用“选择排序法”。

35.int findStr(char *strchar *substr) { int n; char *p*r; n=0; while (*str) { p=str; /*指针p指向字符串产地址*/ r=substr; /*指针r指向子字符串首
地址*/ while (*r) if (*r==*p) /*如果子字符串的第一个字符等于字符串中
的该字符则继续比较下一个字符*/ { r++; p++; } else break; /*否则退出循
环*/ if(*r=='\0') /*如果子字符串在字符串中出现了一次*/ n++;/*则n加1进行统计*/ str++;/*指向字符串中的下一个字符*/ } return n;/*返回n*/ }int findStr(char *str,char *substr)\r\n { int n;\r\n char *p,*r;\r\n n=0;\r\n while (*str)\r\n {\r\n p=str; /*指针p指向字符串产地址*/\r\n
r=substr; /*指针r指向子字符串首地址*/\r\n while (*r)\r\n if (*r==*p) /*如果子字符串的第一个字符等于字符串中的该字符,则继续比较下一个字符*/\r\n { r++;\r\n p++;\r\n }\r\n else break; /*否则退出循环*/\r\n if(*r=='\\0') /*如果子字符串在字符串中出现了一次*/\r\n n++;/*则n加1,进行统计*/\r\n str++;/*指向字符串中的下一个字符*/\r\n }\r\n return n;/*返回n*/\r\n } 解析:本题考查的知识点如下:
(1)指针的相关操作。

(2)强行退出——break的使用。

指针是C语言中的一个难点。

在这里,我们要使用指针实现对数组的访问继而进行字符的比较。

使用数组存放字符串时,存放的字符个数要比数组的容量小1,因为数组最后—个位置存放的是空格或者结束标志位。

我们可利用这一点来判断一个字符串是否已经结束。

在循环结构中常常要出现强行退出的情况,这里要使用到break语句强行退出一层循环。

当字符串中的某个字符与子字符串的第一个字符不同时,则将字符串中的下一个字符与子字符串中的第一个字符比较,而不是与子字符串中的第二个字符比较。

36.void SortDat() { int ij;PRO xy;for(i=0;i〈MAX-1;i++) for(j=i+1;j〈MAX;j++) if(strcmp(sell[i].mcsell[j].mc)<0) /*按产品名称从大到小进行排列*/{ xy=sell[i];sell [i]=sell[j];sell[j]=xy;} else if(strcmp(sell[i].mcsell[i].mc)==0) /*若产品名称相同则按金额从大到小进行排列*/if(sell[i].je〈sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;} }void SortDat()\r\n {\r\n int i,j;\r\n PRO xy;\r\n for(i=0;
i〈MAX-1;i++)\r\n for(j=i+1;j〈MAX;j++)\r\n if(strcmp(sell[i].mc,sell[j].mc)<0) /*按产品名称从大到小进行排列*/\r\n {\r\n xy=sell[i];\r\n sell [i]=sell[j];\r\n sell[j]=xy;\r\n }\r\n else if(strcmp(sell[i].mc,sell[i].mc)==0) /*若产品名称相同,则按金额从大到小进行排列*/\r\n if(sell[i].je〈sell[j].je)\r\n {\r\n xy=sell[i];\r\n sell[i]=sell[j];\r\n sell[j]=xy;\r\n }\r\n } 解析:本题是有关结构体数组的排序问题。

可以用选择法来实现,即用第一个元素的产品名称依次和它后面的元素的产品名称进行比较,如果发现当前元素的产品名称比后面的某个元素的产品名称的对应位置的字符的ASCII码小(这里用到了字符串比较函数strcmp()),则交换这两个元素的位置,继续和后面的其他元素进行比较,最终在第一个元素中存放的是产品名称最大的元素。

以此类推,就实现了从大到小排序的功能。

注意:这里要进行交换的是两个结构体变量,而不是它们的某一个域,因此,要借助第三个结构体变量来充当中间容器。

若发现产品名称是相同的,则要按照金额从大到小进行排序。

相关文档
最新文档