指针与数组习题

很有参考价值的一些题目

单项选择

若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是().

Ap=a          //p只能赋值以为数组,要想赋值正确,这里应该改为p=a[0];

B、p=&a[2][1]

C、q[i]=a[i]

D、p=a[i]

 

执行下列语句后的结果为().

int x=3,y;

int *px=&x;

y=*px++;          //y=*px++,*与++都是单目运算符,运算顺序从从右向左,但由于++在后,先用后加,但是千万也不能选择D选项,px++加的只是地址,而不是px所指向的值

printf("x=%d,y=%d\n",x,y);

A、x=3,y=3    

B、x=4,y=4

C、x=3,y不知

D、x=3,y=4

 

下列程序的运行结果是

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、0 0

B3 6

C、编译出错

D、6 3

 

若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是().

A、scanf("%d",n);

B、p=&n;scanf("%d",&p);

C、p=&n;scanf("%d",*p);

Dp=&n;scanf("%d",p);

 

下面程序:

int aa[3][3]={{2},{4},{6}};

main()

{int i,*p=&aa[0][0];

for(i=0;i<2;i++){

if(i==0)aa[i][i+1]=*p+1;

else++p;

printf("%d",*p);

}

}

的输出是().

 

A、25

B、30

C、26

D23

 

若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是().

A、i=*p;

B*p=*&j;     //* &都是单目运算符,同级,从右向左运算

C、i=**p;

D、i=&j;

 

阅读下面程序,程序执行后的结果为().

#include"stdio.h"

main()

{  char *str="abcdefghijklmnopq";

while(*str++!='e');

printf("%c\n",*str);

}

Af

B、q

C、e

D、a

 

关于指针概念说法不正确的是().

A、指针变量可以由整数赋,不能用浮点赋

B、只有同一类型变量的地址才能放到指向该类型变量的指针变量之中,

C、一个指针变量只能指向同一类型变量

D、一个变量的地址称为该变量的指针

 

 

设有以下定义:

int w[2][3],(*pw)[3]; pw=w;

则对w数组元素非法引用是().

A、pw[0][0]

B、*(pw[1]+2)

C*(pw+1)[2]         //越界pw[3][0]

D、*(w[0]+2)

 

若有定义:char s[3][10],(*k)[3],*p;,则以下赋值语句正确的是().

A、k=s;            //抛开越界问题,语法是正确,k应该定义为(*k)[10]

B、p=k;            //p是指向字符型的变量地址,k是指向数组的指针,不能进行赋值

C、p=s;            //p只能指向一维数组,s是二维数组

D、p=s[0];        //正确,指向s行地址

 

当运行以下程序时输入OPEN THE DOOR<CR>,则输出结果是

#include<stdio.h>

char fun(char *c)

{if(*c<='Z' && *c>='A')

*c -='A' - 'a';             //这里暗喻了大A与小a的ASCⅡ码相差32,直接是将大写字母加32变成自身的小写字母

return *c;

}

main()

{char s[80],*p=s;

gets(s);    

while(*p)

{*p=fun(p);

putcahr(*p);p++;

}

putchar('\n');

}

A、Open The Door

B、OPEN THE DOOR

Copen the door           

D、oPEN tHE dOOR

 

下列程序执行后的输出结果是().

void func(int *a,int b[])

{b[0]=*a+6;}

main()

{int a,b[5]={0};

a=0; b[0]=3;

func(&a,b); printf("%d\n",b[0]);

}

A、8

B、9

C、7

D6

 

已知有声明"char a[]="prongram",*p=a+1;",则执行以下语句不会输出字符a的是()

Aputchar(*p+4);

B、putchar(*(p+4));

C、putchar(a[sizeof(a)-3]);

D、putchar(*(a+5));

 

定义语句int *swap();指的是

A、其他说法都不对

Bswap是一个返回指向整型值指针的函数

C、swap是一个返回整型值的函数

D、swap是一个指向函数的指针

 

 

有以下程序:

#include<stdio.h>

void swap(char *x,char *y)

{char t;

t=*x;*x=*y;*y=t;             //s1与s2本就是指向字符串中首元素的地址,这里交换的也只是首元素

}

main()

{char *s1="abc",*s2="123";

swap(s1,s2);printf("%s,%s\n",s1,s2);

}

程序执行后的输出结果是().

A1bc,a23             

B、123,abc

C、321,cba

D、abc,123

 

若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则输出结果不为5的语句为().

A、printf("%d",p[5]);

Bprintf("%d",*p[5]);

C、printf("%d",*(a+5));

D、printf("%d",*(p+5));

 

有以下程序:

void fun(int *a,int i,int j)

{int t;

if(i<j)

{t=a[i];a[i]=a[j];a[j]=t;

fun(a,++i,--j);

}

}

main()

{int a[]={1,2,3,4,5,6},i;

fun(a,0,5);

for(i=0;i<6;i++)

printf("%d",a[i]);

}

执行后输出结果是().

A6 5 4 3 2 1

B、2 1 4 3 6 5

C、3 2 4 1 5 6

D、1 2 3 4 5 6

 

以下程序运行后的输出结果是().

main(){char ch[]="uvwxyz",*pc;

pc=ch;

printf("%c\n",*(pc+5));

}

A、字符y的地址

B、0

C、元素ch[5]地址

Dz

 

有以下程序

#include<stdio.h>

main()

{int a[]={1,2,3,4},y,*p=&a[3];

--p; y=*p; printf("y=%d\n",y);

}

程序的运行结果是().

A、y=0

B、y=2

C、y=1

Dy=3

 

若有语句:char *line[5];下列叙述中正确的是().

A、定义line是一个指针数组,语句中的*号称为间址运算符

B、定义line是一个数组,每个数组元素是一个基类型为char 的指针变量

C、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

D、定义line是一个指向字符型函数的指针

 

设有数组定义:char array[]="China";,则数组 array所占的空间为().

A、5个字节

B、4个字节

C6个字节

D、7个字节

 

下述对C语言字符数组的描述中错误的是().

A、字符数组中的字符串可以整体输入,输出.

B、不可以用关系运算符对字符数组中的字符串进行比较.

C、字符数组中可以存放字符串.

D、可以通过赋值运算符"="对字符数组整体赋值.

 

以下程序:

#include<stdio.h>

#include<string.h>

main()

{  char str[]="abcd\n\123\xab";

printf("%d",strlen(str));

}

运行后的输出结果是().

A、10

B、9

C、14

D7         //七个字符分别为:a  b  c  d  \n   \123  \xab

 

已知有声明"char s[20]="Hello";",在程序运行过程中若要想使数组s中的内容修改为"Good",则以下语句能够实现此功能的是().

Astrcpy(s,"Good");

B、strcat(s,"Good");

C、s[20]="Good";

D、s="Good";

 

以下程序段的输出结果是

pritnf("%d\n",strlen("ATS\n012\1\\"));

A、11

B、8       

C、9        //字符串里,不算0开头的八进制,九个字符为:A  T  S  \n  0  1  2  \1  \\

D、10

 

char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是().

Astrcat(a2,a1);

B、strcpy(a2,a1);

C、strcpy(a1,a2);

D、strcat(a1,a2);

 

设有以下语句,若0<k<4,下列选项中对字符串的非法引用是().

char str[4][2]={"aaa","bbb","ccc","ddd"},*strp[4];

int j;

for(j=0;j<4;j++)

strp[j]=str[j];

A、*strp

Bstrp                              //有时候可能语句没有错误,但是题目的要求是对字符串的非法引用

C、strp[k]

D、str[k]

 

选择正确的输入语句().其中:char string[10];)使得string的内容为"Hello".

A、scanf("%s",&string);

B、scanf("%c",string)

C、scanf("%c",&string);

Dscanf("%s",string);

 

下列数组说明中正确的是().

A、static char str1[5],str2[]={"China"};str1=str2;

B、static char str[];str="China";

C、static char str1[],str2[];str2={"China"};strcpy(str1,str2);

Dstatic char str[]="China";

 

已定义char string[20];使得string的内容为"You are student"的正确输入语句是().

A、scanf("%c",&string);

Bgets(string);

C、scanf("%s",&string);

D、scanf("%s",string);

 

填空题

==================================================

若有定义: char  ch;

定义指针p,并使其指向变量ch的初始化语句是_char *p=ch_。(必须使用一条语句)

        

在c程序中,只能给指针变量赋NULL值和地址值.

 

已知有声明"int a[3] [2]={{1,2},{3,4},{5,6}},*p=a[0];",则执行语句"{printf("%i d\n",*(p+4));"后的输出结果为__5____。

 

执行语句char s[3]="ab",*p;  p=s;       *(p+__2___)的值是'\0'.

 

设变量定义为"int x=3, *p=&x;",设变量x的地址为2000,则*p=__3___,&(*p)=_2000__ (填数字)

 

若有程序段“int a[10],*p=a,*q;q=&a[5];”,则表达式q-p的值是(___5___)。//没有特别说明,就不考虑乘int的字节长度

 

若有定义:char s[ ]="china"; 则C编译系统为数组s开辟__6___个字节的内存单元.

 

以下findmax返回s中最大元素的下标,数组中元素的个数由t传入。请填空。

fndmax(int s[], int t)

{  int k, p;

for(p=0, k=p; p < t; p++)

if(s[p] > s[k])             

_k=p___ ;   //这里不是要交换数组的值,p会一直遍历,并且每次将大的值的坐标赋值给k,k是一个用来接收最大下标值的变量

return__k___;

}

 

已知char s[]={'H','e','l','l','o'}; 则s数组中含有___5__个元素.

 

C语言中,二维数组在内存中的存放方式为按__连续存放.

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值