tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> IT认证 >>

C语言程序设计课后答案


第 1 章 习题参考答案
1. (略) 2 判断题 1 √ 3 2 × 3 √ 4 × 5 √

填空题 (1) main (2) 函数的首部、函数体 (3) {、} (4) main、main (5) 语句、分号(;) 选择题 1 C 2 C 3 C 4 A 5 B

4

5

选择题 (1) #include <stdio.h> main() { int a, b, s; float t; printf("Enter A,B=?\n"); scanf("%d%d", &a, &b); s=a+b; t=a*b; printf("s=%d, t=%f\n", s, t); }

(2) #include <stdio.h> main() { printf("=================\n"); printf(" Hello! \n"); printf(" How do you do \n"); printf("=================\n"); } (3) #include <stdio.h> main() {

int r, h; float v; printf("Enter R, H=?\n"); scanf("%d%d", &r, &h); v=3.1415926*r*r*h; printf("v=%f\n",v); }

第 2 章 习题参考答案
一. (略) 二.填空题 (1) a ?

b b? d? c e 2ab

(2) 2.5 (3) 16 (4) 10 (5) 16、16、11 (6) 4、10、6 (7) 18、3、3 (8) sin(65*3.14/180)+2*(3.1415926 +exp(y))/(x-y) (9) 25、25 (10) 27 (11) 4 (12) 0 三、选择题 1 D 2 D 3 C 4 B 5 D 6 A 7 D 8 B 9 C 10 D 11 A 12 B

四、编程题 1. #include <stdio.h> main() { int x, a, b, c; printf("Enter a intger number x=?\n"); scanf("%d",&x); a=x /100; b=x%100/10; c=x%10;

printf("%d %d %d\n", a, b, c); } 2. #include <stdio.h> main() { unsigned a, b,r1,r2,r3; scanf("%u%u", &a, &b); r1=a &b; r2=a|b; r3=a^b; printf("r1=%u,r2=%u,r3=%u\n",r1,r2,r3); getch(); } 3. #include <stdio.h> main() { float a, b, h, s; scanf("%f%f?%f", &a, &b, &h); s=(a+b)*h/2; printf("s=%f\n", s); }

第3章 习题参考答案
一、判断题 1 × 2 2 × 3 × 4 √ 5 √ 6 ×

填空题 3 语句 4 表达式语句 5 { } 6 函数 7 由―%‖和格式字符 8 & 9 getchar() 10 27 ,33 ,1b 11 x(1)=23.14 x(2)=-78.32 12 5+ 6

3

程序阅读题 1、 p=3.14 p=3.1416 p= 3.14 p= 3.1416 p=3.14 p=3.1416 a----ASCII: 97 a----ASCII: 97 a----ASCII: 97

2、

4

编程题 1、 #include <stdio.h> main() { int a, b; float r1, r2; scanf("%d%d", &a, &b); r2=a+b; r1=a*b/r2; printf("r1=%0.2f,r2=%0.2f\n", r1, r2); } 2、 #include <stdio.h> main() { float c, f; printf("Input C="); scanf("%f", &c); f=9.0/5*c+32; printf("F=%f\n", f); } 3、 #include <stdio.h> void main() { float c1, c2, c3, ver, s; printf("Input a, b and c:");

scanf("%f%f%f", &c1, &c2, &c3); s=c1+c2+c3; ver=s/3; printf("total s=%f , ver=%f\n", s,ver); } }

第 4 章 习题参考答案
1 判断题 1 × 2 选择题 1 B 3 程序阅读题 (1) 105 (2) a=8 (3) abc123DEF 2 B 3 B 4 B 5 D 6 A 7 B 8 B 2 × 3 √ 4 √ 5 × 6 √

(4) 4 程序填空题 (1) ch (2) div=n (3) min=mark

ch==')' count-count==0 count>0 div— min=mark max=mark sum+=mark

5

编程题 (1) #include <stdio.h> void main( ) { int x,y; printf("Enter the X,Y=?\n"); scanf("%d,%d",&x,&y); if(x>0 && y>0) printf("(%d,%d)是第一像限\n",x,y); else if(x>0 && y<0) printf("(%d,%d)是第四像限\n",x,y); else if(x<0 && y>0) printf("(%d,%d)是第三像限\n",x,y); else if(x<0 && y<0)

printf("(%d,%d)是第二像限\n",x,y); else if(x>0 && y==0) printf("(%d,%d)在 X 轴正方向\n",x,y); else if(x<0 && y==0) printf("(%d,%d)在 X 轴负方向\n",x,y); else if(x==0 && y>0) printf("(%d,%d)在 Y 轴正方向\n",x,y); else if(x==0 && y<0) printf("(%d,%d)在 Y 轴负方向\n",x,y); else printf("(%d,%d)为坐标原点\n",x,y); } (2) #include <stdio.h> #include <math.h> main() { float a, b, c, x, s; printf("Input a, b and c:"); scanf("%f%f%f", &a, &b, &c); if(a+b<=c || a+c<=b || b+c<=a) printf("Error!\n"); else{ x=(a+b+c)/2; s=sqrt(x*(x-a)*(x-b)*(x-c)); printf("area=%f\n", s); } }

(3) 程序代码如下: #include <stdio.h> void main() { float salary, tax; int ntax; printf("\nPlease enter a salary="); scanf("%f",&salary); ntax=salary/500; if (ntax>=10) ntax=10; switch(ntax) { case 0: case 1: tax=0;break;

case 2: tax=(salary-1000)*0.05;break; case 3:case 4: tax=500*0.05+(salary-1500)*0.1;break; case 5:case 6: tax=500*0.05+1000*0.1+(salary-2500)*0.15;break; case 7:case 8:case 9: tax=500*0.05+1000*0.1+1000*0.15+(salary-3500)*0.20;break; case 10: tax=500*0.05+1000*0.1+1000*0.15+1500*0.20+(salary-5000)*0.30; } printf("\nThe tax=%10.2f\n",tax); } (4)方法一 #include <stdio.h> #include <math.h> main() { int i=1; float t=-1, s=0; do{ t= -t/i; s=s+t; i=i+1; }while(fabs(t)>1e-6); printf("s=%f\n", s); } 方法二 #include <stdio.h> void main() { int i=1,sign=1; float t=1.0, s=0.0; while(1.0/t>1e-6) { t= t*i; s=s+sign/t; i=i+1; sign=-sign; }; printf("s=%f\n", s); }

(5)方法一: #include <stdio.h> main() { int i, a, b, c; for(i=100; i<=999; i++) { a=i /100; b=i/10%10; c=i%10; if(i==a*a*a+b*b*b+c*c*c) printf("%d\n", i); } } 方法二: #include <stdio.h> void main() { int i, a, b, c; for(a=1; a<=9; a++) for(b=0; b<=9; b++) for(c=0; c<=9; c++) { i=a*100+b*10+c; if(i==a*a*a+b*b*b+c*c*c) printf("%d\n", i); } } (6) #include <stdio.h> main() { int i, j; for(i=1; i<=4; i++) { for(j=1; j<=6-i; j++) putchar(' '); for(j=1; j<=i*2-1; j++) printf("%c", 65+i-1); printf("\n"); } for(i=3; i>=1; i--) { for(j=1; j<=6-i; j++) putchar(' '); for(j=1; j<=i*2-1; j++) printf("%c", 65+i-1);

printf("\n"); } } (7) #include <stdio.h> main() { int a, b, c; for(a=0; a<=20; a++) for(b=0; b<=33; b++) { c=100-a-b; if(a*5+b*3+c/3.0==100) printf("%d, %d, %d\n", a, b, c); } } (8) #include <stdio.h> #include <math.h> main() { float x, x0, a; scanf("%f", &a); x=a; do{ x0=x; x=2/3.0*x0+a/(3*x0*x0); }while(fabs(x-x0)>1e-6); printf("x=%f\n", x); } (9) #include <stdio.h> #include <math.h> main() { float pi, pi0; int i=1 pi=2; do{ pi0=pi; pi=pi*(2.0*i/(2.0*i-1))*(2.0*i/(2.0*i+1));

i=i+1; }while(fabs(pi-pi0)>1e-6); printf("pi=%f\n", pi); } (10) #include <stdio.h> void main() { int i,j,s; for(i=6;i<=1000;i++) { s=1; for(j=2;j<=i/2;j++) if(i%j==0) s+=j; if(s==i) /*判断是否是合数*/ { printf("%d=1",i); /* 打印输出合数及=1*/ for(j=2;j<=i/2;j++) /* 打印输出各因子*/ if(i%j==0) printf("+%d",j); printf("\n"); } } } (11) #include <stdio.h> #include <math.h> void main() { int x, y,z,k; k=sqrt(2000); for(x=0;x<=k;x++) for(y=0;y<=k;y++) for(z=0;z<=k;z++) if(x*x+y*y+z*z==2000) printf("%d,%d,%d\n",x,y,z); }

第 5 章 习题参考答案
1 1 √ 2 判断题 2 × 3 √ 4 × 5 × 6 √ 7 × 8 × 9 × 10 × 11 × 12 × 13 × 14 × 15 ×

填空题 (1) 32 (2) 4 (3) str1[7]= '\0';

(4) for(i=1;i<=6;i++) gets(a[i]); (5) strcpy(web, "www.google.com"); (6) int *p=a; (7) 5 (8) 1 (9) *(p+6)或 *(s+6) 3 1 B 4 选择题 2 C 3 B 4 A 5 B 6 C 7 B 8 A 9 C 10 D 11 B 12 D 13 B 14 A 15 D

程序阅读题 (1) 6 (2) str (3) 60 (4) bcdefga cdefgab defgabc (5) a1e2

程序填空题 (1) # include <math.h> scanf("%f", &a[i]) s=0; x=a[0] (2) scanf("%d",&n) a[i][i]=1 a[i-1][j-1] printf("\n") (3) b[i]!='\0' strcpy puts(b) (4)p=a[0]; 或 p=&a[0][0]; *p 六、编程题 1、使用数组和指针 2 种方法来处理。 方法一(使用数组) #include <stdio.h> void main() { int i=0,a[10],t; printf("Enter the 10 number=\n"); for(i=0; i<10; i++) scanf("%d",&a[i]); for(i=0;i<5;i++) { t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0; i<10; i++) printf("%d ",a[i]); printf("\n"); } 方法二(使用指针) #include <stdio.h> void main() { int i=0,a[10],t,*p,*q; 5

fabs(a[i]-s)

printf("Enter the 10 number=\n"); for(p=a; p<a+10; p++) scanf("%d",p); p=a; q=a+9; for(;p<q;p++,q--) { t=*p;*p=*q;*q=t;} for(p=a; p<a+10; p++) printf("%d ",*p); printf("\n"); }

2、 #include <stdio.h> main() { int i, j, t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for(i=0;i<10;i++) printf("%d ", a[i]); printf("\n"); printf("Enter the Move n=?"); scanf("%d", &n); for(i=1; i<=n; i++) { t=a[10]; for(j=9;j>=0;j--) a[j+1]=a[j]; a[0]=t; } for(i=0; i<=10; i++) printf("%d ", a[i]); getch(); }

3、#include <stdio.h> #include <stdlib.h> main() { int a[100], b[100], i, j, p, n=0, t; randomize(); for(i=0; i<100; i++) {

a[i]=random(100); if(a[i]%2==0) b[n++]=a[i]; } for(i=0; i<n-1; i++) { p=i; for(j=i+1; j<n; j++) if(b[j]>b[p]) p=j; t=b[p]; b[p]=b[i]; b[i]=t; } for(i=0; i<n; i++) { printf("%d ", b[i]); if(i%10==9) printf("\n"); } getch(); } 4、 #include <stdio.h> #include <stdlib.h> #define N 50 main() { int a[N], i, j,p,t; randomize(); for(i=0; i<N; i++) { a[i]=random(100); for(j=0;j<i;j++) if(a[i]==a[j]) { i--; break; } } for(i=0; i<N-1; i++) { p=i; for(j=i+1; j<N; j++) if(a[j]>a[p]) p=j; t=a[p]; a[p]=a[i]; a[i]=t; } for(i=0; i<N; i++) {

printf("%d ", a[i]); if(i%10==9) printf("\n"); } } 4, #include <stdio.h> #define N 10 void main() { int i; float a[N],s=0.0,x0=0.0; for(i=0;i<N;i++) { scanf("%f",&a[i]); x0+=a[i]; } x0/=N; for(i=0;i<N;i++) s+=(a[i]-x0)*(a[i]-x0); printf("%10.6f", s); } 5, #define N 4 #define M 3 void main() { int i,j,sum,a[N][M+1],max,p; printf("input score\n"); for(i=0;i<N;i++) /*i 代表学生序号*/ { sum=0; /*每位学生成绩输入前,其总成绩赋初值 0*/ for(j=0;j<M;j++) /*j 代表课程代号*/ { scanf("%d",&a[i][j]); /*输入第 i 号学生第 j 门课程的成绩*/ sum=sum+a[i][j]; /*累加求总成绩*/ } a[i][M]=sum; /*求第 i 个学生的总成绩放到 a[i][M]*/ } max=a[0][M]; p=0; for(i=1;i<N;i++) /*查找总成绩最高的学生*/ if(a[i][M]>max) p=i; printf("No.%d Total score:%d\n",p+1,a[p][M]); }

7、 #include <stdio.h> void main() { int a[5][6]; int i, j, mi, mj; for(i=0; i<5; i++) for(j=0; j<6; j++) { printf("input a[%d][%d]:", i, j); scanf("%d", &a[i][j]); } mi=0; mj=0; for(i=0; i<5; i++) { for(j=0; j<6; j++) { if(a[i][j]<a[mi][mj]) { mi=i; mj=j; } printf("%d ",a[i][j]); } printf("\n"); } printf("min=%d ",a[mi][mj]); } 6, #include <stdio.h> #include <math.h> void main() { float a[5][6]; int i, j, max; printf("Enter array a=?\n" ); for(i=0; i<5; i++) for(j=0; j<6; j++) scanf("%f", &a[i][j]); for(i=0; i<5; i++) { max=a[i][0]; for(j=0; j<6; j++) /*查找第 i 行中绝对值最大的元素*/ if(fabs(a[i][j])>fabs(max)) max=a[i][j]; for(j=0; j<6; j++) /*第 i 行中所有元素除以绝对值最大的元素*/ { a[i][j]=a[i][j]/max; printf("%8.4", a[i][j]); }

printf(" } }

-----max =%8.4\n",max);

7, #include <stdio.h> #include <string.h> #define N 20 main() { char str[N][15],st[15],*p=st; int i, j; for(i=0; i<N; i++) scanf("%s", str[i]); for(i=0; i<N; i++) for(j=0; j<N-i-1; j++) if(strcmp(str[j],str[j+1])>0) { strcpy(p,str[j]); strcpy(str[j],str[j+1]); strcpy(str[j+1],p); } for(i=0; i<N; i++) printf("%s\n", str[i]); } 10、程序如下: #include <stdio.h> main() { int a[10], b[10], t; int n=0, m=0, i, j, f; printf("Input Array a, end with –1:"); scanf("%d", &t); while(n<10 && t!=-1) { a[n++]=t; scanf("%d", &t); } printf("Input Array b, end with –1:"); scanf("%d", &t); while(m<10 && t!=-1) { b[m++]=t; scanf("%d", &t); } for(i=0; i<n; i++) /* 打印只在数组 a 中出现的元素 */ { f=1;

for(j=0; j<m; j++) if(a[i]==b[j]) {f=0; break;} if(f) printf("%d", a[i]); } for(i=0; i<m; i++) /* 打印只在数组 b 中出现的元素 */ { f=1; for(j=0; j<n; j++) if(b[i]==a[j]) {f=0; break;} if(f) printf("%d", b[i]); } } 11、 #include <stdio.h> main() { char str[81]; int i=-1; printf("Input:"); scanf("%s", str); while(++i<80 && str[i]!= '\0') if(str[i]== '$') str[i]= 'S'; puts(str); } 12、 #include <stdio.h> void main() { char x[80],y[26]; int i,j,ny=0; gets(x); for(i=0;x[i]!='\0';i++) if(x[i]>='A'&&x[i]<='Z') { for(j=0;j<ny;j++) if(y[j]==x[i]) break; if(j==ny) { y[ny]=x[i]; ny++; } } for(i=0;i<ny;i++) printf("%c ",y[i]); printf("\n"); } 13、 #include <stdio.h>

void main() { int m, bin[32],j; scanf("%d",&m); for(j=0;m!=0;j++) { bin[j]= m%2; m=m/2; } for(;j!=0;j--) printf("%d", bin[j-1] ); } 14、 #include <stdio.h> #include <string.h> #include <ctype.h> void main() { char s[80]; int i=0; gets(s); while(s[i]!='\0') if(isdigit(s[i])) strcpy (s+i,s+i+1); else i++; puts(s); } 15、 void main() { int a,b,c; int *p1,*p2,*p3,*t; printf("\nPlease input three integers:\n"); scanf("%d,%d,%d",&a,&b,&c); p1=&a,p2=&b,p3=&c; if(*p1>*p2) t=p1,p1=p2,p2=t; if(*p1>*p3) t=p1,p1=p3,p3=t; if(*p2>*p3) t=p2,p2=p3,p3=t; printf("new order:\n"); printf("%d,%d,%d",*p1,*p2,*p3); }

16、 void main() { char st[80],ss[20],sp[20],*a=st,*b=ss,*t=sp; int i,n,m,p=-1; printf("\nPlease input two string:\n"); gets(a);gets(b); n=strlen(a); m=strlen(b); for(i=0;i<=n-m+1;i++) { a=st+i; strncpy(t,a,m); /*将字符指针 a 指向的字符串取前 m 个字符复制到 t 所指的字符串中 */ if(strcmp(b,t)==0) {p=i; break;} } if(p==-1) printf("%d",p); else printf("%d",p+1); /*因数组下标从 0 开始,所以输出 p+1*/ getch(); } 17、 #include <string.h> void main() { char st[80],*p=st,ch; printf("Enter a string\n"); gets(p); while(*p!='\0') { ch=*p; if(ch>='A' && ch<='Z') ch='A'+('Z'-ch); else if(ch>='a' && ch<='z') ch='a'+('z'-ch); *p=ch; /*转换后的字符替换原字符*/ p++; /*指针指向下一个字符*/ } /*指针指向字符串首字符*/ p=st; puts(p); getch();

} 18、 #include <string.h> void main() { char st[80],*p=st,ch; long k=0; printf("Enter a string\n"); gets(p); strupr(p); while(*p!='\0') { ch=*p; if(ch>='0' && ch<='9' || ch>='A' && ch<='F') p++; else strcpy(p,p+1); /*滤去所有的非十六进制字符*/ } p=st; while(*p!='\0') /*将十六制数转换成十进数*/ { ch=*p; if(ch>='0' && ch<='9' ) k=16*k+(ch-'0'); else if(ch>='A' && ch<='F') k=16*k+(10+ch-'A'); p++; } printf("%ld\n",k); }

第 6 章 习题参考答案
6 判断题 1 × 7 选择题 1 C 8 2 × 3 √ 4 √ 5 × 6 √ 7 × 8 × 9 × 10 ×

2 B

3 A

4 C

5 D

填空题 (1) char *printch(int,char); (2) int strlen(char *); (3) int min(int *);

(4) int random(void); (5) int digits(double,int); 9 程序阅读题 (1) (127)10=(7F)16 (2) 30 (3) a=64,b=64 (4) (3,6) 10 程序填空题 (1) random(10)+’0’ s,N,c a[I]-‘0’ (2) int *m x<v[k] v[k+1] (3) sign=-1 digit=0 digit=digit*10+(s[k]-‘0’) (4) {1.1,2.2,3.3,4.4,5.5} float x, float *a, int n return y 11 编程题 (1) #include<stdio.h> int jfnum(int n); main() { int i; for(i=100;i<=999;i++) if(judge(i))printf("%d\n",i); } int judge(int n) { int n1,n2,n3,flag; if(n<100||n>999)printf("error!"); else { n1=n%10; n2=(n/10)%10; n3=n/100; if(n==n1*n1*n1+n2*n2*n2+n3*n3*n3)flag=1; else flag=0; } return(flag); } (2) float mysqr(float a,float eps) { float x0,x1,t; if(a<0)printf("error!"); else { x0=a/2.0; do { x1=(x0+a/x0)/2.0; t=fabs(x1-x0); x0=x1;

}while(t>eps); } return(x1); } (3) void code(char s[],int n) { int i; for(i=0;i<n;i++) if('A'<=s[i]&&s[i]<='Z'||'a'<=s[i]&&s[i]<='z') { s[i]=s[i]+5; if(s[i]>'z'||s[i]>'Z'&&s[i]<'a') s[i]=s[i]-26; } } void recode(char s[],int n) { int i; for(i=0;i<n;i++) if('A'<=s[i]&&s[i]<='Z'||'a'<=s[i]&&s[i]<='z') { s[i]=s[i]-5; if(s[i]<'A'||s[i]<'a'&&s[i]>'Z') s[i]=s[i]+26; } } (4) int leapyear(int year); main() { int year; printf("Input year number:"); scanf("%d",&year); if(leapyear(year)==1)printf("\n%d is leap year\n", year); else printf("\n%d is not leap year\n", year); } int leapyear(int year) { if(year%4==0&&year%100!=0||year%400==0)return(1); else return(0); } (5) #include<stdio.h> char *search(char *s,char c) { int flag; flag=0;

while(*s!='\0') { if(*s==c){flag=1;break;} s++; } if(flag==1)return(s); else return(NULL); } (6) #include<stdio.h> void maxmin(int a,int b,int c,int *max,int *min); main() { int a,b,c,max,min; printf("\nPlease input three integers:\n"); scanf("%d,%d,%d",&a,&b,&c); maxmin(a,b,c,&max,&min); printf("max=%d,min=%d ",max,min); }

void maxmin(int a,int b,int c,int *max,int *min) { if(a>b){ *max=a; *min=b;} if(c>*max) *max=c; if(c<*min) *min=c; }
(7) #include<stdio.h> #include<stdlib.h> void getdata(int a[],int n); void printdata(int a[],int n); void sort(int a[],int n); float average(int a[],int n); void count(int a[],int n,float x,int main() { int a[20],b[3]; float x; getdata(a,20); printf("\nInitialize:\n"); printdata(a,20); sort(a,20); printf("\nSort:\n"); printdata(a,20); x=average(a,20); printf("\nAverage:%f\n",x); count(a,20,x,b);

/*随机生成数据函数的原型声明*/ /*输出数据函数原型声明*/ /*排序函数原型声明*/ /*求平均值函数原型声明*/ b[]); /*统计函数原型声明*/

printf("\n> = <:\n"); printdata(b,3); } void getdata(int a[],int n) { int i; randomize(); for(i=0;i<n;i++) a[i]=(rand()%90)+10; } void printdata(int a[],int n) { int i; for(i=0;i<n;i++) { if(i%5==0)printf("\n"); printf("%d ",a[i]); } } void sort(int a[],int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(a[k]>a[j])k=j; t=a[i]; a[i]=a[k]; a[k]=t; } } float average(int a[],int n) { float s; int i; s=0.0; for(i=0;i<n;i++) s=s+a[i]; return(s/n); } void count(int a[],int n,float x,int b[]) { int i; b[0]=b[1]=b[2]=0; for(i=0;i<n;i++) if(a[i]>x)b[0]++; else if(a[i]==x)b[1]++; else b[2]++; }

(8) #include"string.h" void invert(char *string) { int n; char *h,*t,c; n=strlen(string); h=string; t=h+n-1; while(h<t) { c=*h; *h=*t; *t=c; h++; t--; } } (9) void mystrcpy(char *s1,char *s2,int m) { s2=s2+m-1; while(*s2!='\0') { *s1=*s2; s1++; s2++; } *s1='\0'; } (10) int f(int n) { if(n<0)printf("error"); else { if(n==0)return 0; else if(n==1) return 1; else return f(n-2)+f(n-1); } } (11) 方法一、使用循环 #include "stdio.h" #include "math.h" float yx(float x) { float y0,y1;

if(x<0)printf("error"); else { y0=sqrt(x); y1=sqrt(x+y0); while(fabs(y1-y0)>0.00001) { y0=y1; y1=sqrt(x+y0); } } return y1; } 方法二:使用递归方法 #include <stdio.h> #include <math.h> double func(int xcount, double x) /* xcount 是根号的个数 */ { double y=0; if(xcount==1) y=sqrt(x); else y=sqrt(func(xcount-1,x)+x); return y; } void main() { int xcount; double result,x; scanf("%d%lf",&xcount,&x); if (x<=0) /* x 小于 0 出错 */ printf("Date Error!"); else printf("%lf",func(xcount,x)); getch(); }

(12) #include"stdio.h" void maxa(int a[3][4]); void verse(int a[3][4]); void main() { int i,j,a[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]);

maxa(a); verse(a); getch(); } void maxa(int a[3][4]) { int i,j,imax=0,jmax=0; for(i=0;i<3;i++) for(j=0;j<4;j++) if(a[i][j]>a[imax][jmax]){imax=i;jmax=j;} printf("The max number is a[%d][%d]=%d\n",imax,jmax,a[imax][jmax]); } void verse(int a[3][4]) { int i,j,imax=0,jmax=0; for(j=0;j<4;j++) { for(i=0;i<3;i++) printf("%d",a[i][j]); printf("\n"); } }

第 7 章 习题参考答案
1. 判断题 1 √ 2. 选择题 1 B 2 B 3 C 4 D 5 B 6 A 2 × 3 × 4 √ 5 × 6 ×

3. 填空题 (1) 程序编译之前 (2) #include ―myhead.h‖ (3) c = c-32 (4) 2 (5) 5 31 (6) z=0 4. 编程题 (1) #include <stdio.h> #define RN(x) if (x%4==0 && x%100!=100 || x%400==0) printf("YES"); else printf("NO"); void main() { int n;

scanf("%d",&n); RN(n) } (2) #include <stdio.h> #define MIN(x,y,z) printf("%d",(x<y?x:y)<z?(x<y?x:y):z); void main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); MIN(a,b,c) } (3) #include <stdio.h> #define INPUT(a,n) for(i=0;i<n;i++) scanf("%f",&a[i]); #define AVERAGE(a,n,ave) for(i=0;i<n;i++) ave+=a[i]; void main() { float a[5],ave=0;int i; INPUT(a,5) AVERAGE(a,5,ave) printf("%f",ave/10); }

第 8 章 习题参考答案
1.思考题 (略)

2.判断题:
1 √ 2 × 3 × 4 × 5 √ 6 √

3.选择题
1 A 2 D 3 D 4 B 5 D 6 A 7 D 8 D

4.程序阅读
(1) 2, 4, 6, 8, 10, 。 (2)10 9 8 7 6 5 4 3 2 1 (3) Shen 。 (4) 18 。
(5)

1 -5 7

5.程序填空
(1) p->next!=NULL info p=p->next;

(2) p1 -> next != NULL

p0 -> next = p1;

p0 -> next = NULL;

(3) s[k].aver s[k].aver>s[maxsub].aver maxsub=k (4)max=i; min=i; stud[max].name, stud[max].score stud[min].name, stud[min].score (5) head n++ p->next

6.编程题
(1) struct complx{int real;int im;}; main() { struct complx c1,c2,c3; scanf("%d+%di",&c1.real,&c1.im); scanf("%d+%di",&c2.real,&c2.im); c3.real=c1.real*c2.real-c1.im*c2.im; c3.im=c1.real*c2.im+c1.im*c2.real; printf("(%d+%di)*(%d+%di)=%d+%di",c1.real,c1.im,c2.real,c2.im,c3.real,c3.im); getch(); } (2) #include <stdio.h> #include<string.h> main() #define N 10 struct student { long num; char name[10]; float score[3]; float ave; }; main() { void input(struct student s[],int n); /*输入 n 个学生数据*/ float average(struct student s[],int n);/*计算第 n 个学生的平均成绩*/ int max(struct student s[],int n); /*计算 n 个学生中哪个学生的平均成绩最高*/ struct student s[N]; int i,m; float a=0; /*总平均成绩*/

input(s,N); for(i=0;i<N;i++) { s[i].ave=average(s,i); a=a+s[i].ave; } a=a/N; printf("Number Name for(i=0;i<N;i++)

Score-1

Score-2

Score-3

Average\n");

printf("%ld%10s%f%f%f%f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i]. ave); printf("The total average score is %f\n",a); m=max(s,N); printf("The max score student:\n"); printf("Number:%ld\nName:%s\nScore 1:%f\nScore 2:%f\nScore 3:%f\nAverage Score:%f\n",s[m].num,s[m].name,s[m].score[0],s[m].score[1],s[m].score[2],s[m].ave); } void input(struct student s[],int n) { int i; for(i=0;i<n;i++) { printf("Please input student number:"); scanf("%ld",&s[i].num); printf("Please input student name:"); scanf("%s",s[i].name); printf("Please input student score 1:"); scanf("%f",&s[i].score[0]); printf("Please input student score 2:"); scanf("%f",&s[i].score[1]); printf("Please input student score 3:"); scanf("%f",&s[i].score[2]); } } float average(struct student s[],int n) { int i; float a=0; for(i=0;i<3;i++) a=a+s[n].score[i]; a=a/3; return(a); }

int max(struct student s[],int n) { int i,m=0; for(i=1;i<n;i++) if(s[i].ave>s[m].ave)m=i; return(m); } (3) struct date{int year;int month;int day;}; int days(struct date d) { int n,t; if(d.year%4==0&&d.year%100!=0||d.year%400==0)t=29; else t=28; switch(d.month) { case 1:n=d.day; break; case 2:n=d.day+31; break; case 3:n=d.day+31+t; break; case 4:n=d.day+31+t+31; break; case 5:n=d.day+31+t+31+30; break; case 6:n=d.day+31+t+31+30+31; break; case 7:n=d.day+31+t+31+30+31+30; break; case 8:n=d.day+31+t+31+30+31+30+31; break; case 9:n=d.day+31+t+31+30+31+30+31+31; break; case 10:n=d.day+31+t+31+30+31+30+31+31+30; break; case 11:n=d.day+31+t+31+30+31+30+31+31+30+31; break; case 12:n=d.day+31+t+31+30+31+30+31+31+30+31+30; } return(n); } main() { struct date d={2006,3,15}; printf("%d",days(d)); getch(); } (4) struct ks{int reg;char *name;char sex;char *birthday;int score[6];}; struct ks input() { struct ks s; int i,sum=0; printf("register:"); scanf("%d",&s.reg); printf("name:");

scanf("%s",s.name); printf("sex:"); scanf("%c",&s.sex); printf("birthday:"); scanf("%s",s.birthday); for(i=0;i<5;i++) { printf("score-%d:",i+1); scanf("%d",&s.score[i]); sum=sum+s.score[i]; } s.score[5]=sum; return(s); } void print(struct ks s) { int i; printf("register:%d\n",s.reg); printf("name:%s\n",s.name); printf("sex:%c\n",s.sex); printf("birthday:%s\n",s.birthday); for(i=0;i<5;i++) printf("score-%d:%d\n",i+1,s.score[i]); printf("sum:%d\n",s.score[5]); getch(); } struct ks search(struct ks s[],int n) { int i,p=0; for(i=1;i<n;i++) if(s[i].score[5]>s[p].score[5])p=i; return(s[p]); } void sort(struct ks s[],int n) { int i,j,p; struct ks t; for(i=0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(s[j].reg<s[p].reg)p=j; t=s[i];s[i]=s[p];s[p]=t; print(s[i]); } print(s[n-1]); } (5)

#define NULL 0 #define LEN sizeof(struct student) struct student { long num; char name[10]; char sex; /*'F'表示女,'M'表示男*/ int age; struct student *next; } main() { struct student *creat(int n); void print(struct student *head); struct student *delete(struct student *head,int age); struct student *head; int n,age; printf("\nPlease input the length of list:"); scanf("%d",&n); head=creat(n); print(head); } struct student *creat(int n) { struct student *head,*p1,*p2; int i; head=NULL; for(i=1;i<=n;i++) { p1=(struct student *)malloc(LEN); printf("Number:"); scanf("%ld",&p1->num); printf("Name:"); scanf("%s",p1->name); printf("Sex:"); scanf("%c",&p1->sex); printf("Age:"); scanf("%d",&p1->age); if(i==1) head=p1; else p2->next=p1; p2=p1; } p2->next=NULL; return(head);

} void print(struct student *head) { struct student *p; p=head; printf("Number Name Sex Age\n"); while(p!=NULL) { printf("%ld%10s%c%d",p->num,p->name,p->sex,p->age); p=p->next; } } (6) struct student *delete(struct student *head,int age) { struct student *p1,*p2; p1=head; while(p1!=NULL) { if(p1->age==age) { if(p1==head) head=p1->next; else p2->next=p1->next; free(p1); } p2=p1; p1=p1->next; } return(head); }

第 9 章 习题参考答案
1. 填空题 (7) 文本文件 / 二进制文件 (8) 创建 a 文件 (9) 打开 a 文件,并且文件读写位置指针在文件尾 (10) 将字符变量 ch 中的字符写入 fp 所指向的文件 / 从 fp 所指向的文件中读取 n-1 个字符,并且写入数组 s 中 (11) 0 (12) for (i=0;i<30;i++) fread( &stud[i], sizeof(struct student_type),1,fp ) (13) fseek(fp,30L,SEEK_SET ) (14) -1

2. 选择题 1 A 3. 程序阅读题 1 2 -5,-4,-3,-2,total=-14 Language! 1 2 3 4 3 5 6 7 8 9 10 4. 程序填空题 1 (fp=fopen("c:\\data.txt","w")) (ch=getchar()) fputc(ch,fp) stu[i].name,stu[i].sno,stu[i].age,stu[i].address 2 "w" &stu[i],sizeof(struct student),1,fp 3 r w 2 B 3 C 4 D 5 C 6 C 7 D 8 C

5. 编程题 (1) #include <stdio.h> void main() { FILE *fp1,*fp2; char ch; if( (fp1=fopen("C:\\Mydir\\String.txt","r"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); } if( (fp2=fopen("C:\\Mydir\\NewString.txt","w"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); }

while( (ch=fgetc(fp1))!=EOF) { if(ch>='A' && ch<='Z')ch+=32; else if (ch>='a' && ch<='z')ch-=32; fputc(ch,fp2); } ; fclose(fp1); fclose(fp2); remove("C:\\Mydir\\String.txt"); rename("C:\\Mydir\\String.txt","C:\\Mydir\\NewString.txt"); } (2) #include <stdio.h> int search(FILE *fp,char ch); void main() { FILE *fp; char filename[30]; char ch; int count; printf("Plese input filename:\n"); gets(filename); printf("Plese input the character you want to search:\n"); scanf("%c",&ch); if( (fp=fopen(filename,"r"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); } count=search(fp,ch); fclose(fp); printf("\n%d times!",count); } int search(FILE *fp,char ch) { int num=0;char x; while((x=fgetc(fp))!=EOF) if (x==ch) num++; return num; } (3) #include <stdio.h> void main()

{ FILE *fp1,*fp2; int x,temp; printf("Please input the number:\n"); scanf("%d",&x); if( (fp1=fopen("C:\\Mydir\\source.dat","r"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); } if( (fp2=fopen("C:\\Mydir\\destination.dat","w"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); } while( !feof(fp1)) { fscanf(fp1,"%d",&temp); if(temp%x==0) fprintf(fp2,"%d ",temp); } ; fclose(fp1); fclose(fp2); } (4) #include <stdio.h> #define STUNUM 5 struct student { char name[20]; int Chinese; int Computer; int Math; }stu1[STUNUM],stu2[STUNUM]; void main() { FILE *fp1,*fp2; int i; float result[3]; if((fp1=fopen("stu.dat","wb+"))==NULL)/*二进制模式打开文件读和写*/ { printf("File could not be opened!\n"); exit(0); } if((fp2=fopen("result.dat","wb+"))==NULL)/*二进制模式打开文件读和写*/

/*代表学生人数*/

{ printf("File could not be opened!\n"); exit(0); } printf("input data:\n"); for(i=0;i<STUNUM;i++) /*从键盘输入学生数据*/ { scanf("%s ",stu1[i].name); scanf("%d",&stu1[i].Chinese); scanf("%d",&stu1[i].Computer); scanf("%d",&stu1[i].Math); } for(i=0;i<STUNUM;i++) /*学生数据写入文件中*/ { fprintf(fp1,"%s ",stu1[i].name); fprintf(fp1,"%d,",stu1[i].Chinese); fprintf(fp1,"%d,",stu1[i].Computer); fprintf(fp1,"%d,",stu1[i].Math); } rewind(fp1); /*文件的位置指针移动到文件开始处*/ for(i=0;i<STUNUM;i++) /*将文件中学生数据读入程序中*/ { fscanf(fp1,"%s",stu2[i].name); fscanf(fp1,"%d,",&stu2[i].Chinese); fscanf(fp1,"%d,",&stu2[i].Computer); fscanf(fp1,"%d,",&stu2[i].Math); } result[0]=result[1]=result[3]=0; for(i=0;i<STUNUM;i++) { result[0]+=stu2[i].Chinese; result[1]+=stu2[i].Computer; result[2]+=stu2[i].Math; } fprintf(fp2,"Chinese Ave= %f\n",result[0]/STUNUM); fprintf(fp2,"Computer Ave= %f\n",result[1]/STUNUM); fprintf(fp2,"Math Ave= %f\n",result[2]/STUNUM); fclose(fp1); fclose(fp2); } (5) #include <stdio.h> int search(FILE *fp,char ch);

void main() { FILE *fp; char filename[30]; int rcount=1,ccount=0; printf("Plese input filename:\n"); gets(filename); if( (fp=fopen(filename,"r"))==NULL ) { printf("Cannot open file strike any key exit!"); exit(0); } while(!feof(fp)) { ccount++; if(fgetc(fp)=='\n') rcount++; } fclose(fp); printf("\n%d rows!\n",rcount); printf("\n%d chars!\n",ccount); }


推荐相关:

C语言程序设计(郑莉)课后习题答案

C语言程序设计(郑莉)课后习题答案_理学_高等教育_教育专区。C++语言程序设计(清华大学郑莉)课后习题答案第 一章 概述 由于图形用户界面的应用,程序运行由顺序运行...


C语言程序设计(何欣铭、颜晖_第2版)课后习题答案

C语言程序设计(何欣铭、颜晖_第2版)课后习题答案_计算机软件及应用_IT/计算机_专业资料。C语言课后答案(何欣铭、颜晖_第2版)39 修改程序,观察语法错误、逻辑错误及...


C语言程序设计(谭浩强)第四版_课后答案

第一章 程序设计C 语言 【第 15 页】 1-5 #include <stdio.h> int main ( ) { printf ("***\n\n"); printf(" Very Good!\n\n"); printf...


C语言程序设计项目教程课后参考答案

C语言程序设计项目教程课后参考答案_IT认证_资格考试/认证_教育专区。c语言课后答案,建议打印下载复印,不要抄到书上,看完一遍再看没答案的书更好复习 ...


谭浩强--C语言程序设计(第二版)习题答案

谭浩强--C语言程序设计(第二版)习题答案_IT/计算机_专业资料。C 语言程序设计(第 2 版)课后习题答案第一章 1.请参照本章例题,编写一个 C 程序,输出以下信息...


C语言程序设计课后答案_罗朝盛

C语言程序设计课后答案_罗朝盛_IT认证_资格考试/认证_教育专区。第 1 章 习题参考答案 1. (略) 2 判断题 1 √ 3 2 × 3 √ 4 × 5 √ 填空题 (1)...


C语言程序设计教程_李含光_郑关胜_清华大学出版社习题...

C语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版] 隐藏>> 第1 章习题参考答案 1.单项选择题 (1)A (2)C (3)D 2.填空题 (1...


C语言程序设计部分习题及例题参考程序

C语言程序设计部分习题及例题参考程序_理学_高等教育_教育专区。《C 语言程序设计》部分例题及课后习题参考程序 1.编程计算如下分段函数: 2 + 3 y = 4 5 ? ...


C语言程序设计习题解答

C语言程序设计习题解答_IT认证_资格考试/认证_教育专区 暂无评价|0人阅读|0次下载|举报文档C语言程序设计习题解答_IT认证_资格考试/认证_教育专区。《C 语言程序...


C语言程序设计苏小红版答案

C语言程序设计苏小红版答案_理学_高等教育_教育专区。2.2 #include<stdio.h>...c语言程序设计第五版习题... 72页 免费 C语言程序设计第四版第九... 11页...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com