Web前置课作业:
C语言练习
1. 判断char型变量c1是否为小写字母的正确表达式是()。
A、’a’<=c1<=’z’
B、(c1>=a)&&(c1<=z)
C、(‘a'>=c1)‖(‘z’<=c1)
D、(c1>=’a’)&&(c1<=’z’)
正确答案:D
【解析】
字符的比较其实是比较它们的ASCⅡ码值,在ASCⅡ码表中,小写字母字符
‘a'~’z’是连续的,其ASCⅡ码值是逐渐增1,故判断c1是否为小写字母,应判断c1l是否大于或等于字符’a’,并且小于或等于字符’z’。故正确答案是D。
2. 若 有 # define S(a,b) a*b 则 语 句area=S(3,2); area 的值为6。请问这句话的说法是否正确?
A、正确
B、错误
正确答案:A
3. 局部变量只对main函数起作用,而全局变量对所有函数起作用。
A、正确
B、错误
正确答案:B
【解析】
全局变量在静态函数中不能使用,局部变量不一定只在主函数里面,也可以在其他的功能函数里面
4. 以下叙述中正确的是()
A、用户自己定义的函数只能调用库函数
B、实用的C语言源程序总是由一个或多个函数组成
C、不同函数的形式参数不能使用相同名称的标识符
D、在C语言的函数内部,可以定义局部嵌套函数
正确答案:B
【解析】
A 选项中, " 用户自己定义的函数只能调用库函数 " 描述是不正确的,也可以调用自定义函数;
C 选项中,对于不同函数的形式参数可以使用相同名称的标识符;
D 选项中,关于函数的定义不可以嵌套 , 但函数的调用可以嵌套。
因此 B 选项正确。
5. 下面关于typedef char *String_t; 和#define String_d char * 这两句在使用上的区别描述错误的是?
A、typedef char *String_t 定义了一个新的类型别名,有类型检查#define String_d char * 只是做了个简单的替换,无类型检查
B、前者在预编译的时候处理,后者在编译的时候处理
C、同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,b;
D、String_d c,d; a,b ,c 都是char*类型,而d 为char 类型
正确答案: C
【解析】
define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名。typedef int * int_ptr;与#define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
6. 如下函数的f(1)的值为()
int f ( int n) {
static int i= 1 ;
if ( n>= 5 )
return n;
n= n+ i;
i++ ;
return f ( n) ;
}
A、5
B、6
C、7
D、8
正确答案:C
【解析】
初始态:n=1,i=1
f(1)后:n=2,i=2
f(2)后:n=4,i=3
f(4)后:n=7,i=4
因此等于7
7. 在C语言中,定义一个返回值为指针的函数,以下函数定义错误的是()
A、
static char retarray[ 20 ] ;
char * func ( int n)
{
sprint ( retarray, ”% d”, n) ;
return retarray;
}
B、