很有参考价值的一些题目
单项选择
若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是().
A、p=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
B、3 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);
D、p=&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
D、23
若有说明: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);
}
A、f
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
C、open 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
D、6
已知有声明"char a[]="prongram",*p=a+1;",则执行以下语句不会输出字符a的是()
A、putchar(*p+4);
B、putchar(*(p+4));
C、putchar(a[sizeof(a)-3]);
D、putchar(*(a+5));
定义语句int *swap();指的是
A、其他说法都不对
B、swap是一个返回指向整型值指针的函数
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);
}
程序执行后的输出结果是().
A、1bc,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]);
B、printf("%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]);
}
执行后输出结果是().
A、6 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]地址
D、z
有以下程序
#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
D、y=3
若有语句:char *line[5];下列叙述中正确的是().
A、定义line是一个指针数组,语句中的*号称为间址运算符
B、定义line是一个数组,每个数组元素是一个基类型为char 的指针变量
C、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
D、定义line是一个指向字符型函数的指针
设有数组定义:char array[]="China";,则数组 array所占的空间为().
A、5个字节
B、4个字节
C、6个字节
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
D、7 //七个字符分别为:a b c d \n \123 \xab
已知有声明"char s[20]="Hello";",在程序运行过程中若要想使数组s中的内容修改为"Good",则以下语句能够实现此功能的是().
A、strcpy(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串后面的语句是().
A、strcat(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
B、strp //有时候可能语句没有错误,但是题目的要求是对字符串的非法引用
C、strp[k]
D、str[k]
选择正确的输入语句().其中:char string[10];)使得string的内容为"Hello".
A、scanf("%s",&string);
B、scanf("%c",string)
C、scanf("%c",&string);
D、scanf("%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);
D、static char str[]="China";
已定义char string[20];使得string的内容为"You are student"的正确输入语句是().
A、scanf("%c",&string);
B、gets(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语言中,二维数组在内存中的存放方式为按_行_连续存放.