文档库 最新最全的文档下载
当前位置:文档库 › C语言指针练习+答案+讲解

C语言指针练习+答案+讲解

C语言指针练习+答案+讲解
C语言指针练习+答案+讲解

第七章指针

7.1 选择题

1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

A. p=q; B. *p=*q; C. a=*q; D. q=a;

a是整型数,

int *p,*q定义了指针,

p,q是指向整型的指针。

p取得a的地址,而q取得p的地址

p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。

A)把q的地址赋给p,则p和q完全一样了,都指向一个数2

B)把q中数据个p

C)把q中数据给a

D)a中数据是2,不能够给一个地址。除非*q=a

2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511

int a=511,*b=&a;

a 是整形变量

b 是整形指针变量,指向 a

printf("%d\n",*b);就是输出指针变量 b,

所指变量的值输出结果511

3.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);

47、已知在程序中定义了如下的语句:

int *P1,*P2;

int k;

p1=&k;p2=&k;

则下列语句中不能正确执行是( B )

A、k=*P1+*P2;

B、p2=k;

C、P1=P2;

D、K=*P1 * (*P2);

P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?

A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)

C是赋值语句

D其实执行了K=K*K

4.变量的指针,其含义是指该变量的(B)。

A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。

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);

对于int c,*d=&c;,c是一整型数据,d是一指针,它指向变量c(即d=&c,*是指针类型的说明符),所以,输入c的值可以用scanf("%d",&c); 也可以用scanf("%d",d);

6.若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是(D)。

(1) int *p=&a; (2) *p=a;

A.语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。

B. (1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。

C. (1)在对p进行说明的同时进行初始化,使p指向a;

(2)变量a的值赋给指针变量p。

D. (1)在对p进行说明的同时进行初始化,使p指向a;

(2)将变量a的值赋予*p。

A:(1):*p,定义p为int类型指针(2):*p,表示p所指向的变量

B(1)把变量a的地址赋给指针变量p(2)把变量a的值,赋值给P所指向的变量

C前半句正确,后半句错误,(2)是把变量a的值赋值给P所指的变量。

7. 若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是(D )。

A . a, p, *&a

B . &*a, &a, *p

C . *&p, *p, &a

D . &a, &*p, p

int *p 是定义一个指针,p=&a ,p 指向a 的地址,*p=a, *指针名 是指取

该指针所指地址中的内容,&a 为a 的地址,&*p=&a ,p 中放的为a 的地址

8. 若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345; 则正

B

A . p=x;

B . p=&x;

C . *p=x;

D .

*p=&x; 9. 若有说明:int *p, a=1, b; 以下正确的程序段是(B )。

A

. p=&b; B

. scanf("%d", &b);

scanf("%d", &p); *p=b;

C . p=&b;

D . p=&b;

scanf("%d", *p); *p=a;

A,B 中 p 是b 的地址 那么如果要输入b 应该是scanf("%d", p);

C 中 p 还没定义 给*p 赋值就是给一个没有开辟的地址赋值了

D 是正确的 意思是p 为b 的地址,将p 地址上的数变成a, 等价于b=a

10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图1所示,若要实现

下图所示的存储结构,可选用的赋值语句是(C )。

A . *p=*q;

B . p=*q;

C . p=q;

D . *p=q;

11.以下程序中调用scanf 函数给变量a 输入数值的方法是错误的,其错误原因

是(B )。

p x

m p n

q p q n

#include

main()

{

int *p, *q, a, b;

p=&a;

printf("input a:");

scanf("%d", *p);

}

A. *p表示的是指针变量p的地址

B. *p表示的是变量a的值,而不是变量a的地址

C. *p表示的是指针变量p的值

D. *p只能用来说明p是一个指针变量

scanf后面的参数是地址,是接收的值放到这个地址

12.下面程序的功能是从输入的十个字符串中找出最长的那个串。请在________处填空。

#include "stdio.h"

#include "string.h"

#define N 10

main()

{

char s[N][81], * t;

int j;

for (j=0; j

gets (s[j]);

t= *s;

for (j=1; j

if (strlen(t)

printf("the max length of ten strings is: %d, %s\n", strlen(t), t);

}

A.t=s[j] B.t=&s[j] C.t= s++ D. t=s[j][0]

13.下面判断正确的是(C)。

A. char *s="girl"; 等价于 char *s; *s="girl";

B.char s[10]={"girl"}; 等价于char s[10];

s[10]={"girl"};

C. char *s="girl"; 等价于 char *s; s="girl";

D. char s[4]= "boy", t[4]= "boy"; 等价于char s[4]=t[4]= "boy"

14.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是(C)。

A. 9 B. 5 C. 6 D. 7

首先,字节数不是指字符串长度,字符串长度比存储字节数少一。

\t 是一个转义字符相当于键盘“Tab”

键a 普通字符

\017 转义字符 ASCII代码值为8进制数17即10进制数15的那个符号

b 普通字符

c 普通字符

字符串结束标志‘\0’

s是字符串类型。每一个都是char型变量;

char型变量的二进制长度是8,也就是一个字节,所以指针变量s 指向的

字符串所占字节数是6 ,字符串长度是5.

15.下面程序段中,for循环的执行次数是(C)。

char *s="\ta\018bc";

for (;*s!='\0';s++) printf("*");

\t a \018 b c \0各一次

A. 9 B. 5 C. 6 D. 7

16.以下不能正确进行字符串赋初值的语句是(A)。

A.char str[5]= "good!";

B. char *str="good!";

C.char str[]="good!";

D. char str[5]={'g', 'o','o', 'd'};

1 A.char str[5]={"good!"};//这个不符合C语言的语法规定,字符串初始化是这样写的:

char str[6]="good!"; //因最后还有一个结束符,因此数组元素应该是6个。

2 题目表述有些不准确 C,D叫初始化,B叫赋值。

3 题目中的单双引号全部是中文的,这也不符合C语言语法。应该改为英文的。

17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是(A)。

A. p=2*(int *)malloc(sizeof(int));

B. p=(int *)malloc(2*sizeof(int));

C. p=(int *)malloc(2*2);

D. p=(int*)calloc(2, sizeof(int));

malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。18.下面程序段的运行结果是(C)。

char *s="abcde";

s+=2;

printf("%d", s);

A. cde B.字符'c' C.字符'c'的地址 D.无确定的输出结果

19.设有如下的程序段:char s[]="girl", *t; t=s;则下列叙述正确的是(D)。

A. s和t完全相同

B.数组s中的内容和指针变量t中的内容相等

C. s数组长度和t所指向的字符串长度相等

D. *t与s[0]相等

20.以下正确的程序段是(B)。

A. char s[20]; B. char *s;

scanf("%s", &s); scanf("%s", s);

C. char s[20]; D. char s[20], *t=s;

scanf("%s", &s[2]); scanf("%s", t[2]); 21.下面程序段的运行结果是(C)。

#include "stdio.h"

main()

{

int m=10, n=20;

char *format="%s, m=%d, n=%d\n";

m*=n;

printf(format, "m*=n", m,n);

}

A. format, "m*=n", m, n B. format, "m*=n"

C. m*=n, m=200, n=20 D.以上结果都不对22.以下与库函数strcpy(char *p, char *q)功能不相等的程序段是(D)。

A. strcpy1(char *p, char *q)

{ while ((*p++=*q++)!='\0');

}

B. strcpy2( char *p, char *q)

{ while((*p=*q)!='\0')

{p++; q++;}

}

C. strcpy3(char *p, char *q)

{ while (*p++=*q++);

}

D. strcpy4( char *p, char *q)

{ while(*p)

*p++=*q++;

}

23.下面程序段的运行结果是(C)。

#include "stdio.h"

main()

{

char s[]="example!", *t;

t=s;

while( *t!='p')

{ printf("%c", *t-32);

t++;}

}

A.EXAMPLE! B.example! C.EXAM D. example!

24.以下正确的程序段是(C)。

A. char s[]="12345", t[]="6543d21"; strcpy( s,t);

B. char s[20], *t="12345"; strcat(s,t);

C. char s[20]=" ", *t="12345"; strcat(s, t);

D. char *s="12345", *t="54321"; strcat (s,t);

25.以下与库函数strcmp(char *s, chat *t)的功能不相等的程序段是(D)。

A. strcmp1( char *s, chat *t)

{ for ( ;*s++==*t++ ;)

if (*s=='\0') return 0;

return (*s-*t);

}

B. strcmp2( char *s, char *t)

{ for ( ;*s++==*t++ ;)

if (!*s) return 0;

return (*s-*t);

C. strcmp3( char *s, char *t)

{ for ( ;*t==*s ;)

{ if (!*t) return 0;

t++;

s++;}

return (*s-*t);

}

D. strcmp4( char *s, char *t)

{ for( ;*s==*t;s++,t++)

if (!*s) return 0;

return (*t-*s);

}

26.若有以下定义和语句:

int s[4][5], (*ps)[5];

ps=s;

则对s数组元素的正确引用形式是(C)。

A. ps+1 B. *(ps+3) C. ps[0][2] D. *(ps+1)+3 27.不合法的main函数命令行参数表示形式是:(B)。

A. main( int a, char *c[]) B. main(int argc, char *argv)

C. main( int arc, char **arv) D. main( int argv, char*argc[])

28.若有说明语句:char s[]="it is a example.", *t="it is a example.";

则以下不正确的叙述(B)。

A. s表示的是第一个字符i的地址,s+1表示的是第二个字符t的地址

B. t指向另外的字符串时,字符串的长度不受限制

C. t变量中存放的地址值可以改变

D. s中只能存放16个字符

29.若已定义char s[10];则在下面表达式中不表示s[1]地址的是(B)。

A. s+1 B. s++ C. &s[0]+1 D. &s[1] 30.下面程序段的运行结果是(A)。(注:

代表空格)

└┘

#include "stdio.h"

main()

{ char s[6];

s="abcd";

printf("\"%s\"\n", s);

}

" C. \"abcd\" D.编译出错 A. "abcd" B. "abcd

└┘

31.执行以下程序后,a的值为【1】, b的值为【2】。

#include

main()

{

int a, b, k=4, m=6, *p=&k, *q=&m;

a=p==&m;

b=(-*p)/(*q)+7;

printf("a=%d\n", a);

printf("b=%d\n", b);

}

【1】 A. -1 B. 1 C. 0 D. 4 【2】 A. 5 B. 6 C. 7 D. 10 32.下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再存放一个空格,例如字符串s为"abcdefg",则字符串t为"abc def g",请选择填空。C A

#include "stdio.h"

#include "string.h"

main()

{

int j, k=0;

char s[60], t[100], *p;

p=s;

gets(p);

while(*p)

{ for (j=1; j<=3 && *p; 【1】) t[k]=*p;

if (【2】) { t[k]=' '; k++;}

}

t[k]='\0';

puts(t);

}

【1】A.p++ B.p++,k++ C.p++, k++, j++

D. k++, j++

【2】A.j==4 B.*p=='\0' C.!*p D. j!=4

33.下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。

错题 AB

#include "stdio.h"

#include "string.h"

main()

{

char *t, s[8];

int n;

t=s;

gets(t);

n=【1】;

while (【2】!= '\0') n=n*8+*t-'0';

printf("%d\n", n);

}

【1】A.0 B.*t C.*t-'0' D. *t+'0'

【2】A. *t B. *t++ C. *(++t) D. t

34.下面程序的功能是在字符串s中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如:boy&girl变成ybo&girl。请选择填

空。BC

#include "stdio.h"

#include "string.h"

main()

{

char s[80], *t, max, *w;

t=s;

gets(t);

max=*(t++);

while (*t!='\0')

{

if (max<*t)

{ max=*t; w=t; }

t++;

}

t=w;

while (【1】)

{

*t=*(t-1);

【2】;}

*t=max;

puts(t);

}

【1】A.t>s B.t>=s C.*t>s[0] D. *t>=s[0]

【2】A.t++ B.s-- C.t-- D. w--

35.以下程序的功能是删除字符串s中的所有空格(包括TAB符、回车符),请填空。AC

#include "stdio.h"

#include "string.h"

#include "ctype.h"

main()

{

char s[80];

gets(s);

delspace(s);

puts(s);

}

delspace(char *t)

{

int m, n;

char c[80];

for(m=0, n=0; 【1】; m++)

if (!isspace(【2】)) /*C语言提供的库函数,用以判断字符是否为

空格*/

{

c[n]=t[m];

n++;

}

c[n]='\0';

strcpy(t, c);

}

【1】A.t[m] B.!t[m] C.t[m]='\0' D. t[m]=='\0'

【2】A.t+m B.*c[m] C.*(t+m)

D. *(c+m)

36.下面程序的功能是统计字串sub在母串s中出现的次数。请选择填空。BC #include "stdio.h"

#include "string.h"

main()

{

char s[80], sub[80];

int n;

gets(s);

gets(sub);

printf("%d\n", count(s,sub));

}

int count( char *p, char *q)

{

int m, n, k, num=0;

for (m=0; p[m]; m++)

for (【1】, k=0; q[k]==p[n]; k++, n++)

if(q[【2】]=='\0')

{ num++; break;}

return (num);

}

【1】A. n=m+1 B. n=m C. n=0 D. n=1 【2】A. k B. k++ C. k+1 D. ++k 37.下列程序的输出结果是(C)。

#include "stdio.h"

main()

{

int a[]={1,2,3,4,5,6,7,8,9,0}, *p;

p=a;

printf("%d\n", *p+9);

}

A.0 B. 1 C.10 D. 9

38.以下程序的输出结果是(C)。

#include "stdio.h"

char cchar(char ch)

{

if (ch>='A' && ch<='Z') ch=ch-'A'+'a';

return ch;

}

main()

{

char s[]="ABC+abc=defDEF", *p=s;

while(*p)

{

*p=cchar(*p);

p++;

}

printf("%s\n",s);

}

A. abc+ABC=DEFdef B. abcaABCDEFdef

C. abc+abc=defdef D. abcabcdefdef

39.以下程序的输出结果是(D)。

#include "stdio.h"

#include "string.h"

main()

{

char b1[8]="abcdefg", b2[8], *pb=b1+3;

while( --pb>=b1) strcpy(b2, pb);

printf("%d\n", strlen(b2));

}

A. 8 B. 3 C. 1 D. 7 40.有以下程序

#include "string.h"

#include "stdio.h"

main()

{

char *p="abcde\0fghjik\0";

printf("%d\n", strlen(p));

}

程序运行后的输出结果是(D)。

A. 12 B. 15 C. 6 D. 5 41.有以下程序

void ss( char *s, char t)

{

while (*s)

{ if (*s==t) *s=t-'a'+'A';

s++;

}

}

main()

{

char str[100]="abcddfefdbd", c='d';

ss(str, c);

printf("%s\n", str1);

}

程序运行后的输出结果是(B)。

A.ABCDDEFEDBD B.abcDDfefDbD C.abcAAfefAbA D. Abcddfefdbd

42.以下程序调用findmax函数返回数组中的最大值。在下面划线处应填入的是(B)。

#include "stdio.h"

findmax( int *a, int n)

{

int *p, *s;

for (p=a, s=a; p-a

if(__________) s=p;

return (*s);

}

main()

{

int x[5]={12,21,13,6,18};

printf("%d\n", findmax(x,5));

}

A. p>s B. *p>*s C. a[p]>a[s] D. p-a>p-s 43.有以下程序A

#include "stdio.h"

#include "malloc.h"

main()

{

char *q, *p;

p=(char*) malloc (sizeof(char) *20); /*为指针p分配一个地址*/ q=p;

scanf("%s%s", p, q);

printf("%s %s\n", p, q);

}

若从键盘输入:abc def↙,则输出结果是:

A. def def B. abc def C. abc d D. d d 44.下面程序的运行结果是(D)。

#include "stdio.h"

#include "string.h"

fun( char *s)

{

char t[10];

s=t;

strcpy(t, "example");

}

main()

{

char *s;

fun(s);

puts(s);

}

A.example

└┘└┘└┘ B.example

└┘└┘

C.example D.不确定

的值

45.下列程序段的输出结果是(A)。

#include "stdio.h"

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 2

46.下列程序的输出结果是(C)。

#include "stdio.h"

main()

{

char a[10]={9,8,7,6,5,4,3,2,1,0}, *p=a+5;

printf("%d", *--p);

}

A.非法 B. a[4]的地址 C. 5 D. 3 47.有以下程序

#include "stdio.h"

#include "string.h"

main(int argc, char *argv[])

{

int m, length=0;

for (m=1;m

printf("%d\n", length);

}

程序编译连接后生成的可执行文件是file.exe,若执行时输入带参数的命令行是:

file 1234 567 89↙

则运行结果是(C)。

A. 22 B. 17 C. 13 D. 9 48.有以下函数:

char *fun(char *s)

{ …

return s;

}

该函数的返回值是(D)。

A.无确定值 B.形参s中存放的地址值

C.一个临时存储单元的地址 D.形参s自身的地址值

49.假定下列程序的可执行文件名为file.exe,则在该程序所在的子目录下输

入命令行:

file girl boy↙

后,程序的输出结果是(B)。

#include "stdio.h"

main(int argc, char *argv[])

{

int m;

if (argc<=0) return;

for (m=1; m

printf("%c", *argv[m]);

}

A.girl boy B.fgb C.gir D. girlboy

50.设有一个名为file的C源程序,且已知命令行为:file girl boy student,则可得到以下运行结果的C源程序为(A)。

girl

boy

student

A. main( int argc, char *argv[])

{

while (--argc>1)

c语言指针习题及答案69923

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。A)s和p完全相同

C语言指针习题__附答案[1]

一、选择题 1.变量的指针,其含义是指该变量的_________. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;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; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________. main() { int *p,*q,a,b; p=&a; printf(“input a:”); scanf(“%d”,*p); …… } a)*p表示的是指针变量p的地址 b)*p表示的是变量a的值,而不是变量a的地址 c)*p表示的是指针变量p的值 d)*p只能用来说明p是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p);

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[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)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

c语言指针部分题答案

#include int substring(char *s,char *t); int main() { char s[50]; char t[20]; int num; scanf("%s%s",s,t); num=substring(s,t); printf("%d\n",num); return 0; } int substring(char *s,char *t) { char *st=s; char *tt=t; int num=0; int offset=0; for(;*st!='\0';) { offset=0; for(;*tt!='\0';) { if(*st==*tt) { st++,tt++,offset++; } else break; } if(*tt=='\0') num++; else { st=st-offset+1; } tt=t; } return num; } #include void change(char *s); void insert(char *s);

int main() { char s[100]; scanf("%s",s); change(s); insert(s); printf("%s\n",s); return 0; } void change(char *s) { for(;*s!='\0';s++) { if(((*s)>'A'&&(*s)<='V')||((*s)>='a'&&(*s)<'v')) *s=(*s)+4; if(((*s)>='W'&&(*s)<='Z')||((*s)>='w'&&(*s)<='z')) *s=(*s)-22; } } void insert(char *s) { char temp[100]; int size=0,i; for(i=0;s[i]!='\0';i++) { temp[size]=s[i]; size++; temp[size]=' ',size++; } temp[size]='\0'; for(i=0;temp[i]!='\0';i++) s[i]=temp[i]; s[i]='\0'; } #include int replace(char *s); int main() { char s[50]; int num; scanf("%s",s);

C语言复习题及答案

一.单项选择题 1.下列选项中,不是转义字符集中的符号是( C )。 A \\ B \’ C 074 D \0 2. 下列给出的符号串中,不属于C语言保留字的是( B )。 A switch B cher C case D else 3. 下列给出的符号串中,不能作为C语言标识符的是( C )。 A a_2 B _2a C a.3 D a_3 4. 下列属于C语言字符常量的是( C )。 A ‘abc’ B “\n” C ‘a’ D ‘a\0’ 5. 字符串”ABC”再内存占用的字节数为( B )。 A 3 B 4 C 6 D 8 6. 设有宏定义“#define R 2+3”,则R*R的宏替换结果正确的是( B )。 A (2+3)*(2+3) B 2+3*2+3 C 5*5 D 5.0*5.0 7. 设整形变量I的值为3,则表达式i---i的值为( A )。 A 0 B 1 C 2 D 3 8. 表达式“10!=9”的值为( D )。 A true B 非零值 C 0 D 1 9. 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值为( D )。 A 3 B 0 C 9 D -12 10. 下列选项中,正确的赋值表达式为( C )。 A a=7+b+c=a+7 B a=7+b++=a+7 C a=(7+b,b++,a+7) D a=7+b,c=a+7 11. 若有以下定义语句:char a;float c; double d; 则表达式a*b+d-c值的类 型为( D )。 A float B int

C char D double 12. 用十进制数表示表达式“12||012”的运算结果是( A )。 A 1 B 0 C 14 D 12 13. 下列一组运算符中,优先级别最高的运算符是( C )。 A <= B = C % D && 14. 设定“ char a=3,b=6,c;”,计算表达式c=(a^b)<<2后c的二进制值是 ( D )。 A 00011100 B 00000111 C 00000001 D 00010100 15. 设x,y,z,t 均为int类型,则执行下列语句串后,变量t的值为(C )。 X=y=z=0; If(x=y) t=z; Else t=!z; A 不定值 B 2 C 1 D 0 16. 设整形变量m1值为3,m2值为2,m3值为1,执行下列语句后,整形变量 m4值为( D )。 Switch(m1=m2==m3+1) { case1:m4=1;break; case2:m4=3;break; case3:m4=2;break; default:m4=4; } A 1 B 2 C 3 D 4 17. 设有数据定义语句“int a[200];”,下列数组元素引用中下标不越界的是 ( A )。 A a[-1] B a[0] C a[201] D a[200] 18. 若有以下数据定义语句,则数值为4的表达式是( A )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A a[‘g’-‘c’] B a[4]

C语言指针习题及答案

指针主要内容的习题及答案 ?选择题 1. 变量的指针,其含义是指该变量的 __B ____________ 。 A )值 B )地址 C )名 D )一个标志 2. 已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不 能正确执行的赋值语句是 B 。 4.已有变量定义和函数调用语句:int a=25;print_value (&a ); 下面函数的输出 结果是 D __________________ void prin t_value(i nt *x) { printf( “ %d\n” ,++*x); } A) 23 B ) 24 C ) 25 D ) 26 5.若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是 ____ C ____________ 。 A) p 仁&m; p2=&p1 ; B ) p 仁&m; p2=&n; *p1 =*p2 ; C ) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ; 6. 若有语句:int *p,a=4;和p=&a ;下面均代表地址的一组选项是 ____________ D _________ 。 A) a,p,*&a B )&*a,&a,*p C ) *&p,*p ,&a D )&a,&*p,p 7. 下面判断正确的是__C _________________ 。 A) char *a= ” china ” ; 等价于 char *a; *a= ” china ” ; B) char str[1O]={“ china ” };等价于 char str[1O]; str[ ]={ “ china ” ;} C) char *s= ” china ” ; 等价于 char *s; s= ” china ” ; A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf( “ %d ,&p); C ) scanf( “ %d ,&n); *p=n ; 以下程序段正确的是 B scanf ( D *p = m ; D ) k=*ptr1*(*pt ⑵ D 。 )p = &n ; “%d ,*p); )p = &n ;

C语言指针习题及答案

指针主要内容的习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;

C语言指针习题及答案

指针主要内容的习题及答案?选择题 1.变量的指针,其含义是指该变量的A)值B)地址B 。 D )一个标志C)名 2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2 均已指向变量k,下面不能正确执行的赋值语句是 B 。 A) k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2 D) k=*ptr1*(*ptr2) 3. 若有说明:int *p,m=5,n;以下程序段正确的是 D _________ 。 A)p=&n ; B)p = &n ; seanf( %d”,&p);seanf( %d”,*p); C) seanf( %d”,&n);D)p = &n ; *p=n ; *p = m ; 4. 已有变量定义和函数调用语句:int a=25;print_value(&a); 下面函数的输出结果是 D ___________ 。 void prin t_value(i nt *x) { printf( %d\n”,++*x); } A) 23 B) 24 C) 25 D) 26 5. 若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是____ C _______ 。 A) p仁&m; p2=&p1 ; B) p仁&m; p2=&n; *p1 =*p2 ; C) p仁&m; p2=p1 ; D) p仁&m; *卩仁*p2 ; 6. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是__________ D _____ 。 A) a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7. 下面判断正确的是__C __________ 。 A) char *a=”ch in a”;等价于char *a; *a=”ch in a”; B) char str[1O]={ china”};等价于char str[1O]; str[ ]={ china”;} C) char *s=”china”;等价于char *s; s=”china” ; D) char c[4]=”abc',d[4]= ”abc”;等价于char c[4]=d[4]= ”abc ;

C语言指针精选习题和答案

一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include void swap(int *pa,int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(a>c) swap(&a,&c); printf("%d,%d,%d",a,b,c); } 二、C语言用指针方法输入3个字符串按由小到大顺序输出 #include "stdio.h" #include "string.h" int main(int argc, char* argv[]) { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf("No1:"); scanf("%s",p1); fflush(stdin); printf("No2:"); scanf("%s",p2); fflush(stdin); printf("No3:"); scanf("%s",p3);

fflush(stdin); if(strcmp(p1,p2)>0) {t=p1;p1=p2;p2=t;} if(strcmp(p1,p3)>0) {t=p1;p1=p3;p3=t;} if(strcmp(p2,p3)>0) {t=p2;p2=p3;p3=t;} printf("%s\n%s\n%s\n",p1,p2,p3); return 0; } 9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及 其他字符的个数 #include void main() { int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20]; while((s[i]=getchar())!='\n')i++; p=s; while(*p!=10) { if(*p>='A'&&*p<='Z') a++; else if(*p>='a'&&*p<='z') b++; else if(*p==' ') c++; else if(*p>='0'&&*p<='9') d++; else e++; p++; } printf("大写字母%d 小写字母%d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }

C语言指针习题及答案

指针习题及答案 一.选择题 1、变量的指针,其含义就是指该变量的 B 。 A)值B)地址C)名D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行的赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确的就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数的输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句的选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址的一组选项就是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确的就是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环的执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作的就是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10、下面程序段的运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定 11、设p1与p2就是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句就是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12、设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的就是 D 。 A)s与p完全相同 B)数组s中的内容与指针变量p中的内容相等

C语言指针经典练习题-及答案

C语言指针练习题及答案 一、选择题 1. 变量的指针,其含义是指该变量的____. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;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; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是__ _____. main() { int *p,*q,a,b; p=&a; printf(“input a:”); scanf(“%d”,*p); …… } a)*p表示的是指针变量p的地址 b)*p表示的是变量a的值,而不是变量a的地址 c)*p表示的是指针变量p的值 d)*p只能用来说明p是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是______. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p); B) p=(long *)malloc(8);scanf("%ld",p); C) scanf("%ld",p=&a); D) scanf("%ld",&a); 7.有以下程序 #include main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf("%d,%d,%d,%d\n",m,n,*p,*q); }程序运行后的输出结果是

c语言练习题带答案)

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

C语言指针练习+答案+讲解

第七章指针 7.1 选择题 1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。 A. p=q; B. *p=*q; C. a=*q; D. q=a; a是整型数, int *p,*q定义了指针, p,q是指向整型的指针。 p取得a的地址,而q取得p的地址 p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。 A)把q的地址赋给p,则p和q完全一样了,都指向一个数2 B)把q中数据个p C)把q中数据给a D)a中数据是2,不能够给一个地址。除非*q=a 2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511 int a=511,*b=&a; a 是整形变量 b 是整形指针变量,指向 a printf("%d\n",*b);就是输出指针变量 b, 所指变量的值输出结果511 3.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2); 47、已知在程序中定义了如下的语句: int *P1,*P2; int k; p1=&k;p2=&k;

则下列语句中不能正确执行是( B ) A、k=*P1+*P2; B、p2=k; C、P1=P2; D、K=*P1 * (*P2); P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢? A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K) C是赋值语句 D其实执行了K=K*K 4.变量的指针,其含义是指该变量的(B)。 A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。 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); 对于int c,*d=&c;,c是一整型数据,d是一指针,它指向变量c(即d=&c,*是指针类型的说明符),所以,输入c的值可以用scanf("%d",&c); 也可以用scanf("%d",d); 6.若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是(D)。 (1) int *p=&a; (2) *p=a; A.语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。 B. (1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。 C. (1)在对p进行说明的同时进行初始化,使p指向a; (2)变量a的值赋给指针变量p。 D. (1)在对p进行说明的同时进行初始化,使p指向a; (2)将变量a的值赋予*p。 A:(1):*p,定义p为int类型指针(2):*p,表示p所指向的变量 B(1)把变量a的地址赋给指针变量p(2)把变量a的值,赋值给P所指向的变量 C前半句正确,后半句错误,(2)是把变量a的值赋值给P所指的变量。

C语言指针习题及答案

指针习题及答案 一?选择题 1.变量的指针,其含义是指该变量的 B A )值 B )地址 C )名 D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量 k ,下面不能正确执行 的赋值语句是 B 。 A ) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 D ) k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n; 以下程序段正确的是 D 。 A ) p=&n ; B ) p = &n ; scanf( %d ",&p); scanf( %d ",*p); C ) scanf( %d",&n); D ) p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句: int a=25;print_value(&a); 下面函数的输出结果是 ______ D _____ 。 A) c=*p1+*p2 B ) p2=c C ) p 仁p2 D ) c=*p1*(*p2) 12. 设有程序段:char s[ ]= "china ";char *p ; p=s ;则下面叙述正确的是 D A) s 和p 完全相同 void prin t_value(i nt *x) { printf( %d\n ",++*x); } A ) 23 B ) 24 5. 若有说明:int *p1, *p2,m=5,n; A ) p 仁&m; p2=&p1 ; C ) p 仁&m; p2=p1 ; 6. 若有语句: A ) a,p,*&a 7. 下面判断正确的是 C) 25 D ) 26 以下均是正确赋值语句的选项是 C B ) p 仁&m; p2=&n; *p1 =* p2 ; D) p 仁&m; *p 仁*p2 ; int *p,a=4; 和p=&a ;下面均代表地址的一组选项是 B ) &*a,&a,*p C ) *&p,*p,&a C D ) &a,&*p,p A ) B ) C ) D ) char *a= "ch in a "; 等价于 char *a; *a= "ch in a "; char str[10]={ “hina"};等价于 char str[10]; str[ ]={ “hina";} char *s= "ch in a "; 等价于 char *s; s= "ch in a "; char c[4]= "abc ",d[4]= "abc ";等价于 8. 下面程序段中,for 循环的执行次数是 char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++) printf( *"); A ) 9 B ) 7 9. 下面能正确进行字符串赋值操作的是 A ) char s[5]={ ABCDE ”}; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是 char *s= "abcde"; s+=2 ; printf( %d",s); A ) cde B )字符}' 11. 设pl 和p2是指向同一个字符串的指针变量, 值语句是—B char c[4]=d[4]= "abc ” ; C C ) 6 C B ) D ) C ) char s[5]={ A ', 'B ','C','D','E'}; char *s; scanf( %s",s); 字符’c'的地址 D )不确定 c 为字符变量,则以下不能正确执行的赋

c语言面试题__指针篇

c语言面试题__指针篇 1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p ------------------------------------------------------ 2. char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl; 打印结果是什么? 解答:结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而 str5,str6,str7,str8是指针,它们指向相同的常量区域 ----------------------------------------------- 3. 以下代码中的两个sizeof用法有问题吗? void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 { for( size_t i=0; i

C语言数组和指针练习题

若当堂没做完,下周四之前上交也可。 至 用户名和密码:stu C语言程序设计练习题——数组 一、选择题 77、以下对一维数组a的正确说明是_d ___ A、char a(10); B、int a[ ]; C、int k=5,a[k]; D、char a[ ]={'a' , 'b' , 'c'}; 78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___ A、a[0][3] B、a[0][4] C、a[2][2] D、a[2][2+1] 79、以下能对二维数组y进行初始化的语句是_b__ A、static int y[2][ ]={{1,0,1}, {5,2,3}}; B、static int y[ ][3]={{1,2,3}, {4,5,6}}; C、static int y[2][4]={{1,2,3}, {4,5} , {6}}; D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}}; 80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___ A、数组y的每个元素都可得初值0 B、二维数组y的行数为1 C、该说明等价于int y[ ][4]={0}; D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0 81、以下各组选项中,均能正确定义二维实型数组s的选项是_c___ A、float s[3][4]; B、float s(3,4); float s[ ][4]; float s[ ][ ]={{0};{0}}; float s[3][ ]={{1},{0}}; float s[3][4]; C、 float s[3][4]; D、float s[3][4]; static float s[ ][4]={{0},{0}}; float s[3][ ]; auto float s[ ][4]={{0},{0},{0}}; float s[ ][4]; 82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__ A、3 B、2 C、无确定值 D、1 83、若二维数组y有m列,则在y[i][j]前的元素个数为_B___ A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1 84、下面程序中有错误的行是__D__ 1、 main( ) 2、 { 3、 int x[3]={1}; 4、 int k; 5、 scanf("%d", &x); 6、 for (k=1; k<3; k++) 7、 x[0]=x[0]+x[i]; 8、 printf("x[0]=%d\n", x[0]); 9、 } A、3 B、6 C、7 D、5 85、若有以下语句,则正确的描述是__b__ char x[ ]="12345"; char y[ ]={'1', '2', '3', '4', '5'}; A、x数组与y数组的长度相同 B、x数组长度大于y数组长度 C、x数组长度小于y数组长度

C语言指针习题及答案

指针主要内容得习题及答案 一.选择题 1、变量得指针,其含义就是指该变量得 B 。 A)值 B)地址 C)名 D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行得赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确得就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数得输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句得选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址得一组选项就是

D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确得就是 C 。 A)char *a=”china”; 等价于 char *a; *a=”china” ; B)char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于 char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环得执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作得就是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE”; D)char *s; scanf(“%s”,s) ; 10、下面程序段得运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’ C)字符’c’得地址 D)不确定 11、设p1与p2就是指向同一个字符串得指针变量,c为字符变量,则以下不能正确执行得赋值语句就是 B 。

相关文档
相关文档 最新文档