1. 调用函数 rwdata() ,从 文件中读取 10 组数据(m和k值), 并嵌套调用 primenum 函数分别得出 array[] 数组。请编写函数 primenum(int m, intk, int array[]) ,该函数的功能是: 将紧靠 m的k 个素数存入数组 array 并在屏幕上显示。最后把结果输出到文件 中。例如,若输入 39 ,则应输出 57 11 13 17 19 23 29 31。注意:部分程序已经给出。请勿改动主函数 main() 和输出数据函数 rwdata() 的内容。#include <> #include <> void rwdata(); void primenum(int m, int k, int array[]) {} 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("", "r"); writefile = fopen("", "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); } 【知识点播】素数的定义: 如果一个数的正因子只有1和这个数本身, 那么这个数就是素数。【题目分析】分析题目可知,题中需要解决的问题就是 Primenum 函数的功能问题( rwdat a 函数功能题中已经给出) ,而 Primenum 函数的功能是求在指定数 m 之后的 k 个素数,因此本题的关键在于如何判断一个数是素数, 之后就可以通过一个 for 循环来求得在 m 之后的 k 个素数了。【解题思路】根据素数的定义, 本题采用的算法是: 首先定义一个变量 Value , 并把 m 之后的数逐个赋值给该变量; 然后用 2~value/2 数除 value , 如果 value 能被 2~value/2 之中的任何一个整数整除,则 value 不是素数,结束循环;如果 value 不能被 2~ value/2 之间的任一整数整除,则退出循环,然后判断循环变量 i 是否大于 value/2 ,如果大于,则 value 是素数, 并将 value 值赋给 array[n] ,然后 n++ ;再判断 n 是否大于等于 k ,如果大于等于 k ,就完成了程序要求的功能,退出循环,否则 value 加1 ,根据以上算法继续进行。【答案】 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++; }} 【容错分析】判断一个数 m( 大于1 ) 是否素数的简单的算法: 枚举2到 m/2 之间的整数, 看能否被 m 整除,如果能整除,就不是素数,否则是素数。 2. 在文件 中有 200 个正整数, 且每个数均在 1000~9999 之间。函数 RData() 读取这 200 个数存放到数组 original 中。请编写函数 numAscend() ,其功能是:要求按每个数的后 3位的大小进行升序排列,然后取出满足此条件的前 10 个数依次存入数组 result 中,如果后 3 位的数值相等,则按原先的数值进行降序排列。最后调用函数 WData() ,把结果 result 输出到文件 中。例如,处理前: 6012 5099 9012 7025 8088 处理后: 9012
华东理工大学2012年专业学位硕士招生目录 来自淘豆网www.taodocs.com转载请标明出处.