计算机二级c语言第八章 指针习题
c语言二级考试真题及答案 (8)

2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下考试365为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!考试365祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!考试365提示:每十道题的难度不同!继续上一篇...1.有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。
则不能把结点b连接到结点a之后的语句是()struct node{char data;struct noe*next;}a,b,*p= &a,*q=&b;A)a.next=q;B)p.next= &b;C)p- >next=&b;D)(*p).next=q;?2.若有如下定义:int(*p)(),*q();则下列说法正确的是()A)p是一个函数名,q是一个指针变量B)p是一个指向整型变量的指针变量,q是一个指向一维数组的指针变量C)p和q是等价的,都是指针变量D)p是指向函数的指针变量,函数的返回值是整型数据;q是带回指针值的函数3.有以下程序# includemain(){ float x,y;scanf( "%f",&x);if(x <0.0)y=0.0;else if((x <5.0)&&(x!=2.0))y=1.0/(x+2.0);else if(x <10.0)y=1.0/x;else y=10.0printf( "%f\n",y);}若运行时从键盘上输入2.0 (表示回车),则上面程序的输出结果是()A)0.000000B)0.250000C)0.500000D)1.0000004.以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是()A)main (){int*p;fun (p);…}intfun (int*p){ int s;p= &s;}B)main{int*p;fun ( &p);…}intfun (int**p){ints;*p= &s;}C)#includemain (){int*p;fun ( &p);…}intfun (int**p){*p=(int*)malloc (2); }D)#includemain (){ int*p;fun (p);…}int fun (int*p){p=(int*)malloc(sizeof (int)); }5.执行下列程序时输入:23 <空格>456<空格>789<回车>,输出结果是() main(){ char s[100]int c,i;scanf( "%c",&c);scanf( "%d",&i);scanf( "%s",s);printf( "%c,%d,%s\n",c,i,s);}A)1,456,789B)1,23,456C)1,23,456,789D)23,456,7896.有以下程序#include#includemain(){ char b1[8]= "abcdefg",b2[8],*pb=b1+3;while(--pb >b1)strcpy(b2,pb);printf( "%d\n",strlen(b2));}程序运行后的输出结果是()A)8B)3C)1D)67.设有如下定义和声明:structs{ inta;structs*next};structsx[4]={1, &x[1],3,&x[2],5,&x[3],7,’\0’},*t;t= &x[0];则下列表达式值为2的是()A)++t- >aB)(*t).a++C)t- >a++D)t++- >a8.若有如下程序:main(){int a=6; char ch=c;printf( "%d\n",(a&2)&&(ch<′m′));}则程序运行后的输出结果是()A)0B)1C)2D)39.下列说法不正确的是()A)下列结构体定义时,占据了5个字节的空间struct s {int num;int age;char sex;}B)结构体的成员名可以与程序中的变量名相同C)对结构体中的成员可以单独使用,它的作用相当于普通变量D)结构体的成员可以是一个结构体变量10.若要打开A盘中user子目录下名为aaa.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()A)fopen( "A:\user\aaa.txt","r")B)fopen( "A:\\user\\aaa.txt","r+")C)fopen( "A:\user\aaa.txt","rb")D)fopen( "A:\\user\\aaa.txt","w")答案:1.B 2.D 3.C 4.C 5.B 6.D 7.A 8.A 9.A 10.B2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下考试365为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!考试365祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!考试365提示:每十道题的难度不同!继续上一篇...1.分析以下程序,执行后的输出结果是()int f1(int x,int y){return x >y? x:y;}int f2(int x,int y){return x >y? y:x;}main(){int a=4,b=3,c=5,d,e,f;d=f1(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf( "%d,%d,%d",d,f,e);}A)3,4,5B)5,3,4C)5,4,3D)3,5,42.分析下面函数swap(int *p1,*p2){ int *p;*p=*p1;*p1=*p2;*p2=*p;}则该程序功能为()A)交换*p1和*p2的值B)正确,考试365提示:但无法改变*p1和*p2的值C)交换*p1和*p2的地址D)可能造成系统故障,因为使用了空指针3.有以下程序main(){int n[3],i,j;for(i=0;i <3;i++)n[i]=0;for(i=0;i <2;i++)for(j=0;j <2;j++)n[j]=n[i]+1;printf( "%d\n",n[1]);}程序运行后的输出结果是()A)2B)1D)34.有如下程序段:int a=14,b=15,x;char c=′A′;x=(a &&b)&&(c<′B′);执行该程序段后,x的值为()A)1B)0C)falseD)true5.有以下程序# includestruct NODE{int num;struct NODE*next;}main(){struct NODE*p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p- >num=10;q->num=20;r->num=30;p- >next=q;q->next=r;printf( "%d\n",p->num+q->next->num);}程序运行后的输出结果是()A)10B)20C)30D)406.设有如下定义:structsk{ inta;float b;} data;int *p;若要使p指向data中的a域,正确的赋值语句是()A)p= &a;B)p=data.a;C)p= &data.a;D)*p=data.a;7.若有如下说明:unions{char a[9];intb;float c;则下列叙述正确的是()A)共用体变量t不能作为函数的参数B)通过引用共用体变量名t可以得到成员的值C)共用体变量t的地址和它的各成员的地址不同D)共用体变量t所占的内存长度等于它的各成员所占的内存长度之和8.若定义了以下函数:void sub(......){......*t=(int*)malloc(10*sizeof(int));......}其中t是该函数的形参,要求通过t把动态分配存储单元的地址传回主调函数,则形参t的正确定义应该是()A)int *tB)int **tC)long **tD)long *t9.以下对枚举类型名的定义中正确的是()A)enum a={one,two,three};B)enum a {one=9,two=-1,three=200};C)enum a={ "one","two","four"};D)enum a { "nine","two","three"};10.C语言规定如果调用fputc函数输出成功,则返回值是()A)1B)输出的字符C)0D)true答案:1.C 2.D 3.D 4.A 5.D 6.C 7.A 8.B 9.B 10.B2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下考试365为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!考试365祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!考试365提示:每十道题的难度不同!继续上一篇...1.s1和s1已正确定义并分别指向两个字符串,若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是()A)if(s1>s2)S;B)if(strcmp(s1,s2))S;C)if(strcmp(s2,s1)>0)S;D)if(strcmp(s1,s2)>0)S;2.设有定义语句intx[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是()A)for(i=0;i<6;i++)printf("%2d",*(p++));B)for(i=0;i<6,i++)printf("%2d",*(p+i));C)for(i=0;i<6;i++)printf("%2d",*p++);D)for(i=0;i<6;i++)printf("%2d",(*p)++);3.以下程序的输出结果是()#includemain(){int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;*q=*(q+5);printf("%d%d\n",*p,*q);}A)运行后报错B)66C)611D)5104.设有以下定义和语句int a[3][2]={1,2,3,4,5,6},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是()A)a[0][1]B)a[1][0]C)a[1][1]D)a[1][2]5.以下程序的输出结果是()main(){char str[][10]={"china","Beijing"},*p=str;printf("%s\n",p+10);}A)ChinaB)BeijingC)ngD)ing6.Examda提示: 以下程序的输出结果是()main(){char s[]="ABCD",*p;for(p=s+1;p }A)ABCDBCDCDDB)ABCDC)BCDD)BCDCDD7.在函数调用过程中,如果函数funA调用了函数funB,函数funB Examda提示: 又调用了函数funA,则()A)称为函数的直接递归调用B)称为函数的间接递归调用C)称为函数的循环调用D)C语言中不允许这样的递归调用8.已有定义:int i,a[10],*p;,则合法的赋值语句是()A)p=10;B)p=a[5]C)p=a[2]+2;D)p=a+2;9.以下叙述中正确的是()A)局部变量说明为static的存储类,其生存期将得到延长B)全局变量说明为static存储类,其作用域将被扩大C)任何存储类的变量在未赋初值时,其值都是不确定的D)形参可以使用的存储类说明符与局部变量完全相同10.设有定义语句:char c1=2,c2=2;,则以下表达式中值为零的是()A)c1^c2B)c1&c2C)~c2D)c1|c2答案:1.D 2.D 3.A 4.C 5.B 6.D 7.B 8.D 9.A 10.A来2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下考试365为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!考试365祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!考试365提示:每十道题的难度不同!继续上一篇...1.有以下程序:main(){char a[]="abcdefg",b[10]="abcdefg";printf("%d %d\n",sizeof(a),sizeof(b));}执行后输出结果是()A)7 7B)8 8C)8 10D)10 102.有以下程序:void swapl(int c[]){int t;t=c[0];c[0]=c[1];c[1]=t;}void swap2(int c0,int c1){int t;t=c0;c0=c1;c1=t;}main(){int a[2]={3,5},b[2]={3,5};swap1(a);swap2(b[0],b[1]);printf("%d%d%d%d\n",a[0],a[1],b[0],b[1]);}其输出结果是()A)5 3 5 3B)5 3 3 5C)3 5 3 5D)3 5 5 33.有以下程序:void sum(int *a){a[0]=a[1];}main(){int aa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=2;i>=0;i--)sum(&aa[i]);printf("%d\n",aa[0]);}执行后的输出结果是()A)4B)3C)2D)14.有以下程序:int f(int b[][4]){int i,j,s=0;for(j=0;j<4;j++){i=j;if(i>2)i=3-j;s+=b[i][j];}return s;}main(){int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf("%d\n",f(a));}执行后的输出结果是()A)12B)11C)18D)165.有以下定义:#includechar a[10],*b=a;不能给a数组输入字符串的语句是()A)gets(a)B)gets(a[0]);C)gets(&a[0]);D)gets(b);6.有以下程序:main(){char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"}; printf("%d\n",strlen(p[4]));}执行后输出结果是()A)2B)3C)4D)57.有以下程序:int a=2;int f(int *a){return(*a)++;}main(){int s=0;{int a=5;s+=f(&a);}s+=f(&a);printf("%d\n",s);}执行后输出结果是()A)10B)9C)7D)88.有以下程序:#define f(x) x*xmain(){int i;i=f(4+4)/f(2+2);printf("%d\n",i);}执行后的输出结果是()A)28B)22C)16D)49.设有以下语句:typedef struct S{int g;char h;}T;则下面叙述中正确的是()A)可用S定义结构体变量B)可以用T定义结构体变量C)S是struct类型的变量D)T是struct S类型的变量10.有以下程序:struct STU{char name[10];int num;};void f1(struct STU c){struct STU b={"LiSiGuo",2042};c=b;}void f2(struct STU *c){sturct STU b={"SunDan",2044};*c=b;}main(){struct STU a={"YangSan",2041},b={"WangYin",2043};f1(a);f2(&b);printf("%d%d\n",a.num,b.num);}执行后的输出结果是()A)2041 2044B)2041 2043C)2042 2044D)2042 2043答案:1.C 2.B 3.A 4.D 5.B 6.A 7.C 8.A 9.D 10.A2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下考试365为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!考试365祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!考试365提示:每十道题的难度不同!继续上一篇...1.下面程序的输出结果是()func (int x){ static int a=2;return (a+=x); }main(){ int b=2, c=4, d;d=func (b);d=func (c);printf("%d\n",d); }A)4B)6C)8D)12?2.以下程序运行后的输出结果是()main(){ chars[]="1234",*ps;for(ps=s;ps printf("\n");}A)123B)112123C)1234D)乱码3.以下关于宏的叙述中正确的是()A)宏名必须用大写字母表示B)宏替换时要进行语法检查C)宏替换不占用运行时间D)宏定义中不允许引用已有的宏名4.如果文件1包含文件2,文件2中要用到文件3的内容,而文件3中要用到文件4的内容,则可在文件1中用三个#include命令分别包含文件2、文件3和文件4。
国家二级计算机考试c语言试题及答案

国家二级计算机考试c语言试题及答案一、选择题1. 下面哪个选项是C语言的数据类型?A. int、char、floatB. if、for、whileC. 指针、数组、结构体D. printf、scanf、main2. 在C语言中,以下哪个是用于定义常量的关键字?A. defineB. constC. constantD. var3. 下面哪个选项是C语言的逻辑运算符?A. +B. &&C. /D. !4. 在C语言中,下面哪个选项表示“相等”?A. ==B. =C. ++D. <=5. 下面哪个选项是C语言中的循环语句?A. breakB. continueC. switchD. if二、填空题1. C语言中的关键字有____个。
2. C语言中用于读取输入的函数是____。
3. C语言中的注释符号是____。
4. C语言中的结构体定义关键字是____。
三、编程题根据以下要求完成编程任务。
任务描述:编写一个程序,实现输入两个整数并输出它们的和。
输入:两个整数。
输出:两个整数的和。
示例:输入:2 3输出:5编程代码如下:```C#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("它们的和为:%d\n", sum);return 0;}```以上是一套关于国家二级计算机考试C语言试题及答案的简要介绍。
希望对您的学习有所帮助。
如有其他问题,请随时与我们联系。
感谢阅读!。
C语言计算机二级考试题目及答案

C语言计算机二级考试题目及答案一、单项选择题(每题2分,共20分)1. 在C语言中,以下哪个选项是正确的整型常量表示?A. 0x123B. 123.0C. '123'D. 123e2答案:A2. 下列哪个关键字用于定义C语言中的函数?A. structB. intC. voidD. return答案:B3. 在C语言中,以下哪个选项是合法的变量名?A. 2variableB. variable2C. _2variableD. int答案:B4. C语言中,以下哪个选项是正确的数组声明?A. int array[10];B. int array[];C. int array[10][];D. int array[3][5];答案:D5. 下列哪个选项是C语言中的逻辑运算符?A. &&B. ||C. =D. ==答案:A6. 在C语言中,以下哪个选项是正确的字符串声明?A. char str[] = "Hello";B. char str[] = 'Hello';C. char str = "Hello";D. char str[] = {"Hello"};答案:A7. C语言中,以下哪个选项是正确的函数定义?A. int function(int x, int y) { return x + y; }B. int function(int x, int y) = { return x + y; }C. int function(int x, int y) { return x + y; } intD. int function(int x, int y) { return x + y; }答案:A8. 在C语言中,以下哪个选项是正确的文件包含指令?A. #include <stdio.h>B. #include "stdio.h"C. #include <stdio.h>D. #include "stdio.h"答案:A9. 下列哪个选项是C语言中的正确注释?A. /* This is a comment */B. // This is a commentC. /* This is a comment */D. // This is a comment答案:A10. 在C语言中,以下哪个选项是正确的指针声明?A. int *ptr;B. int *ptr = 0;C. int ptr = 0;D. int *ptr = 0;答案:A二、填空题(每题2分,共20分)1. 在C语言中,用于定义一个结构体的关键字是______。
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)

D1
D 5,-2,-7
习题
a[0] 10 a[1] 20 a[2] 30 a[3] 40 a[4] 50 8.4 若有以下程序: C p #include <stdio.h> main() {int k=2,m=4,n=6,*pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf("%d\n",n); } 程序的输出结果是 A4 B6 C8 D 10 8.5 若指针p已正确定义并指向如图所示存储单元: B 则执行语句*p++; 后,*p的值是 A 20 B 30 C 21 D 31 8.6 若指针p已正确定义并指向如图所示存储单元,则*++p的值是 A 20 B 30 C 21 D 31 8.7 若指针p已正确定义并指向如图所示存储单元,则++*p的值是 A 20 B 30 C 21 D 31
j=*p+1;
p
*p+=1; 或 ++*p; 或 若有以下定义和语句: int **p,*s,k=20; p s=&k; p=&s;
s
k 20
8.4 对指针变量的操作
8.4.1 通过指针来引用一个存储单元
程序举例: 例8.1 用指针指向两个变量,通过指针运算选出值最小的那个数。 #include <stdio.h> main() scanf(“%d%d”,&a,&b {int a,b,min,*pa,*pb,*pmin; ); pa=&a;pb=&b;pmin=&min; scanf(“%d%d”,pa,pb); /*输入的值依次放入pa、pb所指存储单元中*/ printf(“a=%d b=%d\n”,a,b); *pmin=*pa; min=a; if(*pa>*pb) *pmin=*pb; printf(“min=%d\n”,min); } if(a>b) min=b; 比如输入: 41 32<CR> pa pb pmin a b min 32 41
计算机二级《C语言》测试题(附答案)

计算机二级《C语言》测试题(附答案)2016计算机二级《C语言》测试题(附答案)单项选择题1[单选题]以下叙述中错误的是A.可以通过typedef增加新的类型B.可以用typedef将已存在的类型用一个新的名字来代表C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A参考解析:关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A错误。
2[单选题]以下叙述中正确的是A.两个字符串可以用关系运算符进行大小比较B.函数调用strlen(s);会返回字符串S实际占用内存的大小(以字节为单位)C.C语言本身没有提供对字符串进行整体操作的运算符D.当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和参考答案:C参考解析:本题考查字符串处理函数strien、strcat、strcmp。
B 选项中strlen返回的是字符串s实际占用内存大小加上结尾符,A选项中不能用关系运算符进行大小比较,可以使用strcmp。
D选项当使用连接函数strcat时,内存空间会减少一个字符位置。
3[单选题]一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是()。
A.一对一B.一对多C.多对多D.多对一参考答案:C参考解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。
4[单选题]对于while(!E)s;,若要执行循环体s,则E的取值应为:A.E等于1B.E不等于0C.E不等于1D.E等于0参考答案:D参考解析:while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。
该题中如要执行语句s,则!E应为真,因此E应等于0,D选项正确。
计算机二级C语言章节练习题及答案

1.2算法1[填空题]一颗二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为【2】O参考解析:[2】DEBFCA【解析】根据二叉树的中序遍历原则可知D为二叉树的最左边的叶子结点,根据二叉树的前序遍历原则可知A是二叉树的根结点,就可以确定二叉树的结构,所以二叉树的后序遍历结果为:DEBFCA02[填空题]队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。
允许删除的一端称作。
参考解析:队头【解析】队列是只允许在一端删除,在另一端插入的顺序表,在队列中。
允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。
3[填空题]在最坏情况下,堆排序需要比较的次数为。
参考解析:0(nlog2n)【解析】在最坏情况下,冒泡排序所需要的比较次数为n(nr1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为0(nl.5);堆排序所需要的比较次数为0(nlog2n)。
4[单选题]算法的有穷性是指()。
Λ,算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用参考答案:A参考解析:算法具有5个特性:①有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义。
③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
,④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
⑤输出:一个算法有一个或多个输出。
5[单选题]下列叙述中正确的是()。
A.数据的逻辑结构与存储结构是一一对应的B.算法的时间复杂度与空间复杂度一定相关C.算法的效率只与问题的规模有关,而与数据的存储结构无关D.算法的时间复杂度是指执行算法所需要的计算工作量参考答案:D参考解析:根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。
计算机等级考试二级C语言之二维数组与指针--题+答案

D) 定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
(10) 有以下程序
main()
{ int a[3][3], *p, i;
p=&a [0][0] ;
for ( i=0 ; i<9 ; i++) p[i]=i+1;
(5) 若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是
A) p+1
B) *(p+3)
C) *(p+1)+3
D) *(p[0]+2))
(6) 有以下定义和语句
int a[3][2]={1,2,3,4,5,6,},*p[3];
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是
A) 7
B) 6
C) 8
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf(“%dn”,s);
}
(21) 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是
A) &t[3][2]
B) t[3]
全国计算机等级考试二级C语言指针测试题范文

全国计算机等级考试二级C语言指针测试题一、选择题(1)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是A)*p=*q;B)p=q;C)*p=&n1;D)p=*q;(2)若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是A)随机值B)0C)x的地址D)p的地址(3) 以下定义语句中正确的是A) char a='A'b='B'; B) float a=b=10.0;C) int a=10,*b=&a; D) float *a,b=&a;(4) 有以下程序main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是A) 8,7,8,7B) 7,8,7,8C) 8,7,7,8D) 7,8,8,7(5) 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是A) scanf(“%d”,p a) ;B) scanf(“%d”,a) ;C) scanf(“%d”,&pa) ;D) scanf(“%d”,*p a) ;(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是A) p=1;B) *q=2;C) q=p;D) *p=5;(7) 有以下程序以下是引用片段:void fun(char *a, char *b){ a=b; (*a)++; }main (){ char c1=’A’, c2=’a’, *p1, *p2;p1=&c1; p2=&c2; fun(p1,p2);printf(“%c%c\n”,c1,c2);}程序运行后的输出结果是A) AbB) aaC) AaD) Bb(8) 若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是A) int *i=NULL; B) float *f=NULL;scanf("&d",f); *f=10.5;C) char t="m", *c=&t; D) long *L;*c=&t; L=‘\0’;(9) 有以下程序以下是引用片段:#inc1udemain(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0B) 1C) -1D) NULL没定义,出错(10) 已定义以下函数int fun (int *p){ return *p: }该函数的返回值是A) 不确定的值B) 形参p中存放的值C) 形参p所指存储单元中的值D) 形参p的地址值(11) 下列函数定义中,会出现编译错误的是A) max(int x, int y,int *z) B) int max(int x,y){ *z=x>y ? x:y; } int z ;z=x>y ? x:y;return z ;}C) max (int x,int y) D) int max(int x,int y){ int z; { return(x>y?x:y) ; }z=x>y?x:y; return(z);}(12) 有以下程序段以下是引用片段:main(){ int a=5, *b, **c;c=&b; b=&a;……}程序在执行了c=&b:b=&a;语句后,表达式:**c的值是A) 变量a的地址B) 变量b中的值C) 变量a中的值D) 变量b的地址(13) 有以下程序以下是引用片段:main(){ char a,b,c,*d;a=’\’;b=‘\0xbc’;c=‘\xab’; d="\0127";printf("%c%c%c%c\n",a,b,c,*d);}编译时出现错误,以下叙述中正确的是A) 程序中只有a=’\’;语句不正确B) b=‘\0xbc’;语句不正确C) d="\0127";语句不正确D) a=’\’;和c=‘\0xab’;语句都不正确(14) 若有以下定义和语句以下是引用片段:#includeint a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是A) *q=0;B) w=p;C) *p=a;D) *p=*w;(15) 有以下程序以下是引用片段:int *f(int *x,int *y){ if(*x<*y)return x;elsereturn y;}main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf(“%d,%d,%d”,*p,*q,*r);}执行后输出结果是A) 7,8,8B) 7,8,7C) 8,7,7D) 8,7,8(16) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是A) p=q;B) *p=*q;C) n=*q;D) p=n;(17) 有以下程序以下是引用片段:void fun(char *c,int d){ *c=*c+1;d=d+1;printf(“%c,%c,”,*c,d);}main(){ char a=’A’,b=’a’;fun(&b,a); pri ntf(“%c,%c\n”,a,b);}程序运行后的输出结果是A)B,a,B,aB) a,B,a,BC) A,b,A,bD) b,B,A,b(18) 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是A) scanf("%d%d%d",&a,&b,d);B) scanf("%d%d%d",&a,&b,&d);C) scanf("%d%d%d",a,b,d);D) scanf("%d%d%d",a,b,*d);(19) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为A) 无确定值B) a的地址C) 512D) 511(20) 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是A) i=*p;B) p*=*&j;C) i=&j;D) i=**p;(21) 下列程序段的输出结果是A) 2 1 4 3B) 1 2 1 2C) 1 2 3 4D) 2 1 1 2以下是引用片段:void fun(int *x, int *y){ printf(“%d%d”, *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf(“%d%d”,x, y);}(22) 下列程序的运行结果是A) 6 3B) 3 6C) 编译出错D) 0 0以下是引用片段:void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(“%d%d”, a, b);}(23) 有如下程序段int *p,a=10,b=1p=&a; a=*p+b;执行该程序段后,a的值为A) 12B) 11C) 10D) 编译出错(24) 有以下函数char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值B) 一个临时存储单元的地址D) 形参p自身的地址值(25) 请选出正确的程序段A) int *p; B) int *s, k;scanf("%d",p); *s=100;……C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;*p='a'; s=p;…*s=1;…(26) 若有以下定义和语句:double r=99,*p=&r;*p=r;则以下正确的叙述是A) 以下两处的*p含义相同,都说明给指针变量p赋值B) 在"double r=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元C) 语句"*p=r;"把变量r的值赋给指针变量pD) 语句"*p=r;"取变量r的值放回r中(27) 以下程序运行后,a的值是A) 4 B) 1 C) 0 D) 运行时出错,a无定值以下是引用片段:main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}(28) 有以下程序以下是引用片段:int fun(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }main(){ int a, b, c, d;a=30; b=50;fun(a,b,&c,&d);printf("%d,%d\n", c, d);}输出结果是A) 50,30B) 30,J50C) 80,-20D) 80,20(29) 若有定义和语句:int **pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);则输出结果是:A)10,20B)10,10C)20,10D)20,20(30) 以下程序的输出结果是以下是引用片段:#includesubl(char a,char b) {char c; c=a;a=b;b=c;}sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;} { char a,b;a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);a='A';b='B';sub1(a,b);putchar(a);putchar(b);}A) BABBABB) ABBBBAC) BABABAD) BAABBA(31) 若有说明:int i,j=7,*p=&i;,则与i=j;等价的语句是A) I= *P;B) *P=*&J;C) i=&j;D) i=* *p;(32) 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章指针一、选择题1、设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;2、若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是A)随机值 B)0 C)x的地址 D)p的地址3、以下定义语句中正确的是A)char a='A'b='B'; B)float a=b=10.0;C)int a=10,*b=&a; D)float *a,b=&a;4、有以下程序main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是A)8,7,8,7 B)7,8,7,8 C)8,7,7,8 D)7,8,8,75、设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是A)scanf("%d",pa) ; B)scanf("%d",a) ;C)scanf("%d",&pa) ; D)scanf("%d",*pa) ;6、设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是A)p=1; B)*q=2; C)q=p; D)*p=5;7、有以下程序void fun(char *a,char *b){ a=b; (*a)++; }main (){ char c1='A', c2='a', *p1, *p2;p1=&c1; p2=&c2; fun(p1,p2);printf("%c%c\n",c1,c2);}程序运行后的输出结果是A)Ab B)aa C)Aa D)Bb8、有以下程序#includemain(){ printf("%d\n", NULL); }程序运行后的输出结果是A)0 B)1 C)-1 D)NULL没定义,出错9、已定义以下函数fun(int *p){ return *p; }该函数的返回值是A)不确定的值 B)形参p中存放的值C)形参p所指存储单元中的值 D)形参p的地址值10、有以下程序段main(){ int a=5, *b, **c;c=&b; b=&a;……}程序在执行了c=&b:b=&a;语句后,表达式:**c的值是A)变量a的地址 B)变量b中的值C)变量a中的值 D)变量b的地址11、有以下程序int *f(int *x,int *y){ if(*x<*y)return x;elsereturn y;}main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}执行后输出结果是A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,812、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是A)p=q; B)*p=*q; C)n=*q; D)p=n;13、有以下程序void fun(char *c,int d){ *c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){ char a=’A’,b=’a’;fun(&b,a); printf("%c,%c\n",a,b);}程序运行后的输出结果是A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b14、若有说明语句:int a,b,c,*d=&c;则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是A)scanf("%d%d%d",&a,&b,d); B)scanf("%d%d%d",&a,&b,&d);C)scanf("%d%d%d",a,b,d); D)scanf("%d%d%d",a,b,*d);15、若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为A)无确定值 B)a的地址 C)512 D)51116、若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是A)i=*p; B)*p=*&j; C)i=&j; D)i=**p;17、下列程序段的输出结果是void fun(int *x, int *y){ printf("%d %d", *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);}A)2 1 4 3 B)1 2 1 2 C)1 2 3 4 D)2 1 1 218、下列程序的运行结果是void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);}A)6 3 B)3 6 C)编译出错 D)0 019、有如下程序段int *p,a=10,b=1;p=&a; a=*p+b;执行该程序段后,a的值为A)12 B)11 C)10 D)编译出错20、有以下函数char fun(char *p){ return p; }该函数的返回值是A)无确切的值 B)形参p中存放的地址值C)一个临时存储单元的地址 D)形参p自身的地址值21、请选出正确的程序段A)int *p; B)int *s, k;scanf("%d",p); *s=100;……C)int *s, k; D)int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&e;*p='a'; s=p;… *s=1;…22、若有以下定义和语句:double r=99, *p=&r;*p=r;则以下正确的叙述是A)以下两处的*p含义相同,都说明给指针变量p赋值B)在"double r=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元C)语句"*p=r;"把变量r的值赋给指针变量pD)语句"*p=r;"取变量r的值放回r中23、以下程序运行后,a的值是main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}A)4 B)1 C)0 D)运行时出错,a无定值24、有以下程序int fun(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }main(){ int a, b, c, d;a=30; b=50;fun(a,b,&c,&d);printf("%d,%d\n", c, d);}输出结果是A)50,30 B)30,50 C)80,-20 D)80,2025、若有定义和语句:int **pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);则输出结果是:A)10,20 B)10,10 C)20,10 D)20,2026、以下程序的输出结果是sub1(char a,char b) {char c; c=a;a=b;b=c;}sub2(char *a,char b) {char c; c=*a;*a=b;b=c;}sub3(char *a,char *b) {char c; c=*a;*a=*b;*b=c;}main(){ char a,b;a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);a='A';b='B';sub1(a,b);putchar(a);putchar(b);}A)BABBAB B)ABBBBA C)BABABA D)BAABBA27、若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是A)i=*p; B)*p=*&j; C)i=&j; D)i=* *p;28、要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
能正确实现此功能的函数是A)funa(int *x,int *y) B)funb(int x,int y){ int *p; { int t;*p=*x;*x=*y;*y=*p;} t=x;x=y;y=t;}C)func(int *x,int *y) D)fund(int *x,int *y){ *x=*y;*y=*x;} { *x=*x+*y; *y=*x-*y;*x=*x-*y; }二、填空题:1、有以下程序void f( int y,int *x){ y=y+*x; *x=*x+y;}main(){ int x=2,y=4;f(y,&x);printf("%d %d\n",x,y);}执行后输出的结果是。
2、下面程序的运行结果是:void swap(int *a,int *b){ int *t;t=a; a=b; b=t;}main(){ int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf("%d%d\n",*p,*q);}3、设有以下程序:main(){ inta, b, k=4, m=6, *p1=&k, *p2=&m;a=pl==&m;b=(*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);}执行该程序后,a的值为,b的值为。