习 题 (第6章)
1. 选择题
(1) 若有以下数组说明,则数值最小的和最大的元素下标分别是( )。
int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};
A. 1,12 B. 0,11 C. 1,11 (2) 若有以下说明,则数值为4的表达式是( )。
A. a[g-c]
B. a[4]
C. a['d'-'c']
D. 0,12
int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ;
D. a['d'-c]
(3) 设有定义:char s[12] = \则printf( \的输出是( )。 A. 6 B. 7 C. 11 D. 12 (4) 设有定义:char s[12] = \则printf(\的输出是( )。 A. 6 B. 7 (5) 合法的数组定义是( )。
A. char a[ ]= \ C. char a= \ (6) 合法的数组定义是( )。
C. 11
D. 12
B. int a[5] ={0,1,2,3,4,5}; D. char a[ ]={0,1,2,3,4,5}
A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4}; C. int a[2][3]={0,1,2,3,4,5,6}; D. int a[2][3]={0,1,2,3,4,5,}; (7) 函数调用strcat(strcpy (str1,str2),str3); 的功能是( )。
A. 将字符串str1复制到字符串str2中后再连接到字符串str3 之后
B. 将字符串str1连接到字符串str2之后再复制到字符串str3 之后
C. 将字符串str2复制到字符串str1中后再将字符串str3 连接到字符串str1之后 D. 将字符串str2连接到字符串str1之后再将字符串str1 复制到字符串str3中 (8) 有字符数组定义如下,则不能比较a,b两个字符串大小的表达式是( )。
char a[ ]=\
A. strcmp(a,b) ==0 B. strcmp(a,b)>0 D. a
C. strcmp(a,b)<0 (9) 设有如下定义,则正确的叙述为( )。
char x[ ]= \
char y[ ]={'a','b','c','d','e','f','g'};
A. 数组x和数组y等价 B. 数组x和数组y长度相同 C. 数组x的长度大于数组y的长度 D. 数组x的长度小于数组y的长度 (10) 设有二维数组定义如下,则不正确的元素引用是( )。
第7章 数组
int a[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
·97·
A. a[2][3] a[2]['c'-'a'] 2. 填空题
B. a[a[0][0]][1] C. a[7] D.
(1) C语言中,数组的各元素必须具有相同的 ,元素的下标下限为 ,但在程序执行过程中,不检查元素下标是否 。下标必须是正整数、0、或者 。 (2) C语言中,数组在内存中占一片 的存储区,由 代表它的首地址。数组名是一个 常量,不能对它进行赋值运算。
(3) 执行 int b[5], a[ ][3] ={1,2,3,4,5,6}; 后,b[4] = ,a[1][2] = 。 (4) 设有定义语句 char a[10] = \则a[3]值为 ,a[5]值为 。 (5) 若在程序中用到putchar ( )函数,应在程序开头写上包含命令 ,若在程序中用到strlen ( )函数,应在程序开头写上包含命令 。
(6) 下面程序的功能是输出数组s中最大元素的下标,请填空。
#include
int k, p;
int s[]={1,-9,7,2,-10,3}; for(p=0,k=p; p<6; p++)
if(s[p]>s[k]) ;
printf(\}
(7) 下面程序在a数组中查找与x值相同的元素所在位置,数据从a[1]元素开始存放,请填空。
#include
int a[11], i, x ;
printf( \输入10个整数:\ for(i=1; i<=10; i++)
scanf( \
printf( \输入要找的数x:\
scanf( \ a[0]=x ; i=10;
while(x != ) ; if( )
printf( \与x值相同的元素位置是:%d\\n\ else
printf( \找不到与x值相同的元素!\\n\
}
(8) 下面程序的功能是将一个字符串str的内容颠倒过来,请填空。
·97·
·98· 第7章 数组
#include \void main( ) {
int i, j, ;
char str[]= \
for(i=0, j=str1en(str); ; i++, j--) { k=str[i]; str[i] =str[j]; str[j]=k;} puts(str); }
/* 头尾交换,直到中间*/
(9) 从键盘输入一串字符,下面程序能统计输入字符中各个大写字母的个数。用#号结束输入,请填空。(该程序利用了字符的ASCII码和整数的对应方法,数组c的下标为0到25,当输入为ca='A'则ca-65=0,c[0]的值加1,依此类推。而输出时c[i]的下标i+65正好又是相应的字母。)
#include
int c[26],i; char ca;
for(i=0; i<26; i++) c[i] = ; scanf( \ while( ) {
if ((ca>='A')&&(ca<='Z')) c[ca-65]+ = ; ; }
for(i=0; i<26; i++)
if(c[i]) printf( \个\\n\}
3. 程序阅读题
(1) 阅读程序,写出运行结果。
#include
int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j; for(i=0;i<6;i++) {
for(j=0;j<6;j++)
if(a[i]==b[j])break;
if(j<6) printf(\ }
printf(\}
(2) 阅读程序,写出运行结果。
#include
·98·
第7章 数组
{
char a[8],temp; int j,k; for(j=0;j<7;j++)
a[j]='a'+j; a[7]='\\0'; for(j=0;j<3;j++) {
temp=a[6]; for(k=6;k>0;k--)
a[k]=a[k-1];
a[0]=temp;
printf(\ }
}
(3)
阅读下列程序,写出程序运行的输出结果。 #include
int i;
char str1[ ]=\ for(i=0;i<4;i++) {
printf(\ str1[i]=' ';
str1[strlen(str1)-1]='\\0'; }
}
(4)
阅读下列程序,写出程序运行的输出结果。 #include
int a[8]={1,0,1,0,1,0,1,0},i; for(i=2;i<8;i++)
a[i]+=a[i-1]+a[i-2];
for(i=0;i<8;i++)
printf(\
printf(\
}
(5)
写出下列程序的运行结果。 #include
char a[ ]={'*','*','*','*','*'}; int i, j, k ;
for(i=0; i<5; i++) {
·99·
·99·
·100· 第7章 数组
printf( \
for(j=0; j
4. 程序设计题
(1) 编程序。输入单精度型一维数组a[10],计算并输出a数组中所有元素的平均值。 (2) 求一个3×3矩阵对角线元素之和。
(3) 编程序按下列公式计算s的值(其中x1、x2、?、xn由键盘输入)。(其中x0是x1、x2、?、xn的平均值)
ns?? (xr?1i?x0)2
(4) 输入一个字符串,将其中所有大写字母改为小写字母,并把所有小写字母全部改为大写字母,然后输出。
(5) 某班50名学生的成绩表如下:
课程一 课程二 课程三
… … …
试编一个程序,输入这50名学生的三科成绩,计算并输出每科成绩的平均分。
(6) 输入10个数,保存在数组a中,找出其中的最小数与第一个数交换位置,再输出这10个数。
(7) 假设有10个数存放在数组a中,并且已经按照从小到大顺序排列,现输入一个数,将其插入到数组a中,要求保持数组a的有序性。
(8) 输入一个十进制整数,将其转换为二进制数输出。
·100 ·
第7章 数组 ·101·
习 题 (第七章)
1. 选择题
(1) 在C语言程序中,有关函数的定义正确的是( )。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套
B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和函数的调用均可以嵌套
(2) 以下对C语言函数的有关描述中,正确的是( )。
A. 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可递归调用
C. 函数必须有返回值,否则不能使用函数
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 (3) 函数调用语句f((e1,e2) , (e3,e4,e5));中参数个数是( )。
A. 5 B. 4 C. 2 D. 1 (4) C语言中,若对函数类型未加显式说明,则函数的隐含类型为( )。
A. void B. double (5) C语言中函数的隐含存储类型是( )。
A. auto B. static
C. char C. extern
D. int
D. 无存储
类型
(6) 能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是
( )。
A. return这两个数 B. 形参用两个元素的数组
C. 形参用两个这种数据类型的指针 (7) 以下程序的输出结果是( )。
#include
fun(int a, int b, int c) { c=a*b; } void main( ) {
int c;
fun(2,3,c) ;
printf(\}
D. 用两个全局变量
A. 0 B. 4 C. 6 D. 无
法确定
(8) 对于以下递归函数f,调用f(4),其返回值为( )。
int f(int n) {
·101·
·102· 第7章 数组
if(n) return f(n-1)+n ; else return n; }
上均不是
A. 10 B. 4 C. 0 D. 以
2. 填空题
(1) 变量的作用域主要取决于变量 ,变量的生存期既取决于变量 ,又取决于变量 。
(2) 从变量的存储类型来说, 变量不允许初始化, 变量、
变量和 变量可以初始化。其中变量如果不进行初始化,则 变量和 变量的初值不确定,而 变量初值为0。
(3) 静态型内部变量的作用域是 。
(4) 函数中的形参和调用时的实参都是数组名时,传递方式为 ,都是变量时,传递方式为 。
(5) 函数的形式参数的作用域为 ,全局的外部变量和函数体内定义的局部变量重名时, 变量优先。
(6) 若自定义函数要求返回一个值,则应在该函数体中有一条 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 。
(7) 执行下列程序段后,i值为 。
int i;
int f(int x) {
static int k=0; x+=k++; return x; }
i=f(f(1)) ;
(8) 执行i=f(3);后,i值为 。
int i;
int f(int x)
{ return ((x>0)? f(x-1)+f(x-2):1); }
3. 程序阅读题
(1) 程序运行时从键盘输入abcdef
#include
char c ;
if((c=getchar( ))!='\\n') fun( ) ;
·102 ·
第7章 数组
putchar(c); }
void main( )
{ fun( ); }
(2) 阅读下面程序,写出输出结果。
#include
int x;
x=y++; printf(\
if(x>4) { int x ; x=++y; printf(\ x+=y--;
printf(\
}
(3) 阅读下面程序,写出输出结果。
#include
func(int a , int b)
{ c=a*b ; a=b-1 ; b++ ; return (a+b+1) ; } void main( ) {
int b=2 , p=0 ; c=1 ; p=func(b , a) ;
printf(\
}
(4)
阅读函数,写出函数的主要功能。 float av(float a[ ], int n) {
int i; float s;
for(i=0,s=0; i } (5) 阅读下面程序,写出输出结果。 #include unsigned fun6(unsigned num) { unsigned k=1; do { k*=num; num/=10; } while(num); return k; } void main( ) { unsigned n=26; ·103· ·103· ·104· 第7章 数组 printf(\} (6) 阅读下面程序,写出输出结果。 #include void main() { int a,b,c; int find(int,int,int); scanf(\ printf(\} int find(int a,int b,int c) { int u,s,t; u=((u=(a>b)?a:b)>c)? u:c; t=((t=(a (7) 阅读下面程序,写出输出结果。 #include void fun1(int n,int a[ ][3]) { for(int i=0;i for(int j=0;j void main( ) { int a[3][3]={{6,4,2},{8,6,4},{9,6,3}}; fun1 (3,a); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) printf(\ printf(\ } } (8) 阅读下面程序,写出输出结果。 #include \ int binary(int x,int a[ ],int n) { int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(x>a[mid]) high=mid-1; else if(x ·104 · 第7章 数组 } return(-1); } void main( ) { static int a[]={4,0,2,3,1}; int i,t,j; for(i=1;i<5;i++) { t=a[i]; j=i-1; while(j>=0&&t>a[j]) { a[j+1]=a[j]; j--; } a[j+1]=t; } printf (\} ·105· 4. 程序设计题 (1) 编一个名为root的函数,求方程ax+bx+c=0的b-4ac,并作为函数的返回值。其中的a、b、c作为函数的形式参数。 (2) 编一个函数,若有参数y为闰年,则返回1,否则返回0。 (3) 编一个无返回值、名为max_min的函数,对两个整数实参能求出它们的最大公约数和最小公倍数并显示。 (4) 编一个名为day_of_year(int year,int month,int day)的函数,计算并返回是该年的第几天。 (5) 编一个名为link的函数,要求如下: 形式参数:s1[40],s2[40],s3[80],存放字符串的字符型数组。 功能:将s2连接到s1后存入s3中。 返回值:连接后字符串的长度。 (6) 编一个函数,返回一维实型数组前n个元素的最大数、最小数和平均值。数组、n和最大数、最小数、平均值均作为函数的形式参数。 (7) 编一函数delchar(s,c),将字符串s中出现的所有c字符删除。编写 main 函数,并在其中调用delchar(s,c) 函数。 (8) 按下面要求编写程序: ①定义函数cal_power(x, n)计算x的n次幂(即xn),函数返回值类型是double。 ②定义函数main(),输入浮点数x 和正整数n,计算并输出下列算式的值。要求调用函数cal_power(x, n)计算x的n次幂。 算式:s = 1/x+1/x2+1/x3+…+1/xn ·105· 2 2 ·106· 第7章 数组 习 题 (第八章) 1. 选择题 (1) 下列不正确的定义是( )。 A. int *p=&i, i; B. int *p, i; C. int i, *p=&i; D. int t, *p; (2) 下列语句定义p为指向float类型变量d的指针,其中正确的是( )。 A. float d,*p=d; B. float d,*p=&d; C. float *p=&d,d; D. float d,p=d; (3) 对语句 “int a[10],*p=a;”,下列表述中正确的是( )。 A. *p被赋初值为a数组的首地址 C. p被赋初值为数组元素a[1]的地址 B. *p被赋初值为数组元素a[0]的地址 D. p被赋初值为数组元素a[0]的地址 D. (4) 假如指针p已经指向变量x,则&*p相当于( )。 A. x B. *p C. &x **p (5) 假如指针p已经指向某个整型变量x,则(*p)++相当于( )。 A. p++ B. x++ C. *(p++) D. &x++ (6) 设指针x指向的整型变量值为25,则printf(\的输出是( )。 A. 23 B. 24 C. 25 D. 26 (7) 若有说明语句int a[ ]={1,2,3,4,5}, *p=a, i; 且0<=i<5, 则对数组元素错误的引用是( )。 A. *(a+i) B. a[p-a] C. p+1 D. *(&a[i]) (8) 若有说明语句 int a[5], *p=a; 对数组元素的正确引用是( )。 A. *&a[5] B. *p+2 (9) 若有以下定义,则 *(p+5) 的值为( )。 char s[ ]=”Hello”, *p=s; C. *(a+2) D. *a++ A. '0' 确定的值 B. '\\0' C. '0'的地址 D. 不 (10) 若有以下的定义,则值为3的表达式是( )。 int a[10] ={1,2,3,4,5,6,7,8,9,10}, *p=a; A. p+=2,*(p++) B. p+=2,*++p C. p+=3,*p++ D. p+=2,++*p; (11) 执行语句 char a[10] ={\后,*(p+4)的值是( )。 A. \不能确定 B. 'd' C. '\\0' D. (12) 数组定义为“int a[4][5];”,引用“a[1]+3”表示( )。 ·106 · 第7章 数组 A. a数组第1行第3列元素的地址 B. a数组第1行第3列元素的值 ·107· C. a数组第4行的首地址 D. a数组第4列的首地址 (13) 数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示( )。 A. a[1][0]+2 C. a[0][1]+2 B. a数组第1行第2列元素的地址 D. a数组第1行第2列元素的值 (14) 设有定义语句 int (*ptr)[10]; 其中的ptr是( )。 A. 10个指向整型变量的函数指针 B. 指向10个整型变量的函数指针 C. 一个指向具有10个元素的一维数组的指针 D. 具有10个指针元素的一维数组 (15) 若有如下定义和语句,则输出结果是( )。 int **pp, *p, a=10, b=20; pp=&p; p=&a; p=&b; printf(\ A. 10, 20 2. 填空题 B. 10, 10 C. 20, 10 D. 20, 20 (1) 单目运算符“*”称为 运算符,“&”称为 运算符。 (2) 设int a[10], *p=a; 则对a[3] 的引用可以是p[ 3 ] 和 *( )。 (3) &后跟变量名,表示取该变量的 ,*后跟指针变量名,表示取该指针变量 ,&后跟指针变量名,表示取该指针变量的 。 (4) 设有int sz[4], p=sz; 有 、 、 和 四种不同的引用数组元素的方法。 (5) 设有char *a=\则printf(\的输出是 ,而printf(\的输出是 。 (6) 定义a为共有5个元素的一维整型数组、同时定义p为指向a数组首地址的指针变量的语句为 。 3. 程序阅读题 (1) 写出下列程序段的输出结果。 (2) 写出下列程序段的输出结果。 (3) 阅读下列程序,写出程序的输出结果。 #include ·107· char *st[ ]={ \printf(\char s[ ]=\printf(\ ·108· 第7章 数组 (4) 阅读程序,写出程序的主要功能。 char *a[6] ={\ int i; for(i=0;i<4;i++) printf(\ printf(\} (5) 阅读下列程序,写出程序运行的输出结果。 #include int i, a[10], *p=a; for(i=0;i<10;i++) scanf(\ for(--p; p>=a; ) printf(\} (6) 设有下列程序,试写出运行的结果。 #include char *p; for(p=s;p (7) 设有下列程序,当输入字符串“LEVEL”和“LEVAL”时,试写出运行的结果。 #include char s[81], *pi, *pj; int n; gets(s); n=strlen(s); pi=s; pj=s+n-1; while(*pi==’ ’) pi++; while(*pj==’ ’) pj--; ·108 · #include int i,b,c,a[ ]={1,10,-3,-21,7,13},*pb,*pc; b=c=1; pb=pc=a; for(i=0;i<6;i++) { if(b<*(a+i)) { b=*(a+i); pb=&a[i]; } if(c>*(a+i)) { c=*(a+i); pc=&a[i]; } } i=*a; *a= *pb; *pb=i; i= *(a+5); *(a+5) = *pc; *pc=i; printf(\} // 跳过空格 第7章 数组 while((pi } (8) 阅读下列程序,写出程序运行的输出结果。 #include char *alpha[4] ={\ char *p; int i; p=alpha[0]; for(i=0;i<4;p=alpha[++i]) printf(\ printf(\ } (9) 阅读下列程序,写出程序运行的输出结果。 #include int s[4][4],i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) *(*(s+i)+j) =i-j; for(j=0;j<4;j++) { for(i=0;i<4;i++) printf(″M″,*(*(s+i)+j)); printf(\ } } (10) 阅读下列程序,写出程序运行的输出结果 #include int x=3,y=5; void p(int *a,int b); p(&x,y); printf(\ p(&y, x) ; printf(\} void p(int *a, int b) { *a=10; b=20; } 4. 程序设计题(全部题目均要求用指针方法实现) (1) 输入3个整数,按从大到小的次序输出。 (2) 编一个程序,输入15个整数存入一维数组,再按逆序重新存放后输出。 ·109· ·109· ·110· 第7章 数组 (3) 输入一个字符串,按相反次序输出其中的所有字符。 (4) 输入一个一维实型数组,输出其中的最大值、最小值和平均值。 (5) 输入一个3×6的二维整型数组,输出其中最大值、最小值及其所在的行列下标。 (6) 输入3个字符串,输出其中最大的字符串。 (7) 输入2个字符串,将其连接后输出。 (8) 比较2个字符串是否相等。 (9) 输入10个整数,将其中最大数和最后一个数交换,最小数和第1个数交换。 (10) 写一程序,输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少? ·110 · 第7章 数组 ·111· 习 题 (第九章) 1. 选择题 (1) 存放100个学生的数据,包括学号,姓名,成绩。在如下的定义中,不正确的是( )。 A. struct student { int sno; char name[20]; float score } stu[100]; B. struct student stu[100] { int sno; char name[20]; float score } ; C. struct { int sno; char name[20]; float score } stu[100]; D. struct student { int sno; char name[20]; float score } ;struct student stu[100]; (2) 设有定义语句struct { int x ; int y ;} d[2]={{1,3}, {2,7}}; 则: printf (\的输出是( )。 A. 0 B. 1 C. 3 (3) 若有如下定义,则printf (\的输出是( )。 typedef union {long x[2]; int y[4]; char z[8]; } MYTYPE; MYTYPE them; D. 6 A. 32 B. 16 (4) 设有如下说明和定义: C. 8 D. 24 8 typedef union {long i ; int k[5]; char c ; } DATE ; struct date { int cat ; DATE cow ; double dog ; } too ; DATE max ; 则下列语句的执行结果是( )。 printf (\ A. 26 B. 30 C. 18 D. (5) 根据下面的定义,能打印出字母M的语句是( )。 struct person { char name[9]; int age; }; struct person c[10]={\ A. printf (\ B. printf (\ C. printf (\D. printf (\ (6) 设有如下定义,则对data中的a成员的正确引用是( )。 struct sk {int a ; float b ; } data, *p = &data ; A. (*p). data. a B. (*p). a C. p->data. a D. p. data. a (7) 设有如下定义,则对字符串1i ming的不正确引用是( )。 ·111· ·112· 第7章 数组 struct person{ char name[20] ; char sex ; } a={\ A. (*p). name ->name B. p. name C. a. name D. p (8) 设有如下定义成的链表,则值不为6的表达式是( )。 struct st { int n; struct st *next ; } a[3]={5, &a[1], 7, &a[2], 9, NULL}, *p=&a ; A. p++ –>n ++p–>n 2. 填空题 B. p–>n++ C. (*p). n++ D. (1) “.”称为 运算符,“–>”称为 运算符。 (2) 设有定义语句struct {int a; float b; char c;} x, *p=&x ; 则对结构体成员a的引用方法可以是 和 。 (3) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 。 (4) 若有以下定义和语句,则表达式++p->a的值是 。 struct wc { int a; int *b; } ; int x[ ]={11,12}; y[ ]={31, 32}; static struct wc z[ ]={100, x, 300, y}, *p=z; union aa {float x; float y ; char c[6]; } ; struct st {union aa v ; float w[5] ; double ave ; } w; 3. 程序阅读题 (1) 阅读下列程序,写出运行结果(字符0的ASCII码为16进制的30)。 #include union { char c; char a[4] ; } z ; z.a[0]=0x39; z.a[1]=0x36; printf (\} (2) 阅读程序,写出程序的运行结果。 #include struct student { char name[10]; float k1; float k2; } a[2]={{\ printf (\ ·112 · 第7章 数组 ·113· (3) 阅读程序,写出程序的运行结果。 printf (\} (4) 阅读程序,写出程序的运行结果。 #include struct std { int id ; char *name ; float sf ; }a, *p=&a ; int i;char *s;float f; i= a.id=1998; s=a.name=\f=a.sf=1800; printf (\ printf (\} (5) 阅读程序,写出程序的运行结果。 #include struct st { int n; struct st *next; }a[3]={5,&a[1],7,&a[2],9,&a[0]}, *p=a; int i; for(i=0; i<3; i++) p=p->next; printf(\} #include struct s1{ char *s; int i; struct s1 *s1p; }; void main( ) { static struct s1 a[ ]={{\ int i; for(i=0;i<2;i++) { printf(\ printf(\ } } ·113· ·114· 第7章 数组 4. 程序设计题 (1) 编一个程序,输入10个学生的学号、姓名、3门课程的成绩,求出总分最高的学生姓名并输出。 (2) 编一个程序,输入下列学生成绩表中的数据,并用结构体数组存放。然后统计并输出三门课程的名称和平均分数。 name zhao qian sun li foxbase 97.5 90.0 75.0 82.5 basic 89.0 93.0 79.5 69.5 C 78.0 87.5 68.5 54.0 (3) 定义一个结构体变量(包括年、月、日)。编一函数,以结构类型为形参,返回该日在本年中是第几天。 (4) 编写一个函数,对结构类型(包括学号,姓名,三门课的成绩)开辟存储空间,此函数返回一个指针(地址),指向该空间。 ·114 · 第7章 数组 ·115· 习 题 (第10章) 1. 选择题 (1) 若文件型指针fp指向某文件的末尾,则函数feof(fp)的返回值是( )。 A. 0 B. -1 C. 非零值 NULL (2) 下列语句将输出( )。 printf(\ D. A. 0 0 1 B. 0 0 -1 C. NULL EOF D. 1 0 EOF (3) 下列语句中,将fp定义为文件型指针的是( )。 A. FILE fp; B. FILE *fp; C. file fp; D. file *fp; (4) 以“只读”方式打开文本文件a:\\aa.dat,下列语句中哪一个是正确的( )。 A. fp=fopen(\ B. fp=fopen(\ C. fp=fopen(\ D. fp=fopen(\(5) 如果二进制文件a.dat已存在,现在要求写入全新的数据,应以什么方式打开( )。 A. \2. 填空题 (1) C语言中调用 函数打开文件,调用 函数关闭文件。 (2) fopen函数的返回值是 。 (3) feof函数可用于 文件和 文件,它用来判断即将读入的是否为 ,若是,函数值为 。 (4) 若ch为字符变量,fp为文本文件指针,从fp所指文件中读入一个字符时,可用的二种不同的输入语句是 和 。把一个字符输出到fp所指文件中的二种 不同的输出语句是 和 。 (5) “FILE *fp”的作用是定义了一个 ,其中的“FILE”是在头文件中定义的。 3. 程序阅读题 (1) 读程序,指出程序实现的功能。 #include int ch1,ch2; while ((ch1=getchar ())!=EOF) if(ch1>='a'&& chl<='z') { ch2=chl-32; putchar(ch2);} B. \ C. \ D. \ ·115· ·116· 第7章 数组 else putchar(chl): } (2) 读程序,指出程序实现的功能。 #include FILE *fp: int n=0; char ch; fp=fopen(\ while( !feof(fp)) { ch=fgetc(fp); if(ch= =' ') n++;} printf(\ fclose(fp); } (3) 读程序,指出程序实现的功能。 (4) 写出以下程序的运行结果。 #include \#include FILE *f1,*f2l; int k; f1= fopen(\ f2= fopen(\ for(k=1; k<=1000; k++) { if( !feof(f1)) break; fputc( fgetc(f1), f2); } fclose(f1); fclose(f2); } #include void main() { FILE *fp; int i; char s1[80],s[]=\ fp=fopen(\ i=sizeof(s); fwrite(s,i,1,fp); rewind(fp); fread(s1,i,1,fp); printf(\ printf(\ fseek(fp,10,1); printf(\ fseek(fp,1,1); printf(\ fclose(fp); } ·116 · 第7章 数组 4. 程序设计题 ·117· (1) 编一个程序,从键盘输入 200个字符,存入名为“f1.txt”的磁盘文件中。 (2) 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 (3) 计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...前10项的和,并将其值以格式\写到文件design.dat中。 (4) 磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3文件中,合并后仍保持字母顺序。 (5) 顺序文件 c.dat 每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件score60.dat保存在A盘上,并显示出学生总人数、平均成绩和及格人数。 ·117·