转载]C语言期中考试题目及答案

一、选择题:

【1】在C语言中,用户能使用的正确标识符是   

A) 5f    B) _for   C) struct    D) _f.5

答案:B

分析:标识符只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线;大小写敏感;不能使用关键字;最长32个字符。

【2】以下    是正确的C语言常量。

A) 0678    B) '101'    C) 1.2E3.5   D) 123L

答案:D

【3】以下对C语言源程序有关常识正确的描述是     

A)  main函数必须位于文件的开头

B)  每个语句必须单独一行

C)  标识符中大小写字母没有区别

D)  宏定义#define部分不一定要放在程序的最开头位置

答案:D

【4】以下for循环的执行次数是    

for(x=0,y=0;(y=123)&&(x<4);x++)

A)是无限循环  B)循环次数不定 C)执行4次  D)执行3次

答案:C

分析:若要判断(y=123)&&(x<4)假,因为y=123永远为真,所以只需要判断x<4为假即可。

【5】对for(表达式1;;表达式3)可理解为    

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

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

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

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

答案:B

【6】设有程序段

      int k=10;

      while(k=0)  k=k-1;

      则下面描述中正确的是    

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

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

答案:C

分析:因为k=0为假,所以程序不执行其后的语句。

【7】C语言中while和do-while循环的主要区别是   

A)  do-while的循环体至少无条件执行一次

B)  while的循环控制条件比do-while的循环控制条件严格

C)  do-while允许从外部转到循环体内

D)  do-while的循环体不能是复合语句

答案:A

【8】设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为    

A)1        B)2       C)3       D)4

答案:B

分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。对于||运算,只要第一个操作数为真,就不判定第二个操作数。上题中m=a>b为假,则n=c>d没有被判定,所以n的值仍为2。

【9】以下程序运行后,a和b的值分别为:

      #include <stdio.h>

      main()

      {int a,b;

        a=10%3,b=5;

        printf(“%%%d,%%%%d”, a , b);

      }

A)%%1,%%%5      B)%1,%%d      C)%%3,%%5   D)1,5

答案:B

分析:如果两个%连在一起,则输出一个%

【10】在以下运算符中,优先级最高的运算符是(     )

 (A) <=     (B) /        (C) !=       (D) &&

答案:B

【11】下列对一维数组a的正确说明语句为    

     A) int a(10);                 B) int n=10, a[n];

     C) int n;                           D) #define SIZE 10

        scanf("%d", &n);                  int a[SIZE];

        int a[n];

答案:D

分析:数组名后面的[]是数组的标志,不能用圆括号或其它符号代替;数组元素的个数必须是一个固定的值,可以是整型常量、符号常量或整型常量表达式,不能是变量。

【12】下面程序段的输出结果是      

int i;

int x[3][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)  printf("%d",x[i][2-i]);

A)1 5 9      B)1 4 7       C)3 5 7       D) 3 6 9

答案:C

分析:

数组x[3][3]的元素分别为:x[0][0] x[0][1] x[0][2]

                         x[1][0] x[1][1] x[1][2]

                         x[2][0] x[2][1] x[2][2]

对数组初始化后对应的值为: 1     2      3

                           4     5      6

                           7      8      9

当i=0时,x[i][2-i]= x[0][2]=3

当i=1时,x[i][2-i]= x[1][1]=5

当i=2时,x[i][2-i]= x[2][0]=7

当i=3时,条件不成立,程序退出。

 

二、填空题:

【1】main()

{ int a=5;float x=5.3,y=6.6;

printf("%.2f",x+a%3*(int)(x+y)%2/4);}

答案:5.30

分析:算术运算符结合方向为自左向右,并注意格式控制。

【2】main()

{ int a=1,b=2,m=2,n=2;

     (m=a>b)&&++n;

printf(“%dn”,n++);}

答案:2

分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。所以n的值为2,表达式n++的值也为2。

【3】main()

{ int x=1,y=0;

     y=(x-->(y+x)?10:12.5>y++?20:30);

     printf("%d",y);}

答案:20

分析:关系运算符的优先级高于条件运算符,条件运算符的结合方向为自右向左。--x>(y+x)或x-->(y+x)之类结构中,右边的x应为自减后的值。如表达式x>(y+x)?10:12.5>y++?20:30; 的值为20;表达式--x>(y+x)?10:12.5>y++?20:30; 的值为20。

【4】main()

{ int n=0;

while (n<=2)

{ n++;

 printf(“%d”,n);

}

}

答案:123

分析:{ n++; printf(“%d”,n);}为while语句的循环体部分,当n=0时条件成立,执行n++后n的值变为1,并输出1;当n=1时条件成立,执行n++后n的值变为2,并输出2;当n=2时条件成立,执行n++后n的值变为3,并输出3;n=3时条件不成立,程序退出。

【5】main()

{ int i=0;

    do

{ printf(“*”);

    i++;

if (i>3) break;

} while (1);

printf(“n”);

  }

答案:****

分析:此题中的while (1)永远为真,程序结束依靠break来控制,循环体语句为{ printf(“*”); i++;if (i>3) break; },当i的值分别为0,1,2,3时,程序循环四次,输出****;当i的值为4时,i>4为真,退出整个程序。

【6】main()

   { int a,i;

   for ( a=1,i=-1; -1<=i<1;i++)

       { a++;printf(“%d”,a);}

printf(“%d”,i);

}

答案:-1

分析:此题中for的循环体语句为{ a++;printf(“%d”,a);}。当i=-1时,-1<=i<1为0(为假),则不执行{ a++;printf(“%d”,a);},也就不输出a的值,所以只输出i的值为-1。

【7】main()

{ int i,x;

for ( i=1,x=1;i<=50;i++)

{ if (x>=10) break;

if (x%2==1)

   { x+=5; continue;}

x-=3;

}

printf(“x=%d,i=%dn”,x,i);

}

答案:x=10,i=6

分析:break的功能是退出整个循环,结束程序的执行;而continue的功能是退出本次循环,进入下次循环。此题可用变量跟踪法来求解:i    x    x%2   x+=5    x-=3

1   1      1     6

2   6      0             3

3   3      1     8

4   8      0             5

5   5      1     10

6   10   则if (x>=10) break;条件成立,退出整个循环。

【8】以下程序的运行结果是       

main()

{  int i, v1=0, v2=1, v3=2;

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

   {  switch ( i% 4)

     {  case 1: v1++;

        case 2: v2++; break;

       default: v3++;

      }  

   }

   printf("%d,%d,%dn ",v1,v2,v3); 

 }

答案:3,6,6

分析:用变量分析法如下:

i    i% 4   v1   v2    v3

1    1     1    2

2    2           3

3    3                 3

4    0                 4

5    1     2    4

6    2           5

7    3                 5

8    0                 6

9    1     3    6

【9】执行以下程序后,输出结果是多少?

main()

 {int j,k,s;

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

    {s=1;

     for(j=k;j<6;j++) s+=j;

    }

  printf("%d",s);

}

答案:10

分析:此题要注意每循环一次,s的值就变为1,要得到s的值只需要看最后一次循环后s的值即可。当k=4时,j分别等于4和5,当j=4时,s+=j的值为5;当j=5时,s+=j的值为10。

【10】以下程序的运行结果是    

main()  

  { int i=0;

do { + + i;

if (i % 2!=0)  printf("%d,",i);

      }while (i<=15)

答案:1,3,5,7,9,11,13,15

分析:用变量跟踪法进行分析:

i     + + i      i % 2!=0      是否执行printf("%d,",i)

0       1           真                   是

1       2           假                   否

2       3           真                   是

3       4           假                   否

4       5           真                   是

5       6           假                   否

6       7           真                   是

7       8           假                   否

8       9           真                   是

9       10          假                   否

10      11          真                   是

11      12          假                   否

12      13          真                   是

13      14          假                   否

14      15          真                   是

15      16          条件不成立,退出程序。

三、程序填空

输入一个正整数,求该数各位之和,如输入3256, 求得3+2+5+6=16。

main()

{ int i,t=  1 ;

  scanf(“%d”,&i);

 while(  2  ){t+=  3 ; i/=10;}

  printf(“%dn”,t);

}

答案:【1】0  【2】i>0   【3】i%10

分析:本题定义i为输入的整数,t为各位数字之和。

四、编程题:

【1】编程求“卖西瓜”问题。

问题:有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?

参考答案一:(其中d为天数,s为西瓜数量)

main()

{int d,s=1020;

for(d=0;s>=0;d++)

s=s/2-2;

printf("%d",d);

}

参考答案二:(其中day为天数,sum为西瓜数量)

main()
{int day,sum;
 day=0,sum=0;
 while(sum<=1020)
 {sum=sum*2+4;day++;}
 printf("%d",day);
 }

【2】

输出以下图形:

       *

      ***

     *****

    *******

参考答案一:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i;
    int j;
    int k;
    for(i=0;i<=3;i++)
    {
        for(j=0;j<=2-i;j++)
            printf(" ");
        for (k=0;k<=2*i;k++)
            printf("*");
        printf("\n");
    }
    return 0;
}

参考答案二:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i;
    int j;
    int k;
    i=0;
    while(i<=3)
    {
        for(j=0;j<=2-i;j++)
            printf(" ");
        for (k=0;k<=2*i;k++)
            printf("*");
        printf("\n");    
        i++;    
    }
    return 0;
}

posted @ 2020-12-10 14:35  星释天狼  阅读(1312)  评论(0)    收藏  举报