《考试机试样题套.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,则它一定是周边元素。【解
26、题宝典】分析题干,二维数组周边元素求和,充分考查了二维数组元素下标相关知识。需掌握如何表示二维数组周边元素,对于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函数和其他函数中的任何内容,仅在
27、函数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语句,注意该语句的一般形
28、式。如何提取数值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中的字符串应为EDCBAAB
29、CDE。请改正程序中的错误,使它能得出正确的结果。注意:不要改动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);pri
30、ntf(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的花括号中填
31、入所编写的若干语句。试题程序:#include#include#include#define N 81void 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
32、(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)
33、-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
34、 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
35、=%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函数,不得增行或删行,也不得更改
36、程序的结构。试题程序:#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属于一个字符,其
37、ASCII码为0。【解题思路】该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否空格、跳格符(制表符)或换行符。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0(ASCII码为0),这是字符串结束的标志。,第六套改错题,编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用*作为结束输入的标志)。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include#include#includechar*fun(char
38、(*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);fp
39、rintf(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是一个指向一维数组的指针变量,
40、max是指向指针变量的指针变量,所以引用时要注意加上*。我们不可能只用max,因为ss0是一个数组地址而不是一个指针的地址。,第六套 编程题,请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#include#include void main()long int n;system(CLS);printf(Enter the data:n);
41、scanf(【1】);printf(*the absolute value*n);if(n0)【2】printf(nn);printf(【3】);,【参考答案】(1)%ld,其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址,地址是由地址运算符&后跟变量名组成的。【解题思路】填空1:本题考查对标准输入函数scanf()的调用格式,当输入为长整型数时,格式控制字符串为%ld,输入的长整数存于变量n中。填空2:当输入的数是负数时,则取它的相反数,即为它的绝对值。填空3:本题考查对标准输出函数printf()的调用格式,当输
42、出为长整型数时,格式控制字符串为%ld。,第七套填空题,下列给定程序中,函数fun的功能是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入Ab,cD,则输出AB,CD。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#include char*fun(char tt)int I;/*found*/for(I=0;ttI;I+)if(a=ttI)|(ttI=z)/*found*/ttI+=32;return(tt);main()char tt81;system(CLS)
43、;printf(nPlease enter a string:);gets(tt);printf(nThe result string is:n%s,fun(tt);,【参考答案】(1)错误:|正确:小写字母转大写字母的方法。【解题思路】(1)分析本题可知,这里需要进行连续的比较,所以用&。(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32即可。重复执行以上过程直至字符串尾。,第七套改错题,请编写函数fun,该函数
44、的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中。要求函数把0至9岁年龄段的人数在d0中,把10至19岁年龄段的人数放在d1中,把20至29岁年龄段的人数放在d2中,依次类推,把100岁(含100岁)以上年龄的人数都放在d10中。结果在主函数中输出。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#define N 50#define M 11void fun(int*a,int*b)double rnd()static t=29,c=217,m=1024,r=0
45、;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:%4
46、dn,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中*/【考点分析】
47、本题考查:数组元素赋初值;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中,依此类推。,第七套
48、编程题,请补充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 p
49、rintf(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的长度,则要重新输入,即继续执行do
50、while循环。填空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;/*f