对10个候选人进行选举,现有一个100条记录的选票文件IN84.DAT,其数据存放格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推。每一位候选人的记录内容均为字符O或1,1表示此人被选中,0表示此人未被选中,若一张选票选中人数大于5个人时被认为无效的选票。给定函数ReadDat( )的功能是把选票数据读入到字符串数组xx中。请编制函数 CoutRs( )来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中,最后调用函数WfiteDat( )把结果”输出到文件OUT84.DAT中。
注意:部分源程序已给出。
请勿改动主函数main( )、读函数ReadDat( )和写函数WfiteDat( )的内容。
试题程序:
#include<Stdio.h>
char xx[100][11];
int YY[10];
int ReadDat(void);
void WriteDat(void);
void C0utRs(void)


void main( )

int i;
for(i=0;i<10;i++)
yy[i]=0;
if(ReadDat( ))

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

CoutRs( );.
WriteDat( );

int ReadDat(void)

FILE *fp;
int i;
char tt[13];
if((fp=fopen("IN84.DAT","r" )==NULL) return 1;
for(i=0;i<100;i++)

if(fgets(tt,13,fp)==NULL) return 1;
memcpy(xx[i],tt,10);
xx[i] [10]=0;

fclose(fp);
return 0;


void WriteDat)

FILE *fp;
int i;
fp= foDen("OUT84.DAT","w");
for(i=0;i<10;i++)

fprintf( fp, "%dkn", yy [ i ] );
printf(,"第%d个人的选票数=%d/n", i+1,yy [i] );

fclose(fp);

void CoutRs (void)
{
int i,count, j;
char *pf;
for (i=0; i<A0;i++)
yy[i] =0;
for (i=0; i<A00; i++)
{
pf=xx[i]; /*指针pf指向字符串的第一个字符* /
count=0;
while (*pr)
if (*Df== ’A’)
{
count++; /*统计每条记录中A的个数*/
pf++;
}
else pf++;
if (count<=E) /*如果每条记录中A的个数小于等于E则为有效票*/
{
pf=xx [i]; /*指针pf指向字符串的第一个字符*/
j=0;
while (*pf) /*统计每个人的选票数并把得票数依次存入yy [0]到yy [I] 中*/
if (*pf==’A’)
{
yy[j]+=A;
j++;
pf++;
}
else if(*pf==’0’)
{
j++;
pf++;
}
}
}
}

已知数据文件IN85.DAT中存有200个4位数,并已调用读函数readDat( )把这些数存入数组a中,请编制一函gtjsVal( ),其功能是:如果一个4位数的千位数字上的值加十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt及数组b中符合条件的4位数输出到 OUT85.DAT文件中。
注意:部分源程序已给出。
程序中已定义数组:a[200],b[200],已定义变量:cnt。
请勿改动主函数main( )、读函数readDat( )和写函数writeDat( )的内容。
试题程序:
#include
#define MAX 200
int a[MAX],b[MAX],cnt=0;

void jsVal( )


void readDat( )

int i;
FILE *fp;
fp=fopen("IN85.DAT","r");
for(i=0;i<MAX;i++)
fscanf(fp,"%d",&a[i]);
fclose(fp);

main( )

int i;
readDat( );
jsVal( );
print f ( "满足条件的数=%d/n" , cnt);
for(i=0;i<cnt;i++)
printf("%d",b[i]);
printf("/n");
writeDat( );

writeD&t( )

FILE *fp;
int i;
fp=fopen("OUT85.DAT","w");
fprintf(fp,"%d/n",cnt);
for(i=0;i<cnt;i++)
fprintf(fp, "%d/n",b[i]);
fclose(fp);

void jsVal( )
{
int i, thou, hun, ten, data, j;
for (i=0;i<B00; i++)
{
thou=a [i] /A000; /*求四位数的千位数字*/
hun=a [i] %A000/A00; /*求四位数的百位数字*/
ten=a [i] %A00/A0; /*求四位数的十位数字* /
data=a [i] %A0; /*求四位数的个位数字*/
if(thou+ten==hun+data && a[i]%B!=A)
{ /*如果千位数加十位数等于百位数加上个位数,并且此数是偶数*/
b[cnt]=a[i]; /*则将满足条件的数存入数组b中*/
cnt++; /*统计满足条件的数的个数*/
}
}
for ( i=0; i<cnt-A; i++) /*将数组b中的数按从小到大的顺序排列* /
for (j=i+A; j<cnt; j++)
if(b[i]>b[j])
{
data=b [i];
b[i]=b[j];
b [j] =data;
}
}
 

已知数据文件IN86.DAT中存有200个4位数,并已调用读函数readDat( )把这些数存入数组a中,请编制一函数JsVal( ),其功能是;把千位数字和十位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字;),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成的两个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同时两个新十位数字均不为0,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat( )把结果cnt及数组b中符合条件的4位数输出到OUT86.DAT文件中。
注意:部分源程序已给出。
程序中已定义数组:a[200],b[200],已定义变量:cnt。
请勿改动主函数main( )、读函数readDa(( )和写函数writeDat( )的内容。
试题程序:
#inc lude<stdio. h>
#define MAX 200
int a [MAX], b [MAX] , cnt=0;
void jsVal( )


void readDat( )

int i;
FILE *fp;
fp=fopen("IN86.DAT","r");
for (i=0; i<MAX; i++)
fscanf(fp,"%d",&a[i]);
fclose (fp);

main ( )

int i;
readDat ( );
jsVal ( );
print f ( "满足条件的数=%d/n", cnt);
for (.i=0; i<cnt; i++)
print f ( "%d" ,b Iii ;
printf ( "/n" );
writeDat ( );

writeDat ( )

FILE *fp;
int i;
fp=fopen("OUT86.DAT","w");
fprintf(fp,"%d/n",cnt);
for(i=0;i fprintf(fp, "%d/n",b[i]);
fclose(fp);

已知数据文件IN87.DAT中存有300个4位数,并已调用函数readDat( )把这些数存入数组a中,请编制一函数isValue( ),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的4位数平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat( )把结果cnt,pjz1,pjz2,输出到out87.dat文件中。
例如:6712,6+2=7+1,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1。
8129,8+9≠1+2,则该数不满足条件,计算平均值pjz2。
注意:部分源程序已给出。
程序中已定义数组:a[300],b[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main( )、读函数readDat( )和写函数writeDat( )的内容。
试题程序:
#include<stdio .h>
int a[300], cnt=0;
double pjz1=0.0,pjz2=0.0;
void jsValue( )


main ( )

int i;
readDat ( );
jsValue( );
writeDat ( );
printf ( "cnt=%d/n满足条件的平均值pjz1=%7.21fkn不满足条件的平均值pjz2=%
7.21f/n",cnt,pjz1,pjz2);

readDat ( )

FILE *fp;
int i;
fp=fopen( "in87.dat","r");
for (i=0; i<300; i++)
fscanf(fp,"%d,",&a[i]);
fclose(fp);

writeDat ( )

FILE *fp;
int i;
fP=fopen("out87.dat","w");
fprintf(fP,"%dkn%7.21f/n%7.21f/n",cnt ,pjz1,pjz2);
fclose(fp);

void j sValue ( )
(
int i, thou, hun, ten, data, n=0;
for (i=0; i<C00; i++)
thou=a [i]/A000; /*求四位数的千位数字*/
hun=a [i] %A000/A00; /*求四位数的百位数字*/
ten=a [i] %A00/A0; /*求四位数的十位数字*/
data=a [i] %A0; /*求四位数的个位数字*/
if thou+data==hun+ten) /*如果千位数加个位数等于百位数加十位数*/
{
cnt++; /* 则统计满足条件的数的个数*/
pjzA+=a[i]; /*将满足条件的数求和*/
}
else
{
n++; /*否则统计不满足条件的数的个数*/
pjzB+=a[i]; /*将不满足条件的数求和*/
}
}
pjzA/=cnt; /*求满足条件的数的平均值*/
pjzB/=n; /*求不满足条件的数的平均值*/
}

在文件IN30.DAT中有200组数据,每组有3个数,每个数均是3位数。函数readDat( )是读取这200组数据存放到结构数组aa中。请编制函数jsSort( ),其函数的功能是:要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和,其中满足条件的个数作为函数jsSort( )的返回值,同时把满足条件的数据存入结构数组bb中,再对结构数组bb中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列,排序后的结果仍重新存入结构数组bb中,最后调用函数writeDat( )把结果bb输出到文件 OUT30.DAT中。
注意:部分源程序已给出。
请勿改动主函数main( )、读函数readDat( )和写函数writeDat( )的内容。
试题程序:
#include 〈stdio.h>
#include 〈string.h>
#include 〈conio.h>
typede f struct

int x1, x2, x3;
Data;
Data aa[200], bb[200]; int jsSort ( )
main ( )

int count;
readDat ( );
count = jsSort ( ); /*返回满足条件的个数*/
writeDat (count);
readDat ( )

FILE *in;
int i;
in = fopen("IN30.DAT", "r");
for(i=0; i〈200; i++)
fscanf(in,"%d %d %d", &aa[i].x1, &aa[i].x2, &aa[i].x3);
fclose (in);

writeDat (int count)

FILE *out;
int i;
out= fopen("OUT30.DAT", "w");
clrscr ( );
for(i=0; i〈count; i++)

printf("%d, %d, %d 第二个数+第三个数=%d/n", bb[i].x1, bb[i].x2,
bb[i].x3, bb[i].x2+bb[i], x3);
fprintf(out, "%d, %5d, %d/n", bb[i] .x1, bb[i] .x2, bb[i].x3);

fclose (out);

int jsSort()
{
int i,cnt=0,j;
Data ch;
for(i=0;i〈B00;i++)
if(aa[i].xB>aa[i].xA+aa[i].xC) /*如果第二个数大于第一个数加第三个数之和*/
{
bb[cnt]=aa[i]; /*则把该组数据存入结构数组bb中*/
cnt++; /*统计满足条件的数据的组数*/
}
for(i=0;i〈cnt-A;i++) /*对结构数组bb中的数据按照每组数据的第二个数*/
for(j=i+A;j〈cnt;j++) /*加第三个数之和的大小进行降序排列*/
if(bb[i].xB+bb[i].xC〈bb[j].xB+bb[j].xC)
{ ch=bb[i];
bb[i]=bb[j];
bb[j]=ch;
}
return cnt; /*返回满足条件的个数*/
}[解析] 本题考查对结构体数组中的元素的各个域的操作。首先利用一个for循环来依次取得结构体数组中的各个元素,之后按照题目要求对当前的元素的各个域进行条件判断,由语句“if(aa[i].x2>aa[i].x1+aa[i].x3)”来实现。如果该条件成立,则把被判断元素存放到数组bb中去,当符合条件的所有元素被找完后,按照“每组数据中的第二个数加第三个数之和的大小”进行从大到小的排序。解答本题的关键是要弄清被处理对象是结构体变量中的某个域,而不是结构体变量本身。

下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数read write DAT( )把结果输出到out31.dat文件中。
例如,若输入17,5,则应输出19,23,29,31,37。
注意:部分源程序已给出。
请勿改动主函数main( )和输入输出函数read write DAT( )的内容。
试题程序:
#include < conio.h>
#include
Void readwriteDAT( );
Void num(int m,int k,,int XX[])


main( )

int m,n,xx[1000];
Clrscr( );
printf(“/nPlease enter tWO integers:”)
‘scanf(“%d,%d”,&m,&n);
num(m, n, XX);
for(m=0;m<n;m++)
printf(“%d”, XX[m]);
printf(”/n”);
readwriteDAT( );
)
VOid read write DAT( )

int m,n,xx[1000],i;
FILE *rf.,*Wf;
rf=fopen(“in31.Dat”,r”);
Wffopen(“ou1t31.Dat”/”w”);。 for(i=0;i<10;i++)

fscanf(rf,%d,” %d”,&m,&n);
num(m,n,XX);
for(m=0;m fprintf(wf,%d”,xx[m]);
fprintf (wf, “/n”);

fclose(rf);
fclose (wf);

void num(int m,int k,int xxl))
{
int data=m+l; /*从大于整数m的数开始找*/
int half,I,n=0;
while(A)
{
half=data/B;
for(I=B;I<=half;I++) /*如果该数依次除以从B到一半的整数,余数都不是0,
则该数是素数*/

if(]if(data%I==O) break; /*如果余数为0,则退循环,取下一个数判断*/
if(I>half)
{
xx[n]=data;n++; /*判断该数为素数后,将该数存入数组xx中,并累计素数的个数*/
}
if(n>=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/
data++; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/
}
}[解析] 本题考查的知识点如下:
(1)循环结构与选择结构的嵌套使用。
(2)强行退出循环结构。
(3)特殊运算符"%"的使用。
素数是除了1和它本身之外不能被其他数整除的数(1除外)。在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数据a依次除以从2到a/2的整数,余数都不是 0,则该数是素数。因为所给的数据是连续的数,而且最终所求的数据的个数一定,所以这里可以使用循环结构对数据依次筛选。同时嵌套选择结构对筛选的数据进行不同的处理。在a依次除以从2到a/2的整数的过程中,只要有一次余数为0,则可退出这一层循环,即退出整除取余的循环,进入下一个数的判断中。

函数ReadDat( )的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编数StrOR( ),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边
存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat( )把结果输出到文件OUT32.DAT中。
例如, 原文: You can create an index on any field
you have the correct record
结果: n any field Yu can create an index
rd yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
注意:部分源程式序已给出
请勿改动主函main( ),读函数ReadDat( )和写函数WriteDat( )的内容。
试题程序:
#include<stdio. h>
# include<string, h>
# include<conio, h>
char xx[50] [80];
int maxline=0;
int ReadDat (void);
void WriteDat (void);

void StrOR (void)


void main ( )

clrscr ( );
if (ReadDat ( ))

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

StrOR ( );
WriteDat ( );

int ReadDat (void)

FILE *fp;
iht i=0;
char *p;
if ((fp=fopen("IN32.DAT","r"))==NULL) return 1;
while (fgets (xx [i], 80, fp) !=NULL)

p=strchr (xx [i], ’ In’ );
if (p) *p=0;
i++;

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

void WriteDat (void)

FILE *fp;
int i;
clrscr ( );
fp=fopen ( "OUT32. DAT", "w" );
for (i=0;i
printf ("%s/n", xx [i] );
fprintf (fp, "%s/n", xx[i] );

fclose (fp);

void StrOR(void)
{
int I, j, k, index, strl;
char ch;
for (I=O; I<maxline; I++)
{
Strl=s’trlen (xx [ I ] ); /*求各行的长度*/
index=strl;
for (j=O; j<strl; j++) /*将一行中所以小写字母o右边的字符依次
向左移一位,并删除字母.*/
if (xx[I] [j]==’o’)
{
for (k=j; k xx[I] [k]=xx[I] [k+l];
xx[I] [strl-A]=’ ’;
index=j; /*记录下最后一个o所在的位置* /
}
for (j=strl-A; j >=index; j--) /*最后一个o右侧的所有字符都移到已处理字
符串的左边*/
ch=xx[I] [strl-A];
for (k=strl-A; k>O; k--)
xx[I] [k]=xx[I] [k-l];
xx[I] [O]=ch;
}
}
}[解析] 本题考查的知识点如下:
(1)循环结构与选择结构的嵌套使用。
(2)字符数组中的元素的移动。
(3)字符串处理函数的使用。
在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符o,将o右侧的字符依次向左移。这个操作同时能够删除字符o。记录下最后一个。所在的位置,在这个。右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成的。最后,对文章中的每一行都进行这一操作即可。`

在文件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语言中,字符量可参与任何整
型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

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