第一套
【考点分析】 本题考查对4位整数的排序。考查的知识点主要包括:数组元素的排序算法,if判断语句和逻辑表达式,以及求余算术运算。
【解题思路】 此题属于4位数排序问题。本题需主要解决3个问题:问题1如何取4位数的后3位进行比较;问题2如何按照题目要求的条件(按照每个数的后3位的大小进行降序排列,如果后3位相等,则按照原始4位数的大小进行升序排列)排序;问题3如何将排完序的前10个数存到数组bb中去。
本题的解题思路为:使用双循环对数组按条件进行排序,然后将排完序的前10个数存到数组bb中。对于问题1可以通过算术运算的取余运算实现(aa[i]%1000)问题2通过包含if判断语句的起泡排序法就可以实现。
【参考答案】
void jsSort()
{ 
          int i,j;                    /*定义循环控制变量*/
    int temp;                    /*定义数据交换时的暂存变量*/
    for(i=0;i<199;i++)          /*用选择法对数组进行排序*/
    for(j=i+1;j<200;j++)
    {
      if(aa[i]%1000<aa[j]%1000)      /*按照每个数的后3位大小进行降序排序*/
      {
        temp=aa[i];
        aa[i]=aa[j];
        aa[j]=temp;
      }
      else if(aa[i]%1000==aa[j]%1000)      /*如果后3位数相等*/
            if(aa[i]>aa[j])              /*则要按原4位数的值进行升序排序*/
            {
              temp=aa[i];
              aa[i]=aa[j];
              aa[j]=temp;
            }
    }
    for(i=0;i<10;i++)      /*将排序后的前10个数存入数组b*/
        bb[i]=aa[i];
}
【易错提示】 4位数后三位的算法,if判断语句中逻辑表达式的比较运算符。
第二套
【考点分析】 本题主要考查的知识点包括:C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。
【解题思路】 分析题干,本题除给出条件"SIXSIXSIX NINENINE"之外,还可得出2个隐含的条件:条件1SIXNINE分别是3位和4位的正整数;条件2SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。
本题解题思路:通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIXSIXSIX NINENINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。
【参考答案】
void countValue()
{ 
   
  int i,j;
  int s2;
  int n2,n3,n4;
  for(i=100;i<1000;i++)
  {
    for(j=1000;j<10000;j++)
    {
      if(i*3==j*2)
        {
          s2=i%100/10;
          n4=j/1000;
            n3=j%1000/100;
            n2=j%100/10;
            if(s2==n3&&n2==n4)
            {
                cnt++;
                sum+=i+j;
            }
          }
      }
    }
}
【易错提示】 隐含条件未被分析出或分析错误,整数数位分解的算术方法使用错误。
   
第三套
【考点分析】 本题考查的知识点包括:C语言中文件读函数,if条件判断结构,对多个整数求平均值和方差的算法等。
【解题思路】 此题属于数学类问题。分析题干要求,得出解本题主要需解决3个问题:问题1如何实现从已打开的文件中依次读取数据到数组的操作,问题2如何分离并统计出奇数和偶数的个数及和值,并计算平均值;问题3如何计算奇数的方差。
本题的解题思路为:首先使用C语言的库函数fscanf()将文件中的数依次读入数组xx中,然后通过循环判断得出需要的数据(奇数个数、偶数个数、奇数及偶数的和);最后根据题目中已
给出的公式和之前保存的数据计算出奇数的方差。
【参考答案】
int ReadDat(void)
{ 
    FILE *fp;
      int i,j;                      /*计数器变量*/
    if((fp=fopen("IN.DAT","r"))==NULL)  return 1;
    for(i=0;i<100;i++)    /*依次读取整型数据放入数组xx*/
    {
      for(j=0;j<10;j++)
        fscanf(fp,"%d,",&xx[i*10+j]);
      fscanf(fp,"\n");
      if(feof(fp))
          break;    /*文件读取结束,则退出*/
    }
    fclose(fp);
    return 0;
}
void Compute(void)
{ 
    int i           /*定义循环控制变量*/
        int tt[MAX];    /*定义数组保存奇数*/
        for(i0i<1000i++)
  if(xx[i]%2!=0)
  { 
              odd++; /*计算出xx中奇数的个数odd*/
    ave1+=xx[i];    /*求奇数的和*/
    tt[odd1]xx[i];  /*将奇数存入数组tt*/
  }
  else
  { 
              even++;    /*计算出xx中偶数的个数even*/
    ave2+=xx[i];    /*求偶数的和*/
  }
  ave1/odd     /*求奇数的平均值*/
  ave2/even;    /*求偶数的平均值*/
  for(i0i<oddi++)
    totfc+=(tt[i]ave1)*(tt[i]ave1)/odd  /*求所有奇数的方差*/
}
【易错提示】 文件操作函数fscanf()feof()的用法,if判断语句中逻辑表达式,对方差计算公式运用错误。
第四套
【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。
【解题思路】 此题属于数学类问题。分析题干,本题需注意2个关键点:关键点1判断该数是否是完全平方数;关键点2判断该数是否有两位数数字相同。
本题的解题思路为:通过循环控制,依次判断100999数是否满足关键点1(是否为完全平方数)。如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。
【参考答案】
int jsValue(int bb[])
{ 
      int i,j;                    /*定义循环控制变量*/
    int cnt=0;                  /*定义计数器变量*/
    int a3,a2,a1;                /*定义变量存储三位数每位的数字*/
    for(i=100;i<=999;i++)        /*在该范围中符合条件的数*/
      for(j=10;j<=sqrt(i);j++)
        if(i==j*j)            /*如果该数是完全平方数*/
        {
          a3=i/100;          /*求该数的百位数字*/
          a2=i%100/10;        /*求该数的十位数字*/
          a1=i%10;            /*求该数的个位数字*/
          if(a3==a2 || a3==a1 || a2==a1) /*有两位数字相同*/
          {
            bb[cnt]=i;        /*则把该数存入数组bb*/
            cnt++;
          }          /*统计满足条件的数的个数*/
        }
    return cnt;            /*返回满足该条件的整数的个数*/
}
【易错提示】 完全平方数的判断方法错误,分解整数各个数位的方法错误,if判断语句中表达式。
第五套
【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。
【解题思路】 此题属于数学类问题。分析题干要求,归纳出本题的2个关键点:关键点1判断该数是否为素数;关键点2判断是否满足条件:个位数字和十位数字之和被10除所得余数等于百位数字。
本题思路为:通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点strcmp比较数组2(
个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。判断的方法为:依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。
【参考答案】
void countValue()
{ 
            int i,j;                    /*定义循环控制变量*/
    int half;
    int a3,a2,a1;              /*定义变量存储3位数每位的数字*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。