中国矿业大学C语言程序设计期末考试上机题库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、函数fun的功能是计算x^n。doublefun(doublex,intn){inti;doubley=1;for(i=1;i=n;i++)y=y*x;returny;}主函数中已经正确定义m、a、b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。实现这一计算的函数调用语句为______。答案:1:fun(a,4)+fun(b,4)-fun((a+b),3)评析:函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数458调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。知识点:知识点/函数/破函数的正确调用,嵌套调用,递归调用2、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指内存空间中,形成一个新字符串s。请填空。voidsstrcpy(char*s,char*t){while(*s++=______);}main(){charstr1[100],str2[]=abcdefgh;sstrcpy(str1,str2);printf(%s\n,str1);}答案:1:*t++评析:要使sstrcpy()函数实现字符串复制,必须将t字符串中的每个字符逐个拷到s字符串中,所以可以使用*s=*t;s++;t++。或者可以写成*s++=*t++,本题只有一个空,可以填入*t++。知识点:知识点/指针/用指针作函数参数3、以下程序给指针p分配三个double型动态内存单元,请填空。#includestdlib.hmain(){double*p;p=(double*)malloc(______);p[0]=1.5;p[1]=2.5;p[2]=3.5;printf(%f%f%f\n,p[0],p[1],p[2]);}答案:1:3*sizeof(double)评析:malloc(size)在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即返回值)是一个指针,它的值是该分配域的起始地址。如果此函数未能成功地执行,则返回值为0。本题中要求分配三个double型动态内存单元,所以size处应当为3*sizeof(double)。知识点:知识点/指针/各类型的指针及指针变量,通过指针引用各类型数据4、以下程序运行后的输出结果是______。main(){inta,b,c;a=25;b=025;c=0x25;printf(%d%d%d\n,a,b,c);}答案:252137评析:本题考查的是格式字符的输出。变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进制形式输出整数(正数不输出符号),所以本题a=25则输出值为25;b=025转换为10进制:b=2*8+5=16+5=21,则输出的值为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是空格,所以输出的几个数字之间也必须是空格。知识点:知识点/函数/变量的存储类别,变量的作用域和生存期5、以下程序运行后的输出结果是______。main(){chara[]=Language,b[]=Programe;char*p1,*p2;intk;p1=a;p2=b;for(k=0;k=7;k++)if(*(p1+k)==*(p2+k))printf(%c,*(p1+k));}答案:gae评析:本题考查的是字符指针变量与字符数组。解题过程:(1)当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出(2)当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出(3)当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出(4)当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g(5)当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出(6)当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a(7)当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出(8)当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e(9)当k=8时结束循环(10)输出结果为:gae。知识点:知识点/数组的定义和引用/字符串与字符数组6、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。main(){printf(Thesun=%d\n,SunFun(10));}SunFun(intn){intx,s=0;for(x=0;x=n;x++)s+F(______);returns;}F(intx){return(______);}答案:1:x2:x*x+1评析:本题考查的是函数的调用。解题过程:(1)f(x)的含义为x的平方加上1(2)所以F(intx)的返回值应该为x*x+1(3)SunFun(10)的作用是将0到10之间所有的整数相加求和(4)所以F()的形式参数为x。知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用7、以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。#defineM2#defineN4voidSumColumMin(inta[M][N],int*sum){inti,j,k,s=0;for(i=0;iN;i++){k=0;for(j=1;jM;j++)if(a[k][i]a[j][i])k=j;s+=______;}______=s;}main(){intx[M][N]={3,2,5,1,4,1,8,3},s;SumColumMin(______);printf(%d\n,s);}答案:1:a[k][i]2:*sum3:x,&s评析:本题考查的是函数参数的传送。解题过程:(1)执行以i为变量的for语句1)k=02)执行以j为变量的for语句①当j=1②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0③j=2所以结束循环3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写a[k][i],用变量s累加。(2)SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写*sum,用来将该指针变量指向s(3)当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的指针变量,所以第三个空应该为x,&s,分别代表已经被定义的数组x,和整型变量s的地址。知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用8、以下程序的输出结果是。main(){inta=0;a+=(a=8);printf(%d\n,a);}答案:16评析:本题的考查点是表达式。表达式a+=8相当于a=a+8,对表达式逐步求解过程如下:a+=(a+8)此时,a的值赋值为8,而不再是0;a+=8a=a+8a=16故本题答案为16。知识点:知识点/函数/形式参数与实在参数,参数值的传递9、以下程序的输出结果是______。#defineMAX(x,y)(x)(y)?(x):(y)main(){inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(%d\n,t);}答案:7评析:本题的考查点是宏定义。宏替换后,表达式t=MAX(a+b,c+d)*10即变为:t=(a+b)(c+d)?(a+b):(c+d)*10;由于(a+b)(c+d)为真,所以t=(a+b),即为7。故本题答案为:7。知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义10、函数mycmp(char*s,char*t)的功能是比较字符串s和t的大小,当s等于t时返回0,当st返回正值,当st时返回负值。请填空。mycmp(char*s,char*t){while(*s==*t){if(*s=='\0')return0;++s;++t;}return(______);}答案:*s-*t评析:本题的考查点是比较字符串的大小。函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的ASCII码的差值,必须使用*s-*t得出。故本题答案为:*s-*t。知识点:知识点/函数/库函数的正确调用11、若给fun函数的形参s传送字符串:6354abc,则函数的返回值是______。(字符串中包括空格)longfun(chars[]){longn;intsign;for(;isspace(*s);s++);sign=(*s=='-')?-1:1;if(*s=='+'||*s=='-')s++;for(n=0;isdigit(*s);s++)n=10*n+(*s-'0');returnsign*n;}答案:6354评析:本题的考查点是函数的返回值。这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是6354。故本题答案为:6354。知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用12、以下程序段的输出结果为______。char*p;inti,d;p=PDP1-0;for(i=0;i7;i++){d=isdigit(*(p+i));if(d!=0)printf(%c\n,*(p+i));}答案:1评析:本题的考查点是函数isdigit()。这段程序的目的是按从左至右的顺序从字符串p中找出阿拉伯数字字符,如果找到,将其打印出来。最后的输出应当是:10知识点:知识点/函数/库函数的正确调用13、下列程序中字符串中各单词之间有一个空格,则程序的输出结果是______。#includestring.hmain(){charstr1[]=Howdoyoudo,*p1=str1;strcpy(str1+strlen(str1)/2,esshe);printf(%s\n,p1);}答案:Howdoesshe评析:本题的考查点是字符串拷贝函数strcpy()。strlen(str1)是求str1字符串的长度,为13,然后,进行除2运算,结果为6。strcpy()函数是把字符串esshe拷贝到str1后的第6个字符后面,也就是说,拷贝后的结果是Howdoesshe。故本题答案为:Howdoesshe。知识点:知识点/函数/库函数的正确调用14、下面的函数strcat(str1,str2)实现将字符串str2拼接到字符串str1后面的功能。请填空使之完整。char*strcat(str1,str2)char*str1,*str2;{char*t=str1;while(______)str1++;while(______);return(t);}答案:1:*str1!='\0'2:*str1++=*str2++评析:本题的考查点是字符串连接函数strcat()。函数strcat(str1,str2)实现将字符串str2连接到字符串str1后面,所以首先要找到字符串str1的串尾,根据C语言的语法规定,一个串的串尾一定是一个隐含字符\0,而在程序中,对字符串中字符的访问是通过两个指针变量来完成的,因此要找到字符串str

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功