1、76附录四 期末测试题一、选择题1. 下面对 C 语言字符数组的描述中错误的是_。A. 字符数组可以存放字符串B. 字符数组的字符串可以整体输入、输出C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值D. 不可以用关系运算符对字符数组中的字符串进行比较2. 在宏定义 #define PI 3.14159 中,用宏名 PI 代替一个_。A. 常量 B. 单精度数 C. 双精度数 D. 字符串 3. 以下有关宏替换的叙述不正确的是_。A. 宏替换不占用运行时间 B. 宏名无类型C. 宏替换只是字符替换 D. 宏名必须用大写字母表示4. 若有语句 int w5=-4,6,0,-1,9;则以
2、下说法错误的是_。A. w 是地址的概念 B. 编译后,数组 w 占用连续的储存空间C. 表达式 w+3 是地址的概念 D. 表达式 *(w+1)的值为 -45. 变量的指针,其含义是指该变量的_。A. 值 B. 地址 C. 名称 D. 一个标志6. 若有语句 char s=“WELCOME”;为得到字符串中的字符w,如下_的引用方法是错误的。A. s0 B. *(s+1) C. *s D.*(s+0)7. 若有语句 int *point,a=4;point=下面均代表地址的一组选项是_。A. a,point,* ,则 x4. 宏展开是在 预编译 时进行的。5. 若用数组名作为函数调用的实参,
3、则传递给形参的是 地址 。6. 若有以下定义,则引用变量 stu 中的 num 成员项的引用方式为 stu.num。struct int num;char name10;int score; stu;7. 在 C 语言中对文件的存取是以 字节 为单位的。8. 若 fopen()函数执行不成功,则返回值为 NULL 或 0。9. 如果文件没结束,feof( )函数的返回值为 0 。10.在对文件进行操作的过程中,若要求文件的位置指针回到文件的开头,应当调用的库函数是 rewind() 。三、阅读程序,写出程序的运行结果1. f(int a ) int i=0;while (aia,(p+)a);
4、 /*提示:参数从右向左计算*/输出的结果是 7, 3 。四、完善程序,在程序的_处,填入正确的内容,使其完整正确1. 下面程序通过函数调用,在一维数组中查找最大值,并输出之。请填空。int max_in_array(int a,int n)int i;int temp=a0;for(i=1;itemp)temp=ai ; return(temp);main()80int t;int w5=-2,10,1,5,3;t=max_in_array(w,5);printf(“%d“, t );2. count 函数的功能是统计一个字符串中英文字母(letter) 和其它字符(other)的个数。 c
5、ount (char str,int *letter,int *other) int i;for (i=0;stri!=0;i+)if (stri=am=ab ? a : b;m=bc ? b : c; = 正确为:m=mc ? m : c;82return(m); main() float a,b,c,m;scanf(“%f,%f,%f“,m=max(a,b,c);printf(“n 最大数为: %f“,m);2. 下面程序功能是:将从键盘输入的英文字符串变成大写的,然后输出该字符串。#include“stdio.h“main() int i=0;char p100;gets(p);whil
6、e(pi!=0) = 正确为:while(pi!=0) if(pi=a 3. 下面程序的功能是实现字符串的连接。例如,若字符串 a80=“HELLO!”,字符串 b10=“Jone”,则连接后,字符串 a 成为“HELLO!Jone” 。void join(char *a,*b) = 正确为:void join(char *a,char*b) int i,j;char *p1,*p2;p1=a;p2=b;while(*p1) p1+;while(*p2)*p1=*p2;p1+;p2+; *p1=0;main() char *x=“HELLO!“;char *y=“jone“;join(x, =
7、 正确为:join(x,y); puts(x);834. 下面程序将一个磁盘文件上的信息复制到另一个磁盘文件上去。#include “stdio.h“main() file *in,*out; = 正确为: FILEchar ch,infile20,outfile20; scanf(“ %s“,infile); /*输入要复制的文件名*/scanf(“ %s“,outfile);if(in=fopen(infile,“r“)=NULL) printf(“Cannot open infilen“); exit(0);if(out=fopen(outfile,“w“)=NULL) printf(“
8、Cannot open outfilen“); exit(0); while(!feof(in)fputc(out,fgetc(in); = 正确为:fputc(fgetc(in),out);fclose(in);fclose(out);5.下面程序的功能是:用命令行方式显示一个文本文件的内容。#include “stdio.h“main(int argc,char *argv ) FILE *fp;char line81;if(fp=fopen(“argv1 “,“r“)=NULL) = 正确为:argv1 printf(“文件未找到.“);exit(0);while(fgets(line,
9、80,fp)!=NULL) printf(“%s“,line);fclose(*fp); = 正确为:fclose(fp);六、 程序设计1. 将一个十进制的正整数转换成二进制数并输出。参考程序:main() int m,k,a20,i=0;printf(“nplease enter m: “);scanf(“%d“,while(m) ai+=m%2;84m=m/2;for(i=i-1;i=0;i-)printf(“%d “,ai);getch();2. 从键盘输入一行字符串(strj) m=j;t=strm;strm=stri;stri=t;main() char ss20;clrscr()
10、;printf(“nn 请输入一行字符串 : “);gets(ss);sort(ss);printf(“由小到大排序结果为: “);puts(ss);参考程序二:起泡法sort(char str)int i,j,k,t;k=strlen(str);for(i=0;istrj+1)t=strj;strj=strj+1;strj+1=t;85main() char ss20;clrscr();printf(“nn 请输入一行字符串 : “);gets(ss);sort(ss);printf(“由小到大排序结果为: “);puts(ss);3. 有两个磁盘文件,各自存放若干已排好序的字符(如 a1.
11、dat 中存放“abort” ,a2.dat 中存放 “boy”),要求将两个文件合并,合并后仍然保持有序(如“abboorty”) ,存放在 a3.dat 文件中。 参考程序一:#include “stdio.h“sort(char str)int i,j,k,t;k=strlen(str);for(i=0;istrj+1)t=strj;strj=strj+1;strj+1=t;main()FILE *fp1,*fp2,*fp3;char str1100,str2100,str3200,str30;if(fp1=fopen(“d:a1.dat“,“rt“)=NULL)printf(“Cannot open infilen“);exit(0);if(fp2=fopen(“d:a2.dat“,“rt“)=NULL)printf(“Cannot open infilen“);exit(0);if(fp3=fopen(“d:a3.dat“,“wt“)=NULL)printf(“Cannot open infilen“);exit(0);