您的位置:首页 > 编程语言

c primer plus第十三章编程练习答案(纯手打欢迎指错)

2014-10-07 21:31 483 查看
13.1

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int ch;
FILE *fp;
long count =0;
char file[100];
printf("Please enter the name of file.\n");
scanf("%s",file);
if((fp=fopen(file,"r"))==NULL)
{
fprintf(stderr,"Can't open the file.\n");
exit(1);
}
while((ch=getc(fp))!=EOF)
{
putc(ch,stdout);
count++;
}
fclose(fp);
printf("\nFile %s has %ld characters\n",file,count);
return 0;
}


13.2

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
char ch;
if(argc!=3)
{
fprintf(stderr,"Error!");
exit(1);
}
FILE*fp;
FILE*fp2;
if((fp=fopen(argv[1],"rb"))==NULL)
{
fprintf(stderr,"Can t open the file %s",argv[1]);
exit(1);
}
if((fp2=fopen(argv[2],"wb"))==NULL)
{
fprintf(stderr,"Can t open the file %s",argv[2]);
exit(1);
}
while((ch=getc(fp))!=EOF)
{

putc(ch,fp2);
}
fclose(fp);
fclose(fp2);

return 0;

}
13.3

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int main(void)
{
FILE*fp;
FILE*fp2;
char ch[100];
char ch2[100];
char c;
printf("Please enter source file name.\n");
scanf("%s",ch);
printf("Please enter target file name.\n");
scanf("%s",ch2);
if((fp=fopen(ch,"r"))==NULL)
{
fprintf(stderr,"Can't open the file %s.\n",ch);
exit(1);
}
if((fp2=fopen(ch2,"w"))==NULL)
{
fprintf(stderr,"Can't open the file %s.\n",ch2);
exit(1);
}
while((c=getc(fp))!=EOF)
{
c=toupper(c);
putc(c,fp2);
}
fclose(fp);
fclose(fp2);
return 0;
}


13.4

#include<stdio.h>
#include<stdlib.h>
int main(int argc,int *argv[])
{
FILE*fp;
char ch;
for(int i=1;i<argc+1;i++)
{
if((fp=fopen(argv[i],"r"))==NULL)
{
fprintf(stderr,"Can't open the file ",argv[i]);
exit(1);
}
while((ch=getc(fp))!=EOF)
{
putc(ch,stdout);
}
puts(" ");
fclose(fp);
}
return 0;

}


13.5

#include<stdio.h>// 文件名后的第一个命令提示符是目标文件,后面的的命令提示符可以是源文件。
#include<stdlib.h>
#include<string.h>
#define BUFSIZE 1024
#define SLEN 81
void append(FILE*source,FILE*dest);

int main(int argc,char *argv[])
{
FILE *fa,*fs;
int files=0;
char file_app[SLEN];
char file_src[SLEN];

if((fa=fopen(argv[1],"a"))==NULL)
{
fprintf(stderr,"Can't open %s\n",argv[1]);
exit(1);
}
if(setvbuf(fa,NULL,_IOFBF,BUFSIZE)!=0)
{
fputs("Can't creat output buffer\n",stderr);
exit(3);
}

for(int n=2;n<argc;n++)
{
if(strcmp(argv[1],argv
)==0)
fputs("Can't append file to itself\n",stderr);
else if((fs=fopen(argv
,"r"))==NULL)
fprintf(stderr,"Can't open %s\n",argv
);
else{
if(setvbuf(fs,NULL,_IOFBF,BUFSIZE)!=0)
{
fputs("Can't create input buffer\n",stderr);
continue;
}
append(fs,fa);
if(ferror(fs)!=0)
fprintf(stderr,"Error in reading file %s.\n",argv
);
if(ferror(fa)!=0)
fprintf(stderr,"Error in writing file %s.\n",argv[1]);
fclose(fs);
files++;
printf("File %s appended.\n",argv
);

}

}
printf("Done.%d files appended.\n",files);
fclose(fa);
return 0;
}
void append(FILE*source,FILE*dest)
{
size_t bytes;
static char temp[BUFSIZE];

while((bytes=fread(temp,sizeof(char),BUFSIZE,source))>0)
fwrite(temp,sizeof(char),bytes,dest);
}


13.6
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 40
int main(void)
{
FILE*in,*out;
int ch;
char name[LEN];

int count=0;

printf("Please enter the name of file.\n");
scanf("%s",name);
if((in=fopen(name,"r"))==NULL)
{
fprintf(stderr,"Can't open the file.\n");
exit(1);
}

strcat(name,".red");
if((out=fopen(name,"w"))==NULL)
{
fprintf(stderr,"Can't open the file.\n");
exit(1);
}
while((ch=getc(in))!=EOF)
if(count++%3==0)
putc(ch,out);

if(fclose(in)!=0||fclose(out)!=0)
fprintf(stderr,"Error in closing files.\n");
return 0;

}
13.7

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{
FILE*fp,*fp2;
char ch,ch2;
if(argc!=3)
{
fprintf(stderr,"Cant open files.\n");
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL)
{
fprintf(stderr,"Cant open the file.\n");
exit(1);
}
if((fp2=fopen(argv[2],"r"))==NULL)
{
fprintf(stderr,"Can't open the file.\n");
exit(1);
}

do{

while((ch=getc(fp))!=EOF&&ch!='\n')
putc(ch,stdout);

if(ch=='\n')
putc(ch,stdout);

while((ch2=getc(fp2))!=EOF&&ch2!='\n')
putc(ch2,stdout);

if(ch2=='\n')
putc(ch2,stdout);
}while(ch!=EOF||ch2!=EOF);

fclose(fp);
fclose(fp2);
return 0;
}
</pre><p>13.8</p><p></p><pre name="code" class="plain">#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{
FILE* fp;
char ch;
int count=0;
char ch2;
ch2=argv[1];
if(argc==2)
{
printf("Please enter a line.\n");
while((ch=getc(stdin))!=EOF)
{
if(ch==argv[1][0])
count++;
}
printf("Have %d %c\n",count,argv[1][0]);
exit(0);
}
for(int i=2;i<argc;i++)
{

if((fp=fopen(argv[i],"r"))==NULL)
{
fprintf(stderr,"Can t open the file %s.To the next file.\n",argv[i]);
continue;
}
ch=getc(fp);
while(ch!=EOF)
{
if(ch==argv[1][0])
count++;

ch=getc(fp);
}
printf("file %s has %d ge %c zifu\n",argv[i],count,argv[1][0]);
count=0;
fclose(fp);
}

return 0;

}


13.9

#include<stdio.h>
#include<stdlib.h>
#define MAX 40
int main(void)
{
FILE*fp;
char words[MAX];
int count=1;

if((fp=fopen("words","a+b"))==NULL)
{
fprintf(stderr,"Can't open \"words\" file\n");
exit(1);
}
char ch;
while((ch=getc(fp))!=EOF)
{
if(ch=='\n')
count++;
}

puts("Enter words to add to the file;press the Enter key at the beginning of a line to terminate.");
while(gets(words)!=NULL&&words[0]!='\0')
{
fprintf(fp,"%d:%s\n",count++,words);
}
count=ftell(fp)+1;

puts("File contents:");
rewind(fp);
while(fscanf(fp,"%s",words)==1)
puts(words);
if(fclose(fp)!=0)
fprintf(stderr,"Error closing file\n");
return 0;
}
13.10

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int main(viod)
{
char name[MAX];
FILE*fp;
long num;
char ch;
puts("Please enter a name of file.");
scanf("%s",name);
if((fp=fopen(name,"r"))==NULL)
{
fprintf(stderr,"Can t open the file.\n");
exit(1);
}
printf("\nPlease enter the num of file place.(q to quit.)\n");
while(scanf("%ld",&num)==1)
{
fseek(fp,num,SEEK_SET);
ch=getc(fp);
while(ch!='\n'&&ch!=EOF)
{
putchar(ch);
ch=getc(fp);

}
printf("\nPlease enter the num of file place.(q to quit.)\n");
}

}


13.11

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
int main(int argc,char *argv[])
{
FILE*fp;
char ch[MAX];
char *ptr;
if(argc!=3)
{
fprintf(stderr,"Error!\n");
exit(1);
}

if((fp=fopen(argv[2],"r"))==NULL)
{
fprintf(stderr,"Can t open the file.\n");
exit(1);
}

ptr=fgets(ch,MAX,fp);
while(ptr!=NULL)
{
if(strstr(ptr,argv[1])!=NULL)
fputs(ptr,stdout);

ptr=fgets(ch,MAX,fp);
}
fclose(fp);
return 0;

}


13.12

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ROWS 20         //参考了官方答案
#define COLS 30
#define MAX 30

const char trans[11] = " .':~*=&%@";
void make_p(int ar[][COLS],char br[][COLS]);
int main(void)
{

int pic_i[ROWS][COLS];
char pic_o[ROWS][COLS];
char name[MAX];
FILE*fp;

printf("Please enter the name of file.\n");
scanf("%s",name);
if((fp=fopen(name,"rb"))==NULL)
{
fprintf(stderr,"Cant open the file.\n");
exit(1);
}

for(int i=0;i<ROWS;i++)
for(int j=0;j<COLS;j++)
fscanf(fp,"%d",&pic_i[i][j]);

fclose(fp);

make_p(pic_i,pic_o);

for(int i=0;i<ROWS;i++)
{
for(int j=0;j<COLS;j++)
putc(pic_o[i][j],stdout);
putchar('\n');
}

}
void make_p(int ar[][COLS],char br[][COLS])
{
for(int i=0;i<ROWS;i++)
for(int j=0;j<COLS;j++)
{
br[i][j]=trans[ar[i][j]];
}
}
13.13

#include<stdio.h>
#include<stdlib.h>  //很傻的办法。。。用if重新定义pic_i
#include<string.h>
#define ROWS 20         //²Î¿¼Á˹ٷ½´ð°¸£¬»ù±¾²î²»¶à°É
#define COLS 30
#define MAX 30
void camp(int s[][COLS]);

const char trans[11] = " .':~*=&%@";
void make_p(int ar[][COLS],char br[][COLS]);
int main(void)
{

int pic_i[ROWS][COLS];
char pic_o[ROWS][COLS];
char name[MAX];
FILE*fp;

printf("Please enter the name of file.\n");
scanf("%s",name);
if((fp=fopen(name,"rb"))==NULL)
{
fprintf(stderr,"Cant open the file.\n");
exit(1);
}

for(int i=0;i<ROWS;i++)
for(int j=0;j<COLS;j++)
fscanf(fp,"%d",&pic_i[i][j]);
camp(pic_i);
fclose(fp);

make_p(pic_i,pic_o);

for(int i=0;i<ROWS;i++)
{
for(int j=0;j<COLS;j++)
putc(pic_o[i][j],stdout);
putchar('\n');
}

}
void make_p(int ar[][COLS],char br[][COLS])
{
for(int i=0;i<ROWS;i++)
for(int j=0;j<COLS;j++)
{
br[i][j]=trans[ar[i][j]];
}
}
void camp(int s[ROWS][COLS])
{
int r,c;
for(r=0;r<ROWS;r++)
for(c=0;c<COLS;c++)
{
if((r==0&&c==0)||(r==0&&c==29)||(r==19&&c==0)||(r==19&&c==29))
{
if((r==0&&c==0)&&(s[r][c]-s[r][c+1]>1)&&(s[r][c]-s[r+1][c]>1))
s[r][c]==(s[r][c+1]+s[r+1][c])/2;

if((r==0&&c==29)&&(s[r][c]-s[r][c-1]>1)&&(s[r][c]-s[r+1][c]>1))
s[r][c]==(s[r][c-1]+s[r+1][c])/2;

if((r==19&&c==0)&&(s[r][c]-s[r-1][c]>1)&&(s[r][c]-s[r][c+1]>1))
s[r][c]==(s[r-1][c]+s[r][c+1])/2;

if((r==19&&c==29)&&(s[r][c]-s[r-1][c]>1)&&(s[r][c]-s[r][c-1]>1))
s[r][c]==(s[r-1][c]+s[r][c-1])/2;

}

else if(r==0&&c!=0&&c!=29)
{
if(s[r][c]-s[r][c-1]>1&&s[r][c]-s[r][c+1]>1&&s[r][c]-s[r+1][c]>1)
s[r][c]=(s[r][c-1]+s[r][c]+1+s[r+1][c])/3;
}
else if(r==19&&c!=0&&c!=29)
{
if(s[r][c]-s[r][c-1]>1&&s[r][c]-s[r][c+1]>1&&s[r][c]-s[r-1][c]>1)
s[r][c]=(s[r][c-1]+s[r][c]+1+s[r-1][c])/3;
}
else if(c==0&&r!=0&&r!=19)
{
if(s[r][c]-s[r-1][c]>1&&s[r][c]-s[r+1][c]>1&&s[r][c]-s[r][c+1]>1)
s[r][c]=(s[r-1][c]+s[r+1][c]+1+s[r][c+1])/3;
}

else if(c==29&&r!=0&&r!=19)
{
if(s[r][c]-s[r-1][c]>1&&s[r][c]-s[r+1][c]>1&&s[r][c]-s[r][c-1]>1)
s[r][c]=(s[r-1][c]+s[r+1][c]+1+s[r][c-1])/3;
}

else
{
if((s[r][c]-s[r-1][c]>1)&&(s[r][c]-s[r+1][c]>1)&&(s[r][c]-s[r][c-1]>1)&&(s[r][c]-s[r-1][c+1]>1))
{
s[r][c]=(s[r-1][c]+s[r+1][c]+s[r][c-1]+s[r][c+1])/4;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: