c语言函数100题 c语言函数用法大全( 二 )


printf("数据文件ENG.IN不能打开!\n\007");
return;
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
unsigned char *p;
if((fp=fopen("eng.in","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(void)
{
FILE *fp;
int i;
fp=fopen("ps10.dat","w");
for(i=0;imaxline;i++){
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
________________________________________
注:在ReadDat()函数中由于fgets()函数读入数据时没有读入字符串结束符'\0',因
而用while()循环在xx数组每一行未尾将换行符'\n'替换成结束符'\0' 。
编写的函数如下:该函数的基本算法是——让字符指针pf指向每一行的开头然后逐一往
后移动,在移动过程中按要求进行转换 。*pf%2==0用于判断是否为偶数 。if()条件语
句用于控制不替代字符 。
解法1:
void encryptChar()
{
int i;
char *pf;
for(i=0;imaxline;i++)/*行循环*/
{pf=xx[i];/*每行字符个数*/
while(*pf!=0)
{if(*pf%2==0||*pf*11%25632)
{pf++;continue;}
*pf=*pf*11%256;
pf++;
}
}
}
解法2:
void encryptChar()
{
int i,j,t;
for(i=0;imaxline;i++)
{
for(j=0;jstrlen(xx[i]);j++)
{
t=xx[i][j]*11%256;
if(t=32 || xx[i][j]%2==0) continue;
xx[i][j]=t;
}
}
}
2题 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80) 。请编制函数jsSort() , 其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中 。
条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换 。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上 。
例如:位置0 1 2 3 4 5 6 7 8
源字符串 dcbahgfe
432198765
则处理后字符串 h g f e a b c d
8 7 6 5 9 1 2 3 4
部分源程序已给出 。
请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容 。
#includestdio.h
#includestring.h
#includeconio.h
char xx[20][80];
void jsSort()
{
}
void main()
{
readDat();
jsSort();
writeDat();
}
readDat()
{
FILE *in;
int i=0;
char *p;
in=fopen("in.dat","r");
while(i20fgets(xx[i],80,in)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
fclose(in);
}
writeDat()
{
FILE *out();
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0;i20;i++){
printf(\"%s\n",xx[i]);
fprintf(out,"%s\n",xx[i]);
}
fclose(out);
}
________________________________________
注:先采用冒泡法对左边部分进行升序排序 , 然后将排序后的左半与右半按对应位进行
调换 。
void jsSort()
{
int i,strl,half,j,k;
char ch;
for(i=0;i20;i++)/*行循环*/
{strl=strlen(xx[i]);/*每行长度*/
half=strl/2;
for(j=0;jhalf-1;j++)/*每行的第j个位置*/
for(k=j+1;khalf;k++)
if(xx[i][j]xx[i][k])
{ch=xx[i][j];/*每次将最小数赋给xx[i][j]*/
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
for(j=half-1,k=strl-1;j=0;j--,k--)
{ch=xx[i][j];
xx[i][j]=xx[i][k];