蓝桥杯单片机C语言基础部分测试题

一,填空题

  1. (4分)在32位计算机上,int型变量常见的大小是( 4 )字节,( 32 )位.

  2. (4分)在C语言循环语句中,用于跳出当前循环的语句是( break; ),用于跳出当前循环剩余代码进入下一次循环的语句是( continue; ).

  3. (4分)设 a,b,c 都是 int 型变量,且 a=6,b=10,c=12.则表达式 c+=((a>b)||c)的c的结果为( 13 )表达式!(a<b)&&!c||1)的结果为(1).

  4. (3分)若有下面的代码段程序,则运行完该程序屏幕上显示( 3 )

      #include <stdio.h>
     void exchange_num(int a,int b)
     {
         int c;
         a=b;
         b=c;
     }
     int main()
     {
         int d=2,e=3;
         exchange_num(d,e);
         printf("%d",e);
         return 0;
     }
    
  5. (2)在 32 位电脑上,一个存放 int 型变量的数组 a,其中最后一个元素为 a[8],则该数组占用的内存为( 36 )字节。(2分)

  6. (2)设有 int a,*p;*p=&a;则指针p的值为( a )的地址。

  7. (6)在 C语言中 0x 开头表示十六进制数(a-f分别对应 10-15),比如 0Xb3 转换成十进制是 113,转换为二进制为 1011 0011.运算符&是按位与,|是按位或。如 1101&0100=0100.则0xd3|0xc9=0x( db )转换成二进制是( 1101 1011 ).

二,选择题(每题5分)

  1. 以下变量名合法的是(B)

A.67num B._32student

C. float D.32_student

  1. 代码printf(“%3.2f”,a);中,表示输出的结果(D)

     A.显示数字3.2     B.显示%3.2f
     
     C.显示一个浮点数,保留三位小数,宽度为2
     
     D.显示一个浮点数,保留两位小数,宽度为3
    
  2. 设w,x,y,z,m均为int型,有w=1,x=1,y=3,z=4,执行以下程序段后,m的值为(A)

    m=(w<x)?w:x;

    m=(m<y)?m:y;

    m=(m<z)?m:z;

             A.1   B.2   C.3   D.4
    
  3. 以下程序运行后,输出的结果是(C)

        A.7    B.4   C.2   D.3
    
     void main()
         {
             int a=1,b=2,c=3;
             a+=b;
             switch(a)
             {
                 case 1:c++;
                 case 2:c--;
                 case 3:c+=4;
                 case 4:c-=5;
             }
          printf("%d",c);
         }
    
    1. 以下程序运行后,输出的结果是(C)

      A.3 B.2 C.4 D.5

     void main()
     {
         int a,b=12,c;
         int d[3];
         for(a=0;a<3;a++)
         {
             b+=4;   16    20   24    
             d[a]=b;    
         }
         printf("%d",d[2]%5);   
     }
    

    三,判断题(每题2分)

    1. 要让int型变量满足小于5且大于2的时候,屏幕显示你好,可以写成如下的形式 ( × )

       if(2<a<5)
       {
        printf("你好");
       }
      
    2. 在C语言中,可以将一个整数赋值给一个字符变量 ( √ )

    3. 在C语言中,if必须有else语句作为分支 ( × )

    4. 在C语言中,switch只能测试整型表达式的值 ( √ )

    5. 如int占4个字节,C语言中的每种数据类型所占的字节数总是固定的 (×)

    四,编程题(每题十分)

    1. 编写一个猜数游戏,让用户有5次机会猜该数字,每次猜完提示猜大了还是猜小了,猜错和猜对要有相应的提示,5次猜错结束游戏,也要有相应的提示,该中奖数字应方便调试修改.

       #include<stdio.h>
       #define NUM 5
      int main()
      {
          int a;   //用户输入的值
          int b=4;   //目标值
          int i=5;
          while(i>0){
              printf("请输入你要猜的值:");
              scanf("%d",&a);
              if(a==b){
                  printf("猜对了!");
                  break;
              }else if(a>b){
                  printf("猜大了\n");
              }else{
                  printf("猜小了\n");
              }
              i--;
          }
          if(i==0){
              printf("很遗憾,次数已用尽!");
          }
           return 0;
       }
      
    2. 设计一个C程序,计算从1到N的所有整数的和,其中N由用户输入,需要有相关提示,例如,如果用户输入的是5,则计算1+2+3+4+5的结果并输出。

      #include <stdio.h>
      int main()
      {
          int a;
          int b=0;
          printf("请输入要计算的值:");
          scanf("%d",&a);
          for(int i=1;i<=a;i++){
              b+=i;
          }
          printf("计算结果为:%d",b);
          return 0;
      }
      
    3. 设置一个进制转换程序,用户输入0-255的十进制数,然后输出十六进制0x** 和2进制 。如输入12,输出0X0C

       #include <stdio.h>
       int main()
       {
           unsigned int n;
           int a[8]={0};
           int i;
           printf("请输入一个数\n");
           scanf("%d",&n);
           if(n<0||n>255){
               printf("Error!");
               return 1;
           }
           printf("对应的十六进制:0x%02x\n",n);//输出十六进制,不足两位补0
           for(i=7;i>=0;i--)
           {
               a[i]=n%2;
               n/=2;
           }
           printf("对应的二进制:");
           for(i=0;i<8;i++)
           {
               if(i==4) printf(" ");
               printf("%d",a[i]);
           }
       return 0;
       }
      
    4. 设计一个C程序,提示用户输入10个整数,范围0-9999,将用户输入的10个数字排序,形如a<b<c<…或者a>b>c>…

       #include <stdio.h>
       int main()
       {
           int a[10]={0};
           int i,j,k;
           printf("请输入十个数:\n");
           for(i=0;i<10;i++){
               scanf("%d",&a[i]);
               if(a[i]<0||a[i]>9999){
                   printf("请输入正确的数!\n");
                   i--;
               }
           }
           for(j=0;j<9;j++){
               for(i=0;i<9-j;i++)
               {
                   if(a[i]>a[i+1]){
                       k=a[i+1];
                       a[i+1]=a[i];
                       a[i]=k;
                   }
               }
           }
           printf("排序后:\n");
           for(i=0;i<10;i++)
               printf("%d\n",a[i]);
           return 0;
       }