c语言上机考试试题

上传人:微*** 文档编号:168530462 上传时间:2022-11-10 格式:DOCX 页数:89 大小:178.33KB
收藏 版权申诉 举报 下载
c语言上机考试试题_第1页
第1页 / 共89页
c语言上机考试试题_第2页
第2页 / 共89页
c语言上机考试试题_第3页
第3页 / 共89页
资源描述:

《c语言上机考试试题》由会员分享,可在线阅读,更多相关《c语言上机考试试题(89页珍藏版)》请在装配图网上搜索。

1、第1套上机考试试题1 .填空题L下列给定程序中,函数fun()的作用是:将字符串tt中的大写字母都改为对应的小写字母,其他字符不 变。例如,若输入“Ab, cD,则输出ab, cd”.2 .函数fun()的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母, 则不转换).例如,若输入abc4Efg,则应输出aBc4EFg。3 .改错题下列给定程序中,函数fun()的功能是逐个比较a, b两个字符串对应位置中的字符,把ASCII值小或相等 的字符依次存放到c数组中,形成一个新的字符串。例如:a中的字符串为fshADfg, b中的字符串为sdAEdi,则c中的字符串应

2、为fdAADf。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。4 .编程题请编写函数fun,其功能是将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a 数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=16, b=35t调用该函数后,c=5361注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。第1套上机考试试题1.填空题1 .【答案】(1) *(2) T(3) tt【解析】(1)由下面对retur

3、n语句可以看出,该函数的返回值类型是指向字符串的指针,所以应该使用符号“*”。(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCH码值大32,根据ASCII 码值判断该字母是不是大写字母,判断的标准是ASCH码值是否介于A和Z之间。(3)根据题目的意思这里应该调用函数ftin对字符串tt进行转换,所以应该使用tt作为函数的参数。2 .【答案】(1) ssi=ssi-32;(2) FILE(3);【解析】(1)从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成 小写字母。(2)根据下面对于wf的操作可以知道,wf是个文件型的指针

4、,所以应该使用关键字FILE对其进行 声明。(3)根据题目的意思这里应该是对指向字符串的指针变量进行初始化,所以应该使用作为语句 结束的标志,这是C语言的规定。2 .改错题(1)错误: if(*p=*q)(2)错误:k+正确:k+;【解析】错误1:依题意,把ASCII值小或相等的字符存放至c数组中,故if语句的关系运算符应为错误2: C语言规定,每个语句要用分号结束。3 .编程题void fun(int a ,int b,long *c) (*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;)【解析】语句*c=(b%10)*1000+(b/10)*100+(a%

5、10)*10+a/10;是将a数的十位和个位数依次放在c数个位和十 位上,b数的十位和个位数依次放在c数的百位和千位上注意“/”和“”的用法。第2套上机考试试题1.填空题1 .下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺 序对毎5个元素求个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的 倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元 素求平均值。2 .函数fun()的功能是:求出个2XM整型二维数组中最大元素的值,并将此值返回调用函数。3 .改错题下列给定程序中

6、,函数fun()的功能是根据整型形参m,计算如下公式的值。y=l-l/(2X 2)+l/(3X 3)-l/(4X4)+-+(-l),m+l,/(mX m)例如:m中的值为5,则应输出0.8386II。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。4 .编程题请编,个函数void fun(int ttMN, int ppN), tt指向个M行N列的二维数组,求出二维数组每 列中最大元素,并依次放入pp所指的维数组中。二维数组中的数己在主函数中给出。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fiin的

7、花括号中填入所编写的若干语句。第2套上机考试试题1.填空题1 .【答案】(1) %(2) return(3) bi【解析】(1)根据题目的意思,这里是执行按顺序对每5个元素求一个平均值的操作,所以应该使用取余符号 “”,如果是5的倍数,则该式子的值为零。(2)根据C语言的规定,除了使用关键字void的任何个子函数都应该有返回值,所以应该使用关键 字return把变量k的值返回主函数。(3)由题目的意思可知这里是把存在数组b中的内容依次循环输出,所以变量名应该使用bi.2 .【答案】(1) aM(2) a00(3) 【解析】(1)从C语言的学习中我们知道,多维数组作为参数传递的规则是,第一维空,

8、其余维写数字,这里 是考察对于这个规则的应用,至于参数名称可以在子函数中得到。(2)根据下面f的操作可以知道,这里是进行比较的开始,应使max存放数组中的第一个元素的值作为 默认的初始值。(3)根据题目的意思这里应该是对二维数组中的元素进行逐个比较,所以应该使用“,即只要现 在的max比该元素小,就把该元素最为最大值赋值给max。2.改错题(1)错误:intj=l;正确:doublej=1.0;(2)错误:y+=l/(i * i);正确:y+=j/(i * i);【解析】错误1:为了做除法运算,j要定义为实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运算,通过j来实现。void

9、fun(int ttM(N,int ppN) ( int i, j,max;for(j=0;jN;j+) (max=tt0 j;/*假设各列中的第一个元素最大/for(i=0;imax)/如果各列中的其他元素比最大值还大,则将这个更大的元素看做当前该列中最大的元素/ max=tti j;pp ( j =max;/将各列的最大值依次放入pp数组中/)【解析】本题中函数的功能是求出维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然 后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则 把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比

10、较.第3套上机考试试题1 .填空题L下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但端 化为A, z转化为a),其他字符不变。2 .函数fun()的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全 部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为ABCDEFG123456,其中字符A的ASCII码值为奇数,因此应当删除; 其中字符B的ASCH码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数, 所在数组中的下标也为偶数,因此不应当删除,其他依此类推

11、。最后t所指的数组中的内容应是246。3 .改错题下列给定程序中,函数fun的功能是按以下递归公式求函数值。Fun(n) 一(-Z例如;当给n输入5时,函数值为240;当给n输入3时,函数值为60。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。4 .编程题请编写函数fun(),对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII值码升序排列。 例如;原来的字符串为BdsihAd,则排序后输出为BAdhisd。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干

12、语句。第3套上机考试试题1 .【答案】(1) *s(2) 1(3) s+【解析】(1)从C语言的学习中我们知道,while语句的结束条件是括号中的式子结果为,而个字符串的结 尾标志为,:即满足循环的结束条件,所以一般情况下C语言中使用字符串的结尾作为结束循环的标志:s 为指向一个数组的指针,*s为取出s指向的内容。(2)根据题目的意思,若该字母不是或Z,则该字母的ASCH码值加1。(3)根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这过程应该使用循环,即每次 都对该指针进行加一操作。2 .【答案】(1)。(2) &(3) tO=0;【解析】(1)从C语言的学习中我们知道,for语句的

13、结束条件是括号中中间式子结果为0,而个字符串的结 尾标志为W,即满足循环的结束条件,所以一-般情况下C语言中使用字符串的结尾作为结束循环的标志, 即这个应该使用。(2)根据题目的意思,除了下标为偶数同时ASCII值也为偶数的字符之外,其他字符都删除,所以判 断的时候应该使用逻辑与运算符“&”。(3)由算法可以看出,这里应该是对字符串处理完毕,所以应该使用“。”作为字符串的结束标志, 这是C语言的规定。2 .改错题(1)错误:fun(int n);正确:fun(int n)(2)错误:if(n=l)正确:if(n=l)【解析】错误1:该行是函数的首部,不是一条语句,因此不能以分号结束。错误2:

14、if后面应该紧跟个条件判断表达式,若写成Mif(n=l)w 则说明该表达式的值永远为真,也 就是说这个条件永远成立,没有递归执行。3 .编程题int fun(char *s, int num)char t;int i, j;for (i=l; inum-2; i+)/*下标值从1开始,用循环依次取得字符串中的字符/for (j=i+l; js j )/*如果后面字符的ASCII码值小于该字符的ASC码值*/ t=si;/则交换这两个字符/si=sj;s(j=t;)【解析】本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始, 用循环变量i来依次取得数组中的元素,用数

15、组中的元素s口和sj进行比较,如果后个元素的ASCII码 值小于前个元素的ASCII码值,则交换这两个数组元素的值。第10套上机考试试题1.填空题1 .下列给定程序中,函数fun()的功能是:根据形参m的值(2WmW9),在m行m列的二维数组中存放如下 所示的数据,由main。函数输出。例如,若输入2,则输出I224输入4,则输出I2 3424 6836 91248 12162 .函数fun()的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后, 把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为ABCDEFGHIJK, m的值为3,移动后,字符串

16、中的内容应该是 DEFGHIJKABC,2 .改错题下列给定程序中,函数fun()的功能是:读入一个字符串(长度20),将该字符串中的所有字符按ASCII 码降序排序后输出。例如:输入dafhc,则应输出hfdca。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。3 .编程题请编写个函数voidfun(intm, int k, int xx),该函数的功能是将大于整数m且紧靠m的k个非素数 存入所指的数组中。例如,若输入15, 5,则应输出16, 18 , 20, 21, 22。注意:部分源程序给出如下。请勿改动主函数main和其他函数

17、中的任何内容,仅在函数ftin的花括号中填入所编写的若干语句。第10套上机考试试题1.填空题1 .【答案】(1) #define(2) (k+1)*U+1)(3) n【解析】(1)从C语言的学习中我们知道,这里应该是进行常量定义的,应该使用关键字“#define”修饰,注 意该语句的结尾不需要分号。(2)根据题目的意思,此处是对每个元素的赋值,很容易总结出(k+l)*(j+l)的规律,注意参数的传 递方式:对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际 是个维数组,只不过它的每个数组元素又都是个维数组。(3)由算法可以看出,这里应该是每行输出完毕之后,所以

18、应该换行,即输出特殊字符“n” 。2 .【答案】(1) wj(2) wg-1(3) FILE【解析】(D根据题目的意思,这里进行的是循环左移操作,即从第2个字符开始以后的每个字符都依次前移 个字符,而原来的第1个字符放在串中的最后一个字符,所以应该把后个字符赋值给前一个字符。(2)根据题目的意思,变量t的作用是暂时存储第一个元素,当一次循环左移完成之后,把这个暂存 的数据放到数组的最后,注意此时wj是字符串的结尾,最后一个元素的下标值是j-1。(3)根据题目的意思,这里应该是声名个新的文件类型的指针,应该使用关键字“FILE”,注意使 用大写。2 .改错题(1)错误:int fun(char

19、t)正确:void fun(char t)(2)错误:t(j=ti+;正确:【解析】错误1:该函数只是对个字符串中的元素进行比较大小的操作,并没有具体的返回值,因此, 函数的返回值类型应为void。错误2:本题的思路是利用选择法对数组元素进行比较。所谓选择法,是依次用当前取得的元素和它元 素进行比较,在第一个元素和它元素顺次比较时,可以借助中间变量来对两数进行交换,要保证这第一个 元素始终存放数组中的最大数,以后依次挑出次大数,这样最终的数组就是有序的。解答本题,只要理解 了选择法的思想,找到并改正错误就容易了。3 .编程题void fun (int m, int k, int xx)(int

20、 i, jr n;for (i=m+l, n=0; nk; i+)/找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/for(j=2; ji; j+)/判断个数是否为素数*/if (i%j=0)(xxn+=i; /*如果不是素数,放入数组xx中*/ break;/并跳出本层循环,判断下一个数/)【解析】本题只要掌握了判断非素数和素数的算法即不难完成了,其实程序缺少部分也正是这部分。第11套 上机考试试题1 .填空题1 .已知一个数列从0项开始的前3项:0, 0, 11以后的各项都是其相邻的前3项之和。下列给定的程序 中,函数fun()的功能是:计算并输出该数列前n项的平方根之和sum。n

21、的值通过形参传入。例如,当n=10 时,程序的输出结果应为23.197745。2 .函数fun()的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到个字符串中。 例如,若二维数组中的数据为:W WWWS S S SH H H H则字符串中的内容应是WSHWSHWSHWSH。3 .改错题在主函数中从键盘输入若干个数放入数组中,用结束输入并放在最后个元素中。下列给定程序中, 函数fun()的功能是计算数组元素中值为负数的平均值(不包括)。例如:数组中元素的值依次为43, -47, -21, 53, -8, 12, 0,则程序的运行结果为25.333333。请改正程序中的错误,使它能得到

22、正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。4 .编程题请编写个函数int fun (int*s, intt, int*k),用来求出数组的最小元素在数组中的下标并存放在k所 指的存储单元中。例如,输入如下整数:234 345 753 134 436 458 100 321 135 760则输出结果为6, 100。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。第1 1套上机考试试题1.填空题1 .【答案】(1) math.h(2) s2=s(3) sum【解析】(1)从C语言的学习中我们知道

23、,下面的运算使用了数学函数sqrt,所以在头文件中应该包含数学函 数头文件math.h。(2)根据题目的意思,此处是更新数列中将要进行计算的三项,其中前两项就是前一步计算中的后面 两项,第三项应该是刚计算产生的,即变量s。(3)由算法可以看出,这里应该是把子函数的计算结果返回给主函数,需要返回的就是每次进行累加 的变量sum。2 .【答案】(1) *b(2)s时(3) n【解析】(1)从C语言的学习中我们知道,这里应该是子函数的参数声明,由下面的使用方式可以看出来,这 个参数将会被数组使用,即把数组名作为数组的首地址传入,所以应该使用指针类型。(2)根据题冃的意思,此处是对每个元素的赋值,很容

24、易总结出sj国的规律,注意题目要求是按 列的顺序依次放到个字符串中,不要把i, j放反了。(3)由算法可以看出,这里应该是每行输出完毕之后,所以应该换行,即输出特殊字符“n” 2,改错题(1)错误:while(xi=O)正确:while(xi!=O)(2)错误:sum=sumc;正确:sum=sum/c;【解析】错误1:此处考査的是对循环条件的理解,当被判断的数组元素为时,说明这是数组的最后 个元素,此时要跳出循环。错误2: C语言中的除法运算符是“/”,而不是“.3.编程题int fun (int *s,int t,int *k)(int i;*k=O;/*k所指的数是数组的下标值/for

25、(i=0;isi)*k=i;/*找到数组的最小元素,把该元素的下标赋给k所指的数/return s *k;/*返回数组的最小元素/【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,开始应让k的值 为数组中的某下标值,即k=00第12套上机考试试题1.填空题1 .下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返 回。各字符串在主函数中输入,并放入个字符串数组中。2 .下列程序定义了NXN的二维数组,并在主函数中自动赋值。函数fun的功能是:使数字右上半三角元 素中的值乘以m。例如,若m的值为2, a数组中的值为a=l 92 7则

26、返回主程序后a数组的值应为2 182 .改错题下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字 符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得増行或删行,也不得更改程序的结构。3 .编程题下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun GntaSN),该函数的功 能是使数组右上半三角元素中的值全部置成。例如a数组中的值为a=4 5 61 7 93 2 6,则返回主程序后a数组中的值应为0 0 01 0 03 2 0注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数

27、fun的花括号中填入所编写的若干语句。第12套上机考试试题1.填空题1.【答案】(1) char *(2) sp=sqO(3) sqi【解析】(1)从C语言的学习中我们知道,这里应该是对子函数返回值类型的定义,由下面返回的指针型变量 sp可以知道,应该定义成char*,注意中间的空格。(2)根据题目的意思,此处应该是先假设指针数组的第1个元素所指的字符串最长,之后对字符串指 针数组进行遍历,即给sp赋初值。(3)由算法可以看出,这里应该是把二维数组的每一行作为个字符串的首地址进行长度比较,所以 若遇字符串长度大于待定最长字符串,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即 可得到

28、最长字符串的地址。2.【答案】(1) j=i(2) aij(3) do【解析】(1)根据题冃的意思,这里应该是循环右上半三角,其中行下标肯定是从0到N-1,而列下标要根据行 下标来定,当到第i行时列下标要从第i列开始,所以应该使列下标从i开始。(2)根据题目的意思,此处是使数字右上半三角元素中的值乘以m,可以使用符号“,也可以像 题口中那样用自身与m相乘之后再给自身赋值。(3)由算法可以看出,这里应该是产生一个小于3的随机数,根据while循环可以得出使用do正确的 结论。2 .改错题(1)错误:if(si= A&si= a&si= A&si= a&si= z)(2)错误:sj=O;正确:sj

29、=V);【解析】错误1:字母包括小写字母和大写字母,这里是“或”的关系,所以用“II”运算符。错误2:字符串的结束标志符为字符,而不是字符串。3 .编程题int fun (int aN)(int i,j;for(i=0;iN;i+)for(j=i;jN;j+)ai j=0;/将数组右上半三角元素中的值全部置成0/【解析】本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者 能够掌握消化。第13套上机考试试题4 .填空题1 .下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(mW 10) 名学生来,并将这些学生数据存放在个动态

30、分配的连续存储区中,此存储区的首地址作为函数值返回。2 .改错题下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。3 .编程题下列程序定义了NXN的二维数组,并在主函数中赋值。请编写函数函数的功能是求出数组周边 元素的平方和并作为函数值返回给主函数中的s。例如:若a数组中的值为a=O1279111215522161119791025 4141则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅

31、在函数fun的花括号中填入所编写的若干语句。第13套上机考试试题1.填空题1 .【答案】(1) STU(2) sizeof(STU)(3) j=i【解析】(1)根据题目的意思,这里应该是子函数的声明,很明显这里需要填写返回值类型,题目中已经给出 了是指针型的,根据后面返回的参数I可以判断这里应该是结构STU类型。(2)根据题目的意思,这里是动态申请空间,calloc是用于分配内存空间的函数,其调用形式为(类 型说明符)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域,函数的返回 值为该区域的首地址,(类型说明符)用于强制类型转换,calloc函数与

32、malloc函数的区别仅在于一次可以 分配n块区域。例如:ps=(struet stu*) calloc(2,sizeof (struct stu);其中的sizeof(struct stu)是求stu的结构长度。 因此该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。(3)由算法可以看出,这里应该是从大到小进行排序,所以一旦发现有比第j个元素还大的某个i,就 应该把i作为当前最大的元素,直到循环结束,这种算法考生应该掌握。2 .【答案】(1) *max(2) a0(3) !strcmp(ssi, 0000)【解析】(1)根据题目的意思,这里应

33、该是对于子函数的第三个参数的声明,由下面的使用情况可以看出这里 应该是参数max,再根据调用时参数ps为指针型变量,所以应该是*max,注意:max是指向指针变量的指针 变量,所以引用时要注意加上,我们不可能只用max,因为ss0是个数组地址而不是个指针的地址。(2)根据题目的意思,此处是给变量max赋初值,下面进行的是循环比较字符串的大小,所以应该把 第一个字符串先赋给max作为默认的最长的字符串,这是进行比较之前通常的做法。(3)由算法可以看出,这里应该是判断这个循环是否进行下去,即是否输入了字符串“0000”,注意 字符串函数strcmp的返回值,如果参数是相等的则返回值为0。2 .改错

34、题(1)错误:for(j=0:jn-l;j+);正确:for(j=0;jn-l;j+)(2)错误:ap=t;正确:aj=t;【解析】错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。错误2:将两数进行交换的常用语句,借助第三个变量。3 .编程题int fun (int wN)(int i,jrk=0;int s=0;for(i=0;iN;i+)for(j=0;js;while (h! =NULL)/通过循环找到最低分数/if(minh-s)min=h-s;h=h-next;return min; 【解析】在本题中,h为个指向结构体的指针变量,若要引用它所指向的结构体中的某一

35、成员时, 要用指向运算符“”。由于是链表,所以要使h逐一往后移动,使用的是h=h-next。第15套上机考试试题1.填空题1 .下列给定程序中,函数fun()的功能是:将m(lWm近10)个字符串连接起来,组成一个新串,放入pl所 指字符串中,例如:把3个串abc, CD, EF串联起来,结果是abcCDEF。2 .假定输入的字符串中只包含字母和号。函数fun()的功能是:只删除字符串前端和尾部的号,串中 字母之间的号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导号的个数,形参e给出了 字符串中最后号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为*

36、A*BC*DEF*G*,删除后,字符串中的内容则应当是 A*BC*DEF*G。3 .改错题下列给定程序中,函数ftmO的功能是:从n个学生的成绩中统计出髙于平均分的学生人数,人数由函数 值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:85 65.5 69 95.5 87 55 62.5 75则髙于平均分的学生人数为4 (平均分为74.312500)。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度 的函数),函数返回较

37、短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing nanchang (为回车键),函数将返回nanjing。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。第15套上机考试试题1.填空题1 .【答案】(1) strQ10(2) 0(3) j【解析】(1)根据题冃的意思,这里应该是对于函数参数的声明,根据主函数的调用可以看出,这个参数应该 是一个二维数组,在C语言中二维或多维数组作参数都是第一维空,其余照写,考生要牢记。(2)根据题目的意思,此处是每次连接一个新的字符串之后,加入一个串结束标志,由

38、上一步把pt指 针向后移动了字符串长度那么大就可以看出来,这个题较难,考生注重理解。(3)由算法可以看出,指向新的字符串的指针pt在函数的运行过程中被不断的后移,为了跳出函数之 后pt仍然指向新的字符串,必须把它启动到字符串开头,由前面变量j的使用可以知道,j存储着整个字符串 长度。2 .【答案】(1) n-e(2) 0(3) t-【解析】(1)根据题目的意思,这里应该是删除开始和结束的字符串中的“*”,由于h和e分别是a中的前端* 和尾部的个数,n是字符串的长度,所以把ah到anel之间的所有字符都留下,而其他字符均删除就可 以达到目的。(2)根据题目的意思,此处是整个删除过程已经完成,只需

39、要在结尾处加入一个串结束标志,考生要 牢记任何数组都需要结束标志。(3)由算法可以看出,此时指针t已经指到了字符串的结尾处,而算法是在把t向前移动到不是字符“*” 的位置,否则下面的while循环永远不会被执行,所以很明显这里应该把t先前移个字符。2.改错题(1)错误:intave,t=O;正确:float ave ,t=0.0;(2)错误:if(siave)(3)错误:aver=ave;正确:*aver=ave;【解析】错误1: ave和t分别用来存放成绩的平均值和总分,应为实型数。错误2:根据题意,找出髙于平均分的数,所以此处的关系运算符应为错误3: aver是指针,而ave是个数,不能将

40、一个数赋值给个指针,而要用符号”。3 .编程题char * fun(char *s, char *t) (int i,j;for (i=0; s i ! = 1 0 1; i+) ;/*求字符串的长度/for(j-0;tj!- ,XO1;j+);if (i=j)/比较两个字符串的长度/return s;/函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/else return t;)【解析】本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j, 因为任何循环都要控制一条语句,所以在每个for循环条件后面必须要有个分号。本题也可用如下技巧

41、:#include/ 一定要注意在最前面力口# include*/char * fun(char *s,char *t) if(strlen(s)=strlen (t)return s;else return t;第16套上机考试试题1.填空题1 .下列给定程序中,函数fun()的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起, 斐波拉契级数序列为1, 1, 2, 3, 5, 8, 13, 21,例如,若给n输入7,该项的斐波拉契级数值为13。2 .学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fiin(), 它的功能是:按分数的髙低排列学生

42、的记录,髙分在前。3 .改错题下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=l-l/2+l/3-l/4HF (-1)吟/m例如,若输入5,则应输出0.783333。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。4 .编程题请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数 并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fiin的花括号中填入所编写的若干语句。第16套上

43、机考试试题1.填空题1 .【答案】(1) case 2(2) fun(g-1)+fun(g-2)(3) &n【解析】(1)根据题目的意思,这里应该是对于值为1和2的时候的处理,注意Case语句常量后应用的是冒号, 而且不同的Case对应同一个值可以连续写(像题目中那样)。(2)根据题目的意思,此处是求值的递归部分,由递推公式可以很容易的得到答案的形式,对于这种 简单的递归考生一定要掌握。(3)由算法可以看出,此处是输入数列的项数n,使用了scanf函数,其参数应该是变量的地址,即使 用符号“&” .2 .【答案】(1) i=1(2) N-1(3) 【解析】(1)根据题目的意思.,这里应该是冒泡

44、排序的第一层循环,冒泡法算法思路:如果有N个数,则要进 行N-1次比较,在每一次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的),所谓两两比较就 是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放 在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序,由于总是从头到尾进行比较,所以 第1次比较结束后,最大(或最小)数肯定在最后,第2次比较结束后,次最大(或次最小)数肯定在倒数的第2 个数,依次类推,所以进行第一次比较时必须比较到最后个数,而进行第2次比较时只要比较到倒数的第 2个数即可,所以进行第i次比较时只需比较N-i次即可(

45、这种算法较难理解,但它是最好的)。(2)根据题目的意思.,此处是冒泡排序的第二层循环,原理同上,即在每一次比较中要进行N-1次两 两比较。(3)由算法可以看出,此处是按分数的高低排列学生的记录,高分在前,所以很明显只有较大时应 进行交换。2 .改错题(1)错误:inlfun(intm)正确:double fiin(int m)(2)错误:for(i=l;im;i+)正确:for(i=2;i=m;i+)【解析】错误I:函数的返回值为实型数,所以应定义为double类型。错误2:根据题的公式,参加运算的数应从2到m,包括m。3 .编程题void fun (int *a,int *n) int i,

46、j=0;for (i=l;i=2)&(mc=2)&(mc=,A,&ssi【解析】(1)根据题目的意思,这里应该是使用冒泡排序法的第一层循环,由于只有6个元素,所以只需要比 较5次。(2)根据题冃的意思,此处是使用冒泡排序法的第二层循环,根据冒泡排序的思想,只需要比较还没 有进行冒泡的元素。(3)由算法可以看出,此处是进行比较,字符串函数strcmp在参数大于参数时,返回值为正。2 .【答案】(1) *s(2) a0(3) s-s【解析】(I)根据题的意思,这里应该是对于值为1和2的时候的处理,注意Case语句常量后应用的是冒号, 而且不同的Case对应同一个值可以连续写(像题目中那样)。(2)

47、根据题目的意思,此处是给形参s赋初值,本题的流程是这样的,先使s指向第1个学生,我们的 题干目的是找出分数最髙的学生,所以先把第一个元素设成默认的最大值,这是编成中常用的方法。(3)由算法可以看出,此处是使用结构指针访问数据成员,题中也可换成(*s).s”,这种方 法我们应该熟练掌握。2 .改错题(1)错误:int fun(long sjong *t)正确:void fun(long s,long *t)(2)错误:s=s%100;正确:s=s/IOO;【解析】错误1:函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为void。错误2:此处要注意特殊运算符号“” 取余和一整除的区别。将一个数整除100则可得到 由其百位数以上的数组成的新数字,将一个数整除100取余则可得到由十位数和个位数组成的新数。3 .编程题fun (int a M)(int i,jrmin=a0 0;for(

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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