函数、指针与结构体练习题-参考答案.doc
函数(一)选择题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); 3C语言规定,简单变量做实参时,它与对应形参之间得数据传递方式为_、 A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 4C语言允许函数值类型缺省定义,此时该函数值隐含得类型就是_、 a)float b)int c)long d)double 5已有以下数组定义与f函数调用语句,则在f函数得说明中,对形参数组array得错误定义方式为_、 int a34; f(a); a)f(int array6) b)f(int array3) c)f(int array4) d)f(int array25) 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,%dn",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=ai; ai=an-1-i;an-1-i=t;main( ) int b10=1,2,3,4,5,6,7,8,9,10; int i,s=0; reverse(b,8); for(i=6;i<10;i+)s+=bi; printf(" %dn ",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("%dn",x);A、5B、6C、7D、814若使用一维数组名作函数实参,则以下正确得说法就是_、A、必须在主调函数中说明此数组得大小B、实参数组类型与形参数组类型可以不匹配C、在被调用函数中,不需要考虑形参数组得大小D、实参数组名与形参数组名必须一致15在C语言中,定义函数时函数得类型可以缺省,此时函数得隐含类型就是_、A、voidB、intC、floatD、double16在C语言中,形参得缺省存储类别就是( )、A、autoB、registerC、staticD、extern17以下关于字符串得叙述中正确得就是_、A、C语言中有字符串类型得常量与变量B、两个字符串中得字符个数相同时才能进行字符串大小得比较C、可以用关系运算符对字符串得大小进行比较D、空串一定比空格打头得字符串小18阅读程序,选择程序得运行结果。 #include <stdio、h> int Try(int n) if(n>0) return (n*Try(n-2); else return 1;void main() int x; x=Try(5); printf(“%dn”,x); A、15B、 120C、 1D、前面三个答案都就是错得(二)填空题1以下程序得运行结果就是 max is 2、 #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 %dn",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); 3以下程序得运行结果就是 A+B=9、 int a=5;int b=7; main() int a=4,b=5,c; c=plus(a,b); printf("A+B=%dn",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=%dt",+x);incy() static int y=0; printf("ny=%dn",+y); 答案:x=1 y=1 x=1 y=2 x=1 y=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("%dn",n);指针(一)选择题1若有以下定义,则对a数组元素得正确引用就是_、 int a5,*p=a; a)*&a5 b)a+2 c)*(p+5) d)*(a+2) 2若有定义:int a23,则对a数组得第i行j列元素地址得正确引用为_、 a)*(ai+j) b)(a+i) c)*(a+j) d)ai+j 3若有以下定义,则p+5表示_、 int a10,*p=a; a)元素a5得地址 b)元素a5得值 c)元素a6得地址 d)元素a6得值 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 str20; b)char *p; scanf("%s",&str); scanf("%s",p); c)char str20; d)char str20,*p=str; scanf("%s",&str2); scanf("%s",p2); 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("%dn",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, *point c)*&point,*point,&a d)&a,&*point ,point 12若有说明;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 a5,*p=a;A、*&a5B、a+2C、*(p+2)D、*(a+5)14、下列程序执行后得输出结果就是_、main( ) int a33,*p,i; p=&a00; for(i=1; i<9; i+) pi=i+1; printf("%dn",a12);A、3B、6C、9D、随机数15、下面程序段得运行结果就是_、(该题题目有错,而且考得内容偏了,就是一题面试题)char *p="abcdefgh"p+=3;printf("%dn",strlen(strcpy(p,"ABCD");A、8B、12C、4D、7(二)填空题1以下程序得功能就是:通过指针操作,找出三个整数中得最小值并输出。请填空。 #include "stdlib、h" main() int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z; printf("输入3个整数:"); scanf("%d%d%d",a,b,c); printf("%d,%d,%dn",*a,*b,*c); num=*a; if(*a>*b) num=*b ; if(num>*c) num=*c ; printf("输出最小整数:%dn",num); 2下面程序段得运行结果就是 hELLO! 、 char s80,*sp="HELLO!" sp=strcpy(s,sp); s0='h' puts(sp); 3下面程序段得运行结果就是 ef 、 char str="abc0def0ghi",*p=str; printf("%s",p+5); 4下面程序得功能就是将两个字符串s1与s2连接起来。请填空。 #include<stdio、h> main() char s180,s280; gets(s1); gets(s2); conj(s1,s2); puts(s1); conj(char *p1,char *p2) char *p=p1; while(*p1) p1+ ; while(*p2)*p1= *p2 ;p1+;p2+; *p1='0' _return 0_;/可以省略不要 5若有定义:int a=2,4,6,8,10,12,*p=a;则*(p+1)得值就是_4_、 *(a+5)得值就是_12_、6若有以下定义:int a23=2,4,6,8,10,12;则a10得值就是_8_、 *(*(a+1)+0)得值就是_8_、7以下程序将数组a中得数据按逆序存放,请填空。 #define M 8 main() int aM,i,j,t; for(i=0;i<M;i+) scanf("%d",a+i); i=0;j=M-1; while(i<j) t=*(a+i); *(a+i)=*(a+j) ;*(a+j )=t; i+;j-; for(i=0;i<M;i+)printf("%3d",*(a+i); 8若有定义:int a35,i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用五种形式引用。它们就是: (1)aij (2)*(ai+j) (3)*(*(a+i)+j ); (4)(*(a+i)j (5)*( a +5*i+j) 9下面程序得运行结果就是_、 main() char *a="Pascal","C language","dBase","Coble" char (*p); int j; p=a+3; for(j=3;j>=0;j-)printf("%sn",*(p-);答案:CobledBaseC languagePascal 结构体(一)选择题1C语言结构体类型变量在程序执行期间_、 a)所有成员一直驻留在内存中 b)只有一个成员驻留在内存中 c)部分成员驻留在内存中 d)没有成员驻留在内存中2下面程序得运行结果就是_、 main() struct cmplxint x; int y; cnum2=1,3,2,7; printf("%dn",cnum0、y/cnum0、x*cnum1、x); a)0 b)1 c)3 d)63设有如下定义: struct sk int n; float x; data ,*p; 若要使p指向data中得n域,正确得赋值语句就是_、 a)p=&data、n; b)*p=data、n; c)p=(struct sk *)&data、n; d)p=(struct sk *)data、n;4以下对结构体变量stu1中成员age得非法引用就是_、struct student int age; int num; stu1,*p; p=&stu1; a)stu1、age b)student、age c)p->age d)(*p)、age5下面对typedef得叙述中不正确得就是_、 a)用typedef可以定义各种类型名,但不能用来定义变量 b)用typedef可以增加新类型 c)用typedef只就是将已存在得类型用一个新得标识符来代表 d)使用typedef有利于程序得通用与移植6以下scanf函数调用语句中对结构体变量成员得不正确引用就是_、 struct pupil char name20; int age; int sex; pup5,*p; p=pup; a)scanf("%s",pup0、name); b)scanf("%d",&pup0、age); c)scanf("%d",&(p->sex); d)scanf("%d",p->age);(二) 填空题1以下程序得运行结果就是_10,x_、 struct n int x; char c; ;main() struct n a=10,'x' func(a); printf("%d,%c",a、x,a、c); func(struct n b) b、x=20; b、c='y' 2若有定义: struct num int a; int b; float f; n=1,3,5、0; struct num *pn=&n; 则表达式pn->b/n、a*+pn->b得值就是_12_,表达式(*pn)、a+pn->f得值就是6、00000 3、 以下程序得运行结果就是 5,3 、struct ks int a; int *b; s4,*p; main() int n=1,i; printf("n"); for(i=0;i<4;i+) si、a=n; si、b=&si、a; n=n+2; p=&s0; p+; printf("%d,%dn",(+p)->a,(p+)->a); 4、结构数组中存有三人得姓名与年龄,以下程序输出三人中最年长者得姓名与年龄。请在_内填入正确内容。 stati struct man char name20; int age; person="li=ming",18, "wang-hua",19, "zhang-ping",20 ; main() struct man *p,*q; int old=0 p=person; for( ;p<person+3;p+) if(old<p->age) q=p; old=p->age ; printf("%s %d", q->name,q->age );