考试机试样题套.ppt
《考试机试样题套.ppt》由会员分享,可在线阅读,更多相关《考试机试样题套.ppt(31页珍藏版)》请在三一办公上搜索。
1、机试模拟题(10套),看不清楚的,自己调整字体大小,请补充main函数,该函数的功能是:计算两个自然数n和m(m#include#include void main()int n,m;long sum;【1】;system(CLS);printf(nInput n,mn);scanf(%d,%d,【参考答案】(1)sum=0(2)sum+=n(3)ld【考点分析】本题考查:变量初始化,需要注意该变量是累加器还是累乘器:printf()函数,其一般形式为printf(格式控制符,输出表列)。其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,在%
2、后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如%ld表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。【解题思路】填空1:变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。填空2:通过while循环将自然数n和m之间的数进行累加,结果存于sum中。填空3:由于sum为长整型,所以标准输出函数printf()中的格式控制符为%ld。【解题宝典】在求和运算时,一般要设定一个变量sum作为累加器,并赋初值为0,即sum=0;在求积运算时,一般要设定一个变量pro作为累乘器,另赋初值为1,
3、即pro=1,然后通过循环语句和表达式通项来实现。,第一套 填空题,下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值:t=1+1/2+1/3+1/4+1/m 例如,若输入5,则应输出2.283333。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#include double fun(int m)double t=1.0;int I;for(I=2;I=m;I+)/*found*/t+=1.0/k;/*found*/return I;void main()int m;sys
4、tem(CLS);printf(nPlease enter 1integer number:);scanf(%d,【参考答案】(1)错误:t+=1.0/k;正确:t+=1.0/I;(2)错误:return I;正确:return t;【考点分析】本题考查:for循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为return 表达式;,该语句的功能是计算表达式的值,并返回给主调函数。【解题思路】(1)该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件for(I=2;I=m;I+),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环
5、叠加后的结果,而不是t+=1.0/k;。(2)return I;考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。,第一套 改错题,例如,当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include#include void fun(char*tt,int pp)void main()FILE*w
6、f;char aa1000;int bb26,k;system(CLS);printf(nPlease enter a char string:);scanf(%s,aa);fun(aa,bb);for(k=0;k26;k+)printf(%d,bbk);printf(n);/*/wf=fopen(out.dat,w);fun(abcdefgabcdeabc,bb);for(k=0;k26;k+)fprintf(wf,%d,bbk);fclose(wf);/*/,【参考答案】void fun(char*tt,int pp)int i;for(i=0;i=a,第一套 编程题,请补充函数fun,该
7、函数的功能是:把ASCII码为偶数的字符从字符串str中删除,结果仍然保存在字符串str中,字符串str从键盘输入,其长度作为参数传入函数fun。例如,输入abcdef,输出ace。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#include#define N 80【1】int i,j;【2】;for(i=0;in;i+)if(si%2!=0)sj+=si;【3】;void main()int i=0,strlen=0;char strN;system(CLS);printf(nInput
8、a string:n);gets(str);while(stri!=0)strlen+;i+;fun(str,strlen);printf(n*display string*n);puts(str);,【参考答案】(1)void fun(char s,int n)(2)j=0(3)sj=0【考点分析】本题考查:函数定义,需要确定类型标识符、函数名和形式参数。变量初始化,变量声明后,要进行初始化赋值,我们对变量进行初始化时,必须确定好变量的作用。字符串结束标识0,用来结束字符串,是经常考查的知识点。【解题思路】填空1:由main函数调用函数fun的格式可以知道,函数fun没有返回值,第一个参数是
9、字符数组,第二个参数是整型变量。填空2:变量j声明时,没有初始化,所以在使用j之前要将它初始化为0。填空3:当把所有ASCII码为偶数的字符都存入字符串s中后,要在最后加上0,表示字符串的结束。【解题宝典】在给字符串赋值时,一定要记得在最后加上0。,第二套填空题,下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include long fun(long num)/*foun
10、d*/long k;do k*=num%10;/*found*/num=10;while(num);return(k);main()int n;printf(Please enter a number:);scanf(%ld,【参考答案】(1)错误:long k;正确:long k=1;(2)错误:num=10;正确:num/=10;【考点分析】变量初始化,保存乘积的变量初始化为1。【解题思路】(1)k用来存放各位数字的积,初值应为1。(2)这里是一个符号错误,除号使用/来表示的。【解题宝典】明确C语言中的算术运算符:加法运算符+:为双目运算符,即应有两个量参与加法运算。减法运算符-:为双目运
11、算符。但-也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。乘法运算符*:双目运算符,具有左结合性。除法运算符/:双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。求余运算符(模运算符)%:双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。,第二套改错题,请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传给m的值为50,则程序输出:7 11 14 21 22 28 33 35 42 44 49 注意:
12、部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include#include#define M 100void fun(int m,int*a,int*n)void main()FILE*wf;int aaM,n,k;system(CLS);fun(50,aa,/*/,【参考答案】void fun(int m,int*a,int*n)int i,j=0;for(i=1;i=m;i+)if(i%7=0|i%11=0)/*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/aj+=i;*n=j;
13、/*返回这些数的个数*/【考点分析】本题考查:整除的判断方法,用%对除数求余,若余数为0,表示能被整除。if语句条件表达式,注意逻辑与和逻辑或的区别。for循环语句,注意循环变量的取值范围。一维数组的定义与引用。【解题思路】本题要找出能被7或11整除的所有整数,注意数学中的或和C语言中的或的区别,在此处,if条件语句中用|运算符,若要找能同时被7和11整除的所有整数,则在if()中,应用&运算符。【解题宝典】整除即用求余运算来完成:某数值n如能被数值m1或m2整除,则代码实现为:if(n%m1=0|n%m2=0)。某数值n如能被数值m1和m2整除,则代码实现为:if(n%m1=0&n%m2=0
14、)。,第二套 编程题,请补充函数fun,函数fun的功能是求n的阶乘。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include long fun(int n)if(【1】)return(n*fun(【2】);return【3】;void main()printf(10!=%ldn,fun(10);,【参考答案】(1)n1或11和n=1这两种情况的处理方法不同,需要分开考虑。填空2:阶乘的算法是,当n1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。填空3:n=1是递归的终止条件,返回值
15、为1。,第三套填空题,下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#include int fun(int k)int m=0,mc=0,j;while(k=2),【参考答案】(1)错误:if(k%13=0)|(k%17=0)正确:if(k%13=0)|(k%17=0)(2)错误:缺少大括号正确:加【考点分析】本题考查:if语句,这类
16、题目的一般解法是根据题意确定if语句的条件表达式,区别逻辑表达式和算术表达式。同时注意c语言书写程序应遵守的规则。【解题思路】(1)x能被y整除的表示方法是x%y=0,而并非像题目中所表示的x%y=0。所以,if(k%13=0)|(k%17=0)修改后的结果应该是答案所示信息。(2)缺少程序完整所需的,此类信息在做题时一定要注意,我们可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来,比如丢失的错误信息是Compound statement missing in function fun,并在当前错误处停止光标,我们只要按回车键进行编辑就可以了。【解题宝典】if语句的括号中是
17、对条件进行判断,所以一定不会出现赋值语句,即不会出现=。,第三套改错题,请编写函数fun,它的功能是计算:s=(ln(1)+ln(2)+ln(3)+ln(m)0.5 在C语言中可调用log(n)函数求ln(n)。例如,若m的值为20,则fun函数值为6.506583。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include#include#include double fun(int m)void main()FILE*wf;system(CLS);printf(%fn,fun(20);/*/
18、wf=fopen(out.dat,w);fprintf(wf,%f,fun(20);fclose(wf);/*/,【参考答案】double fun(int m)int i;double s=0.0;for(i=1;i=m;i+)s=s+log(i);return sqrt(s);/*计算s=ln(1)+ln(2)+ln(3)+ln(m)*/*对s求平方根并返回*/【考点分析】计算表达式的值,一般都要定义一个变量sum作为累加(乘器),加法运算时赋初值为0,乘法运算时,赋初值为1,然后利用循环语句,使sum进行累加或累乘。【解题思路】题目要求计算从1到m的对数的和,可用从1到m的循环,每次循环都
19、累加求和。该题需要注意之处是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换,在返回的时候求出平方根。,第三套 编程题,请补充main函数,该函数的功能是:输出一个矩阵,要求非周边元素赋值0,周边元素赋值1。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include#include#define N 10void main()int bbNN;int I,j,n;system(CLS);printf(nInput n:n);scanf(%d,【参考答案】(
20、1)i=0|i=n-1|j=0|j=n-1(2)bbij=0【考点分析】本题考查:if条件语句,一般需根据题意确定条件表达式。数组元素下标及其赋值语句,通过二维数组的下标如何表示其周边元素和非周边元素。【解题思路】填空1:用二维数组表示矩阵时,周边元素是行下标为0或n-1,列下标为0或n-1的元素,判断时四个条件中只要有一个条件满足,那么该元素就是周边元素,所以用|运算符。填空2:题目要求将非周边元素赋值为0,所以bij=0。【解题宝典】二维数组周边元素的表示方法,通过设定数组下标来完成,如何表示呢?我们举个简单的例子来看看,有二维数组a33,我们列出它的所有数组元素:a00,a01,a02
21、a10,a11,a12 a20,a21,a22 那么,周边元素有a00,a01,a02,a10,a12,a20,a21,a22。如果把a33改为aij,现在我们就不难表示出该数组的周边元素3。,第四套填空题,下列给定程序中,函数fun的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,例如,若给n输入7,该项的斐波拉契级数值为13。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include long fun(int g)/*found*/switch(g
22、);case 0:return 0;/*found*/case 1;case 2:return 1;return(fun(g-1)+fun(g-2);void main()long fib;int n;printf(Input n:);scanf(%d,【参考答案】(1)错误:switch(g);正确:去掉分号(2)错误:case 1;case 2:return 1;正确:case 1:case 2:return 1;【考点分析】switch语句,其一般形式为:switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n
23、+1;其中,switch(表达式)后不带有;,同时case语句常量后应该是:。【解题思路】C语言中,switch语句之后不能有分号,并且case语句常量后该用是冒号。,第四套改错题,请编写函数fun,函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include#include#define M
24、 4#define N 5int fun(int a MN)void main()FILE*wf;int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0;int i,j,y;system(CLS);printf(The original data is:n);for(i=0;iM;i+)for(j=0;jN;j+)printf(%6d,aaij);printf(n);y=fun(aa);printf(nThe sun:%dn,y);printf(n);/*/wf=fopen(out.dat,w);fprintf(wf,%d,y);fclose(wf);
25、/*/,【参考答案】int fun(int aMN)int i,j,sum=0;for(i=0;iM;i+)for(j=0;jN;j+)if(i=0|i=M-1|j=0|j=N-1)/*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/sum=sum+aij;/*将周边元素相加*/return sum;【考点分析】本题考查:二维数组,其元素也称为双下标变量;for循环语句根据数组元素的下标进行循环操作;if语句确定周边元素是否符合题目要求。【解题思路】本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1或N-1,且只要下标中有一个为0或M-1或N-1,则它一定是周边元素。【解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试机 试样
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6337792.html