在文件in33.dat中有200个正整数,且每个正整数均在100至9999之间。函数readDat( )的功能是读取这 200个数并存放到数组aa中。请编制函数jsSort( ),该函数的功能是:要求按照每个数的后3位的大小进行升序排列,将排序后的前10个数存入数组bb中,如果数组比中出现后3位相等的数,则对这些数按原始4位数据进行降序排列。最后调用函数writeDat( )把结果比输出到文件out33.dat中。
例如:处理前6012 5099 9012 7025 8088
处理后9012 6012 7025 8088 5099
注意:部分源程序已给出。
请勿改动主函数main( )、读函数readDat)和写函数writeDat( )的内容。
试题程序:
#include
9include
#include
int aa[200],bb[10];
void readDat( );
void writeDat( );
void jsSort( )


void main( )

readDat( );
jsSort( );
writeDat( );

void readDat ( )

FILE *in;
int i;
in=fopen (" in33. dat", "r" );
for(i=0;i<200;i++) fscanf (in,"%d ",&aa[i]);
fclose (in);

void writeDat( )

FILE *out;
int i;
clrscr ( );
out=fopen ( "out33. dat", "w" );
for (i=0;i<10; i++)

printf ("i=%d, %d/n", i+l,bb [i] );
fprintf (out, "%d/n", bb [i] );

fclose (out);

void jsSort()
{
int i, j, data;
for (i=O; i<AII; i++)
for (j=i+l; j<B00; j++)
{
if (aa [ii %A000>aa [j ] %A000) /*按照每个数的后C位的大小进行升序排例*/
{
data=aa [i];
aa[ii=aa[j];
aa [j ] =data;
}
elseif(aa[i]%lOOO==aa[j]%A000) /*如果后C位数值相等,则对这些数值
按原始D位数据进行降序*/
if (aa Ii] <aa [j ] )
{
data=aa Iii;
aa[ii=aa[j];
aa [ j ] =data;
}
}
for (i=O; i bb[i]=aa[i];[解析] 本题考查的知识点如下:
(1)循环结构的嵌套。
(2)选择结构的嵌套。
(3)特殊运算符“%”的使用。
(4)数据的升降序排列。
在该题中,首先要解决的问题是如何把题中4位数转换成符合要求的3位数。这里要用到一个比较特殊的运算符%,它的功能是取余。将4位数除以1000取余则得到要求的3位数。根据题意,若后3位相等,则按照原数据进行降序排序,所以在这里要加一个选择结构进行判断。对数据进行排序,可以使用最简单的“选择排序法”。即第一次从第一个数据开始和所有后面的数据进行比较,与比它大(小)的数据交换位置,将数据中最大(小)的数交换到最前面。第二次从第二个数据开始与后面的数据进行比较,将此次比较中最 (小)的数据交换至第二个位置,直至最后一个数据。

已知在文件IN34.DAT中存有100个产品销售记录,每个产品销售记录由产品代Cadm(字符型4位)、产品名称me(字符型10位)、单价dj(整型)、数量sl(整型)、金额(长整型)几部分组成。其中,金额=单价X数量可计算得出。函数ReadDat( )的功能是读取这100个销售记录并存入数组sell中。请编制函数 SortDat( ),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat( )把结果输出到文件OUT34.DAT中。
注意:部分源程序已给出。
请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDaq)的内容。
试题程序:
#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[ll];
int dj;
int sl;
long je;
PRO;
PRO sell[MAX];
void ReadDat( );
void WriteDat( );

void SortDat( )


void main ( )

memset (sell, 0, sizeof (sell));
ReadDat ( );
SortDat ( );
WriteDat ( );

void ReadDat ( )

FILE *fp;
char str[80],ch[ll];
int i;
fp= fopen (" IN34. 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].sl=atoi (ch);
sell [i].je= (long) sell [i].dj*sell [i] .sl;

fclose (fp);


void WriteDat( )

FILE *fp;
int i;
fp=fopen ( "OUT34. 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] . sl, sell [i] . je);

fclose (fp);

void SortDat()
{
iht i,j;
PRO xy;
for (i=0;i for (j=i+l; j {
if (strcmp (sell [i] .dm, sell [j ] .dm) <0) /*按产品代码从大到小
排列*/
{
xy=sell [i];
sell [ii =sell [j ];
sell [j ] =xy;
}
else if (strcmp (sell [i] .dm, sell[j] .dm)==O) /*若产品代码相同*/
if (sell [i] . je /*则按金额从大到小 进行排列*/
{
xy=sell [i];
sell [ii =sell [j ];
sell [j ] =xy;
}
[解析]本题考查的知识点如下;
(A)结构体及结构数组。
(B)结构数组的排序。
(C)字符型数组的比较。
本题着重考查结构体变量的访问、赋值,包括结构体本身及结构体中各个成员的访问和赋值。根据题意要求,我们首先要比较产品代码。因为产品代码为字符型,所以不能使用简单的比较运算符进行比较。在这里,我门使用了字符串处理函数strcmp(char*strll,char*strlB,unsigned int cout)对其进行比较。对于比较结果,若是代码相同,则要按照金额进行新的比较,否则可直接存入数组。因为已定义了结构数组,就可以使用循环进行比较排序。排序同样采用前面介绍的“选择排序法”。`

函数ReadDat( )的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD( ),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat( )把结果xx输出到文件OUT35.DAT中。
例如,原文:dAe,BfC
CCbbAA
结果:fedCBA,
bbCCAA
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意;部分源程序已给出。
请勿改动主函数main( )、读函数ReadDat( )和写函数WrteDat( )的内容。
试题程序:
#include<Stdio.h>
#include<String.h>
#include<conio.h>

char xx[50][80];
int maxline=0;

int ReadDat(void);
void WriteDat(void);

void SortCharD( )



void main( )

Clrscr( );
if (ReadDat( ))

printf("数据文件 IN35.DAT不能打开!/n/007");
return;

SortChar D( );
WriteDat( );

int ReadDat(void)

FILE *fp;
int i=0;
Char*p;
if((fp:fOpen("IN35.DAT","r"))==NULL)
return 1;
while (fgets(xX[i],80,fp)!=NULL)

p=strchr(xX[i],"/n");
if (p) *p:0;
i++;

maxline=i;
fclose(fp);
return 0;

void WriteDat( )

FILE *fp;
int i;
Clrscr( );
fp:fopen("OUT35.DAT","w");
for(i:0;i<maxline;i++)

printf("%s/",xx[i]);
fprintf(fp,"%s/n",xx[i]);

fclose(fp);

void SortCharD()
{
int i, j, k, strl;
char ch;
for (i=0;i {
strl=strlen (xx [i] ); /*求各行的长度*/
for (j=0; j for (k=j+l; k if (xx[i] [j] {
ch=xx[i] [j];
xx[i] [j]=xx[i] [k];
xx[i] [k] =ch;
}
}
}[解析] 本题考查的知识点如下:
(1)循环结构的嵌套。
(2)字符的大小比较。
(3)字符排序。
本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数
strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整
型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

下列程序的功能是:把s字符串中的所有字母改成该字母的下一个字母,字母z改成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT( ),读取in36.dat中的字符串,并把结果输出到文件out36.dat中。
例如:s字符串中原有的内容为Mn 123Zxy,则调用该函数后,结果为No 123Ayz。
注意:部分源程序已给出。
请勿改动主函数main( )和输入输出函数readwriteDAT( )的内容。
试题程序:
#include<stdio. h>
#include<string. h>
# include<conio, h>
# include<ctype, h>
#define N 81

void readwriteDAT ( );

void chg(char as)


main ( )

char a [N];
clrscr ( );
printf("Enter a string:");
gets (a);
printf ("The original string is :");
puts (a);
chg (a);
printf("The string after modified :");
puts (a);
readwriteDAT ( );

void readwriteDAT ( )

int i;
char a [N];
FILE *rf, *wf;
r f=fopen ("in36. dat", "r" );
wf=fopen ("out36. dat", "w" );
for (i=0;i<10; i++)

fgets (a, 81, rf);
chg (a);
fprintf (wf, "%s", a);

fclose (rf);
fclose (wf);

void chg(char *s)
{
while (*s)
if(*s==’z’ | |*s==’z’) /*字母z改成字母a,字母z改成字母A*/
{
*s-=BE;
s++; /*取下一个字母* /
}
else if(*s>=’a’&& *s<=’y’) /*把小写字母改成该字母的下一个字母*/
{
*s+=l;
s++; /*取下一个字母*/
}
else if (*s>=’A’&& *s<=’Y’) /*把大写字母改成该字母的下一个字母*/
{
*s+=l;
s++; /*取下一个字母*/
}
else s++; /*取下一个字母* /
}

在页式管理中,页表的开始地址是存放在( )中。

A:内存 B:寄存器 C:存储页表 D:联想存储器

MIPS是用来衡量计算机系统( )性能指标的。

A:存储容量 B:运算速度 C:处理能力 D:时钟频率

OSI参考模型的最底层是( )。

A:应用层 B:物理层 C:网络层 D:数据链路层

在网络安全服务中,电子签名是防抵赖服务的一种。防抵赖服务是用来保证源结点用户与目的结点用户不能对已发送或已接收的信息予以否认的。它对于( )等类的应用是非常重要的。

A:工业控制 B:实时控制 C:人工智能 D:电子商务

正在运行的进程在信号量S上作P操作之后,当S<0,进程进入信号量的是( )。

A:等待队列 B:后备队列 C:就绪队列 D:提交队列

从指令集的角度来说,PentiumⅡ采用的是( )指令集技术。

A:CISC B:MCU C:USB D:RISC

微信扫码获取答案解析
下载APP查看答案解析