1、调用函数rwdata(),从IN.dat文件中读取10组数据(m和k值),并嵌套调用primenum函数分别得出array[]数组。请编写函数primenum(int m,int k,int array[]),该函数的功能是:将紧靠m的k个素数存入数组array并在屏幕上显示。最后把结果输出到文件OUT.dat中。
#include<conio.h>
#include<stdio.h>
void rwdata();
void primenum(int m, int k,int array[])
{int value=m+1;
int half,n=0,i;
while(1)
{half=value/2;
for(i=2;i<half;i++)
if(value%i==0)
break;
if(i>half)
{array[n]=value;
n++;
}
if(n>=k)
break;
value++;
}
}
main()
{int m,n,array[1000];
printf(“\nPlease enter two integers:”);
scanf(“%d%d”’&m,&n);
primenum(m,n,array);
for(m=0;m<n;m++)
printf(“%d”,array[m]);
printf(“\n”);
rwdata();
}
Void rwdata()
{int m,n,array[1000],i;
FILE *readfile, *writefile;
readfile=fopen(“in.dat”, “r”);
writefile=fopen(“out.dat”, “w”);
for(i=0;i<10;i++)
{fscanf(readfile,”%d%d”,&m,&n);
primenum(m,n,array);
for(m=0;m<n;m++)
{fprintf(writefile,”%d”,array[m]);
fprintf(writefile,”\n”);
}
fclose(readfile);
fclose(writefile);
}
7、编写函数findStr(),统计一个长度为2的子字符串在另一个字符串中出现的次数,例如,假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,函数返回值是6。
函数ReadWrite()实现从文件IN.dat中读取两个字符串,并调用函数findStr(),最后,把结果输出到文件OUT.dat中。
int findStr(char *str,char *substr)
{ int n;
char *p,*r;
n=0;
while(*str)
{p=str;
r=substr;
while(*r)
if(*r==*p)
{r++;
p++;
}
else
{break;
}
if(*r=='\0')
n++;
str++;
}
return n;
}
8、编写函数countValue(),求n以内(不包括n),同时能被3与8整除的所有自然数之和的平方根s,并作为函数值返回。
主函数最后调用函数progReadWrite()从IN.dat文件中读取10组数据,分别得出结果,且把结果输出到文件OUT.dat中。
若n为1000时,函数值应为:s=153.909064。
double countValue(int n)
{ double xy=0.0;
int i;
for(i=1;i<n;i++)
if(i%3==0&&i%7==0)
xy+=i;
xy=sqrt((double)xy);
return xy;
}
11、把s字符串中的所有字符左移一个位置,字符串中的第一个字符移到最后。
请编写函数change(char*s)实现程序要求,最后调用函数readwriteDAT()从IN.dat文件中读取50组数据,分别得出结果,且把结果输出到out.dat文件中。
void change(char *s)
{ int i,strl;
char ch;
strl=strlen(s);
ch=*s;
for(i=0;i<strl-1;i++)
*(s+i)=*(s+i+1);
*(s+str-1)=ch;
}
12、找出所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)的个数count以及这些i之和sum。
请编写函数primeNum()实现科学程序要求的功能,最后调用函数writeDat(),把结果count和sum输出到文件out.dat中。
void primeNum()
{ int i;
for(i=2;i<=90;i++)
if(isPrime(i)&&isPrime(i+4)&&isPrime(i+10))
{ count++;
sum+=i;
}
}
14、请编写函数countValue(),求出1~1000之内能被7或11整除,但不能同时被7或11整除的所有整除,将它们放在数组a中,并通过n返回这些数的个数。主函数最后调用函数Wdata()把计算结果输出到out.dat中。
void countValue(int *a,int *n)
{ int i;
*n=0;
for(i=1;i<=1000;i++)
if(i%7==0&&i%11)
{*a=i;
*n=*n+1;
a++;
}
else if(i%7&&i%11==0)
{ *a=i;
*n=*n+1;
a++;
}
}
16、寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
请编写函数int palindromevalue(long n),如果是回文数,则函数返回1,反之则返回0。最后,把结果输出到文件ont.dat中。
int palindromevalue(long n)
{ int i,strl,half;
char temp[20];
ltoa(n,temp,10);
strl=strlen(temjp);
half=strl/2;
for(i=0;i<half;i++)
if(temp[i]!=temp[--strl])
break;
if(i>=half)
return 1;
else
return 0;
}
22、把str字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。
请编写函数CharChange(char*str)实现程序要求,最后调用函数rwdata()从IN.dat文件中读取50组数据,分别得出结果,并把结果输出到文件out.dat中。
void CharChange(char *str)
{ while(*str)
{ if(*str==’z’||*str==’z’)
*str-=25;
else if(isalpha(*str))
*str+=1;
str++;
}
}
25、在三位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;该整数既是完全平方数,又有两个数字相同。请编写函数SearchVal()实现此功能,满足该条件的整数的个数通过所编写的函数返回。最后调用函数wdata(),把结果输出到文件out.dat中。
searchVal(int bb[])
{ int i,a,b,c,cnt=0;
for((i=0;i*i<1000;i++)
{ a=i*i/100;
b=i*i/10%10;
c=i*i%10;
if(a==b||b==c||c==a)
bb[cnt++]=i*i;
}
return cnt;
}
33、下列程序的功能是:将一个正整数序列{k1,k2,…,k9}重新排列成一个新的序列。新序列中,比k1小的数都在k1的前面(左面),比k1大的数都在k1的后面(右面),要求编写函数NumSort()实现此功能,最后调用wdata()函数将新序列输出到out.dat文件中。
在程序中已给出了10个序列,每个序列有9个正整数,并存入数组 a[10][9]中,分别求出这10个新序列。
NumSort(int a[10][9])
{ int value,i,j,k,num;
for(i=0;i<10;i++)
{ value=a[i][0];
for(j=0;j<9;j++)
if(a[i][j]<value)
{ num=a[i][j];
for(k=j;k>0;k--)
a[i][k]=a[i][k-1];
a[i][0]=num;
}
}
}
34、下列程序的功能是:选出100以上、1000之内所有个位数字与十位数字之和被10除所得余数恰好是百位数字的素数(如293),计算并输出上述这些素数的个数count以及这些素数值的和sum。请编写函数countValue()实现程序要求。最后调用函数wdata(),把结果count和suml输出到out.dat文件中。
void countValue()
{ int i,j,half,hun,ten,data;
for(i=101;i<1000;i++)
{ hun=i/100;
ten=i%100/10;
data=i%10;
if(hun==(ten+data)%10)
{ half=i/2;
for(j=2;j<half;j++)
if(i%j==0)
break;
if(j>=half)
{ count++;
sum+=i;
}
}
}
}
35、某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。
下列程序的功能是:依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0]、b[1]和b[2]中,请编写sumVal()函数来实现此功能。最后调用函数wdata()把数组b[]中的值输出到out.dat文件中。
void sumVal()
{ int A1=1;A2=1,n=1,An;
int sum0;sum;
sum0=A1+A2;
while(1)
{ An=A1+A2*2;
sum=sum0+An;
A1=A2;
A2=An;
n++;
if(sum0<100&&sum>=100)
b[0]=n;
if(sum0<1000&&sum>=1000)
b[1]=n;
if(sum0<10000&&sum>=10000)
{b[2]=n;
break;
}
sum0=sum;
}
}
39、下列程序的功能是:计算出自然数SIX和NINE、它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和sum ,请编写函数countValue()实现程序的要求。最后调用函数wdata(),把结果cnt和sum,输出到out.dat文件中。
其中的S、I、X、N、E各代表一个十进制数。
void countValue()
{ int S,I,X,N,E;
int SIX,NINE;
for(S=1;S<10;S++)
for(I=0;I<10;I++)
for(X=0;X<10;X++)
for(N=1;N<10;N++)
for(E=0;E<10;E++)
{SIX=S*100+I*10+X;
NINE=N*1000+I*100+N*10+E;
if(SIX*3==NINE*2)
{cnt++;
sum+=SIX+NINE;
}
}
}
48、设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请编写函数Josegh()实现此功能,并调用函数WriteDat(),把结果p输出到out.dat文件中。
void Josegh(void)
{ int i,j,s1,w;
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<=i-1;j++)
p[j-1]=p[j];
p[i-1]=w;
}
}
56、下列程序的功能是:计算500~800区间内素数的个数count,并按所求素数的值从大到小的顺序排序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数......的值sum。请编写函数primeValue()实现程序的要求。最后调用函数writeDat(),把结果count和sum输出到OUT.dat文件中。
void primeValue()
{ int i,j,half,y[100];
for(i=800;i>=500;i--)
{ half=i/2;
for(j=2;j<half;j++)
if(i%j==0)
break;
if(j>=half)
{ yy[count]=i;
count++;
}
}
for(i=0,j=1;i<count;i++)
{ sum+=j*yy[i];
j=j*-1;
}
}
57、下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数count以及这些数的和sum。请编写函数calValue()实现程序的要求,最后调用函数writeDat(),把结果count和sum输出到OUT.dat文件中。
void calValue()
{ int i,thou,hun,ten,data;
for(i=5000;i>=1000;i--)
{ thou=i/1000;
hun=i%1000/100;
ten=i%100/10;
data=i%10;
if(thou+hun==ten+data&&thou+hun==(data-thou)*10)
{ count++;
sum+=i;
}
}
}
78、编写函数FibValue(),求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数WData()从IN.dat中读取50个数据t,分
评论0