◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
小涛(烟台)QQ:274922137
E-mail:ftemail@126.com
计算机三级网络技术上机100套试题(31-59)
Post by 小涛, 2009-4-2, Views:31:下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现函数的要求 ,最后调用函数readwriteDAT()把结果输出到文件out.dat中。
例如:若输入17,5,则应输出:19,23,29,31,37。
void num(int m,int k,int xx[]) /*标准答案*/
{int data=m+1;
int half,n=0,I;
while(1) {half=data/2;for(I=2;I<=half;I++)
if(data%I==0)break;
if(I>half)
{xx[n]=data;n++;}
if(n>=k)break;
data++;
} }
或者:
void num(int m,int k,int xx[])
{int i,j,s=0;
for(i=m+1;k>0;i++)
{for(j=2;j<i;j++)
if(i%j==0) break; /*注:素数为只能被自己和1整除的数.如果i%j等于0,说明i不是素数,跳出本层循环*/
if(i==j)
{xx[s++]=i;k;}
} }
void num(int m, int k, int xx[])
{ int i=0;
for(m=m+1;k>0;m++)
if(isP(m))
{ xx[i++]=m;
k; } }
32:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT.DAT中.
例如:原文:You can create an index on any field.
you have the correct record.
结果: n any field.You can create an index
rd.yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
void StrOR(void) /*标准答案*/
{int I,j,k,index,strl;
char ch;
for(I=0;I<maxline;I++)
{strl=strlen(xx[I]);
index=strl;
for(j=0;j<strl;j++)
if(xx[I][j]=='o')
{for(k=j;k<strl1;k++)
xx[I][k]=xx[I][k+1];
xx[I][strl1]= ' ';
index=j;}
for(j=strl1;j>=index;j)
{ch=xx[I][strl1];
for(k=strl1;k>0;k)
xx[I][k]=xx[I][k1];
xx[I][0]=ch;}
}
}
39:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT9.DAT中.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
void ChA(void) /*标准答案*/
{int I,j,k,str;
char ch;
for(I=0;I<maxline;I++)
{str=strlen(xx[I]);
ch=xx[I][0];
for(j=0;j<str1;j++)
xx[I][j]+=xx[I][j+1];
xx[I][str1]+=ch;
for(j=0,k=str1;j<str/2;j++,k)
{ch=xx[I][j];
xx[I][j]=xx[I][k];
xx[I][k]=ch;}
}
}
40:编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值为6。
函数readwriteDat()的功能是实现从文件in.dat中读取两个字符穿4,并调用函数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;
}
41:下列程序的功能是:利用发下所示的简单迭代方法求方程:cos(x)x=0的一个实根。xn+1=cos(xn)
迭代步骤如下:
(1)取X1初值为0.0;
(2)X0=X1,把X1的值赋给X0;
(3)X1=COS(X0),求出一个新的X1;
(4)若X0X1绝对值小0.000001,执行步骤(5),否则执行步骤(2);
(5)所求X1就是方程cos(X)X=0的一个实根,作为函数值返回。
请编写函数countvalue()实现程序的要求,最后调用函数WRITEDAT()把结果输出到文件OUT17.DAT中。
float countValue() /*标准答案*/
{float x0,x1=0.0;
while(1)
{x0=x1;
x1=cos(x0);
if(fabs(x0-x1)<1e-6) break;
}
return x1;
}
42:已知在文件in.dat中存有N个(个数<200)四位数字的正整数,函数readdat()读取这N个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。
void CalValue(void) /*标准答案*/
{int I;
double x,sum=0;
for (I=0;I<MAXNUM;I++)
{sumint=sumint+(int)xx[I];
x=xx[I](int)xx[I];
sumdec=sumdec+x;
sum=sum+xx[I];
}
aver=sum/MAXNUM;
}
43:下列程序的功能是:寻找并输出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);
strl=strlen(xy);
half=strl/2;
for(I=0;I<half;I++)
if(xy[I]!=xy[strl]) break;
if(I>=half) return 1;
else return 0;
}
44:已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到OUT.DAT文件。
例如:9123,9123>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
9812,9812<0,则该数不满足条件计算平均值pjz2.
程序中已定义数组:a[300],已定义变量:cnt
void jsValue() /*标准答案*/
{int I,thou,hun,ten,data,j;
for(I=0;I<300;I++)
{thou=a[I]/1000; hun=a[I]%1000/100;
ten=a[I]%100/10; data=a[I]%10;
if (thouhuntendata>0){b[cnt]=a[I];cnt++;}
}
for(I=0;I<cnt1;I++)
for(j=I+1;j<cnt;j++)
if(b[I]>b[j])
{data=b[I]; b[I]=b[j]; b[j]=data;}
}
47:请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;再编制函数COMPUTE()分别计算出XX中奇数的个数ODD,偶数的个数EVEN,平均值AVER以及方差TOTFE的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。计算方差的公式如下:totfc=1/N∑(xx[i]-ave1)2
设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)
void compute(void) /*标准答案*/
{ int I,yy[max];
for (I=0;I<100;I++)
if(xx[i]$2!=0
{odd++;
ave1+=xx[i];
}
else
{even++;
ave2+=xx[i];
yy[even-1]=xx[i];
}
ave1/=odd;
ave2/=even;
for(i=0;i<even;i++)
totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
48:某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An2+2An1.
下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+...+An,并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制jsvalue()函数来实现此功能, 最后调用函数writeDat()把数组b[]中的值输出到out.dat文件中。
void jsvalue() /*标准答案*/
{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;
}
}
jsvalue()
{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++;
}
}
51:下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt,以及满足此条件所有的SIX与NINE的和SUM。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out15.dat中.其中S,I,X,N,E各代表一个十进制数字。
void countValue() /*标准答案,有问题!!!*/
{int I=100;
while(1)
{if(3*I%2==0&&3*I/2>=1000&&3*I/2<=9999)
{cnt++;sum+=I+3*I/2;I++;}
else I++;
if (I>999||3*I/2>9999) break;
}
}
52: 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
例如:位置0 1 2 3 4 5 6 7
源字符串 h g f e d c b a
则处理后 h a f c d e b g
void jsSort() /*标准答案*/
{int I,j,k,strl;
char ch;
for(I=0;I<20;I++)
{strl=strlen(xx[I]);
for(j=1;j<strl2;j=j+2)
for(k=j+2;k<strl;k=k+2)
if (xx[I][j]>xx[I][k])
{ch=xx[I][j];xx[I][j]=xx[I][k];xx[I][k]=ch;}
}
}
59:设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。
设n=100,s=1,m=10.
(1)将1到n个人的序号存入一维数组p中;
(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;
(3)重复第(2)步直至圈中只剩下p[1]为止。
void Josegh(void) /*标准答案*/
{int I,j,k,s1,w;
s1=s;
for(I=1;I<=n;I++) p[I1]=I;
for(I=n;I>=2;I)
{s1=(s1+m1)%I;
if (s1==0) s1=I;
w=p[s11];
for(j=s1;j<=I1;j++) p[j1]=p[j];
p[I1]=w;}
}
或许你还对下面的文章感兴趣
- 计算机三级网络技术上机100套试题(1-30) (2009-4-2 23:26:41)
- 三级网络技术上机训练试题 (2009-4-1 1:30:25)
- 2009年3月三级网络技术试卷与答案 (2009-4-1 1:16:2)
- 计算机三级网络技术上级100套答案 (2009-2-25 20:2:4)





