第5章 循环结构
1、有以下程序
    #include <stdio.h>
    main()
    { int  y=10;
      while(y--);  printf("y=%d\n", y);
    }
程序执行后的输出结果是
A)  y=0    B)  y=-1    C)  y=1    D)  while构成无限循环
    参考答案:B
【解析】执行y - -直到值为0,由于y - -是先用再减,所以退出循环时,y的值为-1
2、有以下程序
    #include <stdio.h>
    main()
    { int  k=5;
      while(--k)  printf("%d",k -= 3);
      printf("\n");
    }
执行后的输出结果是
A)  1    B)  2    C)  4    D)  死循环
    参考答案:A
【解析】--k先自减在使用,所以第一次判断条件即为while(4),条件为真执行打印k的值k=4-3,结果为1,第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符所以选择A选项
3、关于"while(条件表达式)循环体",以下叙述正确的是
A)  循环体的执行次数总是比条件表达式的执行次数多一次
B)  条件表达式的执行次数总是比循环体的执行次数多一次
C)  条件表达式的执行次数与循环体的执行次数一样
D)  条件表达式的执行次数与循环体的执行次数无关
    参考答案:B
【解析】while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项
4、设有以下代码
do {
  while (条件表达式1)
        循环体A;
} while (条件表达式2);
while (条件表达式1)
{
  do {
      循环体B;
  } while (条件表达式2);
}
其中,循环体A与循环体B相同,以下叙述正确的是
A)  循环体A与循环体B的执行次数相同
B)  循环体A比循环体B的执行次数多一次
C)  循环体A比循环体B的执行次数少一次
D)  循环体A与循环体B的执行次数不确定
关于printf函数正确的是    参考答案:A
【解析】while循环语句一般形式为:while(表达式){循环体},执行过程为:首先判断表达式,成立(非0)则执行循环体,不成立(0)则退出循环。do…while循环语句一般形式为:do{循环体}while(表达式),执行过程为:首先执行循环体,之后判断表达式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。假设表达式1与表达式2成立次数为n1与n2。若n1>n2,则循环体A执行次数为n2+1,B执行次数n2+1;若n1<n2,则循环体A执行次数为n1,B执行次数n1,A选项正确。
5、以下叙述正确的是
A)  do-while语句构成的循环,当while语句中的表达式值为0时结束循环
B)  do-while语句和while-do构成的循环功能相同
C)  while-do语句构成的循环,当while语句中的表达式值为非0时结束循环
D)  do-while语句构成的循环,必须用break语句退出循环
    参考答案:A
【解析】while循环语句一般形式为:while(表达式){循环体},执行过程为:首先判断表达式,成立(非0)则执行循环体,不成立(0)则退出循环。do…while循环语句一般形式为:do{循环体}while(表达式),执行过程为:首先执行循环体,之后判断表达式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。A选项正确。在条件相同的情况下,do…while循环比while…do多执行一次函数体,B选项错误。两种循环都是在表达式为0时结束循环,C选项错误。do-while循环由表达式真假判断是否退出循环,也可以用break语句退出循环,D选项错误。
6、有以下程序
      #include <stdio.h>
      main()
      {
        int x=0,y=6;
        do
        { while(--y) x++;}
        while(y--);
        printf("%d,%d\n",x,y);
      }
程序的运行结果是
A)  5,0    B)  6,0    C)  5,-1    D)  6,-1
    参考答案:C
【解析】程序执行过程为:执行do…while的循环体:y=5,判断y为真,x=1;y=4,x=2;y=3,x=3;y=2,x=4;y=1,x=5;y=0,判断y为假,退出循环体。判断do…while条件y=0为假,y=-1,退出循环。输出x,y为5,-1,C选项正确。
7、有如下程序
#include <stdio.h>
main()
{
    char *p, old_str[10] = "wind";
    int password;
    scanf("%d", &password);
    p = old_str;
    while (*p)
    {
        printf("%c", *p + password);
        p++;
    }
    printf("\n");
}
程序运行时,从键盘输入2<回车>,输出结果是
A)  ykpf    B)  wind    C)  xjoe      D)  2222
    参考答案:A
【解析】程序执行过程为:定义字符数组str并且初始化为:"wind",定义password并通过scanf函数从键盘为其赋值2。定义指针p并使其指向字符串。通过while循环,将字符数组中每一个字符的ASCII码加2,并且按字符格式输出每一个字符。程序运行后输出结果是:ykpf,A选项正确。
8、有如下程序
#include <stdio.h>
main()
{
    char ch = 'A';
    while (ch < 'D')
    {
        printf("%d", ch - 'A');
        ch++;
    }
    printf("\n");
}
程序运行后的输出结果是
A)  ABC    B)  012    C)  abc    D)  123
    参考答案:B
【解析】字符之间做加减法,是用其ASCII码进行加减,但是不能超过范围0~255,否则不是合法的字符。while循环语句一般形式为:while(表达式){循环体},执行过程为,首先判断表达式,成立(非0)则执行循环体,不成立(0)则退出循环。程序执行过程为:定义字符变量ch = 'A',判断'A'<'D'成立,输出0,ch='B';判断'B'<'D'成立,输出1,ch='C';判断'C'<'D'成立,输出2,ch='D';判断'D'<'D'不成立,退出循环。程序运行后的输出结果是01
2,B选项正确。
9、有如下程序
#include <stdio.h>
main()
{
    char ch = 'M';
    while (ch != 'K')
    {
        ch --;
        putchar(ch);
    }
    printf("\n");
}
程序运行后的输出结果是
A)  MN    B)  LK    C)  OP    D)  MM
    参考答案:B
【解析】字符之间做加减法,是用其ASCII码进行加减,但是不能超过范围0~255,否则不是合法的字符。while循环语句一般形式为:while(表达式){循环体},执行过程为,首先判断表达式,成立(非0)则执行循环体,不成立(0)则退出循环。程序执行过程为:定义字符变量ch = 'M',判断ch != 'K'成立,ch='L',输出L;判断ch != 'K'成立,ch='K',输出K;判断ch != 'K'不成立,退出循环。程序运行后的输出结果是LK,B选项正确。
10、有以下函数:
int fun(char  *s)
{ char  *t=s;
  while(*t++);
  return(t-s);
}
该函数的功能是(  )
A)  计算s所指字符串的长度
B)  比较两个字符串的大小
C)  计算s所指字符串占用内存字节的个数
D)  将s所指字符串复制到字符串t中
    参考答案:A
【解析】首先 char *s 接受一个字符型数组的首地址并将这个首地址赋给另一个字符型指针 char*t , while(*t++)不断循环直到 *t 为'\0',再将 t-1 ,这时字符指针 t 指向字符串的最后一个字符,又因为 s 指向字符数组的首地址即字符串的首地址所以 return(t-s) 便是返回字符数组中字符串的长度。
11、有以下程序
    #include <stdio.h>
    main()
    {  int  a = 7;
      while ( a-- ) ;
      printf ("%d\n", a);
    }
程序运行后的输出结果是
A)  0    B)  -1    C)  1    D)  7
    参考答案:B
【解析】a- -的含义是先用后减1,所以当a的值为0时,跳出循环,但是仍要执行a-- ,a的值变为-1
12、有以下函数
    int  aaa(char  *s)
    {  char  *t=s;
        while(*t++);
        t--;
        return(t-s);
    }
以下关于aaa函数功能叙述正确的是
A)  将串s复制到串t
B)  比较两个串的大小
C)  求字符串s的长度
D)  求字符串s所占字节数
    参考答案:C
【解析】本题重点考察的知识点while循环语句的应用。aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针 t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标识处。最后返回t-s, s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。