计算机等级考试三级C语言上机试题.docx
- 文档编号:6124806
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:84
- 大小:51.53KB
计算机等级考试三级C语言上机试题.docx
《计算机等级考试三级C语言上机试题.docx》由会员分享,可在线阅读,更多相关《计算机等级考试三级C语言上机试题.docx(84页珍藏版)》请在冰豆网上搜索。
计算机等级考试三级C语言上机试题
1【审题关键句】将大于整数m且紧靠m的k个素数存入数组。
【解题思路】
①首先定义一个计数变量cnt并赋初值为0。
②利用while循环统计大于整数m且紧靠m的k个素数,当计数变量cnt的值与变量k的值相等的时候,则退出while循环。
每执行一次循环时,变量m的值加1,然后调用函数isP()判断当前的m值是否为素数,如果是素数,则将m的值赋给数组xx[cnt],同时计算变量cnt的值加1,即当数组xx[0]中保存了一个素数之后,在下一次素数判断成立时将保存到xx[1]的位置上,依次类推。
【参考答案】
intcnt=0;//定义变量cnt并初值等于0
while(cnt { m++;//变量m加1 if(isP(m))xx[cnt++]=m;//如果m为素数,则把其赋给数组元素xx[cnt],并且数组的下标cnt加1 } 2【审题关键句】求素数的个数及平均值,并计算非素数的平均值。 【解题思路】 ①首先定义循环变量i,然后通过for循环对数组a[300]中的每个元素a[i]调用函数isP(a[i])判断a[i]是否是素数(素数的算法已在isP()函数中给出,此处直接调用即可),如果是素数,则把其加到变量pjz1上,同时计数变量cnt加1,否则a[i]值加到变量pjz2上。 直到判断完数组a[300]中的所有数据后退出循环。 ②求出pjz1、pjz2和cnt的值之后,再用变量pjz1的值除以cnt的值就得到素数的平均值,同时把这个值赋给变量pjz1,最后用变量pjz2的值除以300-cnt的值就得到非素数的平均值,并把这个值赋给变量pjz2。 【参考答案】 inti;//定义变量i for(i=0;i<300;i++)//循环变量i从0依次递增到299 { if(isP(a[i]))//判断数组元素a[i]是否素数 { pjz1+=a[i];//把a[i]累加到变量pjz1 cnt++;//变量cnt加1 } elsepjz2+=a[i];//否则,把数组元素a[i]累加到变量pjz2 } pjz1/=cnt;//所有素数的和pjz1除以素数的个数cnt,得到素数的平均值并赋给变量pjz1 pjz2/=(300-cnt);//所有非素数的和pjz2除以非素数的个数300-cnt,得到非素数的平均值并赋给变量pjz2 3【审题关键句】100以内(含100)满足i、i+4、i+10都是素数的整数的个数以及这些i之和。 【解题思路】 ①首先定义循环变量i,然后将i的值赋初值为3,每循环一次则将i的值加1,直到i<90。 ②在for循环中,每执行一次循环则调用函数isPrime()(该函数具体的算法已经在源程序中给出,直接调用即可),对i、i+4、i+10是否同时是素数进行判断,如果这三个数同时为素数,则计数变量cnt值加1,同将时将变量i的值累加到sum上。 【参考答案】 inti;//定义变量i for(i=3;i<90;i++)//循环变量i从3开始,依次递增,直到小于90 { if(isPrime(i)&&isPrime(i+4)&&isPrime(i+10))//如果i,i+4,5i+10同时为素数 { cnt++;sum+=i;//变量cnt加1,变量i累加到sum } } 4【审题关键句】求素数的个数,存入数组,按从小到大的顺序排序。 【解题思路】 ①首先定义两个循环变量循环i、j和一个用于数据交换的整型变量tmp。 ②通过for循环依次读取数组中的300个数,其中,循环变量i从0开始每次加1,直到i<300停止循环;在每次循环中判断a[i]是否是素数,如果是素数,则把a[i]的值赋给数组b[cnt],同时数组下标变量cnt值加1。 ③在退出循环后,用两个for循环对数组b[]中元素进行两两比较,实现数组元素从小到大的排序,比较过程中通过整型变量tmp实现两个数的交换。 【参考答案】 inti,j,tmp;//定义整型变量i,j,tmp for(i=0;i<300;i++)//循环变量i从0依次递增到299 if(isP(a[i]))b[cnt++]=a[i];//如果数组元素a[i]是素数,则把a[i]赋给b[cnt],同时数组下标变量cnt加1 for(i=0;i { for(j=i+1;j { 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以上、1 000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数,计算并输出上述这些素数的个数以及这些素数值的和。 【解题思路】 ①首先定义一个循环变量循环i以及用来存放3位数分解之后各位数的变量bw(百位)、sw(十位)和gw(个位)。 ②通过for循环对100到999的每个数字进行逐个的扫描,循环变量i从100开始,每执行一次循环,i的值加1。 ③在每次执行for循环时,分解当前变量i值的百位上的数字、十位上的数字和个位上的数字,然后利用表达式(gw+sw)%10==bw来判断个位数字与十位数字之和被10除所得余数与百位数字是否相等,同时调用函数isP()判断变量i的值是否是素数,如果以上两个条件同时满足(两个表达式通过&&运算符进行连接),则计数变量cnt值加1、并把其值加到变量sum上,直到循环结束,即可求出从100到999中所有满足条件的素数的个数和它们的和。 【参考答案】 inti,bw,sw,gw;//定义整型变量i,bw,sw,gw for(i=100;i<1000;i++)//循环变量i从100开始,每次递增1,直到其值等于1 000 { bw=i/100;//i除以100,得到i百位上的数值 sw=(i-bw*100)/10;//i减去其百位值的差再除以10,得到i十位上的数值 gw=i%10;//i对10求余数得到其个位上的数值 if((gw+sw)%10==bw&&isP(i))//如果i个位数字与十位数字之和对10求余所得余数等于其百位上的数字并且i是素数 { cnt++;//变量cnt加1 sum+=i;//把变量i累加到变量sum上 } } 6【审题关键句】计算500~800区间内素数的个数,素数的值从大到小排序,再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值。 【解题思路】 ①首先定义一个循环变量循环i和用于正负号转换的变量j,同时赋j的初值为-1。 ②通过for循环对800到500的每个数字进行逐个的扫描,指定循环变量i的初值为800,当i值等于500停止循环,每执行一次循环,i的值便减1。 (注意,本题for循环从大到小依次读取数据是根据题目要求设计的,这样得到的素数值其排序方式就是从大到小排序。 ) ③在每次执行for循环时,都调用素数判断函数isPrime()判断当前的i值是否为素数,如果是素数,则素数计数变量cnt值加1,正负号转换变量j的值乘以-1,实现正负数的交替转换,最后将每次循环得到的i*j的值累加到求和变量sum中。 【参考答案】 inti,j=-1;//定义整型变量i,j,并且变量j的初值赋予-1 for(i=800;i>500;i--)//循环变量i从800开始,每次减1,直到其值等于500 { if(isPrime(i))//如果i是素数 { cnt++;//变量cnt加1 j*=-1;//变量j乘以-1,变号 sum+=j*i;//把变量j与i的积累加到变量sum上 } } 第2类数位分解后按数筛选统计并排序 7【审题关键句】按每个数的后三位升序排列,然后取出满足此条件的前10个数依次存入数组,如果后三位的数值相等,则按原先的数值进行降序排列。 【解题思路】 ①首先定义两个循环变量循环i、j和一个用于数据交换的整型变量m。 ②然后通过两个for循环对数组aa[]中的两个相邻元素按照其后三位值的大小进行从小到大的排序,本题中已给出所有的整数都是四位数,因此,可以通过aa[i]%1000或aa[j]%1 000计算得到当前数组元素的后三位值,然后再进行比较,如果两个数需要转换位置,可通过中间变量m进行转换。 ③上一步骤是两个元素后三位不相同的情况,根据题意,需要再增加一个elseif语句判断两个相邻元素的后三位数一样的情况,如果相同,则需要继续判断两个四位数的大小,并按从大小的顺序排序。 ④最后,通过一个for循环依次读取aa[i]数组中前10个元素并保存到数组bb[i]中。 【参考答案】 inti,j,m;//定义整型变量i,j,m for(i=0;i<199;i++)//循环变量i从0开始,每次递增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] aa[j]=m;//把m的值赋给aa[j] } elseif((aa[i]%1000)==(aa[j]%1000))//如果aa[i]的后三位等于aa[j]的后三位 { if(aa[i] { m=aa[i];//把aa[i]的值赋给m aa[i]=aa[j];//把aa[j]的值赋给aa[i] aa[j]=m;//把m的值赋给aa[j] } } } for(i=0;i<10;i++) bb[i]=aa[i];//循环变量从0开始,每次递增1,直到等于10,把数组元素aa[i]赋给bb[i] 8【审题关键句】按每个数的后三位降序排列,然后取出满足此条件的前10个数依次存入数组;如果后三位的数值相等,则按原先的数值进行升序排列。 【解题思路】本题类似第7套试题,通过审题可以发现主要有两个不同点: ①按每个数的后三位降序排列,参考答案的第5条语句,修改两数组元素的大小比较符即可;②后三位的数值相等则按原先的数值进行升序排列,参考答案的第13条语句,同样也是修改两数组元素的大小比较符即可。 【参考答案】 inti,j,m; for(i=0;i<199;i++) for(j=i+1;j<200;j++) { if((aa[i]%1000)<(aa[j]%1000))//如果aa[i]的后三位小于aa[j]的后三位,则进行互换 { m=aa[i]; aa[i]=aa[j]; aa[j]=m; } elseif((aa[i]%1000)==(aa[j]%1000)) { if(aa[i]>aa[j])//如果aa[i]大于aa[j],则进行互换 { m=aa[i]; aa[i]=aa[j]; aa[j]=m; } } } for(i=0;i<10;i++) bb[i]=aa[i]; 9【审题关键句】四位数的千位<=百位<=十位<=个位,且四位数是偶数,统计出满足此条件的个数,按从小到大的顺序存入数组。 【解题思路】 ①首先,本题要定义多个变量,包括两个循环变量循环i、j,一个用于数据交换的整型变量ab,以及分别用来存放四位数分解之后各位数的变量qw(千位)、bw(百位)、sw(十位)和gw(个位)。 ②通过for循环依次对数组中的每个四位数进行分解,每分解一个四位数,根据题目要求,判断其“千位<=百位<=十位<=个位”的条件是否满足,并通过a[i]%2==0表达式判断该四位数是否为偶数,各判断表达式之间用&&运算符进行连接,当满足条件时,则将a[i]的值赋给数组变量b[cnt],同时数组下标变量cnt的值加1。 循环结束后,所有满足条件的四位数都将保存到数组b[cnt]中。 ③将所有的四位数判断完毕后,最后通过两个for循环,对b[cnt]数组中的元素按从小到大的顺序排序。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000;//a[i]除以1 000得到a[i]的千位上的数值,并赋给变量qw gw=a[i]%10;//a[i]对10求余得到a[i]的个位上的数值,并赋给变量gw bw=(a[i]-qw*1000)/100;//a[i]与其千位数的差除以100,得到其百位上的数值 sw=(a[i]-qw*1000-bw*100)/10;//a[i]减去其千位数再减去其百位数值再除以10,得到其十位上的数值 if((qw<=bw&&bw<=sw&&sw<=gw)&&(a[i]%2==0))//如果a[i]千位数小于等于百位数,百位数小于等于十位数,十位数小于等于个位数,并且a[i]是偶数 b[cnt++]=a[i];//把a[i]赋给b[cnt],同时数组下标变量cnt加1 } for(i=0;i for(j=i+1;j if(b[i]>b[j])//如果数组元素b[i]大于b[j],则进行两者互换 { ab=b[j];//把b[j]的值赋给变量ab b[j]=b[i];//把b[i]的值赋给b[j] b[i]=ab;//把ab的值赋给b[i] } 10【审题关键句】四位数的千位>=百位>=十位>=个位,且四位数是奇数,统计出满足此条件的个数,按从小到大的顺序存入数组。 【解题思路】 本题类似第9套试题,通过审题可以发现主要有两个不同点: 一是要求统计的四位数的条件是“千位>=百位>=十位>=个位”,二是要求该四位数是奇数,这两个不同点都体现在参考答案的第8条语句中,对该语句进行修改即可,其中,可以判断奇数的表达式是“a[i]%2”。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000; gw=a[i]%10; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; if((qw>=bw&&bw>=sw&&sw>=gw)&&(a[i]%2))//如果a[i]千位数大于等于百位数,百位数大于等于十位数,十位数大于等于个位数,并且a[i]是奇数 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j]) { ab=b[j]; b[j]=b[i]; b[i]=ab; } 11【审题关键句】千位-百位-十位-个位,结果大于等于零且原四位数是奇数,统计出满足此条件的个数,并按从小到大的顺序存入数组。 【解题思路】 本题类似第9套试题,通过审题可以发现主要有两个不同点: 一是要求统计的四位数的条件是“千位-百位-十位-个位>=0”,二是要求该四位数是奇数,这两个不同点都体现在参考答案的第8条语句中,对该语句进行修改即可,其中,可以判断奇数的表达式是“a[i]%2”。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000; gw=a[i]%10; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; if((qw-gw-bw-sw>=0)&&(a[i]%2))//如果a[i]千位数减去个位数再减去百位数再减去十位数大于等于零且a[i]是奇数 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j])//如果b[i]大于b[j],则两者进行互换,对数组b进行升序排序 { ab=b[j]; b[j]=b[i]; b[i]=ab; } 12【审题关键句】个位-千位-百位-十位,结果大于等于零且原四位数是偶数,统计出满足此条件的个数,并按从小到大的顺序存入数组。 【解题思路】 本题类似第9套试题,通过审题可以发现仅有一个不同点,即要求统计的四位数的条件是“个位-千位-百位-十位>=0”,参考答案的第8条语句,修改if条件语句的判断条件即可。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000; gw=a[i]%10; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; if((gw-qw-bw-sw>=0)&&(a[i]%2==0))//如果a[i]个位数减去千位上的数减百位上的数减去十位上的数大于等于零并且a[i]是偶数 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j])//如果数组元素b[i]大于b[j],则两者进行互换 { ab=b[j]; b[j]=b[i]; b[i]=ab; } 13【审题关键句】千位+个位等于百位+十位,且原四位数是奇数,统计出满足此条件的个数,并按从小到大的顺序存入数组。 【解题思路】 本题类似第9套试题,通过审题可以发现主要有两个不同点: 一是要求统计的四位数的条件是“千位+个位=百位+十位”,二是要求该四位数是奇数,这两个不同点都体现在参考答案的第8条语句中,对该语句进行修改即可,其中,可以判断奇数的表达式是“a[i]%2”。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000; gw=a[i]%10; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; if((qw+gw-bw-sw==0)&&(a[i]%2))//如果a[i]千位上的数字加上其个位上的数字减去其百位上的数字减去其十位上的数字等于零并且a[i]是奇数 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j]) { ab=b[j]; b[j]=b[i]; b[i]=ab; } 第14套上机考试试题参考答案及解析 【审题关键句】千位+十位等于百位+个位,且四位数是偶数,统计出满足此条件的个数,并把这些四位数按从小到大的顺序存入数组。 【解题思路】 本题类似第9套试题,通过审题可以发现仅有一个不同点,即要求统计的四位数的条件是“千位+十位=百位+个位”,参考答案的第8条语句,修改if条件语句的判断条件即可。 【参考答案】 intqw,bw,sw,gw,i,j,ab; for(i=0;i { qw=a[i]/1000; gw=a[i]%10; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; if((qw+sw-bw-gw==0)&&(a[i]%2)==0)//如果a[i]千位上的数字加上十位上的数字减去百位上的数字减去个位上的数字等于零并且a[i]是偶数 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j]) { ab=b[j]; b[j]=b[i]; b[i]=ab; } 15【审题关键句】千数-百位-十位-个位数大于零的个数,把所有满足此条件的数依次存入数组,按从小到大的顺序排序。 【解题思路】 本题类似第9套试题,通过审题可以发现仅有一个不同点,即要求统计的四位数的条件是“千数-百位-十位-个位数大于零”,参考答案的第8条语句修改if语句的判断条件。 另外,对于数据交换的整型变量tmp可以自定义其变量名。 【参考答案】 inti,j,qw,bw,sw,gw,tmp; for(i=0;i<300;i++) { qw=a[i]/1000; bw=(a[i]-qw*1000)/100; sw=(a[i]-qw*1000-bw*100)/10; gw=a[i]%10; if(qw-bw-sw-gw>0)//如果a[i]千位上的数减百位上的数减十位上的数减个位数大于零 b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机等级考试 三级 语言 上机 试题