1、 bbi=aai;【易错提示】 取4位数后三位的算法,if判断语句中逻辑表达式的比较运算符。2【考点分析】 本题主要考查的知识点包括:C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。【解题思路】 分析题干,本题除给出条件SIXSIXSIX NINENINE之外,还可得出2个隐含的条件:条件1:SIX和NINE分别是3位和4位的正整数;条件2:SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。本题解题思路:通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIXSIXSIX NINENINE)的判断,满足条件
2、的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1及条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。void countValue() int s2; int n2,n3,n4; for(i=100;1000;i+) for(j=1000;10000; 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;【易错提示】 隐含条件未被分析出或分析错误,整数数位分解的算术方法使用错误。3【考点分析】 本题考查的知识点包括
3、:C语言中文件读函数,if条件判断结构,对多个整数求平均值和方差的算法等。【解题思路】 此题属于数学类问题。分析题干要求,得出解本题主要需解决3个问题:问题1如何实现从已打开的文件中依次读取数据到数组的操作,问题2如何分离并统计出奇数和偶数的个数及和值,并计算平均值;问题3如何计算奇数的方差。首先使用C语言的库函数fscanf()将文件中的数依次读入数组xx中,然后通过循环判断得出需要的数据(奇数个数、偶数个数、奇数及偶数的和);最后根据题目中已给出的公式和之前保存的数据计算出奇数的方差。int ReadDat(void) FILE *fp; /*计数器变量*/ if(fp=fopen(IN.
4、DAT,r)=NULL) return 1;100;i+) /*依次读取整型数据放入数组xx中*/ for(j=0; fscanf(fp,%d,&xxi*10+j);n); if(feof(fp) break; /*文件读取结束,则退出*/ fclose(fp); return 0;void Compute(void) int i; /*定义循环控制变量*/ int ttMAX;/*定义数组保存奇数*/ for(i0;1000;i)if(xxi%2!0) odd; /*计算出xx中奇数的个数odd*/ave1xxi;/*求奇数的和*/ttodd1xxi; /*将奇数存入数组tt中*/else
5、even;/*计算出xx中偶数的个数even*/ave2xxi;/*求偶数的和*/ave1/odd; /*求奇数的平均值*/ave2/even;/*求偶数的平均值*/for(i0;odd;totfc(ttiave1)*(ttiave1)/odd; /*求所有奇数的方差*/【易错提示】 文件操作函数fscanf()和feof()的用法,if判断语句中逻辑表达式,对方差计算公式运用错误。4【考点分析】 本题考查对一定范围内整数的筛选。多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。分析题干,本题需注意2个关键点:关键点1判断该数是否是完全平方数;关键点2判断该数是否有两位数数字相
6、同。通过循环控制,依次判断100至999数是否满足关键点1(是否为完全平方数)。如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。int jsValue(int bb) int cnt=0; /*定义计数器变量*/ int a3,a2,a1; /*定义变量存储三位数每位的数字*/=999;i+) /*在该范围中找符合条件的数*/ for(j=10;=sqrt(i); if(i=j*j) /*如果该数是完全平方数*/ a3=i/100; /*求该数的百位数字*/ a2=i%100/10; /*求该数的十位数字*/ a1=i%10; /*求该数
7、的个位数字*/ if(a3=a2 | a3=a1 | a2=a1) /*有两位数字相同*/ bbcnt=i; /*则把该数存入数组bb中*/ /*统计满足条件的数的个数*/ return cnt; /*返回满足该条件的整数的个数*/【易错提示】 完全平方数的判断方法错误,分解整数各个数位的方法错误,if判断语句中表达式。5.【考点分析】 本题考查对一定范围内整数的筛选。多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。分析题干要求,归纳出本题的2个关键点:关键点1判断该数是否为素数;关键点2判断是否满足条件:个位数字和十位数字之和被10除所得余数等于百位数字。本题思路为:通过循环语
8、句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。判断的方法为:依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。 int half; /*定义变量存储3位数每位的数字*/ for(i=101;i+) /*在该范围内寻找符合条件的数*/ /*求百位数字*/ /*求十位数字*/ /*求个位数字*/ if(a3=(a2+a1)%10) /*如果个位数字与十位数字之和被10除所得余数恰是百位数字*
9、/ half=i/2; for(j=2;=half;j+) /*进一步判断该数是否为素数*/ if(i%j=0) break; /*如果不是素数,则跳出循环,接着判断下一个数*/ if(jhalf) /*如果是素数*/ /*计算这些素数的个数cnt*/ sum+=i; /*计算这些素数值的和sum*/【易错提示】 素数的判断算法使用错误,分解整数各个数位的方法错误,if判断语句中逻辑表达式错误。6.【考点分析】 本题考查结构体数组的排序。结构体成员运算,字符串比较符,数组排序。【解题思路】 此题属于销售记录排序类题型。此类题型主要考查对结构体数组的排序。解题时,应注意3个关键点:关键点1如何按
10、产品名称从小到大排序;关键点2如果产品名称相同;关键点3如何按金额从小到大排列。数组排序可以用起泡法实现,起泡法的思路是:将较小的值像空气泡一样逐渐上浮到数组的顶部,而较大的数值逐渐下沉到数组的底部。具体为第1趟用第1个记录和第2个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3个记录比较,直到倒数第2个记录和最后1个记录比较完成;第2趟用第2个记录和第3个记录比较,然后第3个和第4个比较,依此类推。本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;如果返回值等于0,再比较两个产品的金额,如果前一个产品
11、的金额大于后一个产品的金额,则这两个产品进行数据交换。void SortDat() PRO temp; /*定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/99;i+) /*利用选择法进行排序*/ if(strcmp(selli.mc,sellj.mc)0) /*按产品名称从小到大进行排列*/ temp=selli; sell i=sellj; sellj=temp; else if(strcmp(selli.mc,sellj.mc)=0) /*若产品名称相同*/ if(selli.jesellj.je) /*则按金额从小到大进行排列*/ selli=sellj;【易错提示】 结构
12、型数据对成员的访问用.成员运算符;两个字符串的比较用字符串比较函数strcmp。7.【考点分析】 本题考查对多个整数的筛选以及排序。多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】 此题属于4位数的筛选类题,并且需求出各位数数字,再筛选排序。解此类题目需主要解决3个问题:问题1如何取得4位数的各个数位数字;问题2如何通过条件(本题为千位数字加个位数字等于百位数字加十位数字)筛选出满足条件的数;问题3如何对数组中的数进行排序。解此类题的一般思路为:先求出每个数的各位数字,再根据各位数数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。对于问题1通过算术运算取余和整除可以分解得到
13、4位数的各个数位上的数字;问题2通过if条件判断语句和逻辑表达式可以实现。问题3排序可以通过循环嵌套的起泡法来完成。在求各位数数字时,先将每个数进行取整运算求出千位数,将该数取余再除100取整得出百位数,将该数取余再除10取整得出十位数,最后将该数取余得出个位数。voidjsValue() int i,j; int a1,a2,a3,a4; /*定义变量保存4位数的每位数字*/300;i+) /*逐个取每一个4位数*/ a4=ai/1000; /*求4位数的千位数字*/ a3=ai%1000/100; /*求4位数的百位数字*/ a2=ai%100/10; /*求4位数的十位数字*/ a1=a
14、i%10; /*求4位数的个位数字*/ if(a4+a1=a3+a2) /*如果千位数加个位数等于百位数加十位数*/ bcnt=ai; /*将满足条件的数存入数组b中*/ /*统计满足条件的数的个数cnt*/cnt-1;i+) /*用选择法对数组b的4位数按从小到大的顺序进行排序*/cnt; if(bibj) temp=bi; bi=bj; bj=temp;【易错提示】 分解4位数时算术运算符的使用,4位数条件判断时if语句中的条件表达式,起泡法排序时的条件。8.【考点分析】 本题考查对多个整数的筛选以及排序。【解题思路】 此题属于4位数的筛选类题,并且需将各位数组成新的2位数,再筛选排序。解
15、题时,需主要解决4个问题:问题2如何按照要求组成新的2位数字ab(本题为千位数字与十位数字),以及cd(本题为个位数字与百位数字);问题3如何通过判断条件(abcd0,abcd0&(abcd)=0 & (ab-cd)=0且ab-cd=10且两个数均是奇数同时两个新十位数的十位上的数字均不为零*/ /*则把满足条件的数存入数组b中*/ /*统计满足条件的数的个数*/i+) /*将数组b中的数按从大到小的顺序排列*/ if(bi【易错提示】 分解4位数时算术运算符的使用,if判断语句中逻辑表达式,起泡法排序时的条件。9.【考点分析】 本题考查对多个整数的筛选以及求平均值。考查的知识点主要包括:多位
16、整数的分解算法,逻辑表达式,平均值的计算方法。【解题思路】 此题属于4位数的筛选题型,并且涉及统计及平均值问题。解题时,需主要解决3个问题:问题2如何通过判断条件(本题为千位数上的数加百位数上的数等于十位数上的数加个位数上的数)对目标进行筛选,再分别统计出满足和不满足条件的数的和以及数目;问题3分别求出两类数的平均值。 本题与上题解题思想相同,不同之处在于问题2的判断条件改为:千位数上的数加百位数上的数等于十位数上的数加个位数上的数(a4+a3=a2+a1)。int i,n=0; /*定义循环变量和计数器变量*/ if(a4+a3=a2+a1) /*如果千位数加百位数等于十位数加个位数*/ p
17、jz1+=ai; /*将满足条件的数求和*/ else n+; /*否则统计不满足条件的数的个数*/ pjz2+=ai; /*将不满足条件的数求和*/ pjz1/=cnt; /*求满足条件的数的平均值*/ pjz2/=n; /*求不满足条件的数的平均值*/ 【易错提示】 分解4位数时算术运算符的使用;if判断语句中逻辑表达式。10。【考点分析】 本题考查对整数的筛选以及数组排序。C语言循环结构,逻辑表达式,数组排序。 【解题思路】 此题属于4位数的筛选题型。分析题干要求,本题要求实现jsVal()函数的功能,归纳可以得出2个问题:问题1如何通过判断条件(该4位数连续小于该4位数以后的5个数且该
18、数是偶数)筛选出满足条件的数,同时统计其个数;问题2如何将这些数按照从小到大的顺序排列。通过问题分析,得出解此题的思路为:先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。对于问题1通过if条件判断语句和逻辑表达式可以实现;问题2排序可以通过循环嵌套的起泡法实现。void jsVal() /*定义数据交换是的暂存变量*/MAX-5;i+) /*逐个取每个4位数*/ if(aiai+1&aiai+2&ai+3&ai+4&ai+5&ai%2=0) /*如果当前数是偶数且小于后面连续5个数*/ /*并统计满足条件的数的个数*/i+) /*利用选择法对b数组中的元素进行从小到大
19、的排序*/bj) 【易错提示】 循环嵌套的循环控制条件,if判断语句中表达式,数组排列的顺序。11.【考点分析】 本题考查对字符数组中的字符进行计算以及替换。字符串数组的访问,字符ASCII码的位运算,if判断结构以及逻辑表达式。 【解题思路】 首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现StrCharJL()函数的功能,分析后可以归纳出3个关键点:关键点1如何对字符数组的元素逐一访问;关键点2如何对字符的ASCII码做左移的位运算;关键点3如何根据条件(移位后的ASCII值小于等于32或大于100)对计算结果进行判断,并分别对满足与不满足条件的情况进行处理。接着分析
20、每一步的解决方法,关键点1通过字符串处理函数strlen获取字符串的长度,再通过获得的长度使用下标法对字符数组的元素逐一访问;关键点2可以直接对字符的ASCII码进行位运算;关键点3通过if判断结构和逻辑表达式即可实现功能。void StrCharJL(void) int i,j; int str; char ch;maxline;i+) /*以行为单位获取字符*/ str=strlen(xxi); /*求得当前行的字符串长度*/str; ch=xxij4; if(ch100) continue; /*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/ xxij+=4; /*否则就把左移后的字符ASCII值加上原字符的ASCII*/【易错提示】 根据字符ASCII码的位计算;if判断语句中的逻辑表达式。12.void ChA(void) int I,j,k,str; for(I=0;II+)str=strlen(xxI); ch=xxI0;str-1; xxIj+=xxIj+1; xxIstr-1+=ch; for(j=0,k=str-1;str/2;j+,k-) ch=xxIj; xxIj=xxIk; xxIk=ch; void ChA(void) char p,c; p=xxi0; c=xx
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1