数据类型与作用域练习
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=3,b;
B) int a, b=3;
C) int a, b, c=d=3;
D) int a=3, b=3;
1.4、设有如下程序:( B)
#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,则正确的输入是 ___A____
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、以下程序的正确结果是_C_______
#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
1.7 有以下程序
#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);
}
程序运行后的输出结果是 D
A)8 B)16 C)32 D)64
2、填空题
2.1、以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是 102030
#include <stdio.h>
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、以下程序运行的结果是___________。
first:14,4,12
Second:26,4,12
Third:26,3,6
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);
}
3、编程题
3.1、 编写程序,用getchar函数读入两个字符给变量c1、c2,然后分别用putchar函数和printf函数输出这两个字符,并思考一下以下问题
(1)变量c1、c2应定义为字符型或整型?还是二者皆可
都可以
- 要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?
使用printf函数,使用%d可以打印出来
- 整型变量与字符型变量是否在任何情况下都可以互相替换?
可以替换但是整型变量不能大于ASCII码最大值
4、分析题
4.1、使列举static关键字的几个作用
一、隐藏
在我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,也就是说其他文件可以看到写同名的函数,如果加了static,那么其他文件就不能同名函数或者变量;(对于函数来讲,static的作用仅限隐藏)
二、保持变量内容的长久
Static修饰的变量会存储到静态数据区,静态块会在程序刚开始是完成初始化,也是唯一的一次初始化;
静态存储区,共有两种变量,全局变量和static变量
三、默认初始化为0
全局变量也具有这个属性,因为静态数据区中所有的字节默认值都是0x00
#include <stdio.h>
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);
}