打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
3.1 单项选择题

    3.1  单项选择题

  1.设 a3b4执厅‘printfd,d’,(ab),(ba));的输出是(  
          ①3
4          ②43          ③3 3          ④44
    
【解】在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符d要求输出项内容以十进制整数形式输出。第一个输出项(ab)是一个逗号表达式,该表达式的值是b的值,输出4。接着输出字符逗号。第二个输出项(ba)的值是a的值,输出3。所以语句执行将输出43。正解的选择是

        2
.使用“Scanf"X=%fy%f",&x&y,要使 Xy均为1.25,正确的输入是(  
    ①1.25
1.25      ②1.25 1.25        ③x1.25y1.25         ④X1.25 y1.25
     
【解】格式输入函数的格式字符串中的字符可以分成三类:空格类字符、其它普通字符和格式转换说明。其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符。普通字符要求输入字符与其完全相同。格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。函数调用scanf“x%fy=%f,&x&y)以普通字符X=开头,输入时也要先输入X=。接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。接着是普通字符列y,在输入的浮点数之后也要有字符列y。最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。问题给出的供选择答案中只有x=1.25y1.25是能满足上述要求的。所以正确选择是

       3
.设有int i010j=10;则执行“printf("%d%dn"++ij--)的输出是( 
        ①ll
10      ② 910        ③ 010 9       ④ 10 9
    
【解】变量ij的初值分别为八进制数010和十进制数 10,函数调用Printf“%d%dn”++ij--)中,++i的值是变量 i1后的值,原来值是八进制数 010,等于十进制数8,输出9j--的值是变量j1之前的值,输出10。格式字符申中的逗号是普通字符照原样输出。所以问题给出的格式输出函数调用将输出910。正确的解答是

        4
.设ab为字符型变量,执行"scanf("a%cb%c"&a&b)"后使a‘A‘b‘B‘,从键盘上的正确输入是( 
        ①’A”B’          ②’A’
’B’       ③AA,BB          ④a=A bB
    
【解】函数调用scanf("c%cb%c"&c&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。所以实现问题的要求,输入字符列应为“aAbB”。另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。但用字符格式输入字符时,在要输入字符前后不必另键人单引号。若键人单引号,则这个单引号也将作为字符被输入。正确的解答是

     5
.设XyZt均为int型变量,则执行以下语句后,t的值为(  
    x
yz1t++x||++y&&++z
       ①
不定值             ②2                 ③l                  ④0
   
【解】语句序列“xyzlt++x||++y&&++z使变量x的值为1,变量t是赋一个逻辑表达式的值。在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。本题的逻辑表达式是两个运算分量的逻辑或,而且左运算分量++X的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1。正确解答为

        6
xyz均为int型变量,则执行以下语句后,xy, z的值为(   
     X
1 y0 Z2 y++&&++Z ||++ X
       ①2
l3              ②203                 ③2l3               ④212
   
【解】语句序列“xly0z2 y++&&++z||++x先使变量x的值为 1,变量y的值为0,变量Z的值为2。由逻辑与和逻辑或构成的逻辑表达式的特别计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑子表达式的结果时,就立即结束逻辑子表达式的计算,不再计算该逻辑子表达式。计算y++y的值为0,使y++&&++z的结果为0,立即去计算++X,这次计算使变量y的值变成1,而变量Z的值本改变。接着计算++X,使X的值变为2。所以经上述语句执行后,XyZ的值依次为21Z。 确解答为

       7
.假定所有变量均已正确定义,下列程序段运行后X的值是(   
       a
bc0 x35
       if
!ax-- else ifb);ifcx3else x=4
         ①34        ② 4      ③ 35         ④ 3
    
【解】以变量 abc的值均为 0,变量x的值为 35,语句:
          if
!ax--else ifb);ifcx3else x4
   
由两个证语句组成。首先执行前一个if语句“if!ax--else ifb);,因变量a的值为0,条件!a成立,执行x--使x的值变为34。接着执行后继的if语句“if(c)x3 else X4,因变量c的值为0,条件不成立而执行X4,最终使变量X的值为4。正确解答是
   
注意前一个if语句的else部分的成分语句只有“if(b),这是一个单分支if语句,且其成分语句为空语句。
       8
.下面的程序段所表示的数学函数关系是(  
      y
=-l
     if
x! 0if(x0)yl else y0
     1
x0 1(x0)
      ① y
= { 0x 0            ② y{-l(X
0)
      1
X0 0(X
0)
       o
X 0 -lX 0

      ③ y
= {-1x 0             ④ y{ 1X 0
      1
X 0 0X 0
   
【解】程序段首先置变量y的值为一l,接着按变量x值的不同情况重置变量y的值。重置的首要条件是x!0,若变量x的值为0,则不再重置变量y的值,所以在X值为0情况下,y的值是-l。在变量X的值不等于0的条件下,若X的值大于0,重置变量y的值为1;若变量X的值小于0,重置变量y的值为0。所以程序段实现当变量x的值为0时,变量y的值为-1;当变量X的值大于0时,置变量y的值为1;当变量X的值小于0时,置变量y的值为0。正确解答为
    9
.下列语句中,句法错误的是(不考虑语义)(   
    ① while
xy5                ② do x++ whilex==10) ;
    ③while
0);                            ④do 2whilea==b);
   
【解】 while语句的一般形式是:
        while(
表达式) 语句
这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。可能书写的while语句没有任何意义,如供选择的①whilexy5;和③while0);,但这两个语句的句法没有任何错误。do-While语句的一般形式是:
          do
语句while(表达式);
其中的成分语句也可以是任何语句,但供选择答案②do x++while(x==10) ;中的代码x++是一个表达式,不是语句,所以是错误的。正确解答是
      10
,循环语句“forx0, y0(y!=123|| x4;x++);的循环执行( 
             ①
无限次       ②不确定次              ③4                ④3
   
【解】for循环语句的初始化部分置变量xy的初值为0,循环条件是(y!123||x4),每次循环后变量X的值增1。由于循环过程中变量y的值本被修改过,循环条件又是一个逻辑或,其左分量(y!123)永远成立,也就是循环条件永远成立。所以该循环语句将循环执行无限次。正确解答是
      11
.若ij已定义为int类型,则以下程序段中的内循环体的执行次数是(   
     for
i5 i i--)
     for
j 0 j4j++){……
    ①20           ② 24            ③ 25           ④ 30
   
【解】问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i!0,每次循环后变量i的值减1。所以外循环共控制5次循环。内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<4,每次循环后变量j的值增1。所以内循环共控制4次循环。这样,如内循环的体内未曾对变量ij有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。正确解答是
        12
.假定abint型变量,则执行以下语句后b的值为(  
       a
1 b10
       do b
-=a a++;
       }while<
b--0);
       ①9         ②-2            ③-1           ④8
   
【解】在这个程序段中,循环开始前变量a的值为1b的值为10,每次循环从变量b减去a,并让a1,并在循环条件判定时,又让b减去1。第一次循环后,变量b的值变成9,变量a的值变为2,循环判断时,因b的值大于0,循环条件不成立,结束循环。但在循环判断时,让b减去了1,所以循环结束时,变量b的值为8。正确的解答是

    13.设xyint型变量,则执行下面的循环后,y的值为(   
     for
yl xl y<=50; y++)
     if(x
>=
10) break;
     if
x2==1){ x+=5 continue

     X
-= 3

      }
          ①2          ②4            ③6             ④8
    
【解】 for循环语句的初始化部分置变量xy的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。循环体有三个语句:首先在发现变量X的值大于等于10时,结束循环;接着是当变量X2的余数为1(即变量X是奇数)时,让变量X值增5,让X变成偶数,并直接进入下一轮循环;如变量X是偶数,则从变量X减去3,让变量X变成奇数。由上述分析知,每两次循环使变量X的值增加2.第一次循环后,变量X的值变成6。第二次循环后,变量X的值变成3。第三次循环后,变量X的位变成8。第四次循环后,变量X的值变成5。第五次循环后,变量X的值变成 10。第六次循环时,因变量X的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。所以循环结束后,变量y的值增至6。正确的解答是
      14
.在C语言中,下列说法中正确的是(  
    ①
不能使用“do语句while(条件)的循环
    ②“do
语句While(条件)的循环中必须使用“break”语句退出循环
    ③“do
语句while(条件)的循环中,当条件非0时将结束循环
    ④“do
语句while(条件)”的循环中,当条件为0时将结束循环
   
【解】 do-while语句的一般形式是:
      do
语句
      while
(表达式);
   
其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。do-while语句是正常使用的一种循环结构之一。do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。do-while语句在条件值非0时,将继续循环,而不是结束循环。条件值为0时,才结束循环。所以正确的选择是
       15
.若有以下程序段,Wk都是整型变量,则不能与该程序段等价的循环语句是( 
       W
k
    LB
ifw==0 gotO LE
      w - -

     printf("*")

      goto LB

    LE

       ①for(w
kw!0W--printf("*")
       ② w
k
       While
W--!0 Prinif(”* ”)

     ③ w k
      do{w--
prinif“*”);
   
while W!= 0);
      ④ for
wkW--W printf("*")
   
【解】问题所给出的程序段用goto语句构造一个循环控制结构,该循环结构的初值是让变量W的值为k的值,循环结束条件是W的情等于0,循环体是让变量W的值减1,并输出一个字符* 。上述循环控制过程用for循环可描述如下:
     for
(w=kW!0; W-- printh("*");
或写成:

    for
wk w--w printf"*");
若用while语句,可描述如下:
     W
k
     while
w--!0printf("*")
      w++
/*w等于0时,也执行了一次 w--,这里是对w最后减1的补尝*/
或更直观地写成:

       W
k
      while
w!0{ w--Printf("*");}
若用do-while语句,可描述如下:

      W
k
      if
W
     do{
      w--
prinif"*");
     } while
w);
若写成:
     W
k
    do

    W--
printf("*")
     } while
w!=0);
是不正确的,因为原代码当k的值为0时,不输出字符*,而上面的改写,当k的值为0时,将输出许许多多的字符*。所以解答应是

    3.2  填充题

  1.结构化程序设计规定的三种基本结构是________结构,选择结构和_______结构。
   
【解】结构化程序设计的三种基本控制结构是顺序结构、选择结构和循环结构。
         2
.若有定义“int a25b14 c19,以下语句的执行结果是______
         if a
++<=25&&b--<=2&&c++)
        prinif
"***a=%db=%dc=%dn", a,bc);
        else printf
”###a=%db=%dc=%dn” a, b,c);

   
【解】问题所给的if语句中,条件a++<=25&&b--<=2&&c++是先求逻辑与的第一个运算分量,它是一个关系式,关系成立。接着判定第二个逻辑与运算分量,又是一个关系式,由于变量b的值是14b不小于等于2,运算分量的关系式不成立,导致if语句的条件为假,执行else部分。在求且语句的条件时,计算了2个逻辑与分量,使变量a的值增了1,变量 b的值被减了1。所以输出内容是:###a=26b13c19
     3
.以下两条if语句可合并成一条if语句为_____________
     if
a<=b x1
     else y
2
    if
abprintf("****y=%d\n" y);
     else printf( "####x
%d\n" x);
   
【解】在以上两条if语句中,两个条件刚巧相反。若将前一个if语句的第一个成分语句与第二个if语句的第二个成分语句合并;第一个if语句的第二个成分语句与第二个if语句的第一个成分语句合并,写成一条if语句如下:

     if(a
<=b){x1printf("####x%d\dx);}
    else{ y
2 printf("****y%d\n"y)

        4
.设 ijk均为 int型变量,则执行完下面的for语句后,k的值为_______

    for(i=0,j
10i<=ji++,j--kij
   
【解】该 for语句以i0j10初始化,循环条件是 i<=j,每次循环后 i 1j 1,循环体是将 ij的和赋给 k。这样变量 k将保存的是最后一次赋给它的值。一次循环后 i lj 9,二次循环后 i 2j 8……,五次循环后 i 5j 5,继续第六次循环,将 i j的和10存于 k后,i 6j 4,结束循环。所以循环执行后 k10
        5
.下列程序的功能是输入一个整数,判断是不是素数,若为素数输出1,否则输出0,请为程序填空。
    main
()
   {int i
Xy=1;
   scanf
d”,&x);

   for(i=2
i<=x/2i++)
    if________________
y=0 break
}
    printf
dn”y);

    }
   
【解】为判数x是否是素数,预置变量y的值为1x可能是素数),然后用循环,用2x2的整数i测试对X的整除性,若能被其中的某个整数整除,则X是合数,置y的值为0(不是素数),结束测试循环。若都不能整除,则X为素数。i能否整除X,可用求余运算Xi等于0来判定。所以程序中的空框可填 X i==0。测试 X为素数的代码可写成:
     y
l
    for
i2 i<=x2 i++)
    if(x
i==0{ y0 bleak; }

    3.3   程序分析题

1.阅读程序,写出运行结果。
     main
()

    { int a10 b4C3 
        if(a
b)ab
 
        if(a
C aC
 
        printf
"d,d,d\n" abc);

        }
   
【解】程序中,第一个if语句if(a<b)ab,当a<b时,让b值置a,该语句确保a的值不比b小。同样第二个if语句ifacac,当ac时,让c值置a,使a的值不比c小。实际;情况是a本来就比bc都大,所以a的值没有变,程序输出ab c的原来值:1043
         2
.阅读下列程序,写出程序的输出结果。
     main()
     { int x=100
a10, b20 Ok15Ok20
     if
abif(b!15if(!Ok1) x1
      else if
ok2 x10
     else x
-l
      printf
"dn"x)
      } 
     
【解】程序预置变量x的值为100a的值为10b的值为20ok15Ok20。程序中给出的if语句可以写成更结构化的形式如下:
     if(a
b) {
     if
b!15){

     if
!Ok1 x1
     else{
     if
Ok2 x10
     else x
=-l
  

      }
      }
由于条件ab成立,并且条件b!=15也成立,而ok1不等于0,执行else后的语句。又因ok2等于0,执行else后的语句赋-1x。所以程序输出一l
        3
.阅读下列程序,写出程序的输出结果。
    main() 
        {  int y
9
         for(; y
0 y--) 
         if(y
3==0){ printfd”--y);
continue;}
     

   
【解】循环前,变量y的值为9,其中的循环语句在y大于0情况下循环,每次循环后y的值减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y9,能被3整除,输出8y也变成8。又经两次循环,y的值变为6,又让y1变成5,并输出5;又经两次循环,y的值变成3,让y减至变成2,输出2;再经两次循环后,y的值变成0,结束循环。所以程序输出852

 

   3.4   程序设计题

 

  1.编一个程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C):C 5 F32)/9
    
【解】利用公式:C5F32)/9,输入F氏温度,计算并输出对应的C氏温度,程序要引入两个变量,分别用于存储F氏温度和C氏温度,计算时应采用浮点型,包括公式中的常数也应写成浮点数,不能采用整型和把常数写成整数。因采用整型编写,公式中的除运算变成整除,会得出与实际要求不一致的结果。程序如下:

  
include <stdio.h>
      main
()

      {  float f,c
/*变量定义*/
         printf
输入F氏温度);

        scanf
f,f);
        c
5.0*f32.0)/9.0
        printf
对应的C氏温度%6.2fn”c);
       }
        2
.编一个程序,输入一个整数,输出其符号(若≥0,输出1;若<0输出-1)。
   
【解】程序可用if语句判断输入数的符号,并控制输出1-l。程序如下:
   
include<stdio.h> 
         main
()

        { int c
;/*变量定义*
          printf("
输入一个整数");
          scanf(”
d”, &c);

         if
C>=0 printf("1\n")
         else printf("-l\n")

         }
       3
.编一个程序,输入X的值,按下列公式计算并输出y的值。
       X
X≤l
        y
{2xllx10
       3X-11
10≤X
   
【解】输入x,按公式计算y。这可用一个嵌套的if语句分段判断并计算出y的值。然后输出y值。程序如下:
    
includestdioh
          main
()
        { int x
y;/*变量定义*
          printf
输入一个整数);
          scanf
d”,&x);
          if
x<=l yX
          else if
x10y2*xl
          else y
3*X11

        printf(”y%d\ n” y)
        }
         4
.编一个程序,输入三个单精度数,输出其中最小数。
   
【解】设最小数存于变量min中,为求三个数中的最小数,可分以下多步完成,先预置minx,然后分别将其余两个数逐一与min比较,当它们中的某个值比存于min中的值更小时,就用它们更新min。写出程序如下:
   
include<stdio.h>
       main()
      { float X,y,Z
min/*变量定义
*/ 
        printf("
输入三个单精度浮点数
");
       scanf("%f%f%f"
&x&y&Z)

       min
x
       if(min>y) min
y
       if(min>Z) min
Z
       printf("
浮点数%f%f%f中的最小值是%f\n"XyZmin)
     }
       5
.编一个程序,求出所有各位数字的立方和等于10993位数。
   
【解】找出所有各位数字的立方和等于1l993位整数。 3位整数是100999范围内的整数,设分别用a,b,c存储3位数的百位、十位和个位的数字,程序用三重循环求出a,b,c的立方和为10993位数a*100+b*10c。程序如下:
   
include <stdio.h>
       main()
      { int a
b c/*变量定义
*/ 
       for(a
1 a<=9
a++)
       for(b
0 b<=9
b++) 
       for(c
0c<9
c++) 
       if(a*a*a+b*b*b+c*c*c==1099)
        printf("%d\n"
(10*ab)*10c)

      }
若用一个变量i表示3位数,循环体将3位数变量i分拆出它的百位、十位和个位共3个数字,然后判这三个数字的立方和是否是1099,若是就输出该变量的值。程序如下:
    
include<stdio.h> 
          main
()

         { int i
ab, c/*变量定义*/
            for
i100i<=999
i++) { 
           a
i/100

           b
(i%100)/10; /*b(i/10)%l0*/ 
           c=i%10

           if(a*a*a+b*b*b+c*c*c==1099)
           printf("%d\n"
i)

         }
         }
         6
.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。
    
【解】输入10个整数,统计其中正数、负数和零的个数。程序引入3个计数器变量,用于统计大于以小于0和等于0的整数的个数。开始时,这3个计数器都置0,然后用循环逐一输入10个整数,并判定当前输入的整数是大于0,或小于0,或等于0,并按判定结果累加相应计数器。最后,程序输出这3个计数器的值。程序如下:
        # include<stdio.h> 
      main()
     { int i,d,n,z,p
/*变量定义*/
     n
Zp0

     for(i
1i<=10i++) {
     print("
输入第%d个整数", i)

     scanf("%d",&d)

     if(d<0)n++

     else if(d>0)p++

     else z++

    }
     printf("
负数有%d个,正数有%d个,零有%d个。\n"npz)
   } 
      7
.编程序,按下列公式计算e的值(精度为1e6)
           e
1+1/1!+1/2!+1/3!+…+1/n!+… 
   
【解】按e的幂级数展开式计算e的值。这是典型的求级数和计算问题。通常采用逐项计算,并累计的方法。计算新的项时,可用上一轮循环计算出的项,这能提高程序的效率。循环直至当前项的值小于精度要求结束。程序如下:

         # include<stdio.h>
          main()
         { double e
t,i/*变量定义*/
           e
0.0t=1.0i1.0

          while(t>
1.0e-6) {
          e+
t

           t/= i

          i+= 1.0

          }
         printf(”e
%.6f\n” e)
       }
    8
.编程序,按下列公式计算y的值(精度为1e6)
          y=∑1/r*r+1
    
【解】按所给公式计算数列的和。类似上一小题的解,逐项计算并累计。程序如下:
       # include<stdio.h>
         main()
        { double y,r,t
/*变量定义*/
           y
0.0r1.0

          while((t=1.0/(r*r+1.0))>=1.0e-6) {
          y+=t

          r+=1.0

         }
          printf("y=%.6f\n"
y)
        }
          9
.编一个程序显示ASCII代码0x20ox6f的十进制数值及其对应字符。
   
【解】显示ASCII代码为十六进制0x20ox6f的字符的十进制代码值与其字符。程序可用一个循环,让变量i顺序地取0X20OX6f的值,并逐一输出其十进制代码和对应的字符,程序如下:

       # include<stdio.h> 
          main()
          {  int i
k0
             for(i=0x20; i<=0x6f
i++) {
             if(k++%10== O)/*
每行十个
*/
             printf("\n")

              printf("%3d(%C)"
ii)
              }
             printf("\n")

         }
          10
.用三种循环语句分别编写程序显示1100的平方值。
   
【解】用三种循环语句分别编写显示1100的平方值的程序。直接写出3个程序如下:
          (1)
用输循环实现的程序
      # include<stdio.h> 
      main()        /*
for循环*/
      { int i
k0

       for(i
li<=100i++) {
      if(k++%5==0)       /*
每行五个
*/
      printf("\n")

      printf("%3d*%3d
%5d"iii*i)
     }
      printf("\n")

     }
          (2)
while循环实现的程序
       # include<stdio.h> 
        main()       /*
while循环*/

      { int ik=0
          i=1

          while(<=100){
         if(k++%5==0)/*
每行五个*/
         printf("\n")

         printf("%3d*%3d
%5d" iii*i)
         1++

         }
        printf("\n")

       }
            (3)
do-while循环实现的程序
       # include<stdio.h> 
        main()      /*
do-while循环*/
 
int i k0

           i=1;
         do{
       if(k++%5==0)    /*
每行五个*/
       printf("\n")

       printf("%3d*%3d
%5d"iii*i)
      1++

      }  while(<=100)

      printf("\n")

    

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C程序结构
2023年计算机C语言专升本测试卷(共八卷)及答案
C语言----期末考试题
C程序课件第4章顺序
全国计算机等级考试C语言2级笔试题-(27)2008年4
安徽省普通专升本计算机科学与技术C语言考试题库及答案
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服