C语言习题:数据类型和作用域

以下选项中,不能作为合法常量的是 __________

A)1.234e04    B)1.234e0.4
C)1.234e+4    D)1.234e0

答案:B

科学技术法e后面不能使用小数

以下定义变量并初始化错误的是_____________。

     A)     char   c1 =  ‘H’ ;

     B)     char   c1 =  99 ;  

     C)     char   c1 = ‘2’;

     D)     char   c1 =  09 ;

答案:D

A、C正确定义,B在ASCII码范围内,D输入的数字可能是八进制,但是八进制没有大于7的数字,所以,D是错误的

以下定义变量及初始化错误的是__________。

     A)     int   a=3,b;

     B)     int   a, b=3;

     C)     int   a, b,  c=d=3;

     D)     int   a=3, b=3;

答案:C

分析:逗号的作用是从左到右依次执行,c=d=3,会被先执行c=d,但是d没有被定义,所以出错

设有如下程序:( )

#include "stdio.h"

int  main()

{

          int   a,  b;

          a = 077;  

          b= a/5;   

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

}

A)     77,   15.2

B)     77,   15

C)     63,   12.2   

D)     63,   12

答案:C

分析:077是八进制数字,实际是63

有以下程序

main()
{   int  m,n,p;
   scanf("m=%dn=%dp=%d",&m,&n,&p);
   printf("%d%d%d\n",m,n,p);
}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是 _______
A)m=123n=456p=789

B)m=123  n=456  p=789
C)m=123,n=456,p=789
D)123   456   789

答案:A

分析:输入要求格式一致,否则无法识别

以下程序的正确结果是________

#include<stdio.h>

void  num()

{

         extern int x,y; int a=15,b=10; 

 x=a-b;  

y=a+b; 

}

int   x,  y;  

int  main()

{

    int a=7,b=5;

x=a+b; 

y=a-b;    

num();

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

}

A)  12,2    B)  不确定   C)  5,25  D)  1,12

答案:C

分析:xy是全局变量,当函数继承时,也就是直接引用了,会计算出结果,全局变量不会随函数结束而消失

有以下程序  

#include  <stdio.h>

int fun(  )

{

static int x=1;

x*=2;   

return x;

}

int  main(  )

{

int i,  s=1;

s*= fun();

s*=fun();

s*=fun();

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

}

程序运行后的输出结果是

A)8   B)16   C)32   D)64

答案:D

static时静态变量,生命周期是跟着整个程序,不会随函数结束而释放,所以fun运行三遍,结果是2,4,8,当其s三次的值分别为2,8,64

以下程序运行时若从键盘输入:10  20  30<回车>。输出结果是

#include  <stdio.h>
main()
{     int  i=0,j=0,k=0;
      scanf("%d%*d%d",&i,&j,&k);   
      printf("%d%d%d\n",i,j,k);
}

答案:10 30 0 

分析:%*d是跳过当前输入的值,使一个输入无效化,也就是当输入在输入三个值时,第二个值无效化,记录第三个值,所以scanf记录了i和j的值,k并没有赋值

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

main( ){

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

        ++a;  //a=a+1     //a = 2

        c+=++b;          //b = 3 c = 6

           {

             int  b=4,  c;

              c=b*3;      //c = 12

              a+=c;       //a = 14

              printf(“first: %d,%d,%d\n”, a,b,c);            //14,4,12

                a+=c;      //a = 26

              printf(“second: %d,%d,%d\n”, a,b,c);     //26,4,12

             }

printf(“third: %d,%d,%d\n”, a,b,c);   //26,3,6

}

答案:first:14,4,12   second:26,4,12   third:26,4,12

分析:要明确局部变量,在内部的{}中定义了b和c对main函数来说是局部变量,所以b,c在{}里面的改变不影响外面的值,所以在第三次输出中b,c分别是3,6

编写程序,用getchar函数读入两个字符给变量c1、c2,然后分别用putchar函数和printf函数输出这两个字符,并思考一下以下问题

  (1)变量c1、c2应定义为字符型或整型?还是二者皆可

  (2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?

  (3)整型变量与字符型变量是否在任何情况下都可以互相替换?

1】理论上都可以,因为字符可以用整形的ASCII码表示,但是字符有范围限制,用int可能会越界,导致输出错误

2】只能使用printf函数,因为putchar只能输出字符

3】与第一题类似,保证范围正确,都可以相互转换

使列举static关键字的几个作用 

限制作用域,延长生命周期,默认初始值为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值