c语言习题汇总(6-10章) 下载本文

习 题 (第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 void main( ) {

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 void main( ) {

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 void main( ) {

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 void main( ) {

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 void main( )

·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 #include void main( ) {

int i;

char str1[ ]=\ for(i=0;i<4;i++) {

printf(\ str1[i]=' ';

str1[strlen(str1)-1]='\\0'; }

}

(4)

阅读下列程序,写出程序运行的输出结果。 #include void main( ) {

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 void main( ) {

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 void fun( ) {

char c ;

if((c=getchar( ))!='\\n') fun( ) ;

·102 ·

第7章 数组

putchar(c); }

void main( )

{ fun( ); }

(2) 阅读下面程序,写出输出结果。

#include #define C 5 int x=1,y=C; void main( ) {

int x;

x=y++; printf(\

if(x>4) { int x ; x=++y; printf(\ x+=y--;

printf(\

}

(3) 阅读下面程序,写出输出结果。

#include int c , a=4 ;

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 void main( ) {

·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 void main( ) {

int i, a[10], *p=a;

for(i=0;i<10;i++) scanf(\

for(--p; p>=a; ) printf(\}

(6) 设有下列程序,试写出运行的结果。

#include char s[ ]= \void main( ) {

char *p;

for(p=s;p

(7) 设有下列程序,当输入字符串“LEVEL”和“LEVAL”时,试写出运行的结果。

#include #include void main( ) {

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 void main( ) {

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 void main( ) {

char *alpha[4] ={\ char *p; int i; p=alpha[0];

for(i=0;i<4;p=alpha[++i]) printf(\ printf(\

}

(9)

阅读下列程序,写出程序运行的输出结果。 #include void main( ) {

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 void main( ) {

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 void main( ) {

union { char c; char a[4] ; } z ;

z.a[0]=0x39; z.a[1]=0x36; printf (\}

(2) 阅读程序,写出程序的运行结果。

#include void main ( ) {

struct student {

char name[10]; float k1; float k2; }

a[2]={{\

printf (\

·112 ·

第7章 数组 ·113·

(3) 阅读程序,写出程序的运行结果。

printf (\}

(4) 阅读程序,写出程序的运行结果。

#include void main ( ) {

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 void main( ) {

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 void main() {

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 #include void main() {

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 void main() {

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 #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·