计算机三级网络技术上机试题100道-.pdf
1 1 本题考查对4 位整数的排序。考查的知识点主要包括:数组元素的排序算法,if 判断语句和逻辑表达式,以及求余算术运算。【解题思路】此题属于4 位数排序问题。本题需主要解决3 个问题:问题1 如何取 4 位数的后3 位进行比较;问题 2 如何按照题目要求的条件(按照每个数的后3 位的大小进行降序排列,如果后3 位相等,则按照原始4 位数的大小进行升序排列)排序;问题3 如何将排完序的前10 个数存到数组bb 中去。本题的解题思路为:使用双循环对数组按条件进行排序,然后将排完序的前10 个数存到数组bb 中。对于问题1可以通过算术运算的取余运算实现(aai%1000);问题 2 通过包含if 判断语句的起泡排序法就可以实现。void jsSort()int i,j;/*定义循环控制变量*/int temp;/*定义数据交换时的暂存变量*/for(i=0;i199;i+)/*用选择法对数组进行排序*/for(j=i+1;j200;j+)if(aai%1000aaj)/*则要按原4 位数的值进行升序排序*/temp=aai;aai=aaj;aaj=temp;for(i=0;i10;i+)/*将排序后的前10 个数存入数组b 中*/bbi=aai;【易错提示】取 4 位数后三位的算法,if 判断语句中逻辑表达式的比较运算符。2【考点分析】本题主要考查的知识点包括:C语言循环结构,if 判断语句和逻辑表达式,以及分解多位整数的算术运算。【解题思路】分析题干,本题除给出条件SIXSIX SIX NINENINE之外,还可得出2 个隐含的条件:条件1:SIX和 NINE 分别是 3 位和 4 位的正整数;条件2:SIX的十位数字等于NINE 的百位数字,NINE 的千位数字和十位数字相等。本题解题思路:通过嵌套的循环结构可以遍历到所有的3 位和 4 位数,对于每一个3 位数及 4 位数的组合进行题设条件(SIX SIX SIX NINENINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件 1 及条件 2),如果满足则个数加1,并将该3 位数及 4 位数添加到和值中。void countValue()int i,j;int s2;int n2,n3,n4;for(i=100;i1000;i+)for(j=1000;j10000;j+)2 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【考点分析】本题考查的知识点包括: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;i100;i+)/*依次读取整型数据放入数组xx 中*/for(j=0;j10;j+)fscanf(fp,%d,&xxi*10+j);fscanf(fp,n);if(feof(fp)break;/*文件读取结束,则退出*/fclose(fp);return 0;void Compute(void)int i;/*定义循环控制变量*/int ttMAX;/*定义数组保存奇数*/for(i 0;i1000;i)if(xxi%2!0)3 odd;/*计算出 xx 中奇数的个数odd*/ave1 xxi;/*求奇数的和*/ttodd 1 xxi;/*将奇数存入数组tt 中*/else even;/*计算出 xx 中偶数的个数even*/ave2 xxi;/*求偶数的和*/ave1/odd;/*求奇数的平均值*/ave2/even;/*求偶数的平均值*/for(i 0;iodd;i)totfc (tti ave1)*(tti ave1)/odd;/*求所有奇数的方差*/【易错提示】文件操作函数fscanf()和 feof()的用法,if 判断语句中逻辑表达式,对方差计算公式运用错误。4【考点分析】本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,完全平方数判断方法,if 判断语句和逻辑表达式。【解题思路】此题属于数学类问题。分析题干,本题需注意2 个关键点:关键点1 判断该数是否是完全平方数;关键点 2 判断该数是否有两位数数字相同。本题的解题思路为:通过循环控制,依次判断100 至 999 数是否满足关键点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)/*有两位数字相同*/bbcnt=i;/*则把该数存入数组bb 中*/cnt+;/*统计满足条件的数的个数*/return cnt;/*返回满足该条件的整数的个数*/【易错提示】完全平方数的判断方法错误,分解整数各个数位的方法错误,if 判断语句中表达式。5.【考点分析】本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,素数的判断算法,if 判断语句和逻辑表达式。【解题思路】此题属于数学类问题。分析题干要求,归纳出本题的2 个关键点:关键点1 判断该数是否为素数;关键点 2 判断是否满足条件:个位数字和十位数字之和被10 除所得余数等于百位数字。本题思路为:通过循环语句,依次求出所有3 位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字4 之和被 10 除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。判断的方法为:依次取从2 到该数 1/2 的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。void countValue()int i,j;/*定义循环控制变量*/int half;int a3,a2,a1;/*定义变量存储3 位数每位的数字*/for(i=101;i1000;i+)/*在该范围内寻找符合条件的数*/a3=i/100;/*求百位数字*/a2=i%100/10;/*求十位数字*/a1=i%10;/*求个位数字*/if(a3=(a2+a1)%10)/*如果个位数字与十位数字之和被10 除所得余数恰是百位数字*/half=i/2;for(j=2;jhalf)/*如果是素数*/cnt+;/*计算这些素数的个数cnt*/sum+=i;/*计算这些素数值的和sum*/【易错提示】素数的判断算法使用错误,分解整数各个数位的方法错误,if 判断语句中逻辑表达式错误。6.【考点分析】本题考查结构体数组的排序。考查的知识点主要包括:结构体成员运算,字符串比较符,数组排序。【解题思路】此题属于销售记录排序类题型。此类题型主要考查对结构体数组的排序。解题时,应注意3 个关键点:关键点1 如何按产品名称从小到大排序;关键点2 如果产品名称相同;关键点3 如何按金额从小到大排列。数组排序可以用起泡法实现,起泡法的思路是:将较小的值像空气泡一样逐渐上浮 到数组的顶部,而较大的数值逐渐 下沉 到数组的底部。具体为第1 趟用第 1 个记录和第2 个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3 个记录比较,直到倒数第2 个记录和最后1 个记录比较完成;第2 趟用第 2 个记录和第3 个记录比较,然后第 3 个和第 4 个比较,依此类推。本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp 比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;如果返回值等于0,再比较两个产品的金额,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换。void SortDat()int i,j;/*定义循环控制变量*/PRO temp;/*定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/for(i=0;i99;i+)/*利用选择法进行排序*/for(j=i+1;j0)/*按产品名称从小到大进行排列*/temp=selli;5 sell i=sellj;sellj=temp;else if(strcmp(selli.mc,sellj.mc)=0)/*若产品名称相同*/if(selli.jesellj.je)/*则按金额从小到大进行排列*/temp=selli;selli=sellj;sellj=temp;【易错提示】结构型数据对成员的访问用.成员运算符;两个字符串的比较用字符串比较函数strcmp。7.【考点分析】本题考查对多个整数的筛选以及排序。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】此题属于4 位数的筛选类题,并且需求出各位数数字,再筛选排序。解此类题目需主要解决3 个问题:问题 1 如何取得4 位数的各个数位数字;问题2 如何通过条件(本题为千位数字加个位数字等于百位数字加十位数字)筛选出满足条件的数;问题3 如何对数组中的数进行排序。解此类题的一般思路为:先求出每个数的各位数字,再根据各位数数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。对于问题1 通过算术运算取余和整除可以分解得到4 位数的各个数位上的数字;问题2 通过 if条件判断语句和逻辑表达式可以实现。问题3 排序可以通过循环嵌套的起泡法来完成。在求各位数数字时,先将每个数进行取整运算求出千位数,将该数取余再除100 取整得出百位数,将该数取余再除 10 取整得出十位数,最后将该数取余得出个位数。voidjsValue()int i,j;/*定义循环控制变量*/int a1,a2,a3,a4;/*定义变量保存4 位数的每位数字*/int temp;/*定义数据交换时的暂存变量*/for(i=0;i300;i+)/*逐个取每一个4 位数*/a4=ai/1000;/*求 4 位数的千位数字*/a3=ai%1000/100;/*求 4 位数的百位数字*/a2=ai%100/10;/*求 4 位数的十位数字*/a1=ai%10;/*求 4 位数的个位数字*/if(a4+a1=a3+a2)/*如果千位数加个位数等于百位数加十位数*/bcnt=ai;/*将满足条件的数存入数组b 中*/cnt+;/*统计满足条件的数的个数cnt*/for(i=0;icnt-1;i+)/*用选择法对数组b 的 4 位数按从小到大的顺序进行排序*/for(j=i+1;jbj)temp=bi;bi=bj;bj=temp;6 【易错提示】分解 4 位数时算术运算符的使用,4 位数条件判断时if 语句中的条件表达式,起泡法排序时的条件。8.【考点分析】本题考查对多个整数的筛选以及排序。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】此题属于4 位数的筛选类题,并且需将各位数组成新的2 位数,再筛选排序。解题时,需主要解决4 个问题:问题1 如何取得4 位数的各个数位数字;问题2 如何按照要求组成新的2 位数字 ab(本题为千位数字与十位数字),以及 cd(本题为个位数字与百位数字);问题 3 如何通过判断条件(abcd0,abcd0&(abcd)10&ab%2 1&cd%2 1&a4!0&a1!0)。void jsVal()int i,j;/*定义循环控制变量*/int a1,a2,a3,a4;/*定义变量保存4 位数的每位数字*/int temp;/*定义数据交换时的暂存变量*/int ab,cd;/*存储重新组合成的十位数*/for(i=0;i=0&(ab-cd)=0 且 ab-cd=10 且两个数均是奇数同时两个新十位数的十位上的数字均不为零*/bcnt=ai;/*则把满足条件的数存入数组b 中*/cnt+;/*统计满足条件的数的个数*/for(i=0;icnt-1;i+)/*将数组 b 中的数按从大到小的顺序排列*/for(j=i+1;jcnt;j+)if(bibj)temp=bi;bi=bj;bj=temp;【易错提示】分解 4 位数时算术运算符的使用,if 判断语句中逻辑表达式,起泡法排序时的条件。9.【考点分析】本题考查对多个整数的筛选以及求平均值。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,平均值的计算方法。【解题思路】此题属于4 位数的筛选题型,并且涉及统计及平均值问题。解题时,需主要解决3 个问题:问题 1 如何取得 4 位数的各个数位数字;问题2 如何通过判断条件(本题为千位数上的数加百位数上的数等于十位数上的数加个位数上的数)对目标进行筛选,再分别统计出满足和不满足条件的数的和以及数目;问题3 分别求出两类数的平均值。7 本题与上题解题思想相同,不同之处在于问题2 的判断条件改为:千位数上的数加百位数上的数等于十位数上的数加个位数上的数(a4+a3=a2+a1)。int i,n=0;/*定义循环变量和计数器变量*/int a1,a2,a3,a4;/*定义变量保存4 位数的每位数字*/for(i=0;i300;i+)/*逐个取每一个4 位数*/a4=ai/1000;/*求 4 位数的千位数字*/a3=ai%1000/100;/*求 4 位数的百位数字*/a2=ai%100/10;/*求 4 位数的十位数字*/a1=ai%10;/*求 4 位数的个位数字*/if(a4+a3=a2+a1)/*如果千位数加百位数等于十位数加个位数*/cnt+;/*统计满足条件的数的个数*/pjz1+=ai;/*将满足条件的数求和*/else n+;/*否则统计不满足条件的数的个数*/pjz2+=ai;/*将不满足条件的数求和*/pjz1/=cnt;/*求满足条件的数的平均值*/pjz2/=n;/*求不满足条件的数的平均值*/【易错提示】分解 4 位数时算术运算符的使用;if 判断语句中逻辑表达式。10。【考点分析】本题考查对整数的筛选以及数组排序。考查的知识点主要包括:C 语言循环结构,逻辑表达式,数组排序。【解题思路】此题属于4 位数的筛选题型。分析题干要求,本题要求实现jsVal()函数的功能,归纳可以得出2 个问题:问题 1 如何通过判断条件(该 4 位数连续小于该4 位数以后的5 个数且该数是偶数)筛选出满足条件的数,同时统计其个数;问题 2 如何将这些数按照从小到大的顺序排列。通过问题分析,得出解此题的思路为:先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。对于问题1 通过 if 条件判断语句和逻辑表达式可以实现;问题 2排序可以通过循环嵌套的起泡法实现。void jsVal()int i,j;/*定义循环控制变量*/int temp;/*定义数据交换是的暂存变量*/for(i=0;iMAX-5;i+)/*逐个取每个4 位数*/if(aiai+1&aiai+2&aiai+3&aiai+4&aiai+5&ai%2=0)/*如果当前数是偶数且小于后面连续5 个数*/bcnt=ai;/*将满足条件的数存入数组b 中*/cnt+;/*并统计满足条件的数的个数*/for(i=0;icnt-1;i+)/*利用选择法对b 数组中的元素进行从小到大的排序*/for(j=i+1;jbj)8 temp=bi;bi=bj;bj=temp;【易错提示】循环嵌套的循环控制条件,if 判断语句中表达式,数组排列的顺序。11.【考点分析】本题考查对字符数组中的字符进行计算以及替换。考查的知识点主要包括:字符串数组的访问,字符 ASCII码的位运算,if 判断结构以及逻辑表达式。【解题思路】首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现StrCharJL()函数的功能,分析后可以归纳出3 个关键点:关键点 1 如何对字符数组的元素逐一访问;关键点 2 如何对字符的ASCII码做左移的位运算;关键点 3 如何根据条件(移位后的ASCII值小于等于32 或大于 100)对计算结果进行判断,并分别对满足与不满足条件的情况进行处理。接着分析每一步的解决方法,关键点 1 通过字符串处理函数strlen 获取字符串的长度,再通过获得的长度使用下标法对字符数组的元素逐一访问;关键点 2 可以直接对字符的ASCII码进行位运算;关键点 3 通过 if 判断结构和逻辑表达式即可实现功能。void StrCharJL(void)int i,j;/*定义循环控制变量*/int str;char ch;for(i=0;imaxline;i+)/*以行为单位获取字符*/str=strlen(xxi);/*求得当前行的字符串长度*/for(j=0;jstr;j+)ch=xxij4;if(ch100)continue;/*如果左移4 位后字符的ASCII值小于等于32 或大于 100,则原字符保持不变*/else xxij+=4;/*否则就把左移后的字符ASCII值加上原字符的ASCII*/【易错提示】根据字符ASCII码的位计算;if 判断语句中的逻辑表达式。12.void ChA(void)int I,j,k,str;char ch;for(I=0;Imaxline;I+)str=strlen(xxI);ch=xxI0;for(j=0;jstr-1;j+)xxIj+=xxIj+1;xxIstr-1+=ch;for(j=0,k=str-1;jstr/2;j+,k-)ch=xxIj;xxIj=xxIk;xxIk=ch;9 void ChA(void)int i,j;char p,c;for(i=0;imaxline;i+)p=xxi0;c=xxistrlen(xxi)-1;for(j=0;jstrlen(xxi)-1;j+)xxij+=xxij+1;xxistrlen(xxi)-1=p+c;strrev(xxi);13【考点分析】本题考查对字符串的查找和统计。考查的知识点包括:指针对字符串的访问方法,C 语言循环嵌套结构。【解题思路】首先通读题目,得知此题属于字符串处理问题;其次分析题干要求,本题要求实现findStr(char*str,char*sunstr)函数,该函数需要实现在一个字符串中查找另一个字符串,并统计出现次数的功能,分析后可以归纳出实现功能的 3 个关键点;关键点 1 如何实现对字符串中字符的遍历;关键点 2 如何实现对子字符串的查找功能;关键点 3如何统计子串其出现的次数。接着分析每一步的解决方法。对于关键点1 使用循环和指针的方式可以实现对字符串的访问;关键点2 通过嵌套的循环可以实现查找功能,具体方法是,外层循环控制对主串的遍历,内层是对子串的遍历,当主串中当前字符和子串第 1 个字符相同时,继续判断其后的字符是否和子串的下一个字符相同,依次类推,则每次内层循环遍历过子串就表示找到一次;关键点3 每找到一次子串的同时,累加一个记数器,作为出现次数的统计结果。int findStr(char*str,char*substr)int n=0;/*定义计数器变量,统计出现次数*/char*p,*r;/*定义指针变量来分别指向两个字符串*/while(*str)/*如果字符串没有结束,则一直循环下去*/p=str;/*指针 p 指向字符串首地址*/r=substr;/*指针 r 指向子字符串首地址*/while(*r)/*若子字符串没有结束,则循环继续*/if(*r=*p)/*如果子字符串的第一个字符等于字符串中的该字符,则继续比较下一个字符*/r+;p+;else break;/*否则退出循环*/if(*r=0)/*如果子字符串在字符串中出现了一次*/n+;/*则 n 加 1,进行统计*/str+;/*指向字符串中的下一个字符*/return n;/*返回统计结果n*/【易错提示】遍历字符串时指针的使用;查找子串的算法使用。14【考点分析】本题考查对字符数组中字符排序。考查的知识点包括:字符串数组的访问,数组排序算法。【解题思路】首先通读题目,得知此题属于字符排序问题;其次分析题干要求,本题要求实现SortCharD()函数,10 该函数需要实现将字符数组中的元素排序的算法。分析后可以归纳出实现该功能的关键点是:如何按照字符从大到小的顺序对数组中的字符进行排序。这可以通过循环嵌套的起泡法来实现。void SortCharD()int i,j,k;/*定义循环控制变量*/int str;/*存储字符串的长度*/char temp;/*定义数据交换时的暂存变量*/for(i=0;imaxline;i+)/*以行为单位获取字符*/str=strlen(xxi);/*求得当前行的字符串长度*/for(j=0;jstr-1;j+)/*对字符按从大到小的顺序进行排序*/for(k=j+1;kstr;k+)if(xxijxxik)temp=xxij;xxij=xxik;xxik=temp;【易错提示】排序时 if 结构中的逻辑表达式。15【考点分析】本题考查选票的统计。考查的知识点主要包括:C 语言循环结构,if 条件判断结构和逻辑表达式,二维数组操作。【解题思路】首先通读题目,得知此题属于选票的统计题型;其次分析题干要求,本题要求实现CountRs(void)函数的功能,该函数需要统计出100 条选票数据,并将统计结果保存入数组yy 中;接着归纳出本题有2 个关键点:关键点 1 如何统计每张选票的选择情况;关键点 2 根据题目给出的条件一张选票选中人数小于等于5 个人时则被认为无效判断选票是否有效。首先,对数组 yy 元素初始化为0;接着通过一个循环嵌套结构依次判断每张选票数据的十个选举标志,同时每张选票的投票数量,对于不满足条件的选票数据直接跳过,并统计有效选票的投票情况到数组yy 中。void CountRs(void)int i,j;/*定义循环控制变量*/int cnt;/*用来存储每张选票中选中人数,以判断选票是否有效*/for(i=0;i10;i+)/*初始化数组yy*/yyi=0;for(i=0;i100;i+)/*依次取每张选票进行统计*/cnt=0;/*初始化计数器变量*/for(j=0;j5)/*当 cnt 值大于 5 时为有效选票*/for(j=0;j10;j+)/*统计有效选票*/if(xxij=1)yyj+;11 【易错提示】数组 yy 未初始化,判断选票是否有效的逻辑表达式错误16【考点分析】本题考查的知识点主要包括:结构体成员的访问,元素的排序,if 判断结构和逻辑表达式。【解题思路】此题属于结构体的筛选排序问题。分析题干要求,可以归纳出3 个关键点:关键点1 通过条件 每组数据中第2个数大于第1 个数和第 3 个数之和 对每组数据进行判断;关键点 2 保存满足条件的数到新数组中并统计其数量;关键点 3 对新数组中的数再按照第2个数和第 3 个数之和的大小进行降序排列;关键点 4 函数的返回值为之前统计的满足的数据的组数。接着分析具体的解决方法,首先通过if 判断结构和逻辑表达式实现对所有结构的筛选,保存并统计个数,然后通过起泡法完成排序,最后函数返回组数。int jsSort()int i,j;/*定义循环控制变量*/int cnt=0;/*定义计数器变量*/Data temp;/*定义数据交换时的暂存变量,这里是一个Data 类型的结构体变量*/for(i=0;iaai.x1+aai.x3)/*如果第二个数大于第一个数加第三个数之和*/bbcnt=aai;/*则把该组数据存入结构数组bb 中*/cnt+;/*同时统计满足条件的数据的个数*/for(i=0;icnt-1;i+)/*对结构数组bb 中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列*/for(j=i+1;jcnt;j+)if(bbi.x2+bbi.x3bbj.x2+bbj.x3)temp=bbi;bbi=bbj;bbj=temp;return cnt;/*返回满足条件数据的组数*/【易错提示】第 i 个人是否报数到m;用表达式(S1m1)%i 判断。17【考点分析】本题考查对多个整数的右移、统计以及求平均值。考查的知识点主要包括:位移算法,逻辑表达式,求平均值的算法。【解题思路】本题是数学类题。本题的解题思路是:首先利用一个for 循环来依次从数组中取得各数,由于题目要求数组中正整数的个数,如果取得的数大于零,这时就给变量totNum(正整数的个数)累加 1,然后把该正整数右移一位后的结果临时保存在变量data 中,再判断产生的新数是否是偶数。如果是,就给变量totCnt(符合判断条件的正整数个数)累加 1,并把原数的值累加到变量totPjz 中,当所有符合判断条件的数都被找出后,再对 totPjz 求平均值。void CalValue(void)int i;/*定义循环控制变量*/int data;/*用于保存处理后产生的新数*/for(i=0;i0)/*判断是否正整数*/totNum+;/*统计正整数的个数*/data=xxi1;/*将数右移一位*/if(data%2=0)/*如果产生的新数是偶数*/12 totCnt+;/*统计这些数的个数*/totPjz+=xxi;/*并将满足条件的原数求和*/totPjz/=totCnt;/*求满足条件的这些数(右移前的值)的算术平均值*/【易错提示】位移运算表达式的使用。18【考点分析】本题考查对多个整数的筛选、统计以及计算平均值,考查的知识点只要包括:多位整数的数位分解算法,逻辑表达式,计算平均值的算法。【解题思路】首先通读题目,得知此题属于4 位数的筛选题型;其次分析题干要求,本题要求补充main 中空白部分,进一步分析,可以归纳出3 个关键点:关键点1 如何找出数组中最大数的值并统计其个数;关键点2 如何通过条件 可以被 7 或 3 整除 在数组中筛选出满足条件的数;关键点3 如何计算平均值。接着分析每一步的解决方法,对于关键点1 通过循环使用起泡法找出其中最大的数,同时统计其个数;关键点2 通过 if 判断结构和逻辑表达式可以实现;关键点3 通过之前找到满足条件的数的和及其个数计算出平均值。void main()int i,k,cnt,xxN,max;float pj;FILE*fw;long j=0;system(CLS);fw=fopen(out.dat,w);read_dat(xx);max=xx0;for(i=1,k=0;imax)max=xxi;/*求出数组xx 中最大数max*/if(xxi%3=0|xxi%7=0)j+=xxi;/*求出数组xx 中值能被3 整除或能被7 整除的数的总和*/k+;for(i=0,cnt=0;iN;i+)if(xxi=max)cnt+;/*求出数组xx 中最大数max 的个数*/pj=(float)(j*100/k)/100;/*求出数组xx 中值能被3 整除或能被7 整除的数的平均值*/printf(nnmax=%d,cnt=%d,pj=%6.2fn,max,cnt,pj);fprintf(fw,%dn%dn%6.2fn,max,cnt,pj);fclose(fw);【易错提示】对数进行筛选时的逻辑表达式。19【考点分析】本题考查对字符数组中字符计算和替换。考查的知识点主要包括:字符串数组的访问,字符ASCII码的算术运算,if 判断结构以及逻辑表达式。【解题思路】此题属于字符计算问题。分析题干要求,可以归纳出3 个关键点:关键点1 如何对字符数组的元素13 逐个访问;关键点2 如何根据给出的函数替代关系f(p)p*11mod256 对字符进行计算;关键点3 根据条件(本题为 小于等于 32 或对应的字符是大写字母)对计算结果进行判断,并分别对满足与不满足条件的情况进行处理。解此类题的一般思路为:首先通过字符串处理函数strlen 获取字符串的长度,根据获得的长度使用下标法逐一对字符数组的元素进行访问;然后按照题目给出的函数关系式直接对字符进行算术运算;最后通过if 判断结构和逻辑表达式判断计算结果是否满足条件,分别对两种情况进行处理。void encryChar()int i,j;/*定义循环控制变量*/int str;/*存储字符串的长度*/char ch;/*存储当前取得的字符*/for(i=0;imaxline;i+)/*以行为单位获取字符*/str=strlen(xxi);/*求得当前行的字符串长度*/for(j=0;jstr;j+)ch=xxij*11%256;/*依次取各行的所有字符*/if(ch=A&ch=Z)/*如果计算的值小于等于32 或对应的字符是大写字母*/continue;/*则不作改变*/else xxij=ch;/*否则用新字符取代原有字符*/【易错提示】根据函数替代关系对字符进行运算;if 判断结构中的逻辑表达式。20【考点分析】本题考查对字符串中字符的替换。考查的知识点主要包括:字符串数组的访问,字符之间的比较和替换,if 判断结构以及逻辑表达式。【解题思路】此题属于字符替换题型,分析题干要求,可以归纳出2 个关键点:关键点1 如何实现对字符数组的元素逐一访问;关键点2 如何根据条件把所有的小写字母改写成该字母的下一个字母对字符进行替换。接着分析具体的解决方法,首先通过字符串处理函数strlen 获取字符串的长度,根据获得的长度使用下标法对字符数组的元素逐一访问,判断每个字符是否小写字符,直接将字符替换为其下一个字符,其中对于小写字母z,要将其替换成小写字母a,这些可以通过if 判断结构和逻辑表达式来完成。void ConvertCharA(void)int i,j;/*定义循环控制变量*/int str;/*存储字符串的长度*/for(i=0;imaxline;i+)/*以行为单位获取字符*/str=strlen(xxi);/*求得当前行的字符串的长度*/for(j=0;j=a&xxij=z)/*如果是小写字母*/if(xxij=z)xxij=a;/*如果是小写字母z,则改写成字母a*/else xxij+=1;/*其他的小写字母则改写为该字母的下一个字母*/【易错提示】对字符数组进行逐元素访问;if 判断语句中逻辑表达式。21【考点分析】本题考查对整数的筛选及数组排序。考查的知识点主要包括:C语言循环结构,逻辑表达式等。14【解题思路】此题属于2 位数的筛选题。分析题干要求,本题要求实现jsVal()函数的功能,归纳可以得出2 个问题:问题 1 如何根据判断条件(数组 a 和 b 中相同下标位置的数必须符合一个是偶数,另一个是奇数)筛选出满足条件的数,同时统计其个数,问题 2 如何将这些数按从小到大的书序排列。通过问题分析,得出解此题的思路为:先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。对于问题1 通过 if 条件判断语句和逻辑表达式可以实现。问题2 排序可以通过循环嵌套的起泡法实现。void jsVal()int i,j;/*定义循环变量*/int temp;/*用于存储排序中的中间变量*/for(i=0;i=MAX-1;i+)/*循环查找符合条件的元素*/if(ai%2=0)&(bi%2!=0)|(ai%2!=0)&(bi%2=0)/*判断数组a 和 b 中相同下标位置的数是否符合一个是偶数,另一个是奇数*/ci=(ai8)+bi;/*ai 按二进制左移8 位再加上 bi*/cnt+;/*记录 c 中个数*/for(i=0;i MAX-1;i+)/*将 C中的元素按从小到大顺序排列*/for(j=0;j cj+1)temp=cj;cj=cj+1;cj+1=temp;【易错提示】分解 4 位数算法的使用,对 4 位数筛选和排序时if 结构中的逻辑表达式。22【考点分析】本题考查对多个整数的筛选以及排序。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】此题属于4 位数的筛选类题型。解此题需主要解决3 个问题:问题1 如何取得4 位数的各个数位数字;问题 2 如何通过条件(千位数字减百位数字减十位数字减个位数字大于零)筛选出满足条件的数;问题 3 如何按照要求(本题为从小到大的顺序)对数组中的数进行排序。通过问题分析,得出解此题的思路为:先求出每个数的各位数字,再根据各数位数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。对于问题1 通过算术运算取余和除法可以分解得到4 位数的各个数位上的数字;问题 2 通过 if 条件判断语句和逻辑表达式可以实现;问题3排序可以通过循环嵌套的起泡法来完成。void jsValue()int i,j;/*定义循环控制变量*/int a1,a2,a3,a4;/*定义变量保存4 位数的每位数字*/int temp;/*定义数据交换时的暂存变量*/for(i=0;i0)/*如果千位数减百位数减十位数减个位数大于零*/bcnt=ai;/*则把该数存入数组b 中*/cnt+;/*统计满足条件的数的个数*/15 for(i=0;icnt-1;i+)/*对数组 b 的 4 位数按从小到大的顺序进行排序*/for(j=i+1;jbj)temp=bi;bi=bj;bj=temp;【易错提示】分解 4 位数算法的使用,对 4 位数筛选和排序时if 结构中的逻辑表达式。23【考点分析】本题考查对多个整数的筛选以及统计。考查的知识点主要包括:多位整数的分解算法,逻辑表达式。【解题思路】此题属于4 位数的筛选类题型。解此题需主要解决2 个问题:问题1 如何取得4 位数的各个数位数字;问题2 如何通过条件(千位数字与百位数字之和等于个位数字与十位数字之差的10 倍)筛选出满足条件的数并计算个数及和值;分析题意 5000 以下的自然数,该数存在千位数字可知:本题的查找范围为1000 i=1000;i-)/*依次取每一个数进行判断*/a4=i/1000;/*求 4 位数的千位数字*/a3=i%1000/100;/*求 4 位数的百位数字*/a2=i%100/10;/*求 4 位数的十位数字*/a1=i%10;/*求 4 位数的个位数字*/if(a4+a3=a2+a1&a4+a3=(a1-a4)*10)/*千位数与百位数之和等于十位数与个位数之和,且千位数与百位数之和等于个位数与千位数之差的10 倍*/cnt+;/*则统计满足条件的数的个数*/sum+=i;/*将满足条件的数求和*/【易错提示】隐含条件 自然数查找范围的分析,分解4 位数算法的使用,对 4 位数筛选和排序时if 结构中的逻辑表达式。24【考点分析】本题考查对多个整数的筛选以及排序。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,数组排序算法。【解题思路】此题属于4 位数的筛选类题,并且需将各位数组成新的两位数,再筛选排序。解题时,需主要解决4 个问题:问题1 如何取得4 位数的