高级语言程序设计自考题-18_真题(含答案与解析)-交互
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高级语言程序设计自考题-18
(总分100, 做题时间90分钟)
一、单项选择题
(在每小题列出的四个备选项中只有一个是符合题目要求的)
1.
在C语言中,只有在使用时才占用内存单元的变量,其存储类型是______
•**和static
•**和register
•**和register
**和extern
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[考点] 文件存储类型的特点
[解析] auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。
register:为了提高效率,C 语言允许将局部变量的值放在CPU的寄存器中,这种变量叫“寄存器变量”,只有局部自动变量和形式参数可以作为寄存器变量。
extern:外部
变量(即全局变量),是在函数的外部定义的,它的作用域从变量定义处开始,到本程序文件的末尾。
如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。
static:静态局部变量,属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
2.
读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是______
• A.所有内存块的字节数
• B.一个文件指针,指向待读取的文件
• C.一个整型变量,代表待读取的数据的字节数
• D.一个内存块的首地址,代表读入数据存放的地址
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[考点] fread函数
[解析] fread(void *buffer,size-t size,size-t count,FILE{stream);功能是从一个文件流中读数据,读取count个元素,每个元素size字节,如果调用成功则返回count。
buffer用于接收数据的内存地址,大小至少是
size*count字节;size表示单个元素的大小,单位是字节;count表示元素的个数,每个元素是size字节;stream表示输入流。
3.
能正确定义一个指向打开文件的文件型指针变量fp的语句是______ •** fp;
•** *fp;
•** fp;
** *fp;
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[考点] FILE
[解析] FILE是在头函数stdio.h中定义的文件结构型的用户自定义数据类型符,这个用户自定义的数据类型符是由大写字母组成的。
文件型指针变量在定义时,变量名的前面必须有*。
4.
设有定义:
struct apple
{int a,b;}data1={5,10},data2;
则以下赋值语句中错误的是______
•**=(3,7);
•**=data1;
•**=data1.a;
**=data1.b;
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[考点] 结构体初始化
[解析] A选项中可以在声明变量的同时为data2赋值,但data2=(3,7)应写作data2={3,7}。
所以选择A。
5.
以下说法正确的是______
• A.文件只能顺序存取
• B.数据存放在介质上的形式分为文本形式和二进制形式
• C.结构指针+1代表移向结构体的下一个成员
• D.引用结构体变量时,能将一个结构体变量作为一个整体进行输出
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[考点] 文件的存放形式
[解析] 文件的存取形式有顺序存取和直接存取两种方式;结构指针+1代表移向下一个结构体;不能将一个结构体变量作为一个整体进行输出,可以利用循环语句逐项输出。
6.
下列定义语句正确的是______
•**{int x;int y}N;
•** apple{int x;int y};
•** apple{int x;};
** apple{int x;}
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[考点] 结构体的定义
[解析] 在定义结构体时,结构体名可以省略,每个结构体成员的类型说明后面要有分号,同时在定义语句的最后要加分号作为结束。
7.
以下文件名错误的是______
•**:\tx\3apple.exe
•**:apple3.dat
•**
**:\\tx\\appl3e.exe
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[考点] 磁盘文件名
[解析] 磁盘文件名的格式为:盘符:路径\文件主名.拓展名,其中文件主名要求字母开头字符数小于或等于8个的字母数字组合,很明显A错误;盘符可以省略,代表在当前盘寻找;仅省略路径代表在指定盘的当前路径寻找;当盘符和路径同时省略时代表在当前盘当前路径寻找;当“\”出现在路径和文件主名时要写成转义字符“\”,所以B、C、D正确。
8.
设typedef char APPLE[100];APPLE *s;,则s是______
• A.字符数组
• B.字符变量
• C.字符指针数组
• D.字符指针变量
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[考点] 自定义数组类型
[解析] typedef基本数据类型用户类型符[数组长度]自定义了数组类型,APPLE *s相当于char *s[100],定义了一个字符指针数组。
9.
如果文件打开失败,则fopen函数返回______
• A.不确定值
•**
C.与文件相关联的文件指针
• D.返回文件的首地址
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[考点] fopen函数
[解析] 如果打开成功,fopen函数的返回值是与打开文件相关联的文件指针;如果返回NULL,则表示文件打开失败。
10.
下列语句中,不能将fp指向的文件的内部指针指向文件尾的是______ •**=fopen("a.txt","ab+");
•**(fp,oL,SEEK-END);
•**=fopen("a.txt,"ab";)
**(fp,20L,1)
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[考点] fopen函数和fseek函数
[解析] A项中“ab+”代表为了读写而打开一个二进制文件,位置指针移到文件末尾,如果二进制文件不存在,则自动建立文件,存在就会清空文件;B
项中表示以文件的末尾为起始点,移动0个偏移量;C项中“ab”代表为读写打开一个二进制文件,位置指针移到文件末尾;而D项则表示以当前位置为起点向前移动20个字节的位置,所以选D。
11.
设struct{int name;int score;}class,*p=&class;则下面说法错误的是
______
• A.可以这样引用class的成员name:*
• B.可以这样引用class的成员p->score
• C.该定义只能定义一次,如还需要定义,得重新定义结构体
• D.可以引用结构体变量成员的地址,也可以引用结构体变量的地址
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[考点] 结构体变量成员的引用
[解析] “.”成员运算符在所有运算符中优先级最高,可以把看成一体,所以A错,应该改为(*p).name。
12.
文件使用"wb+"方式的含义是______
• A.对文本文件只写
• B.对文本文件读和写,如果文件不存在,则创立文件
• C.对二进制文件只读
• D.对二进制文件读和写,如果文件不存在,则创立文件
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[考点] wb+
[解析] “wb+”的含义是对二进制文件进行读和写,如果文件不存在,则创立文件;如果存在就清空文件。
13.
设有下列数据定义语句,则表达式sizeof(abc)的值是______
struct{char a;long b;float c;}abc;
•**
•**
•**
**
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[考点] 结构型变量占用的内存空间
[解析] 结构型变量占用的内存字节数等于该结构型所有成员占用的字节数之和,char a占1个字节,long b占4个字节,float c占4个字节,所以abc共占9个字节。
14.
以下关于fgets(str1,n,fp)和fputs(str2,fp)函数的说法错误的是______ •**代表存放字符串的首地址
•**可以是字符串常量,也可以是字符串指针
•**函数的功能是从与fp有联系的文件中读n个字符
**函数的功能是将str2指向的一个字符串,舍去'\0'后写入fp所指向的文件SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[考点] fgets函数和fouts函数
[解析] fgets函数的功能是从与fp有联系的文件中读n-1个字符,在其后补充一个结束符'\0'。
15.
有以下程序:
#include<stdio.h>
main()
{FILE *fp;int a[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)
fprintf(fp,"%d",a[i]);/*把a[i]按%d的格式输入文件*/
fprintf(fp,"/n");/*把"\n"写入文件*/
fclose(fp)'
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);/*把文件存储到&n*/
fclose(fp);
printf("%d\n",n);
}
程序的运行结果是
•**
•**
•**
**
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[考点] fopen、fclose、fprintf和fscanf函数
[解析] 程序首先将数组a[10]中的元素1、2、3分别写入文件d1.dat文件中,然后又将d1.dat文件中的数据1、2、3,整体写入到了变量n的空间中,所以打印n时输出的数据为123。
二、填空题
1.
成员变量可以像一般的______一样进行各种运算,只是在运算时要加上“.”运算符。
SSS_FILL
分值: 2
答案:变量
[考点] 结构型变量成员
[解析] 结构型变量成员的使用和一般的普通变量或数组的使用方法完全相同。
2.
P->name代表P指向结构体变量中的______的值。
SSS_FILL
分值: 2
答案:name
[考点] 指向结构型变量的指针变量
[解析] 通过结构型指针引用结构型变量的方式有两种:(*指针变量).成员名和指针变量->成员名。
3.
fopen函数函数打开一个文本文件,在“使用方式”这一项中,为输出而打开需填入______,为输入而打开需填入______。
SSS_FILL
分值: 2
答案:“r”,“w”
[考点] fopen函数的使用方式
[解析] “r”打开一个已存在的文本文件,只能读取数据;“w”打开一个文本文件,只能写入数据。
4.
C语言中调用______函数关闭文件。
SSS_FILL
分值: 2
答案:fclose
[考点] fclose函数
[解析] 关闭文件时使用fclose函数。
5.
函数调用“exit(0)”的功能是______。
SSS_FILL
分值: 2
答案:关闭当前已经打开的所有文件,收回分配的所有内存,结束程序的运行
[考点] exit(0)系统函数
[解析] exit(0)函数所在头文件是stdlib.h,该函数的功能是关闭所有已经打开的文件,然后终止程序的运行。
6.
用typedef定义整型一维数组:typedef int apple[10],则对整型数组a[10]可以定义为______。
SSS_FILL
分值: 2
答案:apple a;
[考点] 数组类型的自定义
[解析] 通过typedef基本数据类型符用户类型符[数组长度];定义一个用户类型符,以后可以使用用户类型符定义由基本数据类型符组成的数组,其长度为定义时确定的。
7.
fputc(ch,fp)函数中的ch代表的是______。
SSS_FILL
分值: 2
答案:要写入的字符
[考点] 写字符函数
[解析] ch为写到文件中的字符,可以是字符常量、字符变量、字符表达式。
8.
专门判断文件是否结束的函数feof(),如果返回值为0,则表示文件______。
SSS_FILL
分值: 2
答案:没有结束
[考点] 文件尾测试函数
[解析] 若当前是文件尾,返回非0,否则返回0。
9.
已知:struct{int x,y;}apple[2]={{1,3},{5,7}},*p=apple;则表达式(++p)->x的值为______。
SSS_FILL
分值: 2
答案:5
[考点] 结构型数组和指向结构型数组的指针变量
[解析] *p=apple,p指向apple[0],++p指向了apple[1],即第二个结构型。
10.
成员运算符“.”是一个双目中缀运算符,前一个运算对象必须是______。
SSS_FILL
分值: 2
答案:结构型的变量
[考点] 成员运算符
[解析] 成员运算符是双目中缀运算符,前一个对象必须是结构型的变量,后一个对象是该结构型的成员名。
三、程序分析题
1.
#include<stdio.h>
typedef struct apple
{long i;
int k[3];
}DATE;
struct date
{int cat;
DATE cow;
double dog;
}too;
DATE max;
main()
{printf("%d\n",sizeof(struet date)+sizeof(max));}
SSS_TEXT_QUSTI
分值: 4
答案:
30
2.
假定名为“test.txt”的文本文件存在。
#include<stdio.h>
#include<stdlib.h>
main()
{FILE *fp;
char *s[3]={"123","abcd","7890"};
int k;
if((fp=fopen("test.txt","a+"))==NULL)
{printf("File not open!\n");exit(0);}
for(k=0;k<3;k++)fwrite(s[k],(10ng)(k+2),1,fp);
rewind(fp);
while(!feof(fp))printf("%c",fgetc(fp));
fclose(fp);
}
SSS_TEXT_QUSTI
分值: 4
答案:
12abc7890
3.
#include<stdio.h>
struck ks
{int a;int *b;}s[4],*p;
main()
{int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
p++;
printf("%d,%d\n",p->a,(++p)->a);
}
SSS_TEXT_QUSTI
分值: 4
答案:
3,5
4.
在C盘中有一个名为temp.txt的文件夹。
#include<stdio.h>
#include<stdib.h>
main()
{int i,n;
FILE *fp;
if((fp=fopen("c:\\temp.txt","w+"))==NULL)
{printf("can not set the temp file\n");exit(0);} for(i=1;i<=10;i--)fprintf(fp,"%3d",i);
for(i=0;i<5;i++)
{fseek(fp,i*6L,0);
fscanf(fp,"%d",&n);
printf("%3d",n);
}
fclose(fp);
}
SSS_TEXT_QUSTI
分值: 4
答案:
1 3 5 7 9
四、程序填充题
1.
下面的程序使用结构型来计算复数x和y的和。
main()
{struct apple
{float re;
float im;
};
______x,y,z; /*第一空*/
scanf("%f,%f,%f,%f",&x.re,&x.im,&x.re,&x.im);
z.re=______;z.im=______; /*第二、第三空*/
printf("%6.2f+%6.2fi\n",z.re,z.im);
}
SSS_FILL
分值: 6
答案:struct apple
x.re+y.re
x.im+y.im
2.
下面程序把从终端读入的文本(用“@”作为文本结束的标志)复制到一个名为bi.dat的新文件中,请填空。
#include<stdio.h>
FILE *fp;
main()
{char ch;
{printf("can not open");
if((fp=______)==NULL{printf("can not pen");/*第一空*/
exit(0);}
while((______)!='@')/*第二空*/
fpute(ch,fp);
______;/*第三空*/
}
SSS_FILL
分值: 6
答案:fopen("bi.dat","w")
ch=getchar()
fclose(fp)
3.
下面程序把从终端读入的10个整数以二进制数方式写到一个名为bi.dat的新文件中,请填空。
#include<stdio.h>
FILE*fp;
main()
{int i,j;
if((fp=fopen(______,"wb"))==NULL)exit(0);/*第一空*/
for(i=0;i<10;i++)
{scanf("%d",&j);
fwrite(&j,sizeof(int),1,______);} /*第二空*/
fclose(fp);
}
SSS_FILL
分值: 6
答案:"bi.dat"
fp
五、程序设计题
1.
编程序输入30个学生的学号、姓名、3门课程的成绩,存入一个结构型的数组。
统计并输出每个学生的学号、姓名、总分。
SSS_TEXT_QUSTI
分值: 8
答案:
main()
{struct
{long num;
char name[20];
float score1;
float score2;
float score3;
float total;
}stu[50];
int i;
float x1,x2,x3;
for(i=0;i<30;i++)
{scanf("%1d,%s/t&stu[i].num,stu[i]).name);
scanf("%f,%f,%f",&x1,&x2,&x3);
stu[i].score1=x1,stu[i].score2=x2,stu[i].score3=x3;
}
for(i=0;i<30;i++)
stu[i].score1=stu[i].score2=x2,stu
score2+stu[i].score3;
for(i=0;i<30;i++)
printf("%1d name%f\n",stu[i].num,
stu[i].total);
}
2.
由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志。
SSS_TEXT_QUSTI
分值: 8
答案:
#include<stdio.h>
#include<stdlib.h>
main()
{FILE *fp;
char ch,fname[10];
printf("please input the file name.\n");
gets(fname);
if((fp=fopen(fname,"w"))==NULL)
{printf("cannot open");
exit(0);
}
else
{printf("enter the content:\n");
while((ch=getchar())!='#')
fputc(ch,fp);
}
fclose(fp);
}
1。