一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码写在答题纸上。请注意注明题号。每小题1分,共计6分)
1、‘\t’表示什么?
①字符串常数②标识符③变量④字符常量
答案:④
2、对宏定义不正确的描述是哪一个?
①在进行宏定义时,可以引用已经定义的宏名,可以层层置换
//可以引用已经定义了的宏名,可以层层置换
②宏名的有效范围包括本文件的任何位置
//宏名的有效范围定义命令之后到本源文件结束,可以用#define终止宏定义的作用域
③宠定义不是语句,不必在行末加分号
//是预处理定义语句
④对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换
3、若定义static char s[20]=”computer”;则执行语句x = strlen(s);之后,x的值为多少?
①20 ②9 ③8 ④19
//strlen函数计算char*型字符串的长度的时候,并不包含末尾的\0;
4、以下哪一个表达式取值是正确的?
①6>5结果为6 ②6&&5结果为7
③6||5结果为7 ④6<5结果为0
5、如定义
enum weekday {one, two, thr, fou, fiv};
enum weekday working;
以下哪个是不正确的枚举变量的使用?
①working = thr; ②working =2;
③working = (enum weekday)2;
④working = (enum weekday) (5-3);
//不能对其赋值
6、下列说法中正确的是哪一个?
①sizeof (char)是结果为整型的表达式
②sizeof (char)是一个不合法的表示形式
③sizeof (char)是一种函数调用
④sizeof (char)是结果为实型的表达式
二、阅读程序,并回答问题(共12分)
1、下列程序的输出是什么?(3分)
# include
void main ()
﹛
char * aplha [6] =﹛“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”﹜;
char **p;
int i;
p = aplha;
for (i = 0; i<4; i++)
printf (“%s”, p[i]);
printf (“\n”);
﹜
//输出结果
ABCDEFGHIJKL
刚好是字符串数组里面的前四个元素的内容连接起来
2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出?应该如何修改?(6分)
# include
void swap (int x, int y)
﹛
int t = x;
x = y;
y = t;
﹜
void main ()
﹛
int a, b, c;
scanf (“%d, %d, %d”, &a, &b, &c);
if (a>b) swap (a, b);
if (a>c) swap (a, c);
if (b>c) swap (b, c);
printf (“%d, %d, %d”, a, b, c);
﹜
//函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参。将值传递改成指针传递就可以了。
C函数参数采用值传递方式,虽然swap函数将形式参数x和y的值进行了调换,但是影响不到相应的实在参数。所以在主函数中,通过调用sawp函数调换a和b(或a或c,或b和c)的值是根本达不到目的的。
修改:
(1)(2分)
void swap (int *x, int*y)
﹛
int t = *x;
*x = *y;
*y = t;
﹜
(2)(2分)主函数
if(a>b) swap(&a,&b);
if(a>c) swap(&a,&c);
if(b>c) swap(&b,&c);
3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。下列程序完成的功能是什么?(3分)
# include
union
﹛
int n;
char ch [2];
﹜u;
void main ()
﹛
int m;
scanf (“%d”,&m);
u.n = m;
printf (“\n%u, %u”,u.ch[0], u.ch[1]);
﹜
//该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。
三、程序设计题(12分)
假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。源文件名和目标文件名通过命令行参数获取。
分数分配:
变量定义2分
命令行参数处理1分
文件打开1分
文件读2分
排序3分
文件写2分
文件关闭1分
# include
void main(int argc, char *argv[])
﹛
FILE *fin, *fout;
Int a [100], i, j, t;
if(argc!=3)
﹛
printf (“ You forgot to enter a filename\n”);
return;
﹜
fin = fopen (argv[1], “r”);
fout = fopen (argv[2], “w”);
for (i = 0; i<100; i++)
fscanf (fin, “%d”, &a[i]);
for (i = 0; i<99; i++)
for (i = 0; i<99-i; i++)
if (a[j]>a[j+1])
﹛t = a[j]; a[j] = a[j+1]; a[j+1]=t;﹜
for (i = 0; i<100; i++)
﹛
if (i%10 = 0)
fprintf (fout, “%s”, “\n”);
fprintf (fout, “%d”, a[i]);
﹜
fclose (fin);
fclose (fout);
﹜