答案 试题 C 1. 在C语言源程序中,以下叙述正确的是( )。 A. main函数必须位于文件的开头 B. 每行只能写一条语句 C. 程序中的一个语句可以写成多行 D. 每个语句的最后必须有点号 C 2. 关于C语言的源程序的叙述中,错误的是( )。 A. C语言的源程序由函数构成 B. main函数可以书写在自定义函数之后 C. 必须包含有输入语句 D. 一行可以书写多个语句 C 3. 关于C语言数据类型的叙述,正确的是( )。 A. 枚举类型不是基本类型 B. 数组不是构造类型 C. 变量必须先定义后使用 D. 不允许使用空类型 C 4. C程序中main函数的位置( )。 A. 必须在最开始 B. 必须在系统库函数后面 C. 可以在自定义函数后面 D. 必须在最后 B 5. C语言的函数体由( )括起来。 A. ( ) B. { } C. [ ] D. /* */ D 6. 关于C语言的叙述中,不正确的是( )。 A. C程序可由一个或多个函数组成 B. C程序必须包含一个main()函数 C. C程序的基本组成单位是函数 D. 注释说明只能位于一条语句的后面 D 7. 以下叙述不正确的是( )。 A. C程序的执行总是从main函数开始 B. 一个C源程序必须包含一个main函数 C. C语言程序的基本组成单位是函数 D. 在编译C程序源程序时,可发现注释中的拼写错误 C 8. 结构化程序设计的三种基本结构是( )。 A. 函数结构、分支结构、判断结构 B. 函数结构、嵌套结构、平行结构 C. 顺序结构、分支结构、循环结构 D. 分支结构、循环结构、嵌套结构 C 9. 对于C语言源程序,以下叙述错误的是( )。 A. 可以有空语句 B. 函数之间是平等的,在一个函数内部不能定义其它函数 C. 程序调试时如果没有提示错误,就能得到正确结果 D. 注释可以出现在语句的前面 D 10. 下面关于C语言用户标识符的描述,正确的是( )。 A. 不区分大小写 B. 用户标识符不能描述常量 C. 类型名也是用户标识符 D. 用户标识符可以作为变量名 D 11. 以下( )是正确的变量名。 A. 5f B. if C. f.5 D. _f5 D 12. 以下( )是正确的常量。 A. E-5 B. 1E5.1 C. 'a12' D. 32766L D 13. 以下( )是正确的变量名。 A. a.bee B. -p11 C. int D. p_11 C 14. 以下( )是正确的字符常量。 A. "c" B. '\\'' C. 'W' D. "\32a" A 15. 以下( )是不正确的字符串常量。 A. 'abc' B. "12'12" C. "0" D. " " B 16. 以下( )是错误的整型常量。 A. -0xcdf B. 018 C. 0xe D. 011 B 17. 以下( )是正确的浮点数。 A. e3 B. .62 C. 2e4.5 D. 123 A 18. 若有说明语句:char c='\95'; 则变量c包含( )个字符。 A. 1 B. 2 C. 3 D. 语法错误 A 19. 若有定义:int a=2; 则正确的赋值表达式是( )。 A. a-=(a*3) B. double(-a) C. a*3 D. a*4=3 C 20. 语句x=(a=3,b=++a);运行后,x、a、b的值依次为( )。 A. 3,3,4 B. 4,4,3 C. 4,4,4 D. 3,4,3 B 21. 语句a=(3/4)+3%2;运行后,a的值为( )。 A. 0 B. 1 C. 2 D. 3 A 22. char型变量存放的是( )。 A. ASCII代码值 B. 字符本身 C. 十进制代码值 D. 十六进制代码值 C 23. 若有定义:int x,a;则语句x=(a=3,a+1);运行后,x、a的值依次为( )。 A. 3,3 B. 4,4 C. 4,3 D. 3,4 B 24. 若有定义:int a; 则语句a=(3 * 4)+ 2 % 3;运行后,a的值为( )。 A. 12 B. 14 C. 11 D. 17 A 25. 若有定义:int a,b; double x,则以下不符合C语言语法的表达式是( )。 A. x%(-3) B. a+=-2 C. a=b=2 D. x=a+b B 26. 若有定义:int x=2,y=3;float i;,则以下符合C语言语法的表达式是( )。 A. x=x*3=2 B. x=(y==1) C. i=float(x) D. i%(-3) C 27. 设double型变量a,b,c,e均有值;对代数式(3ae)/(bc),不正确的C语言表达式是( )。 A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c D. a*e/c/b*3 B 28. 下面叙述正确的是( )。 A. 2/3 与 2.0/3.0 等价 B. (int)2.0/3 与 2/3 等价 C. ++5 与 6 等价 D. 'A'与"A"等价 A 29. 下面叙述中,错误的是( )。 A. 其算术运算对象不包含函数 B. %(模运算符)的运算对象只能为整型量 C. 算术运算符的结合方向是"自左至右" D. 自加和自减运算符的结合方向是"自右至左" A 30. 下面叙述正确的是( )。 A. 强制类型转换运算的优先级高于算术运算 B. 若a和b是整型变量,(a+b)++是合法的 C. 'A'*'B' 是不合法的 D. "A"+"B"是合法的 B 31. 若有定义:int k,i=2,j=4; 则表达式 k=(++i)*(j--) 的值是( )。 A. 8 B. 12 C. 6 D. 9 C 32. 设整型变量a为5,使b不为2的表达式是( )。 A. b=(++a)/3 B. b=6-(--a) C. b=a%2 D. b=a/2 C 33. 若有定义:int a=1,b=2,c=3; 则语句 ++a||++b&&++c;运行后b的值为( )。 A. 1 B. 0 C. 2 D. 3 B 34. 若有定义:int i,j;则表达式(i=2,j=5,i++,i+j++)的值是( )。 A. 7 B. 8 C. 9 D. 10 B 35. 若有定义:int a,b;则表达式(a=2,b=5,a*2,b++,a+b)的值是( )。 A. 7 B. 8 C. 9 D. 10 B 36. 若有定义:int m=5,n=3;则表达式(m+1,n+1,(--m)+(n--))的值是( )。 A. 6 B. 7 C. 8 D. 9 B 37. 已知 int a;使用scanf()函数输入一个整数给变量a,正确的函数调用是( )。 A. scanf("%d",a); B. scanf("%d",&a); C. scanf("%f",&a); D. scanf("%lf",&a); D 38. 已知 double a;使用scanf()函数输入一个数值给变量a,正确的函数调用是( )。 A. scanf("%ld",&a); B. scanf("%d",&a); C. scanf("%7.2f",&a); D. scanf("%lf",&a); B 39. 已知 char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是( )。 A. scanf("%d",&a); B. scanf("%lf",&a); C. scanf("%c",&a); D. scanf("%u",&a); B 40. putchar()函数的功能是向终端输出( )。 A. 多个字符 B. 一个字符 C. 一个实型变量值 D. 一个整型变量表达式 D 41. getchar()函数的功能是从终端输入( )。 A. 一个整型变量值 B. 一个实型变量值 C. 多个字符 D. 一个字符 D 42. 若有定义:int x=1234,y=123,z=12;则语句printf("%4d+%3d+%2d", x, y, z);运行后的输出结果为( )。 A. 123412312 B. 12341234123412341231231231212 C. 1234+1234+1234 D. 1234+123+12 A 43. 已有如下定义和输入语句, int a; char c1,c2; scanf("%d%c%c",&a,&c1,&c2); 若要求a、c1、c2的值分别为10、A和B,正确的数据输入是( )。 A. 10AB B. 10 A B C. 10A B D. 10 AB B 44. 已有如下定义和输入语句: int a,b; scanf("%d,%d",&a,&b); 若要求a、b的值分别为10和20,正确的数据输入是( )。 A. 10 20 B. 10,20 C. a=10,b=20 D. 10;20 D 45. 以下程序的运行结果是( )。 void main() { int a=65; char c='A'; printf("%x,%d",a,c); } A. 65,a B. 41,a C. 65,65 D. 41,65 A 46. 下面叙述中,( )不是结构化程序设计中的三种基本结构之一。 A. 数据结构 B. 选择结构 C. 循环结构 D. 顺序结构 A 47. 下面叙述中,( )不是结构化程序设计三种基本结构的共同特点。 A. 先判断后执行 B. 单入口,单出口 C. 程序中没有执行不到的语句 D. 无死循环 A 48. 结构化程序设计不包括( )。 A. 最优化 B. 自顶而下,逐步细化 C. 模块化设计 D. 结构化编码 D 49. 以下运算符中优先级最高的是( )。 A. > B. || C. && D. + A 50. 若有定义:int x=3,y=4;则表达式 !x||y 的值为( )。 A. 1 B. O C. 3 D. 4 A 51. 若有定义:int i=7,j=8;则表达式 i>=j||i
b)&&(y=c>d) 的值为( )。 A. 0 B. 1 C. 5 D. 6 A 61. 若有定义:int a=2,b=3; float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值是( )。 A. 3.5 B. 3.0 C. 2.5 D. 2.0 C 62. 若有定义:int b=7; float a=2.5,c=4.7;则表达式a+(b/2*(int)(a+c)/2)%4的值是( )。 A. 2.5 B. 3.5 C. 4.5 D. 5.5 C 63. 若有定义:int a=6,b=2;char c1='a',c2='b';则表达式a+b%5+c2-c1的值是( )。 A. 7 B. 8 C. 9 D. 表达式错误 B 64. 以下的if语句中,x的值一定被重新赋值的是( )。 A. if(x==y) x+=y; B. if(x>y && x!=y ); x+=y; C. if(x!=y) scanf("%d",&x); else scanf("%d",&y); D. if(xy) z=x+y; else z=x-y; A. 3 B. -1 C. 4 D. 不确定 D 68. 若有定义:int a=1,b=2,c=3;则执行以下程序段后a,b,c的值分别为( )。 if (a=6) printf("%d\n",n); else printf("%d\n",++n); } A. 4 B. 5 C. 6 D. 7 B 73. 设有整型变量x,下述语句( )不会出现死循环。 A. for(;;x+=1); B. for(;(x=getchar())!='\n';); C. while(1) {x++;} D. for(x=10;;x--); B 74. 对于整型变量x,与while(!x)等价的是( )。 A. while(x!=0) B. while(x==0) C. while(x!=1) D. while(~x) A 75. 对于整型变量x和y,语句 for(x=0,y=0;(y!=123)&&(x<4);x++) y++; 中的“y++;”被执行( )。 A. 4次 B. 0次 C. 123次 D. 3次 B 76. 在c语言中while循环和do--while循环的主要区别是( )。 A. do--while循环体内可以使用break语句,while循环体内不能使用break语句 B. do--while的循环体至少无条件执行一次,while的循环体不是 C. do--while循环体内可以使用continue语句,while循环体内不能使用continue语句 D. while的循环体至少无条件执行一次,do--while的循环体不是 B 77. 以下程序段运行后,循环体运行的次数为( )。 int i=10,x; for (;i<10;i++) x=x+i; A. 10 B. 0 C. 1 D. 无限 D 78. 以下程序段运行后变量n的值为( )。 int i=1,n=1; for (;i<3;i++) {continue;n=n+i;} A. 4 B. 3 C. 2 D. 1 B 79. 以下程序的运行结果是( )。 void main() { int sum = 0, item = 0; while(item < 5) { item++; sum += item; if(sum==5) break; } printf("%d\n",sum); } A. 10 B. 15 C. 5 D. 6 C 80. 以下程序的运行结果是( )。 void main() { int sum = 0, item = 0; while(item < 5) { item++; sum += item; if(sum>=6) break; } printf("%d\n",sum); } A. 10 B. 15 C. 6 D. 7 B 81. 以下程序的运行结果是( )。 void main() { int sum = 0, item = 0; while(item < 5) { item++; if(item == 2) continue; sum += item; } printf("%d\n",sum); } A. 10 B. 13 C. 15 D. 1 A 82. 下列数组定义中,正确的是( )。 A. int a[5]={0}; B. int a[]={0 1 2}; C. int a[5]=0; D. int a[]; A 83. 下列数组定义中,正确的是( )。 A. int a[10]; B. int n=10,a[n]; C. int N=10;int a[N]; D. int n;scanf("%d",&n); int a[n]; A 84. 已知 int a[10]; 则对a数组元素引用不正确的是( )。 A. a[10] B. a[3+5] C. a[10-10] D. a[5] B 85. 若有定义:int a[3]={0,1,2};则a[1]的值为( )。 A. 0 B. 1 C. 2 D. 3 A 86. 若有定义:int a[5]={1,2,3,4,5};则语句a[1]=a[3]+a[2+2]-a[3-1];运行后a[1]的值为( )。 A. 6 B. 5 C. 1 D. 2 D 87. 以下能对一维数组a进行正确初始化的语句是( )。 A. int a[5]=(0,0,0,0,0); B. int a[5]=[0]; C. int a[5]={1,2,3,4,5,6,7}; D. int a[]={0}; D 88. 下面程序段的运行结果是( )。 int i=0,a[]={3,4,5,4,3}; do{ a[i]++; }while(a[++i]<5); for(i=0;i<5;i++) printf("%d ",a[i]); A. 4 5 6 5 4 B. 3 4 5 4 3 C. 4 5 5 5 4 D. 4 5 5 4 3 C 89. 下面程序段的运行结果是( )。 int i=0,a[]={7,5,7,3,8,3}; do{ a[i]+=2; }while(a[++i]>5); for(i=0;i<6;i++) printf("%d ",a[i]); A. 9 7 9 5 10 5 B. 9 5 9 3 10 3 C. 9 5 7 3 8 3 D. 7 5 7 3 8 3 A 90. 下面程序段的运行结果是( )。 int i=0,a[]={1,2,3,4,5}; do{ a[i]+=10; }while(a[++i]>2); for(i=0;i<5;i++) printf("%d ",a[i]); A. 11 2 3 4 5 B. 1 2 3 4 5 C. 11 12 13 14 15 D. 11 12 3 4 5 C 91. 设有如下程序段: int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0; for(i=0;i<3;i++) for(j=0;j int f(int x,int y) { return(x+y); } main() { int a=2,b=3,c; c=f(a,b); printf("%d+%d=%d\n",a,b,c); } A. 0 B. 2+3=5 C. 2+3=0 D. 3+2=5 D 113. 以下程序运行后屏幕输出为( )。 #include int a=2,b=3; int max(int a,int b) { int c; c=a>b?a:b; return(c); } main() { int a=4; printf("%d",max(a,b)); } A. 2,3 B. 2 C. 3 D. 4 B 114. 以下程序运行后屏幕输出为( )。 #include void f(int i) { int a=2; a=i++; printf("%d,",a); } main() { int a=1,c=3; f(c); a=c++; printf("%d",a); } A. 4,3 B. 3,3 C. 4,5 D. 3,5 D 115. 若有如下函数定义: int fun() { static int k=0; return ++k; } 以下程序段运行后屏幕输出为( )。 int i; for(i=1;i<=5;i++) fun(); printf("%d",fun()); A. 0 B. 1 C. 5 D. 6 D 116. 下面程序的输出结果是( )。 #include int global=100; fun() { int global=5; return ++global; } void main() { printf("%d\n",fun()); } A. 100 B. 101 C. 5 D. 6 B 117. 下列关于C语言函数的描述中,正确的是( )。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用都可以嵌套 D. 函数的定义和函数的调用都不可以嵌套 D 118. 若有以下宏定义, #define MOD(x,y) x%y 则执行以下程序段后,z的值是( )。 int z,a=15,b=100; z=MOD(b,a); A. 100 B. 15 C. 11 D. 10 B 119. 以下叙述中,正确的是( )。 A. “#define PRICE=30”定义了与30等价的符号常量PRICE B. 预编译处理命令行都必须以“#”开头 C. 宏名只能包含大写字母和数字字符 D. 在程序的一行上可以书写几个有效的宏定义 A 120. 以下叙述中,正确的是( )。 A. 宏展开不占用运行时间,只占用编译时间 B. 预编译处理命令行必须以分号结束 C. 一个源程序只能有一个预编译处理命令行 D. 使用带参数的宏定义时,应该说明每个参数的数据类型 C 121. 以下的叙述中不正确的是( )。 A. 宏展开不占用运行时间,只占用编译时间 B. 宏名无类型 C. 宏名必须用大写字母表示 D. 预处理命令行都必须以#号开始 A 122. 若有定义:#define PI 3,则表达式PI*2*2的值为( )。 A. 12 B. 4 C. 3 D. 不确定 C 123. 以下程序运行后,屏幕输出为( )。 #define MIN(a,b) ((a)<(b)?(a):(b)) main() {int x=2,y=3,z; z=2*MIN(x,y); printf("%d",z); } A. 2 B. 3 C. 4 D. 6 A 124. 下面程序的输出结果是( )。 #include #define SQR(x) (x*x) void main() { int a,b=3; a=SQR(b+2); printf("\n%d",a); } A. 11 B. 25 C. 不定值 D. 产生错误 C 125. 下面程序的输出结果是( )。 #include #define ONE 1 #define TWO ONE+1 #define THREE TWO+1 void main() { printf("%d\n",THREE-ONE); } A. 产生错误 B. 1 C. 2 D. 3 B 126. 以下叙述中正确的是( )。 A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以"#"开头 C. 每个C程序必须在开头包含预处理命令行:#include D. C语言的预处理不能实现宏定义和条件编译的功能 D 127. 设有以下语句,则( )是对a数组元素的不正确引用,其中0≤i<10。 int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a; A. a[p-a] B. *(&a[i]) C. p[i] D. *(*(a+i)) C 128. 对于基类型相同的两个指针变量之间,不能进行的运算是( )。 A. < B. = C. + D. - B 129. 执行以下程序段的输出结果是( )。 int a=10,*p=&a; printf("%d",++*p); A. 10 B. 11 C. 变量a的地址 D. 变量a的地址 + 1 A 130. 以下程序段运行后*(p+3)的值为( )。 char a[]="good"; char *p; p=a; A. 'd' B. '\0' C. 存放'd'的地址 D. 'o' C 131. 以下程序段运行后*(++p)的值为( )。 char a[5]="work"; char *p; p=a; A. 'w' B. 存放'w'的地址 C. 'o' D. 存放'o'的地址 B 132. 若有定义:int *p,a=4; p=&a;则以下均代表地址的是( )。 A. a,p B. &a,p C. &a,*p D. a,*p D 133. 若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是( )。 A. *p=&a;scanf("%lf",p); B. *p=&a;scanf("%lf",*p); C. p=&a;scanf("%lf",*p); D. p=&a;scanf("%lf",p); A 134. 在16位编译系统上,若有定义int a[]={10,20,30},*p=&a;当执行p++;后下列叙述错误的是( )。 A. p向高地址移了一个字节 B. p与a+1等价 C. 语句printf("%d",*p);输出20 D. p指向数组元素a[1] B 135. 下面语句正确的是( )。 A. int *p; *p=20; B. char *s="abcdef"; printf("%s\n",s); C. char str[]="abcd"; str++; D. char str[]={'a','b','c'};printf("%s",str); D 136. 若有以下程序段,且0≤i<4,0≤j<3,则不能正确访问a数组元素的是( )。 int i,j,(*p)[3]; int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p = a; A. *(*(a+i)+j) B. p[i][j] C. (*(p+i))[j] D. p[i]+j B 137. 若函数fun的函数头为: int fun(int i, int j) 且函数指针变量p定义如下: int(*p)(int i, int j); 则要使指针p指向函数fun的赋值语句是( )。 A. p=*fun; B. p=fun; C. p=fun(i,j); D. p=&fun; D 138. 设有如下变量定义: char aa[][3]={'a','b','c','d','e','f'}; char (*p)[3]=aa; 则以下程序段的运行结果是( )。 p++; printf("%c",**p); A. a B. b C. c D. d D 139. 以下程序段运行后x的值为( )。 int a[]={1,2,3,4,5,6,7,8}; int i,x,*p; x=1; p=&a[2]; for(i=0;i<3;i++) x*=*(p+i); A. 不确定 B. 24 C. 120 D. 60 B 140. 以下程序段运行后x的值为( )。 int a[]={1,2,3},b[]={4,2,5}; int *p,*q; int i,x; p=a; q=b; for(i=0;i<3;i++) if(*(p+i)==*(q+i)) x=*(p+i)*2; A. 2 B. 4 C. 6 D. 不确定 C 141. 以下程序段运行后x的值为( )。 int a[9]={1,2,3,4,5,6,3,8,9}; int *p,*q; int i,x; p=&a[0]; q=&a[8]; for(i=0;i<3;i++) if(*(p+i)==*(q-i)) x=*(p+i)*2; A. 2 B. 4 C. 6 D. 不确定 A 142. 下面程序的输出结果是( )。 #include void main() { int i; char *s="abc"; for(i=0;i<3;i++) printf("%s\n",s+i); } A. abc bc c B. c bc abc C. abc c bc D. a ab abc A 143. 下面程序的输出结果是( )。 #include void main() { char *str="12345",*ps=str+4; printf("%c\n",ps[-4]); } A. 1 B. 2 C. 3 D. 错误 A 144. 以下程序执行时,输入1 2 3 4 5<回车>,输出为: #include #define N 5 void main() { int a[N]; int *p=a; while(pa) printf("%d ",*(--p)); } A. 5 4 3 2 1 B. 1 2 3 4 5 C. 2 3 4 5 1 D. 4 3 2 1 5 C 145. 设有以下定义语句: struct student { int num; char name[10]; float score; } wang,zhang; 则不正确的叙述是( )。 A. struct是结构体类型的关键字 B. zhang是结构体变量名 C. wang是结构体类型名 D. num,name,score都是结构体类型student的成员名 B 146. 设有以下定义语句: struct student { int num; char name[10]; float score; } wang,zhang; 则变量wang所占的内存字节数是( )。 A. 14 B. 16 C. 18 D. 20 B 147. 设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d", sizeof(struct str_type));”的输出结果是( )。 A. 100 B. 116 C. 120 D. 200 C 148. 若有定义: struct teacher {int num; char name[10]; char sex; int age; float score; }teacher1; 则变量teacher1所占用的内存字节数是( )。 A. 5 B. 14 C. 19 D. 20 C 149. 下列对结构体类型变量定义不正确的是( )。 A. struct teacher {int num; int age; }teach1; B. struct {int num; int age; }teach1,teach2; C. struct {int num; int age; }teacher; struct teacher teach1; D. struct teacher {int num; int age; }; struct teacher teach1; D 150. 若有定义: struct teacher {int num; char sex; int age; }teacher1; 则下列叙述不正确的是( )。 A. struct是结构体类型的关键字 B. struct teacher是用户定义的结构体类型 C. num,sex,age都是结构体变量teacher1的成员 D. teacher1是结构体类型名 D 151. 以下程序的运行结果是( )。 #include union Utype{ int i; float f; }u[2]; void main() { printf("sizeof(u):%d\n",sizeof(u)); } A. 2 B. 4 C. 6 D. 8 D 152. 以下程序的运行结果是( )。 #include union Utype{ int i; float f; }; struct{ char ch[2]; int i; union Utype u; }a; void main() { printf("sizeof(a):%d\n",sizeof(a)); } A. 5 B. 6 C. 7 D. 8 D 153. 以下C语言共用体类型数据的描述中,不正确的是( )。 A. 共用体变量占的内存大小等于所需内存最大的成员所占的内存 B. 共用体类型可以出现在结构体类型定义中 C. 在定义共用体变量的同时允许对第一个成员的值进行初始化 D. 同一共用体中各成员的首地址不相同 A 154. 若有以下定义: struct link { int data; struct link *next; } *head, *p; 并已建立如下图所示的链表结构: ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼→│data│next┼→...─→│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘ 指针p指向如下结点: ┌──┬──┐ p →│data│next│ └──┴──┘ 则能够把p所指结点插入到链表中成为链表第2个结点的程序段是( )。 A. p->next = head->next; head->next = p; B. head->next = p; p->next = head->next; C. p.next = head.next; head.next = p; D. (*head).next = p; (*p).next = (*head).next; D 155. 若有以下定义: struct link { int data; struct link *next; } a,b,c, *head, *p; 其中,指针head指向变量a, p指向变量c,a.next指向变量b,链表结构如下图所示: a b c ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼→│data│NULL│ p →│data│next│ └──┴──┘ └──┴──┘ └──┴──┘ 则能够把c插入到a和b之间并形成新链表的程序段是( )。 A. a.next = c; c.next = b; B. head.next = p; p.next = head.next; C. head->next = &c; p->next = head->next; D. (*head).next = p; (*p).next = &b; A 156. 若有以下定义: struct link { int data; struct link *next; } *head, *p; 并已建立如下图所示的链表结构: p ↓ ┌──┬──┐ ┌──┬──┐