1.
执行下面程序,正确的输出是()。
int x = 5, y = 7;
void swap ( )
{
int z ;
z = x ; x = y ; y = z ;
}
int main(void)
{
int x = 3, y = 8;
swap ( ) ;
printf ("%d,%d \n", x , y ) ;
return 0 ;
}
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系;输出语句这里,考虑局部优先的原则,故输出3,8;
2.
对于以下变量定义,正确的赋值是()。
int *p[3], a[3];
A.p = a
B.*p = a[0]
C.p = &a[0]
D.p[0] = &a[0]
解析:
p[3]为存放三个指针的指针数组,题目的意思是将三个指针分别指向a数组中的三个值需要进行的完整或者其中一个步骤,对于A,p为指针数组地址,关于p的操作都是错误的,ac排除,关于B,a[0]为第一个元素的值,明显不对,故D正确。
3.
有说明:char *language[] = {"FORTRAN", "BASIC", "PASCAL", "JAVA", "C"};
则表达式 *language[1] > *language[3]
比较的是 ( )。
A.字符 'F'
和字符 'P'
B.字串 "BASIC"
和字符串 "JAVA"
C.字符 'B'
和字符 'J'
D.字符串 "FORTRAN"
和字符串 "PASCAL"
答案选C
4.
若已建立下面的链表结构,指针 p、q 分别指向图中所示结点,则不能将 q 所指结点插入到链表末尾的语句是( )。
A.
q->next = NULL;
p = p->next;
p->next = q;
B.
p = p->next;
q->next = p->next;
p->next = q;
C.
p = p->next;
q->next = p;
p->next = q;
D.
p = (*p).next;
(*q).next = (*p).next;
(*p).next = q;
答案选C
5.
假设下列程序保存在test.c中,编译后运行test hello world,则输出是
#include<stdio.h>
int main(int argc, char *argv[ ])
{
printf("%d,%s", argc, argv[1]+1);
return 0;
}
解析:argc代表的是元素的个数。hello world 为两个参数,argv[1]代表的是hello,故argv[1]+1为e的地址。
6.
以下语句将输出 ()。
#include <stdio.h>
printf("%d %d %d", NULL, '\0', EOF);
解析:
0 0 -1。
7.缓冲文件系统的文件缓冲区位于()。
内存数据区中。
8.
以下可作为函数fopen中第一个参数的正确格式是( )。
A.c:user\text.txt
B.c:\user\text.txt
C."c:\user\text.txt"
D."c:\\user\\text.txt"
9.
如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。
A."w"
B.”wb"
C."w+"
D."wb+"
“r+” 扩展读 为读取/写入打开文件 从起始读取 错误
“r” 读 为读取打开文件 从起始读取 打开失败
“w” 写 为写入创建文件 销毁内容 创建新文件
“w+” 扩展写 为读取/写入创建文件 销毁内容 创建新文件
“rb” 以二进制模式读 为读取打开文件 从起始读取 打开失败
“wb” 以二进制模式写 为写入创建文件 销毁内容 创建新文件
10.
直接使文件指针重新定位到文件读写的首地址的函数是() 。
A.ftell()函数
B.fseek()函数
C.rewind()函数
D.ferror()函数
直接使文件指针重新定位到文件读写的首地址的函数是 rewind ()
ftell() 函数用于得到文件指针当前位置相对于文件首地址的偏移字节数;
fseek()函数用于设置文件指针的位置;
rewind()函数用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头;
ferror()函数可以用于检查调用输入输出函数时出现的错误。
11.
函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式可以是( )。
A.只写
B.追加
C.读或读写
D.答案B和C都正确
12.
C语言的编译预处理功能包括()。
A.文件包含
B.宏定义
C.条件编译
都对
13.
下列程序的输出结果为()
#include <stdio.h>
int fib(int g)
{
switch(g){
case 0: return 0;
case 1:
case 2: return 2;
}
printf("g=%d,", g); /* 中间没有空格 */
return fib(g-1) + fib(g-2);
}
int main(void)
{
int k;
k = fib(4);
printf("k=%d\n", k); /* 中间没有空格 */
return 0;
}
易错点:case1与case2 之间没有break,所以1与2都return的是2; 总的输出是g=4,g=3,k=6
14.
阅读以下程序并回答问题。
#include <stdio.h>
#define S(x) 3 < (x) < 5
int a, n;
void f1(int n)
{
for(; n >= 0; n--){
if(n % 2 != 0) continue;
printf("%d ", n); /*%d后面有1个空格*/
}
printf("\n");
}
double f2(double x, int n)
{
if(n == 1) return x;
else return x * f2(x, n-1);
}
int main(void)
{
int a = 9 ;
printf("%d,%d\n", a, S(a)); /* 中间没有空格 */
f1(4);
printf("%.1f\n", f2(2.0, 3));
printf("%d,%d\n", n, S(n)); /* 中间没有空格 */
return 0;
}
易错点:1.3<(x)<5,首先判断左边,9>3,没问题结果为1,在判断右边1<5,故返回值为1。
2.全局变量与函数参数都定义int n ,但函数内变量值改变不影响全局变量,n默认为0.
15
#include<stdio.h>
int main(void)
{
const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
const char ___;
int k;
for(k = 0 ; k < 5 ; k++)
{
_______;
printf ("%s\n", *q);
}
return 0;
}
**q,q=language+k
16. break语句只能用于循环语句中。 F switch中;
17.continue 只能用于循环体中。 T
18.在C程序中,main函数必须位于源程序的最前面 F
19.在C程序中,函数可以嵌套调用,但不可以嵌套定义。 T
20.
The following code fragment outputs the string str
. The loop condition str[i]!='\0'
can be replaced by __.
char str[80]="hello, world";
for (i = 0; str[i] != '\0'; i++)
putchar(str[i]);
A.str[i]
B.i < 80
C.!(str[i] = '\0')
D.i<= 80
A.
21.
After executing the following code fragment, the value of variable m
is __.
int m;
for( m=0; m<9; m++ ) m++;
10. 0,2,4,6,8,10,
22.
在一个被调用函数中,关于 return 语句使用的描述,错误的是( )。
A.被调用函数中可以不用 return 语句
B.被调用函数中可以使用多个 return 语句
C被调用函数中,如果有返回值,就一定要有 return 语句
D调用函数中,一个 return 语句可以返回多个值给调用函数
D
23.
可以使用以下语句来读取一行字符,并依次处理各个字符(直到遇到’\n’结束)
char ch;
while(ch = getchar() != ‘\n’)
{
do something;
}
F 等号从右到左,故ch=getchar() 要加括号
24.静态变量的作用域是整个文件 F,仅作用于源文件
25.当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区。
F
26.C语言函数返回类型的默认定义类型是void。 F 是int
27.函数的实参可以是常量,变量或表达式。 T
28.局部变量如果没有指定初值,则其初值不确定。 T 静态局部变量是确定的,局部是不确定的
29.函数形参的存储单元是动态分配的。 F,
不是,函数的变量一般是栈区,只要退出函数,系统就会自动回收栈区 而动态分配分配时分配堆区,堆区只能手动回收(free函数)
30.全局变量只能定义在程序的最前面,即第一个函数的前面。 F
31.自动变量如果没有赋值,其值被自动赋为0。 F
32.在所有的关系运算符(>=、>、==、!=、<=、<)中,优先级最低的运算符是“==、!=”。 T
33.在C 语言中,常量和变量都有数据类型。 T
34.表达式 !x 等价于x != 1。 F 令x=5,则两者均成立。而两者在01是一样的。
35.运算符“+”不能作为单目运算符。 F
36.
下面合法的C语言字符常量是()。
A.'\t'
B."A"
C.'xx'
D.A
A 转义字符是合法的如 '\n'等等。单引号+单个字符
37.下面的程序段输出是( )。
int k=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);
11 13 B
38.设int a = 5, b = 6;
则表达式(++a == b--) ? ++a : --b
的值是 7
39.
假定char
类型变量占用1个字节,且数组定义如下,则数组str
在内存中所占字节数是( )。
char str[81];
A.0
B.10
C.80
D.81
D
40.
在以下描述中,( )是正确的。
A.
int a[5] = {1, 2, 3, 4, 5};
定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。
B.
static int b[10];
定义了静态数组b,且10个数组元素的初值都为0。
C.
int fib[45];
定义了数组fib,且45个数组元素的值都为0。
D.
static int week[7] = {1, 2, 3};
定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。
E.
int cnt[10] = {1};
定义了数组cnt,并对cnt[0]赋初值1,其余元素的初值为0。
解析:ABE,想使一个数组中全部元素值为0,可以写成:a[10]={0};
需要注意 int a[10] = {1}; 并不能把数组初始化为全1,只是将第一位初始化为1,后面全部都是0滴.
41.
选项( )与以下字符数组定义等价。
static char s[6] = {'H', 'a', 'p', 'p', 'y', '\0'};
A.
static char s[6] = {'H', 'a', 'p', 'p', 'y'};
B.
static char s[6] ="Happy";
C.
static char s[6] ={"Happy"};
D.
static char s[6] = {'H', 'a', 'p', 'p', 'y', 0};
ABCD
42.执行语句int *p = 1000;
后,指针变量p
指向地址为1000
的变量。 F , 报错
43.两个任意类型的指针可以使用关系运算符比较大小。 F
44.冒泡排序效率较高,因为它只需要约
次比较。
F 效率不高