当前位置:文档之家› 函数、指针与结构体练习题_参考答案

函数、指针与结构体练习题_参考答案

函数(一)选择题1.以下正确的说法是_________.建立函数的目的之一是a)提高程序的执行效率b)提高程序的可读性c)减少程序的篇幅d)减少程序文件所占存2.以下正确的函数原型声明形式是________.a)double fun(int x,int y)b)double fun(int x; int y)c)double fun(int x, int y);d)double fun(int x,y);3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______.A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______.a)floatb)intc)longd)double5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________.int a[3][4];f(a);a)f(int array[][6])b)f(int array[3][])c)f(int array[][4])d)f(int array[2][5])6.以下程序的正确运行结果是_________.#include <stdio.h>void num(){ extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf("%d,%d\n",x,y);}a)12,2 b)不确定c)5,25 d)1,127.以下正确的描述是____________.a)C语言的预处理功能是指完成宏替换和包含文件的调用b)预处理指令只能位于C源程序文件的首部c)凡是C源程序中行首以"#"标识的控制行都是预处理指令d)C语言的编译预处理就是对源程序进行初步的语法检查8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______.a)仅仅搜索当前目录b)仅仅搜索源程序所在目录c)直接按系统设定的标准方式搜索目录d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索9.当调用函数时,实参是一个数组名,则向函数传送的是_____.A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值10.函数的值通过return语句返回,下面关于return语句的形式描述错误的是_____.A.return 表达式;B.return(表达式);C.一个return语句可以返回多个函数值D.一个return语句只能返回一个函数值11.设函数fun的定义形式为void fun(char ch,float x){…}则以下对函数fun的调用语句中,正确的是_____.A.fun("abc",3.0);B.t=fun('D',16.5);C.fun('65',2.8);D.fun(32,32);12.以下程序的输出结果是_____.void reverse(int a[],int n){ int i,t;for(i=0;i<n/2;i++){ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}}main( ){ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf(" %d\n ",s);}A.22B.10C.34D.3013.阅读下列程序,则运行结果为_____.fun( ){ static int x=5;x++;return x;}main( ){ int i,x;for(i=0;i<3;i++)x=fun( );printf("%d\n",x);}A.5B.6C.7D.814.若使用一维数组名作函数实参,则以下正确的说法是_____.A.必须在主调函数中说明此数组的大小B.实参数组类型与形参数组类型可以不匹配C.在被调用函数中,不需要考虑形参数组的大小D.实参数组名与形参数组名必须一致15.在C语言中,定义函数时函数的类型可以缺省,此时函数的隐含类型是_____.A.voidB.intC.floatD.double16.在C语言中,形参的缺省存储类别是( ).A.autoB.registerC.staticD.extern 17.以下关于字符串的叙述中正确的是_____.A.C语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行字符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小18.阅读程序,选择程序的运行结果。

#include <stdio.h>int Try(int n){if(n>0)return (n*Try(n-2));elsereturn 1;}void main(){int x;x=Try(5);printf(“%d\n”,x);}A.15B. 120C. 1D.前面三个答案都是错的(二)填空题1.以下程序的运行结果是#include<stdio.h>max(int x,int y){int z;z=(x>y)?x:y;return(z);}main(){int a=1,b=2,c;c=max(a,b);printf("max is %d\n",c);}2.函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。

请填空。

gongyu(int num1,int num2){int temp,a,b;if(num1(_____)num2){temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(____){temp=a%b;a=b;b=temp;}return(a);}3int a=5;int b=7;main(){ int a=4,b=5,c;c=plus(a,b);printf("A+B=%d\n",c);}plus(int x,int y){int z;z=x+y;return(z);}4.以下程序的运行结果是_______. main(){incx();incy();incx();incy();incx();incy();}incx(){int x=0;printf("x=%d\t",++x);}incy(){static int y=0;printf("\ny=%d\n",++y);}答案:x=1y=1x=1y=2x=1y=35.以下程序功能是求两个正整数的最大公约数。

#include<stdio.h>main(){int r,m,n,_____;scanf("%d%d",&m,&n);if(m<n)________________r=m%n;while(r){ m=n;n=r;r=____;}printf("%d\n",n);}指针(一)选择题1.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j3.若有以下定义,则p+5表示_______.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值4.下面程序段的运行结果是_________.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);6.以下正确的程序段是_________.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);7.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符8.下面程序的运行结果是_______.#include <stdio.h>#include <string.h>main(){char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值9.下面程序的运行结果是_______.#include <stdio.h>#include <string.h>fun(char *w,int n){char t,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char p[]="1234567"; //这里存在错误,通过字符指针无法改变字符串常量的值,因此改为数组fun(p,strlen(p));puts(p);}a)7654321 b)1714171 c)1711717 d)717717110.变量的指针,其含义是指该变量的_________.a)值b)地址c)名d)一个标志11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.a) a, point,*&a b)&*a, &a, *pointc)*&point,*point,&a d)&a,&*point ,point12.若有说明;int *p,m=5,n;以下正确的程序段的是________.a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n;*p=n; *p=m;13.若有以下定义,则对a数组元素的正确引用是_____.int a[5],*p=a;A.*&a[5]B.a+2C.*(p+2)D.*(a+5)14.下列程序执行后的输出结果是_____.main( ){ int a[3][3],*p,i;p=&a[0][0];for(i=1; i<9; i++) p[i]=i+1;printf("%d\n",a[1][2]);}A.3B.6C.9D.随机数15.下面程序段的运行结果是_____.(该题题目有错,而且考的容偏了,是一题面试题)char *p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD")));A.8B.12C.4D.7(二)填空题1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。

相关主题