題目56
函數(shù)ReadDat()實現(xiàn)從文件ENG.IN中讀取一篇英文文章,存入到字符串數(shù)組xx中;請編制函數(shù)encryptChar(),按給定的替代關(guān)系對數(shù)組xx中的所有字符進行替代,仍存入數(shù)組xx的對應的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS5.DAT中。
替代關(guān)系:f(p)=p*11mod 256 (p是數(shù)組中某一個字符的ASCII值,f(p)是計算后新字符的ASCII值),如果計算后f(p)值小于等于32或f(p)對應的字符是小寫字母,則該字符不變,否則將f(p)所對應的字符進行替代。
部分源程序存在文件prog1.c中。原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個字符。
請勿改動主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
#include
unsigned char xx[50][80];
int maxline=0;/*文章的總行數(shù)*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{ int i,j;
for(i=0;i for(j=0;j if(xx[j]*11%256<=32||xx[j]*11%256>='a'&&xx[j]*11%256<='z') continue;
else xx[j]=xx[j]*11%256;
}
void main()
{
clrscr();
if(ReadDat()){
printf("數(shù)據(jù)文件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,80,fp)!=NULL){
p=strchr(xx,'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("ps5.dat","w");
for(i=0;i printf("%s\n",xx);
fprintf(fp,"%s\n",xx);
}
fclose(fp);
}
★題目57
設(shè)有n個人圍坐一圈并按順時針方向從1到n編號,從第s個人開始進行1到m的報數(shù), 報數(shù)到第m個人, 此人出圈, 再從他的下一個人重新開始1到m的報數(shù),如此進行下去直到所有的人都出圈為止?,F(xiàn)要求按出圈次序,給出這n個人的順序表p。請考生編制函數(shù)Josegh()實現(xiàn)此功能并調(diào)用函數(shù)WriteDat()把編號按照出圈的順序輸出到OUT.DAT文件中。
注意:第1個出圈的編號存放在p[0]中,第2個出圈的編號存放在p[1]中,直至第n個出圈的編號存放在p[n-1]中。
設(shè) n = 100, s = 1, m = 10進行編程。
注意: 部分源程序存放在PROG1.C中。
請勿改動主函數(shù)main()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#define N 100
#define S 1
#define M 10
int p[100], n, s, m
void WriteDat(void)
void Josegh(void)
{ int i,j,s1,w,q[100];
for(i=0;i s1=s;
for(i=1; i<=n; i++) p[i-1]=i;
for(i=n; i>=2; i--)
{ s1=(s1+m-1)%i;
if(s1==0) s1=i;
w=p[s1-1];
for(j=s1; j p[i-1]=w;
}
for(i=0,j=n-1;i=0;i++,j--) q[j]=p;
for(i=0;i p=q;
}
void main()
{
m = M
n = N
s = S
Josegh()
WriteDat()
}
void WriteDat(void) {
int i, j = 0
FILE *fp
fp = fopen("out.dat", "w")
for(i = 0 i <= N - 1 i++) {
printf("%4d ", p)
fprintf(fp, "%4d", p)
j++
if(j % 10 == 0) {
printf("\n")
fprintf(fp, "\n")
}
}
fclose(fp)
}
函數(shù)ReadDat()實現(xiàn)從文件ENG.IN中讀取一篇英文文章,存入到字符串數(shù)組xx中;請編制函數(shù)encryptChar(),按給定的替代關(guān)系對數(shù)組xx中的所有字符進行替代,仍存入數(shù)組xx的對應的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS5.DAT中。
替代關(guān)系:f(p)=p*11mod 256 (p是數(shù)組中某一個字符的ASCII值,f(p)是計算后新字符的ASCII值),如果計算后f(p)值小于等于32或f(p)對應的字符是小寫字母,則該字符不變,否則將f(p)所對應的字符進行替代。
部分源程序存在文件prog1.c中。原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個字符。
請勿改動主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
#include
unsigned char xx[50][80];
int maxline=0;/*文章的總行數(shù)*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{ int i,j;
for(i=0;i
else xx[j]=xx[j]*11%256;
}
void main()
{
clrscr();
if(ReadDat()){
printf("數(shù)據(jù)文件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,80,fp)!=NULL){
p=strchr(xx,'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("ps5.dat","w");
for(i=0;i
fprintf(fp,"%s\n",xx);
}
fclose(fp);
}
★題目57
設(shè)有n個人圍坐一圈并按順時針方向從1到n編號,從第s個人開始進行1到m的報數(shù), 報數(shù)到第m個人, 此人出圈, 再從他的下一個人重新開始1到m的報數(shù),如此進行下去直到所有的人都出圈為止?,F(xiàn)要求按出圈次序,給出這n個人的順序表p。請考生編制函數(shù)Josegh()實現(xiàn)此功能并調(diào)用函數(shù)WriteDat()把編號按照出圈的順序輸出到OUT.DAT文件中。
注意:第1個出圈的編號存放在p[0]中,第2個出圈的編號存放在p[1]中,直至第n個出圈的編號存放在p[n-1]中。
設(shè) n = 100, s = 1, m = 10進行編程。
注意: 部分源程序存放在PROG1.C中。
請勿改動主函數(shù)main()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#define N 100
#define S 1
#define M 10
int p[100], n, s, m
void WriteDat(void)
void Josegh(void)
{ int i,j,s1,w,q[100];
for(i=0;i
for(i=1; i<=n; i++) p[i-1]=i;
for(i=n; i>=2; i--)
{ s1=(s1+m-1)%i;
if(s1==0) s1=i;
w=p[s1-1];
for(j=s1; j p[i-1]=w;
}
for(i=0,j=n-1;i
for(i=0;i
}
void main()
{
m = M
n = N
s = S
Josegh()
WriteDat()
}
void WriteDat(void) {
int i, j = 0
FILE *fp
fp = fopen("out.dat", "w")
for(i = 0 i <= N - 1 i++) {
printf("%4d ", p)
fprintf(fp, "%4d", p)
j++
if(j % 10 == 0) {
printf("\n")
fprintf(fp, "\n")
}
}
fclose(fp)
}