1、已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeCal(),其功能是:求出这些四位数中素数的个数count,再求出所有满足此条件的四位数的平均值Ave1以及不满足此条件的四位数Ave2。 int i;
for(i=0;i<300;i++) if(isP(a[i])) {
Ave1+=a[i]; count++; } else {
Ave2+=a[i]; }
Ave1=Ave1/count; Ave2=Ave2/(300-count);
2、著名的约瑟夫问题:
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人此人出圈,再从他的下一个人重新开始1到m报数,如此进行下去直到所有人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请编写函数Josegh()实现此功能,设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, 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; }
}
3、现有一个10个人的100行选票数据文件IN.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第1个人的选中情况,第二位表示第2个人的选中情况,以此类推;内容均为字符0或1,0表示此人未被选中,1则表示此人被选中。若一张选票人
数大于5个人时被认为无效。给定函数Rdata()的功能是把选票数据读入到字符串数组string中。请编写CountRs()函数。其功能是实现:统计每个人的选票数并把得票数依次存入result[0]到result[9]中 ,把结果result输出到OUT.dat中。 void CountRs(void) {
int i,count,j; char *pf; for(i=0;i<10;i++) result[i]=0; for(i=0;i<100;i++)
{ pf=string[i]; count=0; while(*pf) { if(*pf=='1')
count++; pf++; }
if(count<=5) for(j=0;j<10;j++)
result[j]+=string[i][j]-'0'; }
}
4、请编写一个函数findStr(),其功能是:统计一个长度为2的子字符串在另一个字符串中出现的次数。 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;
}
5、函数readData()负责从文件IN.DAT中读取20行数据存放到字符串数组inBuf[]中(每行字符串的长度均小于80)。请编制函数arrangeChar(),其功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组inBuf[]中。 void arrangeChar() {
int i,j,n; int str,half; char temp; for(i=0;i<20;i++) { str=strlen(inBuf[i]); half=str/2;
for(j=0;j } for(j=half-1,n=str-1;j>=0;j--,n--) { temp=inBuf[i][j]; inBuf[i][j]=inBuf[i][n]; inBuf[i][n]=temp; } } } 6、请编写函数C请编写函数CountValue(),其实现的功能是:求n以内(不包括n),同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。 double countValue(int n) { double xy = 0.0; int i; for (i=1; i xy += i; xy = sqrt((double)xy); return xy; } 7、已经数据文件in.dat中存有200个四位数,并已调用读函数 RData()把这些数存入数组a中,请编写函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续小于该四位数以后的5个数且都是偶数,则统计出满足此条件的个数count并把这些四位数从小到大排序存入数组b中。 void jsVal() { int i, j, flag = 0; for (i=0; i } else { flag = 0; break; } if (flag==1 && a[i]%2==0) { b[cnt] = a[i]; cnt++; } } for (i=0; i } } 8、 请编制函数moveChar(char *s),其功能是:将该字符串中所有的字符左移一个位置,串中的第一个字符移到最后。 void moveChar(char *s) { char temp; int i,len; len=strlen(s); temp=*s; for(i=0;i 9、 编写一个FibValue()函数,要求其功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2) int FibValue(int t) { int f1=0,f2=1,fn; fn=f1+f2; while(fn<=t) { f1=f2; f2=fn; fn=f1+f2; } return fn; } 10、 函数readData()的功能是实现从文件IN.DAT中读取一篇英文文章存入到字符串数组inBuf[]中。请编制函数arrangeChar(),其功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组inBuf[]中。 void arrangeChar() { int i,j,m; char t[80],t1[80]; for(i=0;i j=m=strlen(xx[i])-1; t[0]=t1[0]='\\0'; while(1) { while(isalpha(xx[i][j])==0&&j>=0) m=--j; while(isalpha(xx[i][j])&&j>=0) j--; memcpy(t1,&xx[i][j+1],m-j); t1[m-j]='\\0'; strcat(t,t1); strcat(t,\ if(j<0) break; } strcpy(xx[i],t); } } 11、 文件IN.DAT中存有一篇英文文章,函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制函数replaceChar(),该函数的功能是按照指定规则对字符进行替换。替换规则为:先对字符的ASCII码值按公式y=a*11 mod 256进行运算(a为某一字符的ASCII码值,y为变换后的ASCII码值),_________________则字符保持不变,否则用y所对应的字符代替。 void replaceChar() { int i,j,len; char y; for(i=0;i __________________________ else inBuf[i][j]=y; } } } 如果计算后y的值小于等于32或大于130, if(y<=32||y>130) continue; 如果原字符的ASCII码值是偶数或计算后y的值小于等于 32, if(y<=32||inBuf[i][j]%2==0) continue; 如果计算后y的值小于等于32或y对应的字符是数字0~9 if(y<=32||(y>='0'&&y<='9')) continue; 如果计算后y的值小于等于32或y对应的字符是小写字母 if(y<=32||(y>='a'&&y<='z')) 如果原字符是大写字母或计算后y的值小于等于32 if(y<=32||(inBuf[i][j]>='A'&&inBuf[i][j]<='Z')) continue; 如果计算后y的值小于等于32或其ASCII值是偶数 if(y<=32||y%2==0) continue; 如果计算后y的小于等于32或y对应的字符是大写字母 if(y<=32||(y>='A'&&y<='Z')) continue; 如果原字符是小写字母或计算后y的值小于等于32 if(y<=32||(inBuf[i][j]>='a'&&inBuf[i][j]<='z')) continue; 如果原字符是数字字符0~9或计算后y的值小于等于32 if(y<=32||(inBuf[i][j]>='0'&&inBuf[i][j]<='9')) continue; 如果计算后y的值小于等于32或其ASCII值是奇数 if(y<=32||y%2!=0) continue; 21、文件IN.DAT中存有一篇英文文章, 函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制函数replaceChar(),该函数的功能是:_________________________________________ void replaceChar() { int i,j; for(i=0;i ______________________________________ _________________________________ _________________________________ } 以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a if(inBuf[i][j]>='a'&&inBuf[i][j]<='z') { if(inBuf[i][j]=='z') inBuf[i][j]='a'; else inBuf[i][j]=(char)((int)inBuf[i][j]+1); } 以行为单位把字符串中的所有小写字母改成该字母的上 一个字母,如果是字母a,则改成字母z if(inBuf[i][j]>='a'&&inBuf[i][j]<='z') { if(inBuf[i][j]=='a') inBuf[i][j]='z'; else inBuf[i][j]=(char)((int)inBuf[i][j]-1); } 以行为单位把字符串中的所有大写字母改成该字母的下一个字母,字母Z改成字母A if(inBuf[i][j]>='A'&&inBuf[i][j]<='Z') { if(inBuf[i][j]=='Z') inBuf[i][j]='A'; else inBuf[i][j]=(char)((int)inBuf[i][j]+1); } 以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符的ASCII值再加上原字符的ASCII值,得到新的字符,并存入原字符串对应的位置上 y=(int)inBuf[i][j]/16+(int)inBuf[i][j]; inBuf[i][j]=(char)y; 25、以行为单位把字符串中所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符串对应的位置 void replaceChar() { int i,j,len,y; for(i=0;i if(y<=32||y>100) continue; else inBuf[i][j]+=(char)y; } } } 26、文件IN.DAT中存有一篇英文文章,函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制函数replaceChar(),该函数的功能是:以行为单位把字符串最后一个字符的ASCII值加最后第二个字符的ASCII值,得到最后一个新的字符,最后第二个 字符的ASCII值右移4位后加最后第三个字符的ASCII值,得到最后第二个新的字符,依此类推,一直处理到第二个字符,第一个字符的ASCII值加最后一个字符的ASCII值,得到第一个新的字符,得到的新字符分别存放在原字符串对应的位置上。 void replaceChar() { int i,j,len,last; char y; for(i=0;i inBuf[i][j]=(inBuf[i][j]>>4)+inBuf[i][j-1]; inBuf[i][0]+=last; } } 27、文件IN.DAT中存有一篇英文文章, 函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制函数replaceChar(),该函数的功能是:以行为单位把字符串中第一个字符的ASCII值加第二个字符的ASCII值,得到第一个新的字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新的字符,依此类推,一直处理到倒数第二个字符,最后一个字符的ASCII值加第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。 void replaceChar() { int i,j,k; int len; char first,temp; for(i=0;i inBuf[i][j]+=inBuf[i][j+1]; inBuf[i][len-1]+=first; for(j=0,k=len-1;j { temp=inBuf[i][j]; inBuf[i][j]=inBuf[i][k]; inBuf[i][k]=temp; } } } 28、文件IN.DAT中存有200个4位整型数,函数readData()负责将IN.DAT中的数读到数组inBuf[]中。请编制一函数findData(),选出200个数中为奇数并且比它后面的连续5个数都大的数(该4 位数后面不满5个数则不统计),按照从小到大的顺序存入outBuf[]中,并用count记录下符合条件的数的个数。 void findData() { int i,j,temp,flag; count=0; for(i=0;i for(j=1;j<=5;j++) if(inBuf[i] if(flag==0) { outBuf[count]=inBuf[i]; count++; } } for(i=0;i temp=outBuf[i]; outBuf[i]=outBuf[j]; outBuf[j]=temp; } } 29、文件IN.DAT中存有200个4位整型数,函数readData()负责将IN.DAT中的数读到数组inBuf[]中。请编制一函数findData(),其功能是:依次从数组inBuf中取出一个4位数,如果该4位数连续小于该4位数以后的5个数且该数是偶数(该4位数后面不满5个数,则不统计),则按照从小到大的顺序存入数组outBuf[]中,并用count记录下符合条件的数的个数。 void findData() { int i,j,temp,flag; count=0; for(i=0;i for(j=1;j<=5;j++) if(inBuf[i]>inBuf[i+j]) flag=1; if(flag==0) { outBuf[count]=inBuf[i]; count++; } } for(i=0;i } } 30、文件IN.DAT中存有200个4位整型数,函数readData()负责将IN.DAT中的数读到数组inBuf[]中。请编制一函数findData(),其功能是:依次从数组inBuf中取出一个4位数,如果该4位数连续大于该4位数以前的5个数且该数是偶数(该4位数前面不满5个数,则不统计),则按照从大到小的顺序存入数组outBuf[]中,并用count记录下符合条件的数的个数。 void findData() { int i,j,temp,flag; count=0; for(i=5;i for(j=i-5;j<=i-1;j++) if(inBuf[i] if(flag==0) { outBuf[count]=inBuf[i]; count++; } } for(i=0;i } 31、文件IN.DAT中存有200个4位整型数,函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制一函数findData(),该函数的功能是:依次从数组inBuf中取出一个4位数,如果4位数连续大于该4位数以前的5个数且该数是奇数(该4位数以前不满5个数,则不统计),该数必须能被7整除,则按照从小到大的顺序存入outBuf[]中,并用count记录下符合条件的数据的个数。 void findData() { int i,j,temp,flag;