for(m=1;m<=k;m++) str[s++]=xx[i][j+m]; str[s]='\\0';
strcpy(xx[i],str); }
}
******************************************************************************* ##方差##
★☆题目33(方差运算题)
请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totfc=1/N∑(xx[i]-ave2) i=1
设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)
/*********编制函数ReadDat()的部分************/ for(i=0;i /*******************************************/ void Compute(void) { int i,yy[MAX]; for(i=0;i if(xx[i]%2==0) { yy[even++]=xx[i]; ave2+=xx[i];} else { odd++; ave1+=xx[i];} if(odd==0) ave1=0; else ave1/=odd; if(even==0) ave2=0; else ave2/=even; for(i=0;i totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even; } ☆题目83(方差运算题) 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 21 计算方差的公式如下: N 2 totfc=1/N ∑ (xx[i]-ave1) i=1 设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) /*********编制函数ReadDat()的部分************/ for(i=0;i /*******************************************/ void Compute(void) { int i,yy[MAX]; for(i=0;i if(xx[i]%2) { yy[odd++]=xx[i]; ave1+=xx[i];} else { even++; ave2+=xx[i];} if(odd==0) ave1=0; else ave1/=odd; if(even==0) ave2=0; else ave2/=even; for(i=0;i totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd; } ☆题目93(方差运算题) 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute(),分别计算出xx中奇数的个数odd,偶数的个数even,平均值aver以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totfc=1/N ∑ (xx[i]-aver) i=1 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) /***************编制函数ReadDat()*****************/ for(i=0;i } /*********************************************/ void Compute(void) { int i; for(i=0;i aver/=MAX; for(i=0;i totfc+=(xx[i]-aver)*(xx[i]-aver); totfc/=MAX; } ******************************************************************************* ##杂例## ☆题目19(单词个数统计题) 编写一个函数findStr(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为\,子字符串为\,函数返回值是6。(表明了返回值是整数型) 函数ReadWrite()实现从文件in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中。 int findStr(char *str,char *substr) { int i,j,len1,len2,cnt=0,flag; len1=strlen(str); len2=strlen(substr); for(i=0;i if(str[i+j]==substr[j]) flag=1; else {flag=0;break;} if(flag==1) cnt++; } return cnt; } ★题目20(Fibonacci数列题) 编写函数jsValue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。 例如:当t=1000时,函数值为:1597。 22 int jsValue(int t) { int f0=0,f1=1,fn; fn=f0+f1; while(fn<=t) { f0=f1; f1=fn; fn=f0+f1; } return fn; } ☆题目21(迭代方法求方程题) 下列程序prog1.c的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 Xn+1=cos(Xn) 迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=cos(X0),求出一个新的X1; (4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果输出到文件OUT17.DAT中。 float countValue() { float x0,x1; x1=0.0; do{ x0=x1; x1=cos(x0); }while(fabs(x0-x1)>=0.000001); return x1; } 注:本题在无忧或捷成模拟盘中,需定义double x0,x1;才能通过,据实际上机抽到该题的考生反映,实际上机需按上面解法的定义方能通过,特此说明,供参考。 ★题目22(平方根问题) 请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。 例如若n为1000时,函数值应为:s=153.909064。 double countValue(int n) { int i; double s=0.0; for(i=1;i } 题目24(完全平方数问题) 下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。 int jsValue(int bb[]) {int i,j,k=0; int hun,ten,data; for(i=10;i<32;i++) {j=I*I; hum=j/100; ten=j0/10; data=j; if(hum==ten||hum==data||ten==data) bb[k++]=j;} return k; } ★题目25 (回文数问题) 下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int svalue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。 int jsValue(long n) {int i,strl,half; char xy[20]; ltoa(n,xy,10); /*注意这里不能使用itoa()函数,因为n是long 型的*/ strl=strlen(xy); half=strl/2; for(i=0;i if(xy[i]!=xy[--strl]) break; if(i>=half) return 1; else return 0; } 或者下面的解法: int jsValue(long n) {long int s=0,k; k=n; while(k) { s=s*10+k; k/=10; } if(s==n) return 1; if(s!=n) return 0; } 23 输出结果为: m= 11,m*m= 121,m*m*m= 1331 m= 101,m*m= 10201,m*m*m= 1030301 m= 111,m*m= 12321,m*m*m= 1367631 ★☆题目35(级数运算题) 某级数的前两项A1=1,A2=1,以后各项具有如下关系: An=An-2+2An-1(注:n-2与n-1为下标) 下列程序prog1.c的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn 请勿改动主函数main()和写函数writeDat()的内容。 #include {int a1=1,a2=1,a12,sn,k=2; sn=a1+a2; while(1) {a12=a1+2*a2; if(sn<100&&sn+a12>=100) b[0]=k; if(sn<1000&&sn+a12>=1000) b[1]=k; if(sn<10000&&sn+a12>=10000) {b[2]=k;break;} sn=sn+a12; a1=a2;a2=a12; k++; } } 运行结果为: M=100,n=6 M=1000,n=9 M=10000,n=11 ☆题目41(SIX/NINE问题) 下列程序prog1.c的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和SUM。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT15.DAT中。 其中的S,I,X,N,E各代表一个十进制数字。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include void countValue() { int s,i,x,n,e,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(3*six==2*nine) { cnt++;sum+=six+nine;} } } ★题目57(出圈题) (本题采用实际上机题,05年9月和04年9月实际上机题与下面相同) 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,给出这n个人的顺序表p。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把编号按照出圈的顺序输出到OUT.DAT文件中。 注意:第1个出圈的编号存放在p[0]中,第2个出圈的编号存放在p[1]中,直至第n个出圈的编号存放在p[n-1]中。 设 n = 100, s = 1, m = 10进行编程。 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 for(i=0,j=n-1;i 题目67(整数各位数字运算题) 下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT13.DAT中。 void countValue() 24 {int i,thou,hun,ten,data; for(i=1000;i<5000;i++) { thou=i/1000; hun=i00/100; ten=i0/10; data=i; if(thou+hun==ten+data&&thou+hun==(data-thou)*10) {cnt++;sum+=i;} } } ★题目79(数字运算题) 请编写函数void countValue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。 void countValue(int *a,int *n) { int i; *n=0; for(i=1;i<=1000;i++) if(i%7==0&&i||i%7&&i==0) a[(*n)++]=i; } ★题目90(整数排序题) 下列程序的功能是:将一正整数序列{K1,K2,...,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。要求编写函数jsValue()实现此功能,最后调用writeDat()函数将新序列输出到文件out.dat中。 说明:在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。 例:序列{6,8,9,1,2,5,4,7,3} 经重排后成为{3,4,5,2,1,6,8,9,7} jsValue(int a[10][9]) { int i,j,k,val,num; for(i=0;i<10;i++) { val=a[i][0]; for(j=0;j<9;j++) if(a[i][j] { num=a[i][j]; for(k=j;k>0;k--) a[i][k]=a[i][k-1]; a[i][0]=num; }