1、日期: 姓名 : 分数 注:/ 后面的为答案解析一、选择题下列各题 A)、B) 、 C)、D)四个选项中,只有一个选项是正确的。请将正确的答案填在答题卷相应的位置。 (每题 2 分,共 30 分)(1)以下关于语言的叙述中正确的是(B)语言中的注释只能出现在语句或表达式的两边)语言中的变量可以在使用之前的任何位置进行定义 /即使在头文件之前也可以,但我们一般不这样做)在语言算术表达式的书写中,运算符两侧的运算数类型必须一致/数据类型里面存在个自动转换,如 float 和 int 型之间的运算。)语言的数值常量中夹带空格不影响常量值的正确表示/影响!如 int a=34;不能写成inta=3 4
2、;(2)以下叙述错误的是(C)一个程序可以包含多个不同名的函数 )一个程序只能有一个主函数 )程序在书写时 有严格的缩进要求 否则不能编译通过 )程序的主函数必须用 main 作为函数名(3)有以下程序 #include main() int A=0,B=0,C=0; C=(A-=A-5);(A=B,B+=4); /注意赋值符号和等号的区别printf(“%d, %d, %dn”,A,B,C); 程序运行后输出的结果是A) 0,4,5 B) 4,4,5 C) 4,4,4 D) 0,0,0(4)有如下嵌套的语句 (A )if(ac) ? b:c);C) k=(a main() int s = 0
3、,n; for (n=0; n main ( ) char *s=“abc“;/定义一个数组指针 s do printf(“%d“,*s%10); +s; while (*s); /do-while 语句是 先执行循环体里的内容,再执行 while 表达式里的值;勿忘 while 括号后的“;”程序运行后的输入结果是(B)A)abc B)789 C)7890 D)979899(7)有以下程序#include main()int i,j,m=1;for(i=1;i0;j-)if(i+j 3) continue;m *= i*j;printf(“m=%dn”,m); 程序运行后的输出结果是(4)A
4、) m=6 B) m=2 C) m=4 D) m=5(8)下列语句组中,正确的是(A )A) char *s;s=”Olympic ”; B) char s7; s=”Olympic”;C) char *s;s=“Olympic ”; D) char s7; s=”Olympic”;(9)以下关于 return 语句的叙述中正确的是(B))一个自定义函数中必须有一条 return 语句)一个自定义函数中可以根据不同情况设置多条 return 语句)定义成 void 类型的函数中可以有带返回值的 return 语句)没有 return 语句的自定义函数在执行结束时不能返回到调用处(10)设有定义
5、 double a10, *s;,以下能够代表数组元素 a3的是(B))(*s)3 ) *(s+3)/s3) *s3 ) *s+3(11)若有以下定义和语句char s110=”abcd!”, *s2=”n123”;printf (”%d %dn”, strlen(s1), strlen(s2) );则输出结果是(A)/strlen 的用法:返回 s 的长度,不包括结束符 NULL(0)还考查了转义字符。A) 5 5 B) 10 5 C) 10 7 D) 5 8(12)有以下程序 #include int f(int m) static int n = 0;n += m;return n; m
6、ain ( )int n=0;printf(“%d,”, f(+n);printf(“%dn”, f(n+); 程序运行后的输出结果是A)1,2 B)1,1 C)2,3 D)3,3(13)以下选项中叙述错误的是(A)程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 )在程序的同一函数中,各复合语句内可定义变量,其作用域仅限于本复合语句内)程序函数中定义的自动变量,系统不自动赋确定的初值 )程序函数的形参不可以说明为 static 型变量(14)有以下程序void fun(char *w, int m)char s,*p1, *p2;p1 = w; p2 = w+m-1; whil
7、e (p1=1|+b; b+;printf(“%d”, b);输出结果为: 。(6)void main() int x = 1,y = 2;printf(“%d,“,x y ? y+ : x+); printf(“%d,“,x 0; i-) stri = stri-1;str0 = temp; main() char s50;scanf(“%s”,s);fun(s);printf(“%sn”,s); 程序运行后输入:abcdef,则输出结果是 。(9)某 32 位系统下, C 程序,请计算 sizeof 的值.char str = “http:/ *p = str ;char array10
8、= h,e,l,l,0,o;请计算sizeof (str ) = ? (1) sizeof ( p ) = ? (2) sizeof ( array ) = ?(3) strlen(array) = ?(4) void Foo ( char str100)请计算sizeof( str ) = ? (5) void *p = malloc( 100 );请计算sizeof ( p ) = ? (6) 三、简答题。 ((1)(3) 题,每题 6 分,第(4) 题 7 分,共 25 分)(1)写一个宏 MIN,这个宏输入两个参数并返回较小的一个#define MIN(a,b) (ab)?(b):(a
9、)(2)请写出 static 关键字尽可能多的作用,至少两点。(1 )设置变量的存储域,函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2 )限制变量的作用域,在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3 )限制函数的作用域,在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4 )在类中的 static 成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的
10、其它所有实例所见;(5 )在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量。(3)请问运行 Test 函数会有什么样的结果,为什么会有这样的结果?char *GetMemory(void)char p = “hello world“;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);(4)用变量 a 给出下面的定义 a) 一个指向整型数的指针 / int *ab) 一个指向指针的的指针,它指向的指针是指向一个整型数/int *ac
11、) 一个有 10 个整型数的数组 / int a10d) 一个有 10 个指针的数组,该指针是指向一个整型数的/ int *a10e) 一个指针,该指针指向一个有 10 个整型数的数组 / int (*a)10f) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 / int (*a)(int)g) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数/ int (*a10)(int)四、编程题(共 1 题,15 分)编写一个字符串查找函数,函数原型为:char *str_search(const char *str1, const char *str2),该函数实现在字符串 str1 中找出字符串 str2 第一次出现的位置。如果 str2 出现在 str1 中,则返回 str2 在 str1 中出现的首地址,如果在 str1 中没有与 str2 匹配的字符串则返回NULL。