2.8作业

数据类型与作用域练习

1、选择题

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

A)1.234e04    B)1.234e0.4

C)1.234e+4    D)1.234e0

1.2、以下定义变量并初始化错误的是_____D________

     A)     char   c1 =  ‘H’ ;

     B)     char   c1 =  99 ;   

     C)     char   c1 = 2’;

     D)     char   c1 =  09 

1.3、以下定义变量及初始化错误的是___C_______

A)     int   a=3b

     B)     int   a b=3

     C)     int   a b, c=d=3

     D)     int   a=3 b=3

1.4、设有如下程序:(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

1.5有以下程序

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,则正确的输入是 ___B____

A)m=123n=456p=789

B)m=123  n=456  p=789

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

D)123   456   789

   1.6、以下程序的正确结果是___A_____

#include

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

1.7  有以下程序   

#includ

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);

}

程序运行后的输出结果是 D

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

2、填空题

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

#include  

main()

{     int  i=0,j=0,k=0;

      scanf("%d%*d%d",&i,&j,&k);   // %*d 表示跳过某个输入的内容,使下一个输入的内容复制给紧接着的变量,表示此数据不读入

      printf("%d%d%d\n",i,j,k);

}

2.2、以下程序运行的结果是___________

      main( )

      {

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

        ++a; //a=a+1

        c+=++b;

           {

             int  b=4,  c;

              c=b*3;

              a+=c;    

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

              a+=c;

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

}

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

}

first: 14, 4, 12
second: 26, 4, 12
third: 2,3,6

 

3、编程题

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

        char c1=getchar();

        char c2=getchar();

        putchar(c1);

        putchar(c2);

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

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

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

        二者皆可

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

        printf函数输出%d

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

        在确保不会数据溢出的情况下可以互相替换

4、分析题

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

1.static修饰的变量全局或局部默认结果为0,一般static不修饰全局。

2.static修饰局部变量,延长生命周期到整个文件有效。

3.static修饰函数只能在本文件调用。

4.不可以使用static类型的指针,指向自动类型的变量地址,计算机先分配静态类型的变量内存,后分配auto类型的变量内存。

一、隐藏

在我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,也就是说其他文件可以看到写同名的函数,如果加了static,那么其他文件就不能同名函数或者变量;(对于函数来讲,static的作用仅限隐藏)

二、保持变量内容的长久

Static修饰的变量会存储到静态数据区,静态块会在程序刚开始是完成初始化,也是唯一的一次初始化;

静态存储区,共有两种变量,全局变量和static变量

三、默认初始化为0

全局变量也具有这个属性,因为静态数据区中所有的字节默认值都是0x00

#include 

Int main()

{

char c1,c2;

int x, y;

scanf(“%d”, &x);

getchar();

c1=getchar();

scanf(“%d”,& y);

getchar();

c2=getchar();

if( c1 == ‘+’ )

c1 = ‘-’

else

c1 = ‘+’ ;

printf(“%d% c%d% c\n”, x,c1,y,c2);

}

你可能感兴趣的:(算法,c++,c语言)