{
printf(\ exit(0); }
printf(\
while((ch=getchar( ))!='#') fputc( ch ,fp); fclose(fp); }
提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。
4.下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。
#include
float b;};
void recout(FILE *fp) {struct rec r; do
{fread( &r ,sizeof(struct rec), 1 ,fp); if( feof(fp) )
break ;
printf(\}while(1); }
void main() { FILE *fp;
fp=fopen(\recout(fp); fclose(fp); }
提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。
5.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件\中,字符串的结束标记为\。
#include
void main() { FILE *fp; char ch; fp=fopen(\ if (fp == NULL) { printf(\ exit(0);
} while ((ch = getchar()) != '#') { fputc(ch,fp); } fclose(fp); }
6.有一文本文件l1.txt,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。 提示:
#include
void main() { FILE *fp; char ch; fp=fopen(\ if (fp == NULL) { printf(\ exit(0); } while (!feof(fp)) { ch = fgetc(fp); if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9') { putchar(ch); } } fclose(fp); }
7.把文本文件l1.txt中的数字字符复制到文本文件l2.txt中。
#include
void main() { FILE *fin,*fout; char ch; fin=fopen(\
fout = fopen(\ if (fin == NULL || fout == NULL) { printf(\ exit(0); } while (!feof(fin)) { ch = fgetc(fin); if (ch >= '0' && ch <= '9') { fputc(ch,fout); } } fclose(fin); fclose(fout); }
8.x从0到360度的sin(x)值写入到文件l6.txt中,并将大于0的值显示在屏幕上。
#include
}
第9章 指针与数组
1.下列程序输出的结果是( D )。
#include
void f(int * x ) {
*x = 10 ; }
void main() {
int a,*p=&a; f(p);
printf(\}
(A)输出的值是随机值 (B)因输出语句错误而不能执行者 (C)输出值为10 (D)输出值为11
提示:指针x指与指针p指向同一个变量,10赋给指针x所指的地址上的内容,++(*p)是指指针p所指地址上内容++。
2.下列程序片段中不正确的字符串赋值或初始化方式是( C )。 (A)char *str; str=\ (B)char str[7]={'s','t','r','i','n','g','\\0'}; (C)char str[10]; str=\ (D)char str []=\
提示:字符串赋值只能在初始化时进行。
3.如有定义:int x=2,*p=&x;以下哪些表达式的含义是不正确的。D (A)*&p (B) *&x (C)&*p (D)&*x 提示:指针可以作取地址运算,变量不能作取内容运算。 4.如有定义int a[5];(其中:0<=i<5),不能表示数组元素的是( B )。 (A)*(a+i) (B)a[5] (C)a[0] (D)a[i] 提示:数组元素的下标从0开始。 5.若有以下定义和语句,int a[10],i;且0<=i<10,则对数组元素地址的正确表示是( D )。 (A)a++ (B)(a+1) (C)*(a+1) (D)&a
提示:一旦数组定义,数组的首地址是一个常量,不能作++运算,而a+i表示数组第i个元素的地址。
6.有以下定义及语句,则对数组a元素的不正确引用的表达式是( A )。
int a[4][5];*p[2],j;
for (j = 0 ; j <4 ; j++) p[j]=a[j];
(A)p[0][0] (B)*(a+3)[4] (C)*(p[1]+2) (D)*(&a[0][0]+3) 提示:p为指针数组,此题中a[i][j]、p[i][j]、*(p[i]+j)、*(*(p+i)+j)也都能表示数组元素,&a[0][0]
等同于a[0]+0。 二、程序阅读与填空题
1.分析下列程序,输出结果是( )。
#include
int *p1,x=10; float *p2,y=2.5; p1=&x; p2=&y;
printf(\}
提示:++都作用在内容上,前一项是先++再输出,后一项是先输出再++。 11, 2.500000
2.下列程序输出结果是( )。
#include
void main() {
int a[ ]={1,2,3,4,5,6},*p=a;
printf(\}
提示:语句*(p+3)+=2;指p+3的地址上的内容加2,然后输出p及p+3的地址上内容。 1,4
3.下列程序输出结果是( )。
#include
void main() {
int a[ ]={1,2,3,4,5,6}; int x,y,*p; p=&a[0]; x=*(p+2); y=*(p+4);
printf(\}
提示:p+2是指&a[2]。 *p=1,x=3,y=5
4.下列程序输出结果是( )。
#include
void main() {
int a[ ]={10,20,30,40,50,60};