三级网络技术机试100套内容摘要:

{ printf(数据文件 !\n\007)。 return。 } StrCharJR()。 WriteDat()。 } int ReadDat(void) { FILE *fp。 int i= 0。 char *p。 if ((fp = fopen(,r)) ==NULL) return 1。 while(fgets(xx[i], 80, fp) !=NULL) { p = strchr(xx[i], 39。 \n39。 )。 if(p) *p = 0。 i++。 } maxline = i。 fclose(fp)。 return 0。 } void WriteDat(void) { FILE *fp。 int i。 clrscr()。 fp = fopen(, w)。 for(i = 0。 i maxline。 i++) { printf(%s\n, xx[i])。 fprintf(fp, %s\n, xx[i])。 } fclose(fp)。 } 8. 【答案】 void StrCharJR(void) { int i,j,str1。 for(i=0。 imaxline。 i++) { str1=strlen(xx[i])。 /*计算各行字符串的长度 */ for(j=0。 jstr1。 j++) xx[i][j]+=xx[i][j]4。 /*字符的 ASCII值右移 4位再加上原字符的 ASCII值,得到新字符 */ } } 9. 函数 ReadDat() 的功能是实现从文件 , 存入到字符串数组 xx中。 请编制函数 encryptChar(),按给定的替代关系对数组 xx中的所有字符进行替代,仍存入数组 xx的对应的位置上,最后调用函数 WriteDat()把结果 xx输出到文件。 替代关系: f(p)=p*11 mod 256( p是数组 xx中某一个字符的 ASCII值, f(p)是计算后新字符的 ASCII值),如果原字符的 ASCII值是偶数或计算后 f(p)的值小于等于 32,则该字符不变,否则将 f(p)所对应的字符进行替代。 注意:部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于 80个字符。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序: include include include include unsigned char xx[50][80]。 int maxline = 0。 /* 文章的总行数 */ int ReadDat(void)。 void WriteDat(void)。 void encryptChar() { } main() { clrscr()。 if(ReadDat()) { printf(数据文件 !\n\007)。 return。 } encryptChar()。 WriteDat()。 } int ReadDat(void) { FILE *fp。 int i= 0。 unsigned char *p。 if ((fp = fopen(,r)) ==NULL) return 1。 while(fgets(xx[i], 80, fp) !=NULL) { p = strchr(xx[i], 39。 \n39。 )。 if(p) *p = 0。 i++。 } maxline = i。 fclose(fp)。 return 0。 } void WriteDat(void) { FILE *fp。 int i。 fp = fopen(, w)。 for(i = 0。 i maxline。 i++) { printf(%s\n, xx[i])。 fprintf(fp, %s\n, xx[i])。 } fclose(fp)。 } 9.答案: void encryptChar() {int i。 char *pf。 for(i=0。 imaxline。 i++) { pf=xx[i]。 /*指针 pf 指向当前行的首地址 */ while(*pf!=0) {if(*pf%2==0 || *pf*11%256=32)。 /*如果原字符的 ASCII 值是偶数或计算后的值小于等于 32,则该字符不变 */ else *pf=*pf*11%256。 /*否则将所对应的字符进行替代 */ pf++。 /*指针 pf 指向下一个字符 */ } } } 【解析】 本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行。 当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。 根据题意,条件用 if(*pf%2==0 || *pf*11%256=32)来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以 11的结果再去与 256求余数,处理完毕后,指针去取下一个字符。 如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。 10. 编写函数 jsValue(), 它的功能是求 Fibonacci数列中大于 t的最小的一个数 , 结果由函数返回 , 其中Fibonacci数列 F(n)的定义为 : F(0)=0, F(1)=1 F(n)=F(n1)+F(n2) 最后调用函数 writeDat(), 把结果输出到文件。 例如 : 当 t = 1000时 , 函数值为 1597。 注意:部分源程序已给出。 请勿改动主函数 main()和写函数 WriteDat()的内容。 试题程序: include int jsValue(int t) { } main() { int n。 n=1000。 printf(n=%d, f=%d\n, n, jsValue(n))。 writeDat()。 } writeDat() { FILE *in, *out。 int n,s。 out = fopen(, w)。 s = jsValue(1000)。 printf(%d,s)。 fprintf(out, %d\n, s)。 fclose(out)。 } 10.答案 int jsValue(int t) { int f1=0,f2=1,fn。 fn=f1+f2。 while(fn=t) {f1=f2。 f2=fn。 fn=f1+f2。 } /*如果当前的 Fibonacci 数不大于 t,则计算下一个 Fibonacci数 */ return fn。 /*返回 Fibonacci 数列中大于 t 的最小的一个数 */ } 【解析】 解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。 根据已知数列,我们不难发现: Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。 本题要求找到该数列中 “大于 t的最小的一个数 ”。 这里可以借助一个 while循环来依次取数列中的数,直到出现某一项的值大于 t,那么这一项就是 “大于 t的最小的一个数 ”。 注意:在循环体内部,我们用变量 f1始终来表示第 n项的前面第二项,用变量 f2来始终表 示第 n项的前面第一项。 这就实现了变量的活用与巧用。 11. 请编写函数 countValue(), 它的功能是 : 求 n以内 ( 不包括 n) 同时能被 3与 7整除的所有自然数之和的平方根 s, 并作为函数值返回 , 最后结果 s输出到文件。 例如,若 n为 1000时,函数值应为 s=。 注意:部分源程序已给出。 请勿改动主函数 main()和输入输出函数 progReadWrite()的内容。 试题程序: include include include double countValue(int n) { } main() { clrscr()。 printf(自然数之和的平方根 =%f\n, countValue(1000))。 progReadWrite()。 } progReadWrite() { FILE *wf。 int i, n。 float s。 wf = fopen(, w)。 s = countValue(1000)。 fprintf(wf, %f\n, s)。 fclose(wf)。 } 11.答案 double countValue(int n) { double xy=。 int i。 for(i=1。 in。 i++) if(i%3==0 amp。 amp。 i%7==0) xy+=i。 /*求 n以内 (不包括 n)同时能被 3与 7整除的所有自然数之和 */ xy=sqrt((double)xy)。 /*再对总和求平方根 */ return xy。 } 【解析】 本题的解题思路是:利用一个 for循环依次从 n个自然数当中取数,对当前取出 的数进行条件判断。 判断条件为:既能被 3整除同时也能被 7整除,因此,用 “amp。 amp。 ”运算符来连接两个条件表达式,当某数满足判断条件时,就把该数累加到变量 xy 中( xy 的初始值为 ),当所有满足条件的数都被找完后,对累加求得的变量 xy 的值进行求平方根的计算,并把所求得的结果作为函数值返回。 12. 下列程序的功能是:在 3位整数( 100至 999)中寻找符合下面条件的整数,并依次从小到大存入数组b中;它既是完全平方数,又有两位数字相同,例如 144, 676等。 请编制函数 int jsValue(int bb[])实 现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数 writeDat()把结果输出到文件。 注意:部分源程序已给出。 请勿改动主函数 main()和写函数 writeDat()的内容。 试题程序: include int jsValue(int bb[ ]) { } main() { int b[20], num。 num = jsValue(b)。 writeDat(num, b)。 } writeDat(int num, int b[]) { FILE *out。 int i。 out = fopen(, w)。 fprintf(out, %d\n, num)。 for(i = 0。 i num。 i++) fprintf(out, %d\n, b[i])。 fclose(out)。 } 12. 【答案】 int jsValue(int bb[ ]) { int i,j,k=0。 int hun,ten,data。 for(i=100。 i=999。 i++) { j=10。 while(j*j=i) { if (i==j*j) /*如果该数是完全平方数 */ { hun=i/100。 /*求该数的百位数字 */ data=ihun*100。 /*得到后两位数 */ ten=data/10。 /*求该数的十位数字 */ data=dataten*10。 /*求该数的个位数字 */ if(hun==ten || hun==data || ten==data) /*有两位数字相同 */ {bb[k]=i。 /*则把该数存入数组 bb中 */ k++。 } /*统计满足条件的数的个数 */ } j++。 } } return k。 /*返回满足该条件的整数的个数 */ } 【解析】 解答本题,首先应该考虑用一个 for循环来依次取得 100到 999之间的各个数,并对当前所取得的数进行两个条件判断:一是判断该数是否是完全平方数;二是判断该数是否有两位数字相同。 如果以上两个条件同时满足,则把该数存放到 b数组中,尽管题目要求所存的数必须从小到大,但我们取数的过程本身就是从小到大取得,因此,排序工作是没有必要做的,按照取数的顺序,把满足条件的数值存放到数组 b中就可以了。 判断某个数是否是完全平方数的方法是看该数是否可以拆成完全相同的两个数。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。