C语言程序设计试题及答案解析[1]全解 下载本文

c)p变量中存放的地址值可以改变 d)a中只能存放10个字符

45.下面程序的运行结果是____. #include #include main() {

char *s1=\ char *s2=\ s1+=2;s2+=2;

printf(\ }

a)正数 b)负数 c)零 d)不确定的值

46.下面程序的运行结果是_C__. #include #include fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1;

while(s1

main() {char *p; p=\

fun(p,strlen(p)); puts(p); }

a)7654321 b)1714171 c)1711717 d)7177171

47.若有以下定义,则对a数组元素的正确引用是______. int a[5],*p=a;

a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)

48.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j

49.若有以下定义,则p+5表示___. int a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值

50. 以下程序的输出结果是__A______. #include

void fun(int x); int main() {

int x = 3; fun(x);

printf(“x = %d\\n”, x); }

void fun(int x) {

x = 5; }

A) 3 B) 5 C) 8 D) 2

51. 以下程序的输出结果是__B______. #include

void fun(int *p); int main() {

int x = 3; fun(&x);

printf(“x = %d\\n”, x); }

void fun(int *p) {

*p = 5; }

A) 3 B) 5 C) 8 D) 2

52. 以下count函数的功能是统计substr在母串str中出现的次数。 int count(char *str,char *substr) { int i,j,k,num=0; for(i=0; ① ;i++)

{for( ② ,k=0;substr[k]==str[j];k++,j++) if(substr[ ③ ]==’\\0’) {num++;break;} }

return num; }

① A) str[i]==substr[i] B) str[i]!=‘\\0’

C) str[i]==‘\\0’ D) str[i]>substr[i]

② A) j=i+1 B) j=i C) j=i+10 D) j=1

③ A) k B) k++ C) k+1 D) ++k

53. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

void Delblank(char *s) { int i,t; char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i]; c[t]=‘\\0’; strcpy(s,c); }

① A) s[i] B) !s[i] C) s[i]=‘\\0’ D) s[i]==‘\\0’

② A) s+i B) *c[i] C) *(s+i)=‘\\0’ D) *(s+i)

54. 以下conj函数的功能是将两个字符串s和t连接起来。 char *conj(char *s,char *t) { char *p=s; while(*s) ① ; while(*t)

{*s= ② ;s++;t++;} *s=‘\\0’; ③ ; }

① A) s-- B) s++ C) s D) *s

② A) *t B) t C) t-- D) *t++

③ A) return s B) return t C) return p D) return p-t

55. 下列程序的输出结果是 。 #include main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址

56. 下列程序的输出结果是 。 SS

A)出错 B) 18, 5 C) 5, 9 D) 5, 18

57. 若定义了以下函数: void f(……)

{……

p=(double *)malloc(10*sizeof(double)); …… }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是 。

A) double *p B) float **p C) double **p D) float *p

二、判断题

1.(F)指针变量里存放的是地址值,因此指针变量只能是int型的。 2.(T)在C语言中,所谓指针型数据,即指该数据是一个地址。 3.(T)有一个一维数组a[10],那么a与&a[0]等价。

4.(F)如有说明:int b[10], *p = b;表明在使用时b与p就完全等价了。

5.(T)数组中的每一个元素相当于一个变量。若要让一个指针变量指向它,必须用“&数组元

素”的方法向该指针变量赋值。

6.(F)有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,含义是一样的。

7.(F)在C语言中,每一个变量在内存里占用的单元数都是相同的。 8.(T)通过指针变量,就能间接地得到它所指向的变量的内容。

9.(T)说明语句:int *p, p1, p2;只说明了一个能指向int型变量的指针。

10.(F)有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p将

指向1501的内存单元。

11.(F)数组元素可以是不同数据类型的。

12.(F)如果初值表中的初值个数少于数组长度,那么C语言编译程序会自动把剩余的元素初

始化为初值表中的最后一个值。

13.主调函数把单个数组元素传递给修改该元素值的被调函数时,主调函数就能够得到修改

后的值。(F)

14.(T)设p是指向数组a的指针变量,则a[i]和p[i]等价。 15.(T)一个变量的指针就是该变量的地址。

16.(F)若定义int **p;则程序中调用*p时,它代表的是p的地址。

17.(F)若指针占用的内存大小为2Byte,则指向它的二重指针占用内存大小为4Byte . 18.(F)带参main函数中的形参的值可以在程序中得到。

19.(F)main(argc,argv)中的参数argv的定义格式为char argv[]。 20.(F)int **p;表示定义一个*p指针变量。

21.(F)在C语言中允许将一个整数赋给指针变量。

22.(F)一个指针变量加1表示将该指针变量的原值(地址)加1。 23.(F)int *p();表示定义一个指向函数的指针变量p。

24.(F)当函数实参中使用指针变量时,形参变量也必须使用指针变量。 25.(F)*p++等价于(*p)++。

26.(F)使用指针技术,可以通过修改形参变量的值达到修改实参变量的值的目的。。

27.(F)因为用字符数组和字符指针变量都能实现字符串的存储和运算,因此它们二者是完全等价的。

28.(T)对指向函数的指针变量,像p+n、p++、p- -等运算是无意义的。

29.(T)main(int argc,char *argv[])中的参数argc表示命令行只参数的个数。 30.(T)在int a[3][4];中a+i和*(a+i)的含义是不一样的。 31.(F)char *p[10];定义了一个指向字符数组的指针变量。