循环练习试题

练习试题

练习试题一
练习试题二
练习试题三


练习试题一

一、单项选择题   

1、以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是__A____。

A. if((a>b)&&(b>c)) k=1;      B. if((a>b)||(b>c))  k=1

     else  k=0;                     else  k=0;

C. if(a<=b)  k=0;            D. if(a>b)  k=1;

    else if(b<=c)  k=1;               else  if(b>c)  k=1;

                                        else k=0;

2、C语言的do_while循环中,循环由do开始,用while结束;而且在while表达式后面的___B___不能丢,它表示do_while循环的结束。

  A. \n            B. “;”           C. “%”          D.  “,”

3、执行程序段: x=-1; do { x=x*x;} while(!x); 的结果是__C____。

A. 死循环                      B. 循环执行2次    

C. 循环执行一次                D. 有语法错误

4、下面程序段的输出结果是__D____。

int i,sum;

  for(i=1;i<=10;i++)sum+=sum;

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

A. 10             B. 9          C. 15                 D.不确定

5、以下叙述正确的是___C___。

A. for循环中设置for(条件)break,当条件成立时中止程序执行。

B. for循环中设置for(条件)continue,当条件成立时中止本层循环。

C. for循环中设置for(条件)break,当条件成立时中止本层循环。

D. for循环中设置for(条件)break,当条件成立时暂停本次循环。

6、下面有关for循环的正确描述是__D____。

A. for循环只能用于循环次数已经确定的情况。

B. for循环是先执行循环体语句,后判断表达式。

C. 在for循环中,不能用break语句跳出循环体。

D. for循环的循环体语句中,可以包含多条语句。

7、以下能正确计算1×2×3×4...×10的程序段是__C____。

A. do {i=1; s=1; s=s*i; i++; } while(i<=10);

B. do {i=1; s=0; s=s*i; i++; } while(i<=10);

C. i=1; s=1; do {s=s*i; i++; } while(i<=10);

D. i=1; s=0; do {s=s*i; i++; } while(i<=10);

8、有以下程序        B

  #include <stdio.h>

  void main()

  {   int  a=5,b=4,c=3,d=2;

      if (a>b>c)   printf("%d\n", d);

      else  if ( (c-1>=d) ==1)   printf("%d\n", d+1);

           else  printf("%d\n", d+2);   

}

执行后输出结果是__B____。

A. 2             B. 3           

C. 4               D. 编译时有错,无结果

9、以下程序段的输出结果是__D____。

int x,i;

for (i=1;i<=100;i++)

{ x=i; if (++x%2==0) if (++x%3==0) if (++x%7==0) printf("%d ",x); }

A. 39 81         B. 42 84         C. 26 68          D. 28 70

10、设有程序段: int k=10; while(k=0) k=k-1; ,则下面描述正确的是___C___。

A. while 循环执行10次          B.循环是无限循环

C. 循环体语句一次也不执行      D.循环体语句执行一次

11、有以下程序:

#include<stdio.h>

void main()  {  while(putchar(getchar())!='?'); }

当输入"china?"时,程序的执行结果是_D_____。

A. china        B. dijob          C. dijob?         D. china?

12、下面程序的运行结果是_B_____。

#include<stdio.h>

void main()

  {  int i,j,x=0;

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

{ x++; for(j=0;j<=3;j++) { if(j%2) continue; x++; } x++; }

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

A. x=4           B. x=8         C. x=6            D. x=12

13、若有条件表达式(expression) ?a++:b--,则以下表达式中能完全等价于表达式(expression)的是___B___。

A. (expression==0)     B. (expression!=0)         

C. (expression==1)     D. (expression!=1)         

14、下面循环的循环次数是___D___。

int x=3; while(x=0){printf("%d\n",x); x--;}

A. 3次           B. 2次        C. 1次          D. 0次

15、设i为整型量,执行循环语句for(i=500;i>=0;i-=100);后,i值为___D___。

  A. 500         B. 0             C. 100          D. -100

16、以下_B_____为不正确的if语句。

A. if(x<y);

B. if(x!=y) scanf("%d",&x) else scanf("%d",&y);

C. if(x==y) x+=y;

D. if(x<y) {x++;y++;}

17、下面程序段运行结果是_A_____。

  int i,j,a=0;  

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

{ for(j=0;j<4;j++){if (j%2) break; a++; } a++; } printf("%d\n",a);

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

18、下面程序段的输出结果是___A___。

int i,j,k;

  for(i=2;i<6;i++,i++)

  { k=1;   for(j=i;j<6;j++)  k+=j;}

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

A. 10             B. 9 C. 8             D. 11

19、循环语句for(i=0,x=0;!x&&i<=5;i++);的执行次数为__B____。

A. 5次           B. 6次        C. 1次            D. 无限

20、以下描述正确的是__C____。

A. goto语句只能用于退出多层循环

B. switch语句中不能出现continue语句

C. 只能用continue语句来终止本次循环

D. 在循环中break语句不能独立出现

21、对于for(表达式;;表达式3)可理解为___B___。

A. for(表达式;0;表达式3)

B. for(表达式;1;表达式3)

C. for(表达式;表达式1;表达式3)

D. for(表达式;表达式3;表达式3)

22、以下不正确的描述是__B____。

A. break 语句不能用于循环语句和switch语句外的任何其他语句

  B. 在switch语句中使用break语句或continue语句的作用相同

C. 在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环的执行

D. 在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环

23、下面程序段的输出结果是__D____。

int x=3;

  do{printf("%3d",x-=2);} while(!(--x));

  A. 1 2            B. 3 2            C. 2 3           D. 1 -2

24、请阅读以下程序:

#include <stdio.h>

void main ()

{ char c;   c=getchar();   

  if ((c>='A'&&c<='Z')||(c>='a'&&c<='z'))

   printf("input character is letter\n");

  else if (c>='0'&&c<='9')

  printf("input character is digit\n");

  else

  printf("other character\n");

}

若运行时输入大写字母A,则上面程序的输出结果是__A____。

   A. input character is letter

   B. input character is digit

   C. other character;}

   D. A

25、有如下语句 int x=3; do { printf("%d\n",x-=2);} while(!(--x)); 则上面程序段___B___。

A. 输出的是1                  B. 输出的是1和-2

C. 输出的是3和0              D. 是死循环

二、判断题

1、C语言的循环语句for,while,do_while中,其中用于直接中断最内层循环的语句是break。T

2、for循环语句比while循环语句功能更强,凡是用while循环能完成的,用for循环都能实 现。T

3、while循环和do-while循环的while()后一定要有一个分号。F

4、if语句后面的表达式并不限于是关系表达式或逻辑表达式,而可以是任意表达式。if语         句中可以再嵌套if语句。T

5、一个if语句中可以嵌套一个switch语句。T

6、若a、b均为int型变量,且a=100,则以下的for循环是死循环.

    for (b=100;a!=b;++a,b++) printf("----\n"); 。F

7、if (x=y)&&(x!=0) x+=y; 语句语法是错误的。T

8、for(i=0,j=10;i<=j;i++,j--) k=i+j;执行完后,k的值为50。F

9、以下程序段的输出结果是987。

   int n=10; while (n>7) { n--;printf("%d ",n);}T

10、if(a=5) 语句;if(b) 语句;都是非法的。F

11、for循环可以在表达式3中包含使循环趋于结束的操作,但必须是一条表达式语句。F

12、while语句do-while语句无论什么情况下,二者的执行结果都一样。F

13、一个if语句中可以嵌套另一个if语句。T

14、if (x>y) 语句语法是正确的。F

15、要使for(表达式1;表达式2;表达式3){循环体}不形成死循环,表达式2一定不能为空。

F

三、填空题

1、鸡兔共有30只,脚共有90个,下面程序是计算鸡兔各有多少只。

#include<stdio.h>

void main()

{  int x,y;

for(x=1;x<=29;x++)

{  y=30-x; if (___________)printf("%d,%d\n",x,y); } }       1 x*2+y*4==90

2、下面程序的功能是从键盘输入的一组字符中分别统计出大写和小写字母的个数,当输入换行符时结束输入。

#include<stdio.h>

void main()

{  int m=0,n=0; char c;

    while ( (___________)!='\n')

{  if (c>='A' && c<='Z') m++;

 if (c>='a' && c<='z') n++; }

    printf("m=%d,n=%d\n",m,n);}                         1 c=getchar()

3、以下程序输出结果为___________。

#include<stdio.h>

void main()

{ int x,y;

   for(x=30,y=0;x>=10,y<20;x--,y++)  x/=2,y+=2;

   printf("x=%d,y=%d\n",x,y);}                          x=-1,y=21

4、下面程序使循环结束的条件是___________。

#include<stdio.h>

void main()

{ int k;

   for(k=250;i;i-=5);

   printf("%d\n",i);  }                                i=0

5、若从键盘输入68,则以下程序输出的结果是___________。

  #include<stdio. h>

void main()

  {  int  a;    scanf("%d",&a);

     if(a>50)  printf("%d",a);

     if(a>40)  printf("%d",a);

     if(a>30)  printf("%d",a);   }                       686868

6、#include <stdio.h>

void main()

{int p, a=5;

 if (p=a != 0 )   printf("%d\n", p);

 else   printf("%d\n", p+2);   }执行后输出结果是___________。  1

7、#include<stdio.h>

void main()

{ char ch;

    while((ch=getchar( ))!='\n')

{ if(ch>='A' && ch<='Z') ch=ch+32;

else if(ch>='a'&&ch<'z') ch=ch-32;

          printf("%c",ch);}

printf("\n"); }                             abcDEF

8、下面程序的运行结果是___________。

#include<stdio.h>

void main()

{ int i;

   for(i=100;i>=0;i-=10);

   printf("%d\n",i);  }                                 -10

9、以下程序运行后的输出结果是___________。

#include <stdio.h>

void main( )

 { int a=2, b=1, c=2;

   if  (a)  

      if ( b<0 ) c=0;

      else  c++ ;

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

  }                                             3

10、下面程序的运行结果是___________。

#include<stdio.h>

void main()

{ int a,i;

for( a=1,i=-1;-1<=i<1;i++) { a++; printf("%2d",a); }

printf("%2d",i);
}                              -1

练习试题二

一、单项选择题  

1.  以下程序的输出结果是______。

#include<stdio.h>  

void main()

  {  int num=0;    while(num<=2) { num++; printf("%d",num); }  }

A. 2           B. 1             C. 123           D. 12    

参考标准答案 :C

  

2.  两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是______。

#include <stdio.h>

void main()

{  int x;     scanf("%d",&x);

     if(x>5)printf("%d",x);

     else printf("%d\n",x--);    

}

A. 7和5       B. 6和3    C. 7和4      D. 6和4

参考标准答案 : D

3.  以下描述中正确的是______。

A. 由于do-while循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。

B. do-while循环由do开始,用while结束,因此在while(表达式)后无需加分号。

C. 在do-while循环体中,一定要有能使while后面表达式的值变为“假”的操作。

D. do-while循环中,根据情况可以省略while。

                        参考标准答案 : C

4. 下面程序段的输出结果是______。

int i=10;

  while(i>7) { i--;   printf(" %d",i);  }

A. 10 9 8          B. 9 8 7      C. 10 9 8 7            D. 8 9 10

                        参考标准答案 :B

5. 若i为整型变量,则以下循环执行的次数是______。

  for(i=2;i==0;) printf("%d",i--);

A. 无限次      B. 0次          C. 1次          D. 2次

                        参考标准答案 : B

6. 执行下面程序段后,i值是______。

int i=0;   do {++i; if(i%2!=0);}while(i<=100);

  A. 101            B. 100         C. 99              D. 98

                        参考标准答案 : A

7. 若变量都已正确说明,则以下程序段输出为______。

int a=1,b=2,c,d;

if (a==b)  c=d=a;

else      c=b;

d=b;  

printf("c=%d,d=%d",c,d);

A. c=1,d=1   B. c=1,d=2 C. c=2,d=1 D. c=2,d=2

                    参考标准答案 : D

8. 以下程序输出结果是______。

#include <stdio.h>

void main ( )

{  int m=5;

if (m++>5) printf("%d\n",m);

else printf("%d\n",m--);   }

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

                        参考标准答案: B

9. 在C语言中______。

A. 不能使用do_while语句构成的循环

  B. do_while语句构成的循环必须用break语句才能退出

  C. do_while语句构成的循环,当while语句中的表达式为非0时结束循环

  D. do_while语句构成的循环,当while语句中的表达式为0时结束循环

                        参考标准答案案: D

10. 在下列选项中,没有构成死循环的程序段是______。

A. int i=100; while (1) {i=i%100+1; if(i>100)break;}

B. for(;;);

C. int k=1000; do{--k} while (k)

D. int s=36; while(s>=0);++s;

                        参考标准答案: C

11. 以下叙述正确的是______。

A. 可以把define和if定义为用户标识符

B. 可以把define定义为用户标识符,但不能把if定义为用户标识符

C. 可以把if定义为用户标识符,但不能把define定义为用户标识符

D. define和if都不能定义为用户标识符

                        参考标准答案: B

12. 下面有关for循环的正确描述是______。

A. for循环只能用于循环次数已经确定的情况

B. for循环是先执行循环体语句,后判定表达式

C. 在for循环中,不能用break语句跳出循环体

D. for循环体语句中,可以包含多条语句,但要用花括号括起来        参考标准答案: A

13.   下面说法中正确的是______。

A.编程时,应该尽量控制嵌套循环的重数。

B.编程时,变量名应尽可能的简短。

C.编程时,应多用goto语句,以增强程序的灵活性。

D.编程时,要尽可能的简洁而新颖,可理解性是第二位的。

                        参考标准答案: A

 14.   以下程序的输出结果是______。

# include <stdio.h>

void main()

{   int i=0, j=0, k=6;

if ((++i>0)||(++j>0))   k++;

printf("%d, %d, %d\n", i, j, k);   

}

A. 0, 0, 6      B. 1, 0, 7      C. 1, 1, 7   D. 0, 1, 7

                         参考标准答案  B

  15.   C语言的for语句中的表达式可以部分或全部省略,但两个______不可省略。但当三个表达式均省略后,因缺少判断条件,循环会无限制地进行下去,形成死循环。

A. “<”          B. “++”         C. “;”           D. “,”

                        参考标准答案  C

   16.    以下程序段中不能根据x值正确计算出y值的是______。

A. if(x>0) y=1;                 B. y=0;

else  if(x==0) y=0;   if(x>0) y=1;

    else y=-1;                  else  if(x<0) y=-1 ;

C. y=0;                      D. if(x>=0)

if(x>=0);                          if(x>0) y=1;

if(x>0) y=1 ;                       else y=0;

else y=-1;                       else y=-1;

                         参考标准答案  C

   17.    设有程序段: int x=0,s=0; while(!x!=0) s+=++x; printf("%d",s); ,则运行程序段后______。

A.输出0                        B.输出1

C.控制表达式是非法的           D.执行无限次

                         参考标准答案  B

  18.  以下的for循环,______。for(x=0,y=0;(y!=123)&&(x<4);x++);

A.执行3次                    B.执行4次

C.循环次数不定                D.是无限循环

                         参考标准答案  B

 19.请阅读以下程序:

  #include<stdio. h>

  void main()

  {  float  a,b;   scanf("%f",&a);

     if (a<10.0) b=1.0/a;

     else  if((a<0.5)&&(a!=2.0))b= 1.0/(a十2.0);

          else  if(a<10.0)  b= 1.0/a ;

               else  b=10.0;

     printf("%f\n",b);   

}     

若运行时输入2.0(回车),则上面程序的输出结果是______。

A. 0.000000   B. 0.500000 C. 1. 000000 D. 0.250000

                         参考标准答案  B

  20.   语句while (!e);中的条件!e等价于______。

  A. e==0;         B. e!=1          C. e!=0           D. ~e

              参考标准答案  A

 21.   以下程序输出结果为______。

#include <stdio.h>

void main()

{  int i,b,k=0;

   for(i=1;i<=5;i++) { b=i%2; while (b-->=0) k++;} printf("%d,%d\n",k,b); }

A. 3,-1          B. 8,-1          C. 3,0            D. 8,-2

                        参考标准答案  D

 22.  下面程序的运行结果是______。

int y=10; do { y--;} while(--y); printf("%d\n",y--);

  A. -1           B. 1             C. 8             D. 0

                        参考标准答案 D

 23.   有如下程序段运行结束后x的值为______。

int x,y;

  for(x=1,y=1;x<=100;x++)

  { if (y>=20) break; if (y%3==1) { y+=3;continue;} y-=5; }

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

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

                      参考标准答案  B

   24.循环语句for(i=100;i;i-=30); 的执行次数为______。

A. 3次           B. 4次        C. 5次            D. 0次

                        参考标准答案  B

 25.   设有程序段:int n=0; while(n++<3); printf("%d",n);,则运行结果是______。

A. 2            B. 3            C. 4             D. 以上都不对

                        参考标准答案  C

二、判断题  

  1.    do-while语句构成的循环只能用break语句退出。

                         参考标准答案 :错

 2.   C语言的While循环语句中,While后一对圆括号中的表达式的值决定了循环体是否进行,因此,进入While循环后,一定要有能使表达式的值变为0的操作。

                         参考标准答案 :对

 3.   C语言程序的三种基本结构是嵌套结构、递归结构、顺序结构。

                         参考标准答案:错

 4.    if (x!=y)  scanf("%d",&x);else  scanf("%d",&y); 语句语法是错误的。

                        参考标准答案 :错

 5.    if语句执行时,首先计算紧跟在if后面一对圆括号中的表达式的值,如果表达式的值为非零("真"),则执行if后的"语句",然后去执行if

语句后的下一个语句。

                         参考标准答案 :对

 6.    语句int x=3;do { printf("%d\n",x-=2);} while(!(--x)); 输出的是1和-2。

                         参考标准答案: 对

  7.    语句 x=3; do {printf("%2d",x--);} while(!x); 的执行结果是3。

                        参考标准答案 : 对

 8.    执行完下面程序段后,k的值为0。

int i,j,k; for(i=0,j=10;i<=j;i++,j--) k=j-i;

                         参考标准答案 : 对

 9.    if (x>0) printf ( "%f ",-x )语句语法是正确的。

                         参考标准答案 :错

 10.     for后的一对圆括号中,可以出现各种形式的与循环控制无关的表达式。

                         参考标准答案 :对

 11.    用do-while语句构成循环时,只有在while后的表达式为非0时结束循环。

                         参考标准答案 : 错

  12.   若i为整型变量,则以下循环 i=0; while(i=0)i++;一次也不执行。

                         参考标准答案 : 对

  13.     各case和default子句的先后顺序可以变动,而不会影响程序执行结果。

                         参考标准答案 :对

  14.     while循环的while()后没有分号,而do-while循环的while()后一定要有一个分号。

                        参考标准答案 : 对

  15.    for循环中,如果表达式2为空,则该循环一定是死循环。

                        参考标准答案 : 错

三、填空题   

1.  下面程序的运行结果是___________。

#include<stdio.h>

void main()

{ int a=0,i=0;

   while(a<=6){++i;a+=i;}

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

                        参考标准答案: 10

2.  有以下程序

#include<stdio. h>

void main( )

  {  int n=0,m=1,x=2;

     if(!n)   x-=1;

     if(m)   x-=2;

     if(x)   x-=3;  

     printf("%d\n",x);  }执行后输出结果是___________。

                        参考标准答案:-4

3.  运行以下程序后,如果从键盘上输入student#<回车>,则输出结果为___________。

#include<stdio.h>

void main()

{ int v1=0,v2=0;   char ch;

   while((ch=getchar( ))!='#')

   switch(ch){case 'd':case 't':default: v1++;case 'a': v2++;}

   printf("%d,%d\n",v1,v2);}

                        参考标准答案 : 7,7

4.  若输入整数12345,以下程序的输出结果为___________。

#include<stdio.h>

void main()

{ int x,y;   scanf("%d",&x);

do{y=x%10;printf("%d",y);x/=10;} while(x);}

                        参考标准答案 : 54321

5.   

以下程序输出的结果是___________。

#include<stdio.h>

void main()

{ int i,j;

   for(j=10;j<11;j++){for(i=9;i==j-1;i++)printf("%d",j);}}

                         参考标准答案 :10

6.   

以下程序的运行结果是___________。

#include <stdio.h>

void main()

{int a,b,c; int s,w=0,t=0; a=-1;b=3;c=3;

 if(c>0) s=a+b;

 if(a<=0) {if(b>0) if(c<=0)w=a-b; }

 else  if(c>0)w=a-b;

       else t=c; printf("%d,%d,%d\n",s,w,t); }

                          参考标准答案 :2,0,0

 7.   

下面程序的运行结果是___________。

#include<stdio.h>

void main()

{ int a=0,i=0;

   do{++i;a+=i;} while(a<=6);

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

                         参考标准答案 :10

 8.     

以下程序完成的功能是___________。

#include <stdio.h>

void main( )

 { int  shu;

   printf("请输入一个整数%%d:\n");

   scanf("%d", &shu );

   if  ( shu < 0 )   

      shu = -shu;

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

  }

                         参考标准答案 :输出从键盘上输入数据的绝对值

  9.    

下面是计算n!的值的程序。

#include<stdio.h>

void main()

{ int i,s,n;   s=1;   scanf("%d",&n);

   for(i=1;i<=n;i++)___________;

   printf("s=%d\n",s);  }

                        参考标准答案 : s=s*i

 10.    

以下程序输出结果为___________。

#include"stdio.h"

void main()

  {  int i;

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

printf("%d",i); }

                        参考标准答案 : 10

练习试题三

一、单项选择题  

1.下面给出的是使用typedef 定义一个新数据类型的4项工作,如果要正确定义一个新的数据类型,进行这4项工作的顺序应当是______。

  1.把变量名换成新类型名 2.按定义变量的方法写出定义体

  3.用新类型名定义变量 4.在最前面加上关键字 typedef

  A. 2,4,1,3   B. 1,3,2,4 C. 2,3,4,1 D. 4,2,3,1

2. 设有以下链表,则不能将q所指的结点插入到链表末尾的是______。

A. q->next=NULL;p=p->next;p->next=q;

B. p=p->next;q->next= p->next; p->next=q;

C. p=p->next;q->next= p; p->next=q;

D. p=(*p).next;(*q).next= (*p).next; (*p).next=q;

3. 阅读程序,选择正确的输出结果______。

  #include <stdio.h>

  void main()

  {  union

     {  int i[2];   long k;   char c[4]; }  t, *s = &t;

     s->i[0] = 0x39;     s->i[1] = 0x38;

     printf("%c\n",s->c[0]);  }

  A. 39       B. 9          C. 38         D. 8

4. 设有以下定义,则不正确的引用是______。

  struct student

  {int age;

 int num;

}stu,*p;

p=&stu;

A. stu.age      B. p->age     

C. (*p).age     D. *p.age

5. 设有以下说明union {  int i;  char c;   float f; }a;

则错误的叙述是______。

A. a所占的内存长度等于成员f的长度

B. a的地址和它的各成员地址都是同一地址

C. a可以作为函数参数

D. 不能对a赋值,也不能在定义a时对它初始化

6. 阅读程序,选择正确的输出结果______。

  #include <stdio.h>

  void main()

  {    union

       {  char c;   int i;  }t;

       t.c = 'A'; t.i = 1;

       printf("%d,%d",t.c , t.i); }

  A. 65,1   B. 65,65 C. 1,1      D. 以上都不对

7. 结构体类型变量所占内存是______。

A. 各成员所需内存的总和

B. 结构体中第一个成员所需内存量

C. 结构体中占内存量最大者所需内存量

D. 结构体中最后一个成员所需内存量

8. 对结构体类型变量定义不正确的是______。

  A. #define STUDENT  struct student       B.struct student

     STUDENT                               { char name;

          {char name;                           int num;

           int num;                             }stu;   

}std;

C. struct                               D. struct    

{char name;                              {char name;

int num;                                 int num;

}std;                                     }student;

                      struct student stu;

9. 设有以下定义,则不正确的引用是______。

struct student

{int age;

 int num;

}*p;

A. ( p++)->num     B. p++     

C. (*p).num      D. p=&student.age

10. 设有以下定义,p指向num域的是______。

struct student

{int num;

 char name[10];

}stu,*p;

A. p=&stu.num; B. *p=stu.num;     

C. p=(struct student *)&(stu.num);     D. p=(struct student *)stu.num;

11. 设有以下定义,则不正确的引用是______。

struct student

{int age;

 char sex;

char name[10];

}stu[5],*p;

p=stu;

A. scanf("%s",stu[0].name); B. scanf("%d",&stu[0].age);     

C. scanf("%c",&(p->sex));      D. scanf("%d", p->age);

12. 阅读程序,选择正确的输出结果______。

  #include <stdio.h>

  void main()

  {  union

     {  short int i[2];  long k;  char c[4];  }  t, *s = &t;

     s->i[0] = 0x39;     s->i[1] = 0x38;

     printf  ("%x\n",s->k); }

  A. 390038   B. 380039     C. 3938       D. 3839

13. 以下对C语言中共用体类型数据的正确叙述是______。

  A. 一旦外定义了一个共用体变量,即可引用该变量或该变量中的任意成员。

  B. 一个共用体变量中可以同时存放其所有成员。

  C. 一个共用体变量中不能同时存放其所有成员。

  D. 共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中。

14. C语言中结构体类型变量在程序执行期间______。

A. 所有成员一直驻留在内存中

B. 只有一个成员驻留在内存中

C. 部分成员驻留在内存中

D. 没有成员驻留在内存中

15.选择一种格式填入,使下面程序段中指针p指向一个整型变量。

int *p;

p=_______maclloc(sizeof(int));

A.  int         B.  int *         C.  (* int)       D.  (int *)

16. 设有以下说明union {  int i;  char c;   float a; }test;

则sizeof(test)的值是______。

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

17已知:union u{  int i;  char ch;  }temp;现在执行"temp.ch= 'a'" ,temp.i的值为______。

  A. 266    B. 256 C. 97     D. 1

18. 以下程序的输出结果是______。

typedef union {long a[2];

int b[4];

char c[8];}UN;

UN u;

main()

{printf("%d\n",sizeof(u));}

A. 32       B. 16        C. 8        D. 24

19. 以下程序输出为______。

  #include "stdio.h"

  mai()

  {struct birthday

      {int year,month,day;

       }birth;

printf("%d\n",sizeof(struct birthday));

}

A. 6     B. 8      C. 10      D. 12

20. 下面对枚举类型名的正确定义是______。

  A. enum  a={one,two,three}; B. enum  a {one=9,two=-1,three};

  C. enum  a={"one","two","three"}; D. enum a {"one","two","three"};

二.多选

有以下定义:

  struct student

  { int num;

float score;

}stu;

则下面叙述正确的是______。

A. struct是结构体类型的关键字

B. struct stu是用户定义的结构体类型

C. stu是用户定义的结构体类型名

D. num和score是结构体成员名

三、判断题   

 1.   共用体类型变量的地址及其中所有成员的起始地址都不相同。

2. 共用体类型变量必须在不同时间内维持相同类型的成员值。

3. C语言中可以用typedef为类型定义新的类型名。

4. 可以用指向结构体的指针作为函数参数。

5. 同数组一样,可以对链表中的结点进行随机存取。

6. 链表在内存中可以是不连续存放的。

7. C语言中可以用typedef同#define一样,都是在预编译时处理的。

8. 枚举型变量只能取枚举类型定义中的某个枚举值,不能是其它值。

9. 链表是动态地进行存储分配的一种结构。

10. 链表中各结点的联系是通过指针来实现的。

11. 结构体类型变量中各成员名不能与程序中的其他变量同名。

12. 结构体类型变量中的成员不能是结构体类型。

13共用体也称为联合。

14.可以把结构体类型变量作为整体进行输入、输出。

15. 在C编译系统中,枚举元素不能被赋值。

16. 在C语言中,可以定义不同类型的数据共享同一段内存区域,这种形式的数据构造类型称为结构体。

17. 结构体类型变量中各成员共用一段内存。

18. C语言中可以用typedef来定义变量。

19. 共用体类型变量在定义时进行的初始化,只能根据第一个成员的类型来进行。

20. 在C编译系统中,将枚举元素作为常量来处理。

21结构体类型变量可以在定义时赋初值。

22.共用体类型变量可以在不同时间内维持不同类型的成员值。

23. 共用体中的所有成员是以同一个地址开始存放。

四、填空题   

1.下面程序的输出结果是________。

struct stu

{ int x,*y;

}*p;

int d[4]={10,20,30,40};

struct stu a[4]={50,&d[0],60, &d[1],70, &d[2] ,80,&d[3]};

main()

{ p=a;

  printf("%d,",++p->x);

  printf("%d,",(++p)->x);

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

}

2. 设有以下定义:

union

{int i;

 char c;

 flaot f;

}u;

则共用体变量u在内存中占的字节数是________。

3.以下程序的运行结果是________。

union un

{ int a;

 int b;

};

union un s[4];

union un *p;

main()

{ int n=1,i;

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

 {s[i].a=n; s[i].b=s[i].a+1; n=n+2;

}

p=&s[0];

printf("%d,",p->a);

printf("%d",++p->a);

}

4.以下程序段定义一个结构体,使有两个域data和next,其中data存放整形数据,next为指向下一个结点的指针。

struct object{int data;

_______________

}node;

5.已知有如下定义:

  struct student

  { int num;

char name[10];

char sex;

int age;

 float score;

char address[50];

}stu;

则系统为stu分配的内存单元为______。

6.在程序的横线上填入适当的内容使程序能输出结构体变量stu所占内存字节数。

 struct student

{double num;

  char name[20];

};

main()

{ struct student stu;

   printf("stu size:%d\n",____________);

}

参考答案:ACBDC  CADDC  DBCAD  ACCAB  

ABD

FFTTF  TFTTT  FFTFT  FFFTT  TTT

51,60,21

4

2,3

struct object *next

69

sizeof(stu)

原文链接:https://blog.csdn.net/qq_42769760/article/details/136687622

posted @ 2025-08-04 23:29  gdyyx  阅读(64)  评论(0)    收藏  举报