1【审题关键句】将大于整数m且紧靠mk素数存入数组
【解题思路】
①首先定义一个计数变量cnt并赋初值为0
②利用while循环统计大于整数m且紧靠mk个素数,当计数变量cnt的值与变量k的值相等的时候,则退出while循环。每执行一次循环时,变量m的值加1,然后调用函数isP()判断当前的m值是否为素数,如果是素数,则将m的值赋给数组xx[cnt],同时计算变量cnt的值加1,即当数组xx[0]中保存了一个素数之后,在下一次素数判断成立时将保存到xx[1]的位置上,依次类推。
【参考答案】
int cnt = 0;  //定义变量cnt并初值等于0
while(cnt < k)  //cnt的值小于k
{
  m++;  //变量m1
  if(isP(m)) xx[cnt++] = m;  //如果m为素数,则把其赋给数组元素xx[cnt],并且数组的下标cnt1
}
2【审题关键句】求素数的个数及平均值,并计算非素数的平均值。
【解题思路】
①首先定义循环变量i,然后通过for循环对数组a[300]中的每个元素a[i]调用函数isP(a[i])判断a[i]是否是素数(素数的算法已在isP()函数中给出,此处直接调用即可),如果是素数,则把其加到变量pjz1上,同时计数变量cnt1,否则a[i]值加到变量pjz2上。直到判断完数组a[300]中的所有数据后退出循环。
②求出pjz1pjz2cnt的值之后,再用变量pjz1的值除以cnt的值就得到素数的平均值,同时把这个值赋给变量pjz1,最后用变量pjz2的值除以300-cnt的值就得到非素数的平均值,并把这个值赋给变量pjz2
【参考答案】
int i;  //定义变量i
for(i = 0; i < 300; i++)  //循环变量i0依次递增到299
{
if(isP(a[i]))  //判断数组元素a[i]是否素数
{
    pjz1 += a[i];  //a[i]累加到变量pjz1
    cnt++;  //变量cnt1
}
  else pjz2 += a[i];  //否则,把数组元素a[i]累加到变量pjz2
}
pjz1 /= cnt;  //所有素数的和pjz1除以素数的个数cnt,得到素数的平均值并赋给变量pjz1
pjz2 /= (300 - cnt);  //所有非素数的和pjz2除以非素数的个数300-cnt,得到非素数的平均值并赋给变量pjz2
3【审题关键句】100以内(含100)满足ii+4i+10都是素数的整数的个数以及这些i之和。
【解题思路】
①首先定义循环变量i,然后将i的值赋初值为3,每循环一次则将i的值加1,直到i<90
②在for循环中,每执行一次循环则调用函数isPrime()(该函数具体的算法已经在源程序中给出,直接调用即可),对ii+4i+10是否同时是素数进行判断,如果这三个数同时为素数,则计数变量cnt值加1,同将时将变量i的值累加到sum上。
【参考答案】
int i;  //定义变量i
for(i = 3; i < 90; i++)  //循环变量i3开始,依次递增,直到小于90
{
if(isPrime(i) && isPrime(i + 4) && isPrime(i + 10))  //如果ii+45i+10同时为素数
{
    cnt++; sum += i;  //变量cnt1,变量i累加到sum
  }
}
4【审题关键句】求素数的个数,存入数组,按从小到大的顺序排序。
【解题思路】
①首先定义两个循环变量循环ij和一个用于数据交换的整型变量tmp
②通过for循环依次读取数组中的300个数,其中,循环变量i0开始每次加1,直到i<300停止循环;在每次循环中判断a[i]是否是素数,如果是素数,则把a[i]的值赋给数组b[cnt],同时数组下标变量cnt值加1
③在退出循环后,用两个for循环对数组b[]中元素进行两两比较,实现数组元素从小到大的排序,比较过程中通过整型变量tmp实现两个数的交换。
【参考答案】
int i, j, tmp;  //定义整型变量i, j, tmp
for(i = 0; i < 300; i++)  //循环变量i0依次递增到299
if(isP(a[i])) b[cnt++] = a[i];  //如果数组元素a[i]是素数,则把a[i]赋给b[cnt],同时数组下标变量cnt1
for(i = 0; i < cnt; i++)  //循环变量i0开始依次递增,直到其值等于cnt
{
for(j = i + 1; j < cnt; j++)  //循环变量ji + 1开始依次递增,直到其值等于cnt
{
if(b[i] > b[j])  //全国计算机等级考试成绩如果数组元素b[i]大于b[j],则进行互换
{
    tmp = b[j];  //b[j]的值赋给变量tmp
    b[j] = b[i];  //b[i]的值赋给b[j]
    b[i] = tmp;  //把变量tmp的值赋给b[i]
  }
}
}
5【审题关键句】选出100以上、1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数,计算并输出上述这些素数的个数以及这些素数值的和。
【解题思路】
①首先定义一个循环变量循环i以及用来存放3位数分解之后各位数的变量bw(百位)、sw(十位)和gw(个位)。
②通过for循环对100999的每个数字进行逐个的扫描,循环变量i100开始,每执行一次循环,i的值加1
③在每次执行for循环时,分解当前变量i值的百位上的数字、十位上的数字和个位上的数字,然后利用表达式(gw + sw) % 10 == bw来判断个位数字与十位数字之和被10除所得余数与百位数字是否相等,同时调用函数isP()判断变量i的值是否是素数,如果以上两个条件同时满足(两个表达式通过&&运算符进行连接),则计数变量cnt值加1、并把其值加到变量sum上,直到循环结束,即可求出从100999中所有满足条件的素数的个数和它们的和。
【参考答案】
int i, bw, sw, gw;  //定义整型变量i, bw, sw, gw
for(i = 100; i < 1000; i++)  //循环变量i100开始,每次递增1,直到其值等于1000
{
bw = i / 100;  //i除以100,得到i百位上的数值
sw = (i - bw * 100) / 10;  //i减去其百位值的差再除以10,得到i十位上的数值
gw = i % 10;  //i10求余数得到其个位上的数值
if((gw + sw) % 10 == bw && isP(i))  //如果i个位数字与十位数字之和对10求余所得余数等于其百位上的数字并且i是素数
{
    cnt++;  //变量cnt1
    sum += i;  //把变量i累加到变量sum
  }
}
6【审题关键句】计算500800区间内素数的个数,素数的值从大到小排序,再计算其间隔减、加之和,即第1个素数-2个素数+3个素数-4个素数+5个素数……的值。
【解题思路】
①首先定义一个循环变量循环i和用于正负号转换的变量j,同时赋j的初值为-1
②通过for循环对800500的每个数字进行逐个的扫描,指定循环变量i的初值为800,当i值等于500停止循环,每执行一次循环,i的值便减1。(注意,本题for循环从大到小依次读取数据是根据题目要求设计的,这样得到的素数值其排序方式就是从大到小排序。)
在每次执行for循环时,都调用素数判断函数isPrime()判断当前的i值是否为素数,如果是素数,则素数计数变量cnt值加1,正负号转换变量j的值乘以-1,实现正负数的交替转换,最后将每次循环得到的i*j的值累加到求和变量sum中。
【参考答案】
int i, j = -1;  //定义整型变量i, j,并且变量j的初值赋予-1
for(i = 800; i > 500; i--)  //循环变量i800开始,每次减1,直到其值等于500
{
if(isPrime(i))  //如果i是素数
{
  cnt++;  //变量cnt1
  j *= -1;  //变量j乘以-1,变号
  sum += j * i;  //把变量ji的积累加到变量sum
  }
}
2  数位分解后按数筛选统计并排序
7【审题关键句】按每个数的后三位升序排列,然后取出满足此条件的前10个数依次存入数组,如果后三位的数值相等,则按原先的数值进行降序排列。
【解题思路】
①首先定义两个循环变量循环ij和一个用于数据交换的整型变量m
②然后通过两个for循环对数组aa[]中的两个相邻元素按照其后三位值的大小进行从小到大的排序,本题中已给出所有的整数都是四位数,因此,可以通过aa[i] % 1000aa[j] % 1000计算得到当前数组元素的后三位值,然后再进行比较,如果两个数需要转换位置,可通过中间变量m进行转换。
③上一步骤是两个元素后三位不相同的情况,根据题意,需要再增加一个else if语句判断两个相邻元素的后三位数一样的情况,如果相同,则需要继续判断两个四位数的大小,并按从大小的顺序排序。
④最后,通过一个for循环依次读取aa[i]数组中前10个元素并保存到数组bb[i]中。
【参考答案】
int i, j, m;  //定义整型变量i, j, m
for(i = 0; i < 199; i++)  //循环变量i0开始,每次递增1,直到其值等于199
for(j = i + 1; j < 200; j++)  //循环变量j i + 1开始,每次递增1,直到其值等于200
{
    if((aa[i] % 1000) > (aa[j] % 1000))  //如果aa[i]的后三位大于aa[j]的后三位,则进行互换
{
      m = aa[i];  //aa[i]的值赋给m
      aa[i] = aa[j];  //aa[j]的值赋给aa[i]