级考试机试样题10套.ppt

上传人:max****ui 文档编号:14567233 上传时间:2020-07-24 格式:PPT 页数:31 大小:441.81KB
返回 下载 相关 举报
级考试机试样题10套.ppt_第1页
第1页 / 共31页
级考试机试样题10套.ppt_第2页
第2页 / 共31页
级考试机试样题10套.ppt_第3页
第3页 / 共31页
点击查看更多>>
资源描述
机试模拟题 (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(格式控制符,输出表列)。其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如%ld表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。 【解题思路】 填空1:变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。 填空2:通过while循环将自然数n和m之间的数进行累加,结果存于sum中。 填空3:由于sum为长整型,所以标准输出函数printf( )中的格式控制符为%ld。 【解题宝典】 在求和运算时,一般要设定一个变量sum作为累加器,并赋初值为0,即sum=0;在求积运算时,一般要设定一个变量pro作为累乘器,另赋初值为1,即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; system(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的值逐步循环叠加后的结果,而不是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 *wf; 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,该函数的功能是:把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 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没有返回值,第一个参数是字符数组,第二个参数是整型变量。 填空2:变量j声明时,没有初始化,所以在使用j之前要将它初始化为0。 填空3:当把所有ASCII码为偶数的字符都存入字符串s中后,要在最后加上0,表示字符串的结束。 【解题宝典】 在给字符串赋值时,一定要记得在最后加上0。,第二套 填空题,下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include long fun(long num) /*found*/ 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语言中的算术运算符: 加法运算符+:为双目运算符,即应有两个量参与加法运算。 减法运算符-:为双目运算符。但-也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。 乘法运算符*:双目运算符,具有左结合性。 除法运算符/:双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 求余运算符(模运算符)%:双目运算,具有左结合性。要求参与运算的量均为整型。 求余运算的结果等于两数相除后的余数。,第二套 改错题,请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define M 100 void 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; /*返回这些数的个数*/ 【考点分析】 本题考查:整除的判断方法,用%对除数求余,若余数为0,表示能被整除。if语句条件表达式,注意逻辑与和逻辑或的区别。for循环语句,注意循环变量的取值范围。一维数组的定义与引用。 【解题思路】 本题要找出能被7或11整除的所有整数,注意数学中的或和C语言中的或的区别,在此处,if条件语句中用|运算符,若要找能同时被7和11整除的所有整数,则在if( )中,应用 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是递归的终止条件,返回值为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语句,这类题目的一般解法是根据题意确定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语句的括号中是对条件进行判断,所以一定不会出现赋值语句,即不会出现=。,第三套 改错题,请编写函数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); /*/ 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的循环,每次循环都累加求和。该题需要注意之处是,log( )函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换,在返回的时候求出平方根。,第三套 编程题,请补充main函数,该函数的功能是:输出一个矩阵,要求非周边元素赋值0,周边元素赋值1。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define N 10 void main() int bbNN; int I,j,n; system(CLS); printf( nInput n:n); scanf(%d, ,【参考答案】 (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 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); 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+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 4 #define N 5 int 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); /*/ ,【参考答案】 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,则它一定是周边元素。 【解题宝典】 分析题干,二维数组周边元素求和,充分考查了二维数组元素下标相关知识。 需掌握如何表示二维数组周边元素,对于m*n二维数组,我们可以通过以下代码实现周边元素的表示: for(i=0;im;i+) for(j=0;jn;j+) if(i=0|i=m-1|j=0|j=n-1) 其中,i、j两个循环变量控制二维数组的下标变化。,第四套 编程题,函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并用外部(全局)变量c1、c2、c3返回主函数。 例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include int c1,c2,c3; void fun(long n) c1=c2=c3=0; while(n) switch(【1】) case 1: c1+;【2】; case 2: c2+;【3】; case 3: c3+; n/=10; main() long n=123114350L; fun(n); printf(nThe result: n); printf(n=%ld c1=%d c2=%d c3=%dn,n,c1,c2,c3); ,【参考答案】 (1) n%10 (2) break (3) break 【考点分析】 本题考查:switch语句,注意该语句的一般形式。如何提取数值n某一位上的数。break语句的使用。 【解题思路】 填空1:要统计长整数n的各位上出现数字1、2、3的次数,就需要判断各位上的数是多少。那么,通过n除以10求余,可得到个位上的数,所以填入n%10。 填空2和填空3:switch语句是多分支选择语句,在每个分支中要加入break,不然会依次执行后面的分支。continue是结束当前分支的运行,而break结束整个switch语句的运行。,第五套填空题,下列给定程序中函数fun的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如,当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include void fun (char *s, char *t ) int I,s1; s1=strlen(s); for (I=0;Is1;I+) /*found*/ tI=ss1-1; for (I=0;Is1;I+) ts1+I=sI; t2*s1=0; void main() char s100, t100; system(CLS); printf(nPlease enter string s: ); scanf(%s,s); fun(s,t); printf (The result is: %sn,t); ,【参考答案】 (1)错误:ti=ss1-1;正确:ti=ss1-1-i; 【考点分析】 本题考查:变量的赋值语句。 【解题思路】 该题也是几个循环语句的嵌套使用,难度并不大,重要的是要读懂程序,题目中赋值语句ti=ss1-1;并不能完成累计循环,所以正确的应该是ti=ss1-1-i;。,第五套 改错题,请编一个函数fun(char *s),该函数的功能是把字符串中的内容逆置。 例如,字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define N 81 void fun(char*s) main() char aN; FILE *out; printf(Enter a string:); gets(a); printf(The original string is:); puts(a); fun(a); printf(n); printf(The string after modified:); puts(a); strcpy(a,Hello World!); fun(a); /*/ out=fopen(out.dat,w); fprintf(out,%s,a); fclose(out); /*/ ,【参考答案】 void fun(char *s) char ch; int i,m,n; i=0; m=n=strlen(s)-1; while(i(n+1)/2) ch=si; si=sm; sm=ch; i+; m-; 【考点分析】 本题考查:变量交换,需借助第三方变量来完成。While循环语句,一般需根据题意确定循环条件。 【解题思路】 将字符串中的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。所以,长度为n的字符串需要交换的次数为n/2。 【解题宝典】 字符串逆置操作采用交换变量算法。 代码实现为: i=0; m=n=strlen(s)-1; while(i(n+1)/2) ch=si; si=sm; sm=ch; i+; m-; ,第五套 编程题,请补充函数fun,该函数的功能是:求一维数组xN的平均值,并对所得结果进行四舍五入(保留两位小数)。 例如,当x10=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0,结果为:avg=15.030000。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include double fun(double x10) int I; long t; double avg=0.0; double sum=0.0; for(I=0;I10;I+) 【1】; avg=sum/10; avg=【2】; t=【3】; avg=(double)t/100; return avg; void main() double avg,x10=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0; int i; system(CLS); printf(nThe original data is :n); for(i=0;i10;i+) printf(%6.1f,xi); printf(nn); avg=fun(x); printf(average=%fnn,avg); ,【参考答案】 (1) sum+=xi (2) avg*1000 (3) (avg+5)/10 【考点分析】 本题考查:如何计算平均值;四舍五入方法的实现。 【解题思路】 填空1:通过for循环,求出10个数的累加和,存于变量sum中。 填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。 填空3:将平均值加上5,再除以10,实现四舍五入的功能。,第六套填空题,下列给定程序中,函数fun的功能是:删除字符串s中所有空白字符(包括Tab符、回车符及换行符)。输入字符串时用#结束输入。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include fun(char *p) int i, t; char c80; for(i=0,t=0;pi;i+) if(!isspace(*(p+i) ct+=pi; /*found*/ ct=0; strcpy(p,c); void main() char c,s80; int i=0; printf(Input a string: ); c=getchar(); while(c!=#) si=c;i+;c=getchar(); si=0; fun(s); puts(s); ,【参考答案】 (1)错误:ct=0; 正确:ct=0; 【考点分析】 字符串结束标识0, 0属于一个字符,其ASCII码为0。 【解题思路】 该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否空格、跳格符(制表符)或换行符。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0(ASCII码为0),这是字符串结束的标志。,第六套 改错题,编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用*作为结束输入的标志)。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include char *fun(char (*a)81, int num, char *max) void main() FILE *wf; char ss1081,*ps=NULL; char s381=abcd,deg,diegns,*p=NULL; int i=0,n; system(CLS); printf(输入若干个字符串:); gets(ssi); puts(ssi); while(!strcmp(ssi, *)=0) /*用4个星号作为结束输入的标志*/ i+; gets(ssi); puts(ssi); n=i; ps=fun(ss,n,ps); printf(nmax=%sn,ps); /*/ wf=fopen(out.dat,w); p=fun(s,3,p); fprintf(wf,%s,p); fclose(wf); /*/ ,【参考答案】 char *fun(char (*a)81, int num, char *max) int i=0; max=a0; /*找出最长的一个字符串*/ for(i=0;inum;i+) if(strlen(max)strlen(ai) max=ai; return max; /*传回最长字符串的地址*/ 【考点分析】 本题考查:指针型变量,明确指向数组的指针变量和指向指针的指针变量;如果一个指针变量存放的是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。数组定义及引用。 【解题思路】 解答本题之前,我们应该先明白ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量,所以引用时要注意加上*。我们不可能只用max,因为ss0是一个数组地址而不是一个指针的地址。,第六套 编程题,请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include void main() long int n; system(CLS); printf(Enter the data:n); scanf(【1】); printf(* the absolute value *n); if(n0) 【2】 printf(nn); printf(【3】); ,【参考答案】 (1) %ld,其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址,地址是由地址运算符 /*found*/ for(I=0;ttI;I+) if(a=ttI)|(ttI= z) /*found*/ ttI+=32; return(tt); main() char tt81; system(CLS); printf(nPlease enter a string: ); gets(tt); printf(nThe result string is: n%s,fun(tt); ,【参考答案】 (1)错误:|正确:小写字母转大写字母的方法。 【解题思路】 (1)分析本题可知,这里需要进行连续的比较,所以用 r=(r*t+c)%m; return(double)r/m); void main() FILE *wf; int ageN, i,dM; int bN=32,45,15,12,86,49,97,3,44,52,17,95,63; for(i=0; iN; i+) agei=(int)(115*rnd(); /*产生一个随机的年龄数组*/ printf(The original data :n); for(i=0; iN; i+) printf(i+1)%10=0? %4dn:%4d,agei); /*每行输出10个数*/ printf(nn); fun(age,d); for(i=0; i10; i+) printf(%4d-%4d :%4dn, i*10, i*10+9,di); printf(Over 100 : %4dn,d10); /*/ wf=fopen(out.dat,w); fun(b,d); for(i=0; i10; i+) fprintf(wf,%4d-%4d :%4dn, i*10, i*10+9,di); fprintf(wf,Over 100 : %4d,d10); fclose(wf); /*/ ,【参考答案】 void fun(int *a, int *b) int i,j; for(j=0;j=100) b10+; /*如果年龄大于等于100,b10自增1*/ else bai/10+;/*如果年龄小于100,则将其分别统计到bai/10中*/ 【考点分析】 本题考查:数组元素赋初值;ifelse语句。 【解题思路】 本题是一个分段函数的问题,用两个循环来完成。 第1个循环的作用是使b中的所有元素值都为0,这个循环不能省略,因为若未对b中的元素赋初值,则它们的值是不可预测的。 第2个循环的作用是分别统计a中各年龄段的人数。当时,按题意要将其统计到b10中。else的作用是如果年龄小于100,则将其分别统计到bai/10中。由运算优先级可知,先进行ai/10的运算,所得结果作为b的下标。若ai为0至9时,ai/10的值为0,且0至9岁的人数正好要存入b0中。若ai为10至19岁时,ai/10的值为1,且10至19岁的人数正好要存入b1中,依此类推。,第七套 编程题,请补充main函数,该函数的功能是:从键盘输入两个字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符。注意:str2的长度不大于str1,否则需要重新输入。 例如,如果输入str1=abced,str2=fk,则输出fkced。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include void main() char str181,str281; char *p1=str1,*p2=str2; system(CLS); do printf( Input str1 n); gets(str1); printf( Input str2 n); gets(str2); while(【1】); while(【2】) *p1+=*p2+; printf( Display str1 n); puts(【3】); ,【参考答案】 (1) strlen(str1)strlen(str2) (2)*p2 (3) str1 【考点分析】 本题考查:dowhile以及while循环语句,strlen( )函数的使用,功能为求字符串长度; puts( )函数的使用,功能为输出一个字符串。 【解题思路】 填空1:如果字符串str2的长度大于字符串str1的长度,则要重新输入,即继续执行dowhile循环。 填空2:如果p2所指的字符不为0,即还没有执行到str2的最后一个字符,则将这个字符赋给字符串str1的对应字符。 填空3:函数puts( )的功能是将一个字符串输出到终端设备,由程序可知,此时应该输出字符串str1。,第八套填空题,下列给定程序中,函数fun的功能是:实现两个整数的交换。例如,给a和b分别输入60和65,输出为:a=65 b=60 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include /*found*/ void fun(int a,b) int t; /*found*/ t=b;b=a;a=t; void main() int a,b; system(CLS); printf(Enter a, b: ); scanf(%d%d, ,【参考答案】 (1)错误:void fun(int a,b) 正确:void fun(int *a,int *b) (2)错误:t=b;b=a;a=t; 正确:t=*b;*b=*a;*a=t; 【考点分析】 本题考查:函数定义,指针型变量做函数参数,对于形参列表,必须给出其类型说明;变量值交换算法。 【解题思路】 本题考查指针变量做函数参数。采用一般变量做参数,不能改变实参的值,采用指针变量作参数,则能够改变实参的值。主函数中fun( )的调用方式说明函数fun的参数应当为指针类型。另外,值得一提的是交换法则,这题的错误比较明显,如果程序段中有隐蔽的交换错误,一般不容易发现,希望学习者引起注意。,第八套 改错题,下列程序定义了的二维数组,并在主函数中自动赋值。请编写函数fun(int aN),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为: a=1 9 7 2 3 8 4 5 6 则返回主程序后a数组中的值应为: 0 9 7 0 0 8 0 0 0 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define N 5 void fun (int aN) void main() FILE *wf; int aNN,i,j; int bNN=1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4; system(CLS); printf(*The array*n); for(i=0;iN;i+) /*产生一个随机的5*5矩阵*/ for(j=0;jN;j+) aij=rand()%10; printf(%4d, aij); printf(n); fun(a); printf(THE RESULTn); for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,aij); printf(n); /*/ wf=fopen(out.dat,w); fun(b); for(i=0;iN;i+) for(j=0;jN;j+) fprintf(wf,%4d,bij); fprintf(wf,n); fclose(wf); /*/ ,【参考答案】 int fun (int aN) int i,j; for(i=0;iN;i+) for(j=0;j=i;j+) aij=0; /*将数组左下半三角元素中的值全部置成0*/ 【考点分析】 本题考查:for循环嵌套语句和二维数组元素的引用。 【解题思路】 本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。 【解题宝典】 对于n*n二维数组,如何表示其左下半三角元素,可以通过以下语句实现: for(i=0;in;i+) for(j=0;j=i;j+) ,第八套 编程题,给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度不小于2)。 例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include void fun(char *s) int I,n,k; char c; n=0; for(I=0;sI!=0;I+) n+; if(n%2=0) k=n-【1】; else k=n-2; c=【2】; for(I=k-2;I=1;I=I-2) sI+2=sI; sI=【3】; main() char s80=abcdefgh; printf(nThe original string is:%sn,s); fun(s); printf(nThe result is:%sn,s); ,【参考答案】 (1) 1 (2) sk或*(s+k) (3) c 【考点分析】 本题考查:指针型变量;ifelse语句;赋值语句。 【解题思路】 填空1:函数fun中n统计字符的长度,假如长度为偶数,则k=n-1;假如长度为基数,则k=n-2,使得下标为奇数的最后一个元素有效 (不是0)。 填空2:了解k的作用后,则将最右边的奇数位置的数赋值给c。 填空3:将最后一个下标为奇数的元素移到第一个奇数位置。,第九套填空题,下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include #define MAXLINE 20 /*found*/ fun(char *pstr6) int I, j; char *p; for(I=0;I0) p=*(pstr+I); /*found*/ *(pstr+I)=pstr+j; *(pstr+j)=p; void main() int i; char *pstr6,str6MAXLINE; system(CLS); for(i=0;i6;i+) pstri=stri; printf(nEnter 6 string(1 string at each line):n ); for(i=0;i6;i+) scanf(%s,pstri); fun(pstr); printf(The strings after sorting:n ); for(i=0;i6;i+) printf(%sn ,pstri); ,【参考答案】 (1)错误:fun(char *pstr6) 正确:void fun(char *pstr6) (2)错误:if(strcmp(*(pstr+i),pstr+j)0) 正确:if(strcmp(*(pstr+i),*(pstr+j)0) (3)错误:*(pstr+i)=pstr+j; 正确:*(pstr+i)= *(pstr+j); 【考点分析】 本题考查: 冒泡排序算法;函数定义;if语句。 【解题思路】 用冒泡法对字符串从小到大排序的方法是将相邻两个字符比较,将小的调到前面。令x等于字符串的第i位字符,若该字符的前一位字符大于x,则将该字符与x互换位置。从字符串中的第2位字符到字符串的最后一位字符重复以上过程,即可完成排序。该题可用循环语句实现。 【解题宝典】 冒泡法是最简单常用的排序方法,多数考生理解冒泡方法的思想,只是不能将其应用到程序中,这里我们以对m个数进行升序排列为例,请考生认真理解并牢记如下代码: for(j=1;jai+1)/*注意判断条件*/ t=ai;ai=ai+1;ai+1=t;,第九套 改错题,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include #define N 10 typedef struct ss /*定义结构体*/ char num10; int s; STU; fun(STU a, STU *s) void main() FILE *wf; STU aN= A01,81, A02,89, A03,66, A04,87, A05,77, A06,90, A07,79, A08,61, A09,80, A10,71,m; int i; system(CLS); printf(*The original data*); for(i=0;iN;i+) printf(No=%s Mark=%dn, ai.num,ai.s); fun(a, /*/ ,【参考答案】 fun(STU a, STU *s) int i; *s=a0; for(i=0;isss等价于(*s).s。,第九套 编程题,请补充main函数,该函数的功能是:把文本文件B中的内容追加到文本文件A的内容之后。 例如,文件B的内容为Im ten.,文件A的内容为Im a student!,追加之后文件A的内容为Im a student ! Im ten.。 注意:部分源程序给出如下。 试题程序: #include #include #include #define N 80 void main() FILE *fp,*fp1,*fp2; int i; char cN,ch; system(CLS); if(fp=fopen(A.dat,r)=NULL) printf(file A cannot be openedn); exit(0); printf(n A contents are : nn); for(i=
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!