武夷学院C语言考试试卷,C语言程序设计(张淑华、朱丽莉版)课后习题参考答案[本站推荐]...

{ putc(c[i],fp);

putchar(c[i]);

}

fclose(fp); }

3.编写将字符串“Turbo C”、“BASIC”、“FORTRAN”、“COBOL”以及“PL_1”写入文件中去的程序。 参考代码如下: #include#include#define N 30 void main() { FILE *fp;

char c,file[N];

scanf("%s",file);

if((fp=fopen(file,"w"))==NULL)

{ printf("Can not open file\n");

exit(0);

}

c=getchar();

c=getchar();

while(c!='\n')

{ fputc(c,fp); putchar(c);

c=getchar();

}

putchar(N);

fclose(fp); }

4.设文件student.dat中存放着学生的基本情况,这些情况由以下结构体描述: struct student { long int num;/*学号*/ char name[10];/*姓名*/ int age;/*年龄*/ char speciality[20];/*专业*/ };

请编写程序,输出学号在97010~97020之间的学生学号、姓名、年龄和专业。 参考代码如下: #include "stdio.h" struct student

{ long int num;

char name[10];

int age;

char speciality[20];

};

FILE *fp;

main()

{ struct student st;

fp=fopen("student.dat","rb");

if(fp==NULL)

printf("file not found\n");

else

{ while(!feof(fp))

{ fread(&st,sizeof(struct student),1,fp);

if(st.num>=970101&&st.num<=970135)

printf("%ld,%s,%d,%s\n",st.num,st.name,st.age,st.speciality);

}

} }

《C语言程序设计教程》

课后习题参考答案

习题1 1. (1)编译、链接

.exe (2)函数

主函数(或main函数) (3)编辑

编译

链接 2.

(1)-(5):DDBBC (6)-(10):ABBBC 3.

(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。

(2)编辑、编译、链接、执行

(3)一个C程序由一或多个函数组成,一函数若干条语句构成,每条语句的末尾必须以分号结束。

(4)标识符,关键字,运算符,分隔符,常量,注释符等 4. 从键盘输入一个双精度小数,打印出它的余弦值。 #include #include main( ) { double x; scanf(“%lf”, &x); printf(“%lf\n”, cos(x) ); }

第2章 1. (1)BDE、ACFG (2)D (3) C (4) C

2.

(1)错(2)错(3)错(4)对(5)错 3.

(1)a=3,b=-27 (2)a=11,b=6,c=6 (3)3 (4)1 0 1 0 1 1 0 (5)-9 9 8 (6)1)20 2)8 3)70 4)0 5)0 6)0 4. (1)

#include main( ) { double r, h ,v; r = 2.5; h = 3.5; v = 3.14*r*r*h; printf(“v=%lf\n”, v); } (2) #include main( ) { char ch; ch = getchar( ); printf(“%c\n”, ch + 32); } (3) #include main( ) { printf(“

*\n”); printf(“

***\n”); printf(“ *****\n”); printf(“*******\n”); } (4) #include main( ) { double x; scanf(“%lf”, &x); printf(“%d , %lf\n”, (int)x, x – (int)x ); } (5) #include main( ) { double a=3, b=5; double result = (-2 * a + ( 4*a – b )/( 2*a + b ) )/( (a32); }

第4章 1. (1)-(5):CAACA 2. (1)BBB (2)AAABBBCCC (3)end (4)d=20 (5)s=2,t=3 (6)first

third (7)y=0 y=5 y=10 y=5 3. (1)y=‟A‟ && ch<=‟Z‟

ch>=‟a‟&&ch<=‟z‟

ch = ch-32 (3)x>2&&x<=10

x>-1&&x<=2 (4)t=x; x=y; y=t; 4. (1) #include main( ) { int x, y , z, t; scanf(“%d%d%d”, &x, &y, &z);

if ( x>y ) { t=x; x=y; y=t; } if( x > z ) { t = x; x = z; z= t; } if( y > z ) { t = y; y= z; z = t; } printf(“%d %d %d\n”, x, y ,z); } (2) #include main( ) { int score; scanf(“%d”, &score);

if ( score < 0 || score > 100 )

printf(“成绩不合理\n”);

else if( score>=90 )

printf(“优秀\n”);

else if( score>=80 )

printf(“良好\n”);

else if( score >= 70 )

printf(“中等\n”);

else if( score >= 60 )

printf(“及格\n”);

else

printf(“不及格\n”); } (3) #include main( ) { int n; int g,s,b,q;//各位上的数值

scanf(“%d”, &n);

g = n%10; //个位

s = n/10%10; //十位

b = n/100%10; //百位

q = n/1000%10; //千位

if( n < 10 ) //一位数

{

printf(“%d\n”, 1);//位数

printf(“%d\n”, g); //各位上的数值

} else if ( n < 100 ) //两位数

{

printf(“%d\n”, 2);//位数

printf(“%d %d\n”, g,s); } else if ( n < 1000 ) //三位数

{

printf(“%d\n”, 3);//位数

printf(“%d %d %d\n”, g, s, b);

} else if ( n < 10000 ) //四位数

{

printf(“%d\n”, 4);//位数

printf(“%d %d %d %d\n”, g, s, b, q);

} } (4) #include main( ) { int n; scanf(“%d”, &n);

if( n % 3==0 && n%5==0 && n%7==0 )

printf(“能同时被

3、

5、7整除\n”);

else if( n%3==0 && n%5==0)

printf(“能被3和5整除\n”);

else if( n%3==0 && n%7==0 )

printf(“能被3和7整除\n”);

else if( n%5==0 && n%7==0 )

printf(“能被5和7整除\n”);

else if( n%3==0 || n%5==0 || n%7==0 ) {

if( n%3==0 )

printf(“能被3整除\n”);

else if( n%5==0 )

printf(“能被5整除\n”);

else

printf(“能被7整除\n”);

} else

printf(“不能被

3、

5、7中任一个数整除\n”); } (5) #include main( ) { int

carType;//车型。1代表夏利;2代表富康;3代表桑塔纳

double xiali = 2.1; //每公里价格 double fukang = 2.4; double sangtana = 2.7; double distance; //距离

double totalMoney;//总的收费

printf("请输入您乘坐的车型:1代表夏利;2代表富康;3代表桑塔纳:"); scanf("%d", &carType); printf("请输入您乘车的总路程:"); scanf("%lf", &distance); if( carType == 1)//夏利

{

if( distance < 3 )

totalMoney = 7.0;

else

totalMoney = 7 + xiali * (distance – 3); } else if( carType == 2 ) //富康

{

if( distance < 3 )

totalMoney = 8.0;

else

totalMoney = 8 + fukang * (distance – 3); } else if( carType == 3 ) //富康

{

if( distance < 3 )

totalMoney = 9.0;

else

totalMoney = 9 + sangtana * (distance – 3); }

printf("(四舍五入)您的车费为:%.0lf\n", totalMoney ); } (6) #include main( ) { double a, b, c; scanf(“%lf%lf%lf”, &a, &b, &c);

if( a+b>c && b+c>a && c+a>b ) {

if( a==b && b==c )

printf(“等边三角形\n”);

else if( a==b || b== c || c==a )

printf(“等腰三角形\n”);

else

printf(“一般三角形\n”);

} else

printf(“不能构成三角形\n”); }

第5章

1. (1)C(2)C(3)K=36(4)C(5)B 2. (1) 3次

(2) x>=1 && x<=10 || x>=200&&x<210 (3) e == 0 (4) 6次 (5) 10 3. (1) 20,10 (2) 16,0 (3) 7BAB4BAB1BC (4) ABABABC (5) ****** ****** ******

****** 4. (1) a != b

(2) n / 10 (3) scanf(“%d”, &a);

5. (3) 行

int fac = 1, sum = 0; 6. (1) #include main( ) { char ch; int alpha=0, space=0, digit=0, other=0; while( (ch=getchar( ) ) != „\n‟ )

{

if( ch>=‟A‟&&ch<=‟Z‟ || ch>=‟a‟&&ch<=‟z‟)

alpha++;

else if( ch>=‟0‟ && ch<=‟9‟)

digit++;

else if( „ „ == ch )

space++;

else

other++; } printf(“%d %d %d %d\n”, alpha, digit, space, other ); } (2) #include main( ) { int m20, m10; for(m20=1; m20<5; m20++) {

for(m10 = 1; m10<10; m10++)

if( 20*m20+10*m10 == 100 )

printf(“%d, %d\n”, m20, m10 ); } } (3) #include main( ) { int x, y, z; for(x=0; x<10; x++)

for(y=0; y<10; y++)

for(z=0; z<10; z++)

if( x*100+y*10+z + y*100+z*10+z == 532 )

printf(“%d %d %d\n”, x, y, z); } (4) #include main( ) { int row, spaceCount,starCount; int n; scanf("%d", &n);

for( row = 1; row <= n; ++row) {

for( spaceCount = 1; spaceCount <= n1; ++starCount )

printf("*"); //打印出某行上的所有星号

printf("\n"); //换行

} //打印下半部分

for(row=1; rowfor( spaceCount = 1; spaceCount <= row ; ++ spaceCount)

printf(" "); //打印出某行上星号前的空格

for( starCount = 1; starCount <= 2*(n- row)byear; if( nmonthage--; else if( nmonth == bmonth && nday>bday)

age--; return age; }

(4)

#include int sum( int n ); main( ) { int n,s; scanf("%d", &n); s = sum( n ); printf("s=%d\n", s); }

int sum( int n ) { int s=0; while ( n ) {

s += n % 10;

n /= 10; } return s; }

(5)

#include double sumfac( int n ); main( ) { int n; scanf("%d", &n); printf("%.0lf\n", sumfac( n ) ); } double sumfac( int n ) { double f=1.0, s = 0.0;

int i; for(i=1;i<=n; i++) {

f *= i;

s += f; } return f; }

(6)

#include int gcd(int m , int n); main( ) { int m, n; scanf("%d%d", &m, &n); printf("%d\n", gcd(m ,n) ); } int gcd(int m, int n) { int t,r; if( m < n ) { t = m; m= n; n = t; }

r = m % n; while( r ) {

m = n;

n = r;

r = m % n; } return n; }

(7)

#include int gcd(int m , int n); int lcm(int m, int n); main( ) { int m, n; scanf("%d%d", &m, &n); printf("%d\n", lcm(m ,n) ); } int gcd(int m, int n) { int t,r; if( m < n ) { t = m; m= n; n = t; }

r = m % n; while( r ) {

m = n;

n = r;

r = m % n; } return n; }

int lcm(int m, int n) { return m*n/gcd(m,n); }

(8)

#include double mypower(double x, int y); main( ) { double x;

int y; scanf("%lf%d", &x, &y); printf("%lf\n", mypower(x,y) ); } double mypower(double x, int y) { int i; double f=1.0; for(i=1; i<=y; i++)

f *= x; return f; }

第7章 1. (1)6 (2)5 (3)不能

(4)int a[3][2]={{1,2}, {3,4}, {5,6} }; (5)6 9 (6)abc G 2. (1)

#include

void reverse( int a[ ], int n );

int main( )

{

int array[10]={0};

int i;

printf(“请输入10个整数:”);

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

scanf(“%d”, &array[i]);

reverse( array, 10); //调用函数逆序存储数组中的数据

printf(“逆序后的元素为:\n”);

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

printf(“%5d”, array[i]);

printf(“\n”);

return 0;

}

void reverse( int a[ ], int n )

{

int i;

int tmp;

for( i=0; i{

tmp = a[i]; a[i] = a[n-i-1];

}

}

(2)

#include #include void reverseStr( char str[ ] ); main( ) { char s[100]; gets( s ); reverseStr( s ); puts( s ); }

void reverseStr( char str[ ] ) { int i,j; char t; i=0; j=strlen(str)-1; while( i < j ) {

t = str[i];

a[n-i-1] = tmp;

str[i] = str[j];

str[j] = t;

i++;

j--; } }

(3)

#include int copyTo(int s1[], int n, int s2[ ]); main( ) { int s1[10], s2[10]; int i,count; for(i=0; i<10; i++)

scanf("%d", &s1[i]); count = copyTo(s1, 10, s2); for(i=0; iprintf("%d ", s2[i] ); printf("\n"); }

int copyTo(int s1[], int n, int s2[ ]) { int i, j=0; for(i=0; iif( s1[i] % 2 )

s2[j++] = s1[i]; } return j; }

(4)

#include void copyToStr(char str1[ ], char str2[ ] ); main( ) { char s1[100], s2[100]; gets(s1); copyToStr( s1, s2 ); puts(s2); } void copyToStr(char str1[ ], char str2[ ] ) { int i=0,j=0; while( str1[i] != '\0' ) {

if( str1[i]>='a'&&str1[i]<='z' )

{

str2[j] = str1[i];

j++;

}

i++; } str2[j] = '\0'; return j; }

(5)

#include void deleteAll( char str[ ], char ch); main( ) { char s[100], ch; gets( s ); ch = getchar( ); deleteAll( s, ch ); puts( s ); } void deleteAll( char str[ ], char ch) { int i, j; i = 0;

j = 0; while( str[i] ) {

if( str[i] != ch )

{

str[j++] = str[i];

}

i++;

} str[j] = '\0'; }

(6)

#include void replaceAll(char str[ ], int ch1, char ch2); main( ) { char s[100], c1, c2; gets( s ); c1 = getchar( ); c2 = getchar( ); replaceAll( s, c1, c2 ); puts( s ); } void replaceAll(char str[ ], int ch1, char ch2) { int i; i = 0; while( str[i] ) {

if( str[i] == ch1 )

str[i] = ch2;

i++; } }

(7)

#include

int transformToBin( int dnum, int bin[ ] ) ;

int main( )

{

int array[32]={0}; //保存转换后的二进制数

int num; //待转换的整数

int cc; //最后得到的二进制总共多少位

printf(“请输入一个整数:”);

scanf(“%d”, &num);

cc = transformToBin( num, array ); //调用转换函数

cc--; //往回退一个元素下标,使cc指向最后一个元素

for( ; cc>=0; cc-- ) //输出转换后的二进制数

printf(“%d”, array[cc]);

printf(“\n”);

return 0;

}

int transformToBin( int dnum, int bin[ ] ) {

int count = 0; while ( dnum ) //当dnum还未转换完毕

{ bin[count++] = dnum % 2; //余数保留到数组对应元素中

dnum /= 2; //数本身除2 } return count; }

(8)

#include int transformToHex( int dnum, char hex[ ] ) ; int main( ) { char array[32]; //保存转换后的进制数

int num; //待转换的整数

int cc; //最后得到的进制总共多少位

printf("请输入一个整数:"); scanf("%d", &num); cc = transformToHex( num, array ); //调用转换函数

cc--; //往回退一个元素下标,使cc指向最后一个元素

for( ; cc>=0; cc-- ) //输出转换后的进制数

printf("%c", array[cc]); printf("\n"); return 0; }

int transformToHex( int dnum, char hex[ ] ) { int count = 0; int t; while ( dnum ) //当dnum还未转换完毕

{

t = dnum % 16;

if( t < 10 )

hex[count] = t+'0'; //余数保留到数组对应元素中

else

hex[count] = t-10+'A';

count++; dnum /= 16; //数本身除16 } return count; } (9)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate( int a[ ][N], int row, int col ); void display( int a[][N], int row, int col); void getMaxEveryRow(int a[][N], int row, int col, int y[]); main( ) { int arr[M][N], y[M]={0}; int i; generate(arr, M, N); display(arr, M, N); getMaxEveryRow(arr,M,N,y); //输出最大值

for(i=0; iprintf("%d ", y[i]); printf("\n"); } void generate( int a[ ][N], int row, int col ) { int i,j; srand( time(NULL) ); for(i=0; ifor(j=0; ja[i][j] = rand( )%101; } void display( int a[][N], int row, int col) { int i,j; for(i=0; ifor(j=0; jprintf("%4d", a[i][j]);

printf("\n"); } } void getMaxEveryRow(int a[][N], int row, int col,int y[]) { int i,j; for(i=0; iy[i] = a[i][0];

for(j=1; jif( y[i] < a[i][j] )

y[i] = a[i][j]; } }

(10)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate( int a[ ][N], int row, int col ); void display( int a[][N], int row, int col); void getMinEveryCol(int a[][N], int row, int col); main( ) { int arr[M][N]; int i; generate(arr, M, N); display(arr, M, N); getMinEveryCol(arr,M,N); //输出最小值

for(i=0; iprintf("%d ", arr[0][i]); printf("\n"); } void generate( int a[ ][N], int row, int col ) { int i,j; srand( time(NULL) ); for(i=1; ifor(j=0; ja[i][j] = rand( )%101; } void display( int a[][N], int row, int col) { int i,j; for(i=1; ifor(j=0; jprintf("%4d", a[i][j]);

printf("\n"); } } void getMinEveryCol(int a[][N], int row, int col) { int i,j; for(i=0; ia[0][i] = a[1][i];

for(j=2; jif( a[0][i] > a[j][i] )

a[0][i] = a[j][i]; } }

第8章 1.

(1)局部

(2)void (3)auto (4)auto (5)return (6)递归

(7)求 1!+2!+3!+4!+5! (8)注意全局变量和局部变量的区别

2. (1)

#include #include double xc( double x, double y ); main( ) { double a, b; double c; scanf(“%lf%lf”, &a, &b);

c = xc( a, b ); printf(“ %lf\n”, c); } double xc( double x, double y ) { return sqrt( x*x+y*y ); }

(2)

static extern

register

#include long seconds(int hour, int minute, int second); main( ) { int h,m,s; long sec; printf("输入时间:"); scanf("%d%d%d", &h, &m, &s); sec = seconds(h,m,s); printf("离12点最近的秒数:%ld\n", sec); } long seconds(int hour, int minute, int second) { long s; if( hour < 6 ) {

s = second+minute*60+hour*60*60; } else {

s = 60-second+(60-minute-1)*60+(12-hour-1)*60*60; } return s; }

(3)

#include int fun( int n ); main( ) { int n; scanf("%d", &n); if( fun( n ) ) //是质数,则输出该数;不是的话,不作任何处理

printf("%d\n", n ); } int fun( int n ) { int i; for(i=2; iif( n%i == 0 )

break; if( ireturn 0; else

return 1; }

(4)

#include int fun( int n ); main( ) { int n; int count=0; for(n=2;n<1000;n++)

if( fun( n ) )

{

printf("%4d", n );

count++;

if( count % 10 == 0 )

printf("\n");

}

printf("\n"); } int fun( int n ) { int i; for(i=2; iif( n%i == 0 )

break; if( ireturn 0; else

return 1; }

(5)

#include int func( int n ); main( ) { int n; scanf("%d", &n); printf("%d\n", func(n) ); } int func( int n ) { if ( 1 == n )

return 3; return 2*func(n-1)-1; }

(6)

#include int gcd(int m, int n); main( ) { int x,y,t; scanf("%d%d", &x, &y); if( x < y ) {

t=x; x=y; y=t; } printf("%d\n", gcd(x,y) ); } int gcd(int m, int n) { if (0==n)

return m; return gcd(n, m%n); }

第9章 1. (1)xyzNKT (2)bcdefgh (3)4,4 (4)qponmzyx (5)abcCD (6)0 2. (1)

#include #include void reverse( int *p, int n); main( ) { int i; int a[10]={1,2,3,4,5,6,7,8,9,10};

reverse(a,10); for(i=0; i<10; i++)

printf("%d ", a[i]); printf("\n"); } void reverse( int *p, int n) { int *q; int t; q = p + n1; while( str < pEnd ) {

t = *str;

*str = *pEnd;

*pEnd = t;

str++;

pEnd--; } } (3)

#include int copyTo(int *s1, int n, int *s2); main( ) { int a[10]={1,2,3,4,5,6,7,8,9, 10}; int b[10], count,i; count=copyTo(a,10,b); for(i=0; iprintf("%d ", b[i] ); printf("\n"); } int copyTo(int *s1, int n, int *s2) { int count=0; int *ps1, *ps2; ps2 = s2; for(ps1 = s1; ps1 < s1 + n; ps1++) {

if( *ps1 % 2 )//奇数

{

*ps2++ = *ps1;

} } return ps2 - s2; }

(4)

#include void copyToStr(char *str1, char *str2); main( ) { char s1[100], s2[100]; gets( s1 ); copyToStr(s1, s2); puts( s2 ); } void copyToStr(char *str1, char *str2) { while( *str1 ) {

if( *str1 >= 'a' && *str1 <= 'z' )

{

*str2++=*str1;

}

str1++; } *str2 = '\0'; }

(5)

#include void deleteAll(char *str, char ch); main( ) { char s[100], c; gets(s); c = getchar( ); deleteAll(s, c); puts(s); } void deleteAll(char *str, char ch) { char *p; p = str; while( *str ) {

if( *str != ch )

*p++ = *str;

str++; } *p = '\0'; }

(6)

#include void replaceAll( char *str, char ch1, char ch2); main( ) { char s[100], c1, c2; printf("输入字符串:"); gets(s); printf("输入查找字符:"); c1 = getchar( ); fflush(stdin); //清除键盘缓冲区

printf("输入替换字符:"); c2 = getchar( ); replaceAll(s,c1, c2); puts(s); } void replaceAll( char *str, char ch1, char ch2) { while( *str ) {

if( *str == ch1 )

{

*str = ch2;

}

str++; } }

(7)

#include int transformToBin( int dnum, int *bin ) ; int main( ) { int array[32]; //保存转换后的进制数

int num; //待转换的整数

int cc; //最后得到的进制总共多少位

printf("请输入一个整数:"); scanf("%d", &num); cc=transformToBin( num, array ); //调用转换函数

cc--; //使cc指向最后一个元素

for( ; cc>=0; cc-- ) //输出转换后的进制数

printf("%d", array[cc]); printf("\n"); return 0; }

int transformToBin( int dnum, int *bin ) { int *pb; int t; pb = bin; while ( dnum ) //当dnum还未转换完毕

{

t = dnum % 2;

*pb = t;

pb++;

dnum /= 2; //数本身除2 } return pb-bin; }

(8)

#include #include void transformToHex( int dnum, char *hex ) ; int main( ) { char array[32]; //保存转换后的进制数

int num; //待转换的整数

int cc; //最后得到的进制总共多少位

printf("请输入一个整数:"); scanf("%d", &num); transformToHex( num, array ); //调用转换函数

cc=strlen(array)-1; //使cc指向最后一个元素

for( ; cc>=0; cc-- ) //输出转换后的进制数

printf("%c", array[cc]); printf("\n"); return 0; }

void transformToHex( int dnum, char *hex ) { char *ph; int t; ph = hex; while ( dnum ) //当dnum还未转换完毕

{

t = dnum % 16;

if( t < 10 )

*ph = t+'0';

else

*ph = t-10+'A';

ph++; dnum /= 16; //数本身除16 } *ph = '\0'; }

(9)

#include void strToLow(char *str); main( ) { char s[100]; gets( s ); strToLow( s ); puts( s ); } void strToLow( char *str ) { while( *str ) {

if( *str>='A'&&*str<='Z' )

*str = *str + 32;

str++; } }

第10章 1. (1)12 (2)(++p)->num (5)B (6)B

2. (1)

struct myDate{ int year, month, day; };

(2)

struct empInfo{ char empNo[15]; char empName[10]; char xb; //性别

int age; struct myDate empDay; double salary; };

(3)

#include typedef struct STUDENT { char name[20]; float height;

3)D 7)10,A

4) p2 != NULL

( (( int score; }STUD; main( ) { STUD a; printf(“姓名:”);

gets( a.name); printf(“身高:”);

scanf(“%f”, &a.height);

printf(“成绩:”);

scanf(“%d”, &a.score);

//输出信息(仅为测试用)

printf(“%s %.2f %d \n”, a.name, a.height, a.score); }

第11章 1. (1)打开文件:fopen

关闭文件:fclose 使用:

FILE *fp;

fp = fopen(“myfile”, “r”);

fclose( fp );

(2)”w”

(3)文本文件:内容均以字符的形式存储,占的字节数可能会大些

二进制文件:内容以二进制编码的形式存储,占的字节数可能会稍小。

(4)第一个参数:读取得到的信息存储在内存的哪个地方

第二个参数:读取的字节数

第三个参数:读取的块数

第四个参数:文件指针,表示从哪个文件中读取数据

(5)第一个参数:待写入文件的信息存储在内存的哪个地方

第二个参数:写入的字节数

第三个参数:写入的块数

第四个参数:文件指针,表示要写入到哪个文件中 (6)为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

2. (1)

#include #include main( ) { FILE *fpr, *fpw; char ch;

fpr = fopen("a.txt", "r"); fpw = fopen("b.txt", "a");

if( NULL==fpr ) {

printf("文件打开不成功\n");

return 0; } if( NULL == fpw ) {

printf("文件打开不成功\n");

return 0; }

while( !feof( fpr ) ) {

ch = fgetc( fpr );

fprintf(fpw, "%c", ch); }

fclose( fpr ); fclose( fpw ); }

(2)

#include main( ) { FILE *fp1, *fp2; double pi = 3.1415926; fp1 = fopen( "a.txt", "w");//以文本的形式写入

fp2 = fopen( "b.txt", "wb");//以二进制的形式写入

if( NULL==fp1 ) {

printf("文件打开不成功\n");

return 0; } if( NULL == fp2 ) {

printf("文件打开不成功\n");

return 0; }

fprintf(fp1, "%lf", pi); fwrite(&pi,sizeof(pi),1,fp2);

fclose( fp1 ); fclose( fp2 ); }

打开之后的效果:

(3)

#include #include main( ) { FILE *fpr; fpr = fopen( "a.txt", "r");

if( NULL==fpr ) {

printf("文件打开不成功\n");

return 0; }

while( !feof( fpr ) ) {

putchar( fgetc( fpr ) ); } fclose( fpr ); }

(4)

#include typedef struct STUDENT { char no[15]; char name[10]; int score; }STUD; #define N 3 main( ) { STUD s[N]; int i; FILE *fp; int count; //读取文件时才使用

for(i=0; iprintf("请输入第%d个学生信息:\n" , i+1);

printf("

学号:");

gets( s[i].no);

printf("

姓名:");

gets( s[i].name);

printf("

成绩:");

scanf("%d", &s[i].score);

fflush(stdin);//清除键盘缓冲区

}

//打开文件,并写入

fp = fopen( "a.txt", "wb"); if( NULL == fp) {

printf("文件打开不成功,不能写入\n");

return 0; } for(i=0; i

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值