共有回帖数 0 个
-
题目1(无忧 id 14、id 27(提供isP()函数;捷成id 23题)
请编写一个函数jsValue(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。
最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。
部分源程序存在文件prog1.c中。
例如:若输入17 5 则应输出:19,23,29,31,37。
请勿改动主函数main()和写函数writeDat()的内容。
#include conio.h
#include stdio.h
void readwriteDat();
int isP(int m)
{
int i;
for(i=2;im;i++)
if(m % i==0)return 0;
return 1;
}
void num(int m,int k,int xx[])
{ int s=0;
for(m=m+1;k0;m++)
if(isP(m)) { xx[s++]=m; k--;}
}
main()
{
int m,n,xx[1000];
clrscr();
printf("nPlease enter two integers:");
scanf("%d%d",&m,&n);
num(m,n,xx);
for(m=0;mn;m++)
printf("%d ",xx[m]);
printf("n");
readwriteDat();
}
void readwriteDat()
{
int m,n,xx[1000], i;
FILE *rf,*wf;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i10;i++){
fscanf(rf,"%d %d",&m,&n);
num(m,n,xx);
for(m=0;mn;m++)fprintf(wf,"%d ",xx[m]);
fprintf(wf,"n");
}
fclose(rf);
fclose(wf);
}
无忧id 14题(无isP()函数)
#include stdio.h
void jsValue(int m,int k,int xx[])
{ int i,j,s=0;
for(i=m+1;k0;i++)
{ for(j=2;ji;j++)
if(i%j==0) break;
if(i==j) { xx[s++]=i; k--;}
}
}
main()
{
int m,n,zz[100];
printf("n请输入两个整数:");
scanf("%d%d",&m,&n);
jsValue(m,n,zz);
for(m=0;mn;m++)printf("%d ",zz[m]);
printf("n");
writeDat();
}
writeDat()
{
int m,n,zz[100],i;
FILE *in,*out;
in=fopen("in.dat","r");
out=fopen("out.dat","w");
for(i=0;i10;i++){
fscanf(in,"%d%d",&m,&n);
jsValue(m,n,zz);
for(m=0;mn;m++)fprintf(out,"%d ",zz[m]);
fprintf(out,"n");
}
fclose(in);
fclose(out);
}
************************************************************
★题目2(无忧 id 143)
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main( )函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:部分源程序存在文件prog1.c中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#include stdio.h
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;
void jsVal()
{ int i,j,qw,bw,sw,gw;
for(i=0;iMAX;i++)
{ qw=a/1000; bw=a/100%10;
sw=a%100/10; gw=a%10;
if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0) b[cnt++]=a;
}
for(i=0;icnt-1;i++)
for(j=i+1;jcnt;j++)
if(bb[j]) { qw=b; b=b[j]; b[j]=qw;}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i MAX ; i++) fscanf(fp, "%d", &a) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%dn", cnt) ;
for(i = 0 ; i cnt ; i++) printf("%d ", b) ;
printf("n") ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%dn", cnt) ;
for(i = 0 ; i cnt ; i++) fprintf(fp, "%dn", b) ;
fclose(fp) ;
}
***********************************************************
★题目3(无忧 id 133题;捷成id 59、99题)
函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。
例如:原文:n any field.Yu can create an index
you have the correct record.
结果:n any field. Yu can create an index
rd. yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序存放在文件prog1.c中。
请勿改动主函数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)
{int i,righto,j,s,k;
char tem[80];
for(i=0;imaxline;i++)
for(j=strlen(xx)-1;j=0;j--)
{k=0; memset(tem,0,80);
if(xx[j]=='o')
{righto=j;
for(s=righto+1;sstrlen(xx);s++)
tem[k++]=xx[s];
for(s=0;srighto;s++)
if(xx[s]!='o') tem[k++]=xx[s];
strcpy(xx,tem);
}
else continue;
}
}
void main()
{
clrscr() ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开!n 07") ;
return ;
}
StrOR() ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
char *p ;
if((fp = fopen("IN.DAT", "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 ;
clrscr() ;
fp = fopen("OUT5.DAT", "w") ;
for(i = 0 ; i maxline ; i++) {
printf("%sn", xx) ;
fprintf(fp, "%sn", xx) ;
}
fclose(fp) ;
}
解法二:
void StrOR(void)
{ int i;
char a[80],*p;
for(i=0;imaxline;i++)
{ p=strchr(xx,'o');
while(p)
{ memset(a,0,80);
memcpy(a,xx,p-xx);
strcpy(xx,p+1);
strcat(xx,a);
p=strchr(xx,'o');
}
}
}
************************************************************
★题目4(无忧id 24题 捷成id 9题)
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT6.DAT中。
例如:原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include stdio.h
#include string.h
#include conio.h
#include ctype.h
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
/*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/
void StrOL(void)
{ int i,j,k,s,m,strl;
char str[80];
for(i=0;imaxline;i++)
{ strl=strlen(xx);
memset(str,0,80);
s=k=0;
for(j=strl-1;j=0;j--)
{ if(isalpha(xx[j])) k++;
else { for(m=1;m=k;m++)
str[s++]=xx[j+m];
k=0;
}
if(!isalpha(xx[j])) str[s++]=' ';
}
for(m=1;m=k;m++)
str[s++]=xx[j+m];
str[s]=' ';
strcpy(xx,str);
}
}
void main()
{
clrscr();
if(ReadDat()){
printf("数据文件IN.DAT不能打开!n 07");
return;
}
StrOL();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN.DAT","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;
clrscr();
fp=fopen("OUT6.DAT","w");
for(i=0;imaxline;i++){
printf("%sn",xx);
fprintf(fp,"%sn",xx);
}
fclose(fp);
}
捷成版模拟系统中的解法
/*在无忧模拟系统中没通过测试(输入文件句末有标点的在输出文件中句前无空格*/
void StrOL(void)
{
int i, j ;
char word[21], yy[80], zz[80], *p ;
for(i = 0 ; i maxline ; i++) {
p = xx ;
j = 0 ;
memset(word, 0, 21) ;
memset(yy, 0, 80) ;
while(*p) {
if(isalpha(*p)) {
word[j++] = *p++ ;
if(*p) continue ;
}
strcpy(zz, yy) ;
sprintf(yy, "%s %s", word, zz) ;
j = 0 ;
memset(word, 0, 21) ;
while(*p && (!isalpha(*p))) p++ ;
}
strcpy(xx, yy) ;
}
}
***********************************************************
★题目5(无忧id 8题)
在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 6012 5099 9012 7025 8088
处理后 9012 6012 7025 8088 5099
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include stdio.h
#include string.h
#include conio.h
int aa[200],bb[10];
void jsSort()
{
int i,j,data;
for(i=0;i199;i++)
for(j=i+1;j200;j++)
if(aa%1000aa[j]%1000||aa%1000==aa[j]%1000&&aaaa[j])
{data=aa;aa=aa[j];aa[j]=data;}
for(i=0;i10;i++)
bb=aa;
}
void main()
{
readDat();
jsSort();
writeDat();
}
readDat()
{
FILE *in;
int i;
in=fopen("in.dat","r");
for(i=0; i200; i++) fscanf(in,"%d,",&aa);
fclose(in);
}
writeDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i10; i++){
printf(" %d",bb);
fprintf(out,"%dn",bb);
}
fclose(out);
}
************************************************************
题目6
题目6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 9012 5099 6012 7025 8088
处理后 5099 8088 7025 6012 9012
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#includestdio.h
#includestring.h
#includeconio.h
int aa[200],bb[10];
void jsSort()
{
int i,j,data;
for(i=0;i199;i++)
for(j=i+1;j200;j++)
if(aa%1000aa[j]%1000||aa%1000==aa[j]%1000&&aaaa[j])
{data=aa;aa=aa[j];aa[j]=data;}
for(i=0;i10;i++)
bb=aa;
}
void main()
{
readDat();
jsSort();
writeDat();
system("pause");
}
readDat()
{
FILE *in;
int i;
in=fopen("in.dat","r");
for(i=0; i200; i++) fscanf(in,"%d,",&aa);
fclose(in);
}
writeDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i10; i++){
printf("i=%d,%dn",i+1,bb);
fprintf(out,"%dn",bb);
}
fclose(out);
}
楼主 2016-03-09 13:10 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知