C语言程序设计教程 课后习题参考答案
《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 ) )/( (a - 4*b)/(a + b) ); printf(“%lf\n”, result);
}
习题3
1.
(1)D(2)AD(3)C(4)B(5)A
(6)-(10):BDACB
2.
(1)3.141593,3.1416,3.142
(2)c=K
(3)| 123.46|,|123 |
(4)x= 1.23,y= 50.00
(5)0
3.
(1)scanf(%f”, c); 改为:scanf(“%f”, &c);
f = (9/5)*c+32; 改为:f = (9.0/5)*c + 32;
printf(“摄氏温度%f度相当于华氏温度%f度”, &c, &f); 改为: printf(“摄氏温度%f度相当于华氏温度%f度”, c, f);
(2)
补充定义:int h;
h = 500/60 改为: h = 500 / 60;
m = 500% 60 改为: m = 500%60;
printf(“500分钟是%d小时%d分钟, ”&h, &m); 改为: printf(“500分钟是%d小时%d分钟” , h, m);
4.
(1)
#include
main( )
{
char x,y;
scanf(“%c%c”, &x, &y);
printf(“%d\n”, (x-„0‟) + (y-„0‟) );
}
(2)
#include
main( )
{
char x, y;
char tmp;
printf(“Input two characters:”);
scanf(“%c%c”, &x, &y);
printf(“Before swap: x=%c, y=%c\n”, x, y);
tmp = x; x = y; y = tmp;
printf(“After swap: x=%c, y=%c\n”, x, y);
}
(3)
#include
main( )
{
char ch;
ch = getchar( );
printf(“%c\n”, ch - 32);
}
第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
(2)ch>=‟A ‟ && ch
ch>=‟a ‟&&ch
(3)x>2&&x-1&&x
(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 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
{
printf(“%d\n”, 1);//位数
printf(“%d\n”, g); //各位上的数值
}
else if ( n
{
printf(“%d\n”, 2);//位数
printf(“%d %d\n”, g,s);
}
else if ( n
{
printf(“%d\n”, 3);//位数
printf(“%d %d %d\n”, g, s, b);
}
else if ( n
{
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 )
prin tf(“能被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
totalMoney = 7.0;
else
totalMoney = 7 + xiali * (distance – 3);
}
else if( carType == 2 ) //富康
{
if( distance
totalMoney = 8.0;
else
totalMoney = 8 + fukang * (distance – 3);
}
else if( carType == 3 ) //富康
{
if( distance
totalMoney = 9.0;
else
totalMoney = 9 + sangtana * (distance – 3);
}
printf("(四舍五入)您的车费为:%.0lf\n", totalMoney ); }
(6)
#include
main( )
{
double a, b, c;
scan f(“%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=200&&x
(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=‟a‟&&ch
else if( ch>=‟0‟ && ch
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
{
for(m10 = 1; m10
if( 20*m20+10*m10 == 100 )
printf(“%d, %d\n”, m20, m10 );
}
}
(3)
#include
main( )
{
int x, y, z;
for(x=0; x
for(y=0; y
for(z=0; 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
{
for( spaceCount = 1; spaceCount
for( starCount = 1; starCount
printf("\n"); //换行
}
//打印下半部分
for(row=1; row
{
for( spaceCount = 1; spaceCount
for( starCount = 1; starCount
printf("\n"); //换行
}
}
(5)
#include
main( )
{
int n;
int g,s,b,q;
int t;
scanf("%d", &n);
g = n % 10;
s = n / 10 % 10;
b = n /100 % 10;
q = n/ 1000%10;
g = (g+5)%10;
s = (s+5)%10;
b = (b+5)%10;
q = (q+5)%10;
//第1位和第4位交换
t = g; g = q; q = t;
//第2位和第3位交换
t = s; s = b; b = t;
printf("%d%d%d%d\n", q,b,s,g);
}
第6章
1.
(1)无返回值
(2)double 2
(3)无限循环(死循环)
(4)result = 720
2.
(1)
#include
void print1( int n );
main( )
{
int n;
scanf("%d", &n);
print1( n );
}
void print1( int n )
{
int row, col;
for(row = 1; row
{
for(col=1; col
printf("#");
printf("\n");
}
}
(2)
#include
void print2( int n );
main( )
{
int n;
scanf("%d", &n);
print2( n );
}
void print2( int n )
{
int row, col;
for(row = 1; row
{
for(col=1; col
printf("@");
printf("\n");
}
}
(3)
#include
int yearOld(int byear, int bmonth, int bday, int nyear, int nmonth, int nday); main( )
{
int nowy,nowm,nowd;
int by, bm, bd;
int age;
printf("请输入生日:");
scanf("%d%d%d", &by, &bm, &bd);
printf("请输入现在日期:");
scanf("%d%d%d", &nowy, &nowm, &nowd);
age= yearOld(by,bm,bd,nowy,nowm,nowd);
printf("age=%d\n", age);
}
int yearOld(int byear, int bmonth, int bday, int nyear, int nmonth, int nday) {
int age;
age = nyear - byear;
if( nmonth
age--;
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
{
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
{ 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
{ 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
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
scanf(“%d”, &array[i]);
reverse( array, 10); //调用函数逆序存储数组中的数据 printf(“逆序后的元素为:\n”);
for( i=0; 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
{
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
scanf("%d", &s1[i]);
count = copyTo(s1, 10, s2);
for(i=0; i
printf("%d ", s2[i] );
printf("\n");
}
int copyTo(int s1[], int n, int s2[ ])
{
int i, j=0;
for(i=0; i
{
if( 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]
{
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
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; i
printf("%d ", y[i]);
printf("\n");
}
void generate( int a[ ][N], int row, int col )
{
int i,j;
srand( time(NULL) );
for(i=0; i
for(j=0; j
a[i][j] = rand( )%101;
}
void display( int a[][N], int row, int col)
{
int i,j;
for(i=0; i
{
for(j=0; j
printf("%4d", a[i][j]);
printf("\n");
}
}
void getMaxEveryRow(int a[][N], int row, int col,int y[])
{
int i,j;
for(i=0; i
{
y[i] = a[i][0];
for(j=1; j
if( y[i]
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; i
printf("%d ", arr[0][i]);
printf("\n");
}
void generate( int a[ ][N], int row, int col )
{
int i,j;
srand( time(NULL) );
for(i=1; i
for(j=0; j
a[i][j] = rand( )%101;
}
void display( int a[][N], int row, int col)
{
int i,j;
for(i=1; i
{
for(j=0; j
printf("%4d", a[i][j]);
printf("\n");
}
}
void getMinEveryCol(int a[][N], int row, int col)
{
int i,j;
for(i=0; i
{
a[0][i] = a[1][i];
for(j=2; j
if( 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
{
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; i
if( n%i == 0 )
break;
if( i
return 0;
else
}
(4)
#include
int fun( int n );
main( )
{
int n;
int count=0;
for(n=2;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; i
if( n%i == 0 )
break;
if( i
return 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 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
{
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
printf("%d ", a[i]);
printf("\n");
}
void reverse( int *p, int n)
{
int *q;
int t;
q = p + n - 1;
while( p
{
t = *p;
*p = *q;
*q = t;
p++;
q--;
}
}
(2)
#include
#include
void reverseStr( char *str );
main( )
{
char s[100];
gets(s);
reverseStr(s);
puts(s);
}
void reverseStr( char *str )
{
char *pEnd,t;
pEnd = str + strlen(str) - 1;
while( str
{
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; i
printf("%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
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
*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
*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
*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; i
{
printf("请输入第%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
fwrite( &s[i], sizeof(s[i]), 1, fp );
fclose(fp);
//以下代码从文件中读取出信息,并显示在屏幕上 fp = fopen("a.txt", "rb");
} count = 0; while( !feof( fp ) ) { if( fread(&s[count], sizeof(s[count]), 1, fp) ) count++; } fclose(fp); //输出 for(i=0; i