tceic.com
学霸学习网 这下你爽了
相关文章
当前位置:首页 >> 工学 >>

谭浩强


程序是在 VC6.0 下编译的,所以头文件和 TC 的不太一样! 4-8 #include <iostream> #define pi 3.1415 void main() { float r,h,rl,ra,ss,sv,cv; printf("输入圆的半径和圆柱的高\n\n"); scanf("%f%f",&r,&h); rl=2*pi*r; ra=pi*r*r; ss=4*pi*r*r; sv=4*pi*r*r*r/3; cv=ra*h; printf("圆周长为:%f\n\n 圆面积为:%f\n\n 圆球表面积为:%f\n\n 圆球体积为:%f\n\n 圆柱体积为:%f\n\n",rl,ra,ss,sv,cv); }

4-9 #include <iostream> void main() { float F,c; printf("输入一个华氏温度\n\n"); scanf("%f",&F); c=5*(F-32)/9; printf("摄氏温度为:%.2f\n\n",c); } 第五章 5-4 #include <iostream>

void main() { int a,b,c,max; printf("输入三个整数 a,b,c\n\n"); scanf("%d%d%d",&a,&b,&c); if(a>b) max=a; else max=b; if(max<c) max=c; printf("最大的数为:%d\n\n",max); } 5-5 #include <iostream> void main() { float x,y; printf("输入 x\n\n"); scanf("%f",&x); if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; printf("y=%f\n\n",y); }

5-6 #include <iostream> void main() { float m; int n; printf("输入成绩\n\n"); scanf("%f",&m); n=m/10; switch(n)

{ case 0: case 1: case 2: case 3: case 4: case 5:printf("E\n\n");break; case 6:printf("D\n\n");break; case 7:printf("C\n\n");break; case 8:printf("B\n\n");break; case 9: case 10:printf("A\n\n");break; } } 5-7 #include <iostream> #include <math.h> void main() { int a,b,c,i,j,n; printf("输入五位正整数\n\n"); scanf("%d",&a); printf("\n\n"); c=a; for(i=1;;i++) { b=c%10; c=c/10; printf("%d",b); if(c==0) { printf("\n\n"); printf("正整数为%d 位数\n\n",i);break; } } c=a;

for(j=i-1;j>=0;j--) { n=pow(10,j); b=c/n; c=c%n; printf("%d\n",b); } } 5-8 if 语句: #include <iostream> void main() { int I; float bonus; printf("输入当月利润 I\n\n"); scanf("%d",&I); if(I<=100000) bonus=I/10; else if(I<=200000) bonus=10000+(I-100000)*7.5/100; else if(I<=400000) bonus=10000+7500+(I-200000)*5/100; else if(I<=600000) bonus=10000+7500+10000+(I-400000)*3/100; else if(I<=1000000) bonus=10000+7500+10000+6000+(I-600000)*1.5/100; else bonus=10000+7500+10000+6000+6000+(I-1000000)*1/100; printf("应发奖金数为:%f\n\n",bonus); } switch 语句: #include <iostream> void main() { int I,n; float bonus; printf("输入当月利润 I\n\n"); scanf("%d",&I);

if(I>1000000) n=10; else n=I/100000; switch(n) { case 0:bonus=I/10;break; case 1:bonus=10000+(I-100000)*7.5/100;break; case 2: case 3:bonus=10000+7500+(I-200000)*5/100;break; case 4: case 5:bonus=10000+7500+10000+(I-400000)*3/100;break; case 6: case 7: case 8: case 9:bonus=10000+7500+10000+6000+(I-600000)*1.5/100;break; case 10:bonus=10000+7500+10000+6000+6000+(I-1000000)*1/100;break; } printf("应发奖金数为:%f\n\n",bonus); } 5-9 #include <iostream> void main() { int a,b,c,d,temp,min; printf("输入四个数 a,b,c,d\n\n"); scanf("%d%d%d%d",&a,&b,&c,&d); if(a>b) { temp=a; a=b; b=temp; } if(a>c) { temp=a; a=c; c=temp;

} if(a>d) { temp=a; a=d; d=temp; } printf("由小到大排列为:\n\n"); printf("%d ",a); if(b>c) { temp=b; b=c; c=temp; } if(b>d) { temp=b; b=d; d=temp; } printf("%d ",b); if(c>d) { temp=c; c=d; d=temp; } printf("%d ",c); printf("%d",d); }

5-10 #include <iostream> #include <math.h>

void main() { float x,y,a,b,c,d; printf("输入点的坐标\n\n"); scanf("%f%f",&x,&y); a=sqrt((2-x)*(2-x)+(2-y)*(2-y)); b=sqrt((2-x)*(2-x)+(-2-y)*(-2-y)); c=sqrt((-2-x)*(-2-x)+(-2-y)*(-2-y)); d=sqrt((-2-x)*(-2-x)+(2-y)*(2-y)); if(a<=1||b<=1||c<=1||d<=1) printf("该点建筑高度为:10m"); else printf("该点建筑高度为:0m"); } 第六章: 6-1 #include <iostream> #include <math.h> void main() { int m,n,max,min,i,k; printf("输入两个正整数\n\n"); scanf("%d%d",&m,&n); if(m>n) k=n; else k=m; for(i=1;i<=k;i++) { if((m%i==0)&&(n%i==0)) max=i; } printf("最大公约数为:%d\n\n",max); if(m>n) k=m; else k=n; for(i=k;;i++) { if((i%m==0)&&(i%n==0)) { min=i;

break; } } printf("最小公倍数为:%d\n\n",min); }

6-2 #include <iostream> void main() { char c; int l=0,b=0,n=0,e=0; printf("输入一行字符\n\n"); while((c=getchar())!='\n') { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) l+=1; else if(c==' ') b+=1; else if(c>=48&&c<=57) n+=1; else e+=1; } printf("英文字母个数为:%d\n\n 空格个数为:%d\n\n 数字个数为:%d\n\n 其他字符个 数为:%d\n\n",l,b,n,e); }

6-3 #include <iostream> #include <math.h> void main() { int n,k,i; float a,s=0; printf("输入 n 和 a\n\n");

scanf("%d%f",&n,&a); for(i=0;i<n;i++) { k=pow(10,i); s=s+(n-i)*a*k; } printf("和 s=%f\n\n",s); }

6-4 #include <iostream> void main() { int n,s,S=0,i,j; printf("输入 n\n\n"); scanf("%d",&n); for(i=1;j<=n;i++) { s=1; for(j=1;j<=i;j++) { s=s*j; } S+=s; } printf("和 S=%d\n\n",S); }

6-5 #include <iostream> void main() {

int i,m,n,t; int s1=0,s2=0; float s3=0,s,l; printf("输入 m,n,t 的值\n\n"); scanf("%d%d%d",&m,&n,&t); for(i=1;i<=m;i++) { s1+=i; } for(i=1;i<=n;i++) { s2+=i*i; } for(i=1;i<=t;i++) { l=1.0/i; s3+=l; } s=s1+s2+s3; printf("和 s=%f",s); } 6-6 #include <iostream> void main() { int m,n,k,i,j; printf("水仙花数为:\n"); for(i=100;i<=999;i++) { j=i; m=j%10; j=j/10; n=j%10; k=j/10; if(i==m*m*m+n*n*n+k*k*k) printf("%d ",i);

} } 6-7 #include <iostream> #include <math.h> void main() { int i,j,k,s; for(i=1;i<=1000;i++) { s=0; for(j=1;j<i;j++) { if(i%j==0) s+=j; } if(s==i) { printf("\n\n"); printf("%d its factors are ",i); for(j=1;j<i;j++) { if(i%j==0) printf("%d ",j); } } } }

6-8 #include <iostream> void main() { int n,i; float f1,f2,s,temp;

printf("输入 n\n\n"); scanf("%d",&n); f1=2.0;f2=3.0;s=f1; for(i=1;i<=n-1;i++) { s+=f2/f1; temp=f2; f2=f1+f2; f1=temp; } printf("前%d 项和为%f",n,s); }

6-9 #include <iostream> #include <math.h> void main() { int i,n,l=100; float m,s=0; printf("输入 n\n\n"); scanf("%d",&n); m=l; for(i=1;i<=n;i++) { s+=2*m; m=m*0.5; } printf("第%d 次落地时经过%f 米\n\n",n,s-l); printf("第%d 次落地后反弹%f 米\n\n",n,m); }

6-10

#include <iostream> void main() { int m=1,n,i; printf("输入 n\n\n"); scanf("%d",&n); for(i=1;i<n;i++) { m=(m+1)*2; } printf("一共摘了%d 个桃子\n\n",m); }

6-11 #include <iostream> #include <math.h> void main() { float a,x1,x2; printf("输入 a\n\n"); scanf("%f",&a); x1=a/2; loop:x2=(x1+a/x1)/2; if(fabs(x1-x2)>1e-5) { x1=x2; goto loop; } else printf("\n\na 的平方根为%f\n\n",x2); }

6-12

#include <iostream> #include <math.h> void main() { float f(float); float xpoint(float,float); float root(float,float); float x,x1,x2,f1,f2; do { printf("输入 x1,x2\n\n"); scanf("%f%f",&x1,&x2); f1=f(x1); f2=f(x2); }while(f1*f2>0); x=root(x1,x2); printf("方程在 1.5 附近的根为:%f\n\n",x); } float f(float x) { float y; y=2*x*x*x-4*x*x+3*x-6; return(y); } float xpoint(float x1,float x2) { float y; y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); return(y); } float root(float x1,float x2) { float x,y,y1; y1=f(x1); do

{ x=xpoint(x1,x2); y=f(x); if(y*y1>0) { y1=y; x1=x; } else x2=x; }while(fabs(y)>1e-4); return(x); } 6-13 #include <iostream> #include <math.h> void main() { float f(float); float root(float,float); float x,x1,x2,f1,f2; do { printf("输入 x1,x2\n\n"); scanf("%f%f",&x1,&x2); f1=f(x1); f2=f(x2); }while(f1*f2>0); x=root(x1,x2); printf("方程的根为:%f\n\n",x); } float f(float x) { float y;

y=2*x*x*x-4*x*x+3*x-6; return(y); } float root(float x1,float x2) { float x,y; do { y=f((x1+x2)/2); if(y<-1e-4) { x1=(x1+x2)/2; } else if(y>1e-4) { x2=(x1+x2)/2; } else x=(x1+x2)/2; }while(fabs(y)>1e-4); return(x); } 6-14 #include <iostream> void main() { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) { printf(" "); } for(k=0;k<=2*i;k++) {

printf("*"); } printf("\n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) { printf(" "); } for(k=0;k<=4-2*i;k++) { printf("*"); } printf("\n"); } } 6-15 #include <iostream> void main() { char i,j,k; for(i='X';i<='Z';i++) for(j='X';j<='Z';j++) { if(i!=j) for(k='X';k<='Z';k++) { if(i!=k&&j!=k) { if(i!='X'&&k!='X'&&k!='Z') printf("\nA--%c\nB--%c\nC--%c\n",i,j,k); } }

} } 第七章

7-1 #include <iostream> #include <math.h> void main() { int i,j; int a[101]; printf("素数为:\n\n"); for(i=1;i<=100;i++) { a[i]=i; } for(i=3;i<=100;i++) { for(j=2;j<=sqrt(a[i]);j++) { if(a[i]%j==0) { a[i]=0; break; } } } for(i=2;i<=100;i++) { if(a[i]!=0) printf("%d ",a[i]); } }

7-2 #include <iostream> void main() { int a[10],i,j,temp; printf("输入 10 个整数\n\n"); for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } printf("排序后的输出为:\n\n"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n\n"); }

7-3

#include <iostream> void main() { int a[9],i,s=0; printf("输入一个 3*3 整型矩阵\n\n"); for(i=0;i<9;i++) { scanf("%d",&a[i]); } for(i=0;i<9;i+=4) { s+=a[i]; } printf("对角线元素之和为:%d\n\n",s); }

7-4 #include <iostream> void main() { int a[11]={1,2,3,4,5,6,7,8,9,10}; int i,j,n,temp1,temp2; printf("输入一个数 n\n\n"); scanf("%d",&n); if((a[0]-a[9])>0) { if(n<=a[9]) { a[10]=n; } else { for(i=0;i<10;i++)

{ if(a[i]<n) { temp1=a[i]; a[i]=n; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } } if((a[9]-a[0])>0) { if(n>=a[9]) { a[10]=n; } else { for(i=0;i<10;i++) { if(a[i]>n) { temp1=a[i]; a[i]=n; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; }

} } } for(i=0;i<11;i++) { printf("%d ",a[i]); } }

7-5 将一个数组中的值按逆序重新排列 #include <iostream> #define N 5 void main() { int a[N]; int i,temp; printf("输入 5 个个数\n\n"); for(i=0;i<N;i++) { scanf("%d",&a[i]); } for(i=0;i<=N/2;i++) { temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } for(i=0;i<N;i++) { printf("%d ",a[i]); } printf("\n\n"); }

7-6 输出杨辉三角形(要求输出 10 行) #include <iostream> #include <stdio.h> void main() { int a[10][10]={1}; int i,j; for(i=1;i<10;i++) { for(j=0;j<=i;j++) { a[i][0]=a[i-1][0]; a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for(j=0;j<=i;j++) { printf("%4d",a[i][j]); } printf("\n\n"); } }

7-7 输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行每一列和对角线之和均相等。 要求输出 1——n 的平方 #include <iostream> #define N 7

void main() { int a[N][N]={0}; int i,j,k; i=0; j=(N-1)/2; a[i][j]=1; for(k=2;k<=N*N;k++) { i=i-1; j=j+1; if((i<0)&&(j>N-1)) { i=i+2; j=j-1; } else { if(i<0) i=N-1; if(j>N-1) j=0; } if(a[i][j]==0) { a[i][j]=k; } else { i=i+2; j=j-1; a[i][j]=k; } } for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%4d",a[i][j]); }

printf("\n\n"); } }

7-8 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大·在该列上最小。也可能 没有鞍点。 #include <iostream> void main() { int a[4][4],i,j,max,min,k1,k2,flag; printf("输入一个 4*4 的数组\n\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&a[i][j]); } } printf("鞍点为:\n\n"); for(i=0;i<4;i++) { max=a[i][0]; for(j=0;j<4;j++) { if(max<=a[i][j]) { max=a[i][j]; k1=j; } } min=a[0][k1]; for(j=0;j<4;j++) {

if(min>=a[j][k1]) { min=a[j][k1]; k2=j; } } if((max!=min)) flag=0; else { flag=1; printf("%d\n",max); break; } } if(flag==0) printf("不存在\n\n"); }

7-9 有 15 个数由大到小顺序存放在一个数组中,输入一个数吗,要求用折半查找法找出该 数十数组中第几个元素的值。如果该数不在数组中,则输出“无此数“。 #include <iostream> void main() { float a[15]={100,98,65,55,34,23,23,12,11,9,7,6,4,3,2},n; int i,low,high,mid; printf("原数组为:\n\n"); for(i=0;i<15;i++) { printf("%6.2f",a[i]); } printf("\n\n 输入一个数 n\n\n"); scanf("%f",&n); low=0; high=14;

i=0; while(low<=high) { mid=(low+high)/2; if(a[mid]==n) { printf("该数是数组中第%d 个元素\n\n",mid+1); i++; break; } else if(a[mid]<n) high=mid-1; else low=mid+1; } if(i==0) printf("无此数!!\n\n"); }

7-10 统计一篇文章中其中英文大写字母 小写字母 数字 空格以及其他字符的个数 #include <iostream> void main() { char a[3][80]; int i,j,upon=0,low=0,num=0,spa=0,oth=0; for(i=0;i<3;i++) { printf("输入第%d 行文字\n\n",i); gets(a[i]); for(j=0;j<80&&a[i][j]!='\0';j++) { if(a[i][j]>='A'&&a[i][j]<='Z') upon+=1; else if(a[i][j]>='a'&&a[i][j]<='z') low+=1; else if(a[i][j]>=48&&a[i][j]<=57) num+=1; else if(a[i][j]==' ') spa+=1; else oth+=1;

} } printf("英文大写字母:%d 个\n\n",upon); printf("英文小写字母:%d 个\n\n",low); printf("数字: printf("空格: printf("其他字符: } %d 个\n\n",num); %d 个\n\n",spa); %d 个\n\n",oth);

7-11 #include <iostream> void main() { int i,j; for(i=0;i<5;i++) { for(j=0;j<=i;j++) { printf(" "); } for(j=i;j<i+5;j++) { printf("* "); } printf("\n"); } }

7-12 有一行电文,已按下面规律译成密码:

A—Z a—z B—Y b—y 即第一个字母变成第 26 个字母,第 i 个字母变成第(26-i +1)个字母,非字母字符不变要求将密码译回原文,并输出密码和原文。 #include <iostream> void main() { char a[80],b[80]; int i,j; printf("输入密码\n\n"); gets(a); for(i=0;i<80&&a[i]!='\0';i++) { if((a[i]>='A')&&(a[i]<='Z')) { b[i]=155-a[i]; } else if((a[i]>='a')&&(a[i]<='z')) { b[i]=219-a[i]; } else b[i]=a[i]; } b[i]='\0'; printf("密文为:\n\n"); puts(a); printf("原文为:\n\n"); puts(b); }

7-13 连接两个字符串,不用 strcat 函数 #include <iostream> void main() {

char a[80],b[80]; int i,j,k; printf("输入第 1 个字符串\n\n"); gets(a); printf("输入第 2 个字符串\n\n"); gets(b); for(i=0;i<80;i++) { if(a[i]=='\0') { k=i; for(j=0;j<80&&b[j]!='\0';j++) { a[k]=b[j]; k++; } a[k]='\0'; break; } } printf("连接后字符串为:\n"); puts(a); }

7-14 #include <iostream> void main() { char a[80],b[80]; int i,j,k; printf("输入第 1 个字符串\n\n"); gets(a); printf("输入第 2 个字符串\n\n");

gets(b); for(i=0;(i<80)&&(a[i]!='\0')&&(b[i]!='\0');i++) { k=a[i]-b[i]; if(k>0) { printf("\n 字符串 a 大于字符串 b:%4d\n",k); break; } else if(k<0) { printf("\n\n 字符串 a 小于字符串 b:%4d\n\n",k); break; } else k=0; } if(k==0) printf("\n\n 字符串 a 等于字符串 b:%4d\n\n",k); }

7-15 编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1 中复制时要将’\0’ 也复制过去 #include <iostream> void main() { char s1[80],s2[80]; int i,j; printf("输入数组 s1\n\n"); gets(s1); printf("输入数组 s2\n\n"); gets(s2); for(i=0;i<80&&s2[i]!='\0';i++) { s1[i]=s2[i];

} s1[i]='\0'; printf("\n\n 复制后的数组为:\n\n"); puts(s1); } 第八章 8-1 求最大公约数和最小公倍数 #include <iostream> void main() { int max_div(int,int); int min_mul(int,int); int m,n; printf("输入两个整数\n\n"); scanf("%d%d",&m,&n); if(max_div(m,n)==0) printf("\n\n 无最大公约数为\n\n"); else printf("\n\n 最大公倍数为:%d\n\n",max_div(m,n)); printf("\n\n 最大公倍数为:%d\n\n",min_mul(m,n)); } int max_div(int k1,int k2) { int min(int,int); int i,k,flag; k=min(k1,k2); for(i=k;i>1;i--) { if((k1%i==0)&&(k2%i==0)) { return(i); flag=1; break; } else flag=0; } if(flag==0) return(0); } int min_mul(int k1,int k2) { int max(int,int); int i,k; k=max(k1,k2); for(i=k;;i++) {

if((i%k1==0)&&(i%k2==0)) { return(i); break; } } } int min(int k1,int k2) { int min; min=k1; if(k1>k2) min=k2; return(min); } int max(int k1,int k2) { int max; max=k1; if(k1<k2) max=k2; return(max); } 8-2 #include <iostream> #include <math.h> void main() { void root1(float,float,float); void root2(float,float,float); void root3(float,float,float); float a,b,c,k; printf("输入 a,b,c 的值\n\n"); scanf("%f%f%f",&a,&b,&c); k=b*b-4*a*c; if(k>0) root1(a,b,c); else if(k==0) root2(a,b,c); else root3(a,b,c); } void root1(float a,float b,float c) { float p,q; p=-b/(2*a); q=sqrt(b*b-4*a*c)/(2*a); printf("\n\n 方程的两个根为:x1=%6.2f,x2=%6.2f\n\n",p+q,p-q);

} void root2(float a,float b,float c) { float p; p=-b/(2*a); printf("\n\n 方程的两个根为:x1=x2=%6.2f\n\n",p); } void root3(float a,float b,float c) { float p,q; p=-b/(2*a); q=sqrt(-b*b+4*a*c)/(2*a); printf("\n\n 方程的两个根为:x1=%6.2f+%6.2fi,x2=%6.2f-%6.2fi\n\n",p,q,p,q); } 8-3 #include <iostream> void main() { int prime(int); int x; printf("输入一个正整数\n\n"); scanf("%d",&x); if(prime(x)==0) printf("\n\n 此数为素数\n\n"); else printf("\n\n 此数不是素数\n\n"); } int prime(int x) { int i,flag; for(i=2;i<x;i++) { if(x%i==0) { flag=1; break; } else flag=0; } return(flag); } 8-4 #include <iostream> void main()

{ void exchange(int a[3][3]); int a[3][3],i,j; printf("输入一个 3*3 的矩阵\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } exchange(a); printf("\n\n 转置后的矩阵为:\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%d ",a[i][j]); } printf("\n"); } } 8-5 #include <iostream> void main() { void exchange(char str[]); char str[80]; printf("输入一个字符串\n\n"); gets(str); exchange(str); printf("\n\n 反序字符串为:\n\n"); puts(str); } void exchange(char str[]) { int i,j,k; char temp; for(i=0;;i++) { if(str[i]=='\0') break; } k=i/2;

for(j=0;j<=k;j++) { temp=str[j]; str[j]=str[i-1-j]; str[i-1-j]=temp; } str[i]='\0'; } 8-6 #include <iostream> void main() { void strcat(char str1[],char str2[]); char str1[80],str2[80]; printf("输入 str1\n\n"); gets(str1); printf("\n\n 输入 str2\n\n"); gets(str2); strcat(str1,str2); printf("\n\n 连接后的字符串为:\n\n"); puts(str1); } void strcat(char str1[],char str2[]) { int i,j; for(i=0;;i++) { if(str1[i]=='\0') { for(j=0;str2[j]!='\0';j++) { str1[i]=str2[j]; i+=1; } break; } } str1[i]='\0'; } 8-7 #include <iostream> void main()

{ void strcpy(char str1[],char str2[]); char str1[80],str2[80]; printf("输入 str2\n\n"); gets(str2); strcpy(str1,str2); printf("\n\n 复制后的字符串为:\n\n"); puts(str1); } void strcpy(char str1[],char str2[]) { int i,j=0; for(i=0;str2[i]!='\0';i++) { if((str2[i]=='a')||(str2[i]=='e')||(str2[i]=='i')||(str2[i]=='o')||(str2[i]=='u')) { str1[j]=str2[i]; j++; } } str1[j]='\0'; } 8-8 #include <iostream> void main() { void stradd(char str[]); char str[80]; printf("输入一串数字\n\n"); gets(str); stradd(str); printf("\n\n 加空格后的字符串\n\n"); puts(str); } void stradd(char str[]) { char a[80]; int i=0,j; for(j=0;str[j]!='\0';j++) { a[i]=str[j]; a[i+1]=' '; i+=2;

} a[i]='\0'; for(i=0;a[i]!='\0';i++) { str[i]=a[i]; } str[i]='\0'; } 8-9 #include <iostream> void main() { void num(char str[],int a[]); char str[80]; int a[4]={0}; printf("输入一个字符串\n\n"); gets(str); num(str,a); printf("字母个数为: %d\n",a[0]); printf("数字个数为: %d\n",a[1]); printf("空格个数为: %d\n",a[2]); printf("其它字符个数为:%d\n",a[3]); } void num(char str[],int a[]) { int i,word=0,num=0,span=0,oth=0; for(i=0;str[i]!='\0';i++) { if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')) word+=1; else if(str[i]>=48&&str[i]<=57) num+=1; else if(str[i]==' ') span+=1; else oth+=1; } a[0]=word; a[1]=num; a[2]=span; a[3]=oth; } 8-10 #include <iostream> void main() {

int word(char c); int longest(char str[]); int i; char str[80]; printf("输入一行字符串\n\n"); gets(str); printf("\n\n 最长的单词为:\n\n"); for(i=longest(str);word(str[i]);i++) printf("%c",str[i]); printf("\n"); } int word(char c) { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1; else return 0; } int longest(char str[]) { int i,flag=1,len=0,point,max_len=0,max_point; for(i=0;i<=strlen(str);i++) { if(word(str[i])) { if(flag==1) { point=i; flag=0; } else len++; } else { flag=1; if(len>max_len) { max_len=len; max_point=point; } len=0; } } return (max_point); }

8-11 #include <iostream> void main() { char str[80]; void sort(char str[]); printf("输入一个字符串\n\n"); gets(str); sort(str); printf("\n\n 字符由小到大排序为:\n\n"); puts(str); } void sort(char str[]) { int i,j; char temp; for(i=0;i<strlen(str);i++) { for(j=0;j<strlen(str)-i-1;j++) { if(str[j]>str[j+1]) { temp=str[j]; str[j]=str[j+1]; str[j+1]=temp; } } } }

8-12 #include <iostream> #include <math.h> void main() { int a,b,c,d; float root(int a,int b,int c,int d); printf("输入 a,b,c,d\n\n"); scanf("%d%d%d%d",&a,&b,&c,&d); printf("\n\n 在 1 附近的根为:%f\n\n",root(a,b,c,d)); } float root(int a,int b,int c,int d)

{ float x=1,x1,f,f1; do { x1=x; f=((a*x1+b)*x1+c)*x1+d; f1=(a*x1+b)*x1+c; x=x1-f/f1; }while(fabs(x-x1)>=1e-5); return(x); } 8-13 #include <iostream> void main() { float p(int,float); int n; float x; printf("输入 n 和 x\n\n"); scanf("%d%f",&n,&x); printf("\n\n%d 阶勒德让多项式的值为:%f\n\n",n,p(n,x)); } float p(int n,float x) { if(n==0) return 1; else if(n==1) return x; else return ((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n; }

8-14 #include <iostream> #define n1 2 #define n2 5 float a_stu[n1],a_cou[n2]; void main() { void input(float a[][n2]); void stu_aver(float a[][n2]); void cou_aver(float a[][n2]); int hightest(int *s,int *c,float a[][n2]); float d(float a[][n2]); int i,j,s=0,c=0;

float score[n1][n2],h; input(score); stu_aver(score); cou_aver(score); printf("\n\n 序号 课程 1 2 3 4 5 平均成绩\n\n"); for(i=0;i<n1;i++) { printf(" NO.%d ",i+1); for(j=0;j<n2;j++) { printf("%8.2f",score[i][j]); } printf("%8.2f\n\n",a_stu[i]); } printf("课程平均"); for(i=0;i<n2;i++) { printf("%8.2f",a_cou[i]); } h=hightest(&s,&c,score); printf("\n\n 最高成绩为:%f 是第%d 号学生,第%d 门课的成绩\n\n",h,s,c); printf("平均方差为:%f\n\n",d(score)); } void input(float a[][n2]) { int i,j; for(i=0;i<n1;i++) { printf("\n\n 输入%d 个学生的 5 个成绩\n\n",i+1); for(j=0;j<n2;j++) { scanf("%f",&a[i][j]); } } } void stu_aver(float a[][n2]) { int i,j; float s; for(i=0;i<n1;i++) { s=0; for(j=0;j<n2;j++) {

s+=a[i][j]; } a_stu[i]=s/n2; } } void cou_aver(float a[][n2]) { int i,j; float s; for(i=0;i<n2;i++) { s=0; for(j=0;j<n1;j++) { s+=a[j][i]; } a_cou[i]=s/n1; } } int hightest(int *s,int *c,float a[][n2]) { float hightest=0; int i,j; for(i=0;i<n1;i++) { for(j=0;j<n2;j++) { if(a[i][j]>hightest) { hightest=a[i][j]; *s=i+1; *c=j+1; } } } return(hightest); } float d(float a[][n2]) { int i; float x=0,y=0; for(i=0;i<n1;i++) { x+=a_stu[i]*a_stu[i];

y+=a_stu[i]; } return(x/n1-(y/n1)*(y/n1)); } 8-15 #include <iostream> #define N 3 void main() { void input(int num[],char name[N][8]); void sort(int num[],char name[N][8]); void search(int num[],char name[N][8],int n); int flag,n,num[N]; char c,name[N][8]; input(num,name); sort(num,name); for(flag=1;flag;) { printf("输入要查找的职工号\n\n"); scanf("%d",&n); search(num,name,n); printf("是否继续查找?Y/N ?\n\n"); c=getchar(); if(c=='N'||c=='n') flag=0; } } void input(int num[],char name[N][8]) { int i; for(i=0;i<N;i++) { printf("输入职工号\n\n"); scanf("%d",&num[i]); printf("输入职工姓名\n\n"); getchar(); gets(name[i]); } } void sort(int num[],char name[N][8]) { int i,j,min,temp1; char temp2[8];

for(i=0;i<N;i++) { min=i; for(j=i;j<N;j++) { if(num[min]>num[j]) min=j; } temp1=num[i]; strcpy(temp2,name[i]); num[i]=num[min]; strcpy(name[i],name[min]); num[min]=temp1; strcpy(name[min],temp2); } printf("排序结果如下:\n\n"); for(i=0;i<N;i++) { printf("职工号:%6d 姓名:%10s\n\n",num[i],name[i]); } } void search(int num[],char name[N][8],int n) { int low,high,mid,flag; flag=0; low=0; high=N-1; if((n<num[low])||(n>num[high])) flag=-1; while((low<=high)&&(flag==0)) { mid=(low+high)/2; if(n==num[mid]) { flag=mid+1; printf("第%4d 号职工的名字为:%8s\n\n",n,name[mid]); break; } else if(n<num[mid]) high=mid-1; else low=mid+1; } if(flag==0||flag==-1) printf("不存在该职工\n\n"); }

8-16 写一个函数将输入的十六进制换成十进制并输出

#include <iostream> #define N1 1000 void main() { int exchange(char a[]); int i=0,flag=0,flag1=1; char c,a[N1]; printf("输入一个十六进制数\n\n"); while(((c=getchar())!='\0')&&(i<N1)&&flag1) { if(((c>='0')&&(c<='9'))||((c>='a')&&(c<='f'))||((c>='A')&&(c<='F'))) { a[i++]=c; flag=1; } else if(flag==1) { a[i]='\0'; printf("对应的十进制数为:%d\n\n",exchange(a)); printf("是否继续?Y/N ?\n\n"); c=getchar(); if(c=='N'||c=='n') flag1=0; else { flag=0; i=0; printf("输入一个十六进制数\n\n"); } } } } int exchange(char a[]) { int i,n=0; for(i=0;a[i]!='\0';i++) { if((a[i]>='0')&&(a[i]<='9')) n=n*16+a[i]-'0'; if((a[i]>='a')&&(a[i]<='f')) n=n*16+a[i]-'a'+10; if((a[i]>='A')&&(a[i]<='F')) n=n*16+a[i]-'A'+10; } return(n); } 8-17 用递归法将一个整数 n 转换字符串,n 的位数不确定,

#include <iostream> void main() { void exchange(int n); int n; printf("输入一个整数\n\n"); scanf("%d",&n); printf("输出是:\n\n"); if(n<0) { putchar('-'); n=-n; } exchange(n); printf("\n\n"); } void exchange(int n) { int i; if((i=n/10)!=0) exchange(i); putchar(n%10+'0'); } 8-18 给出年月日计算该日是该年的第几天 #include <iostream> void main() { int day_num(int year,int mon,int day); int year,mon,day; printf("输入年、月、日\n\n"); scanf("%d%d%d",&year,&mon,&day); printf("\n\n 输入的日期是当年的第%d 天\n\n",day_num(year,mon,day)); } int date[]={31,28,31,30,31,30,31,31,30,31,30,31}; int day_num(int year,int mon,int day) { int i,days=0; for(i=0;i<mon-1;i++) { days+=date[i]; } days+=day; if((year%4==0)&&((year%100)!=0)||(year%400==0)) days+=1; return days;

}

第九章 9-1 #include <iostream> #define exchange(x,y) t=x;x=y;y=t void main() { int x,y,t; printf("输入 x,y\n\n"); scanf("%d%d",&x,&y); exchange(x,y); printf("\n\n 交换后 x=%d,y=%d\n\n",x,y); }

9-2 #include <iostream> #define acr(x,y) ((x)%(y)) void main() { int x,y; printf("输入 x,y\n\n"); scanf("%d%d",&x,&y); printf("\n\n 余数为%d\n\n",acr(x,y)); }

9-3

#include <iostream> #include <math.h> #define s(a,b,c) ((a+b+c)/2) #define area(a,b,c,s) sqrt(s*(s-a)*(s-b)*(s-c)) void main() { float a,b,c,s,area; char m; int flag=1; while(flag==1) { printf("输入 a,b,c\n\n"); scanf("%f%f%f",&a,&b,&c); if(a>0&&b>0&&c>0&&(a+b>c||a+c>b||b+c>a)&&(fabs(a-b)<c&&fabs(a-c)<b&&fabs(b-c) <a)) { s=s(a,b,c); area=area(a,b,c,s); flag=0; printf("\n\n 面积 area= %8f\n\n",area); } else { printf("\n\n 输入有误!!!是否重新输入?Y/N?\n\n"); getchar(); m=getchar(); if(m=='Y'||m=='y') flag=1; else flag=0; } } }

9-4 #include <iostream>

#define LEAP_YEAR(y) ((y%4==0)&&(y%100)!=0||(y%400)==0) void main() { int y; printf("输入年份\n\n"); scanf("%d",&y); if(LEAP_YEAR(y)) printf("\n\n%d 年是闰年\n\n",y); else printf("\n\n%d 年不是闰年\n\n",y); }

9-6 #include <iostream> #define PR printf #define NL "\n\n" #define D "%f " #define D1 D NL #define D2 D D NL #define D3 D D D NL void main() { float x=1; PR(D1,x); PR(D2,x,x); PR(D3,x,x,x); }

9-7 #include <iostream> #include "format.h"

void main() { int x=1; float y=2; char z[]="I love you"; PR(D1,x); PR(F1,y); PR(S1,z); }

9-8 #include <iostream> void main() { float x,y,z,t; printf("输入三个数 x,y,z\n\n"); scanf("%f%f%f",&x,&y,&z); t=(x>y)?x:y; t=(t>z)?t:z; printf("\n\n 三个数中最大的为:%f\n\n",t); }

#include <iostream> #define MAX(a,b) ((a)>(b)?(a):(b)) void main() { float x,y,z; printf("输入三个数 x,y,z:\n\n"); scanf("%f%f%f",&x,&y,&z); printf("\n\n 其中最大的数为:%f\n\n",MAX(MAX(x,y),z)); }

9-10 #include <iostream> #define N 80 #define CHANGE 1 void main() { char str[N]; int i; printf("输入一行字符串\n\n"); gets(str); #if CHANGE for(i=0;i<N&&((str[i])!='\0');i++) { if(((str[i]>='a')&&(str[i]<='z'))||((str[i]>='A')&&(str[i]<='Z'))) { if((str[i]=='z')||(str[i]=='Z')) str[i]=str[i]-25; else str[i]=str[i]+1; } } str[i]='\0'; puts(str); #else puts(str); #endif } 第十章 10.1 #include <iostream> void main() { void swap(int *p,int *q); int x,y,z; int *p1,*p2,*p3; printf("输入三个整数\n\n"); scanf("%d%d%d",&x,&y,&z); p1=&x;

p2=&y; p3=&z; if(x>y) swap(p1,p2); if(x>z) swap(p1,p3); if(y>z) swap(p2,p3); printf("\n\n 三个数由小到达输出为:%d %d %d\n\n",x,y,z); } void swap(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; }

10.2 #include <iostream> #include <string> #define N 80 void main() { void swap(char *p,char *q); char str1[N],str2[N],str3[N]; printf("请输入三个字符串\n\n"); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf("\n\n 三个字符串由小到大排列,分别为:\n\n%s\n%s\n%s\n",str1,str2,str3); } void swap(char *p,char *q) { char str[N]; strcpy(str,p); strcpy(p,q); strcpy(q,str); }

10.3 #include <iostream>

#define N 10 void main() { void input(int num[N]); void swap(int *p,int *q); void exchange(int num[N]); void output(int num[N]); int num[N]; input(num); exchange(num); output(num); } void input(int num[N]) { int i; printf("输入十个整数\n\n"); for(i=0;i<N;i++) { scanf("%d",&num[i]); } }

10.4 #include <iostream> #define N 10 #define M 3 void main() { void move(int num[N],int n,int m); int num[N]; int i; printf("输入%d 个整数\n\n",N); for(i=0;i<N;i++) { scanf("%d",&num[i]); } move(num,N,M); printf("\n\n 调整后的%d 个整数为:\n\n",N); for(i=0;i<N;i++) { printf("%d ",num[i]); } printf("\n\n");

} void swap(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; } void move(int num[N],int n,int m) { int *p,*num_end; int temp; num_end=num+n; temp=*(num_end-1); for(p=num_end-1;p>=num;p--) *p=*(p-1); *num=temp; m--; if(m>0) move(num,n,m); } 10.5 #include <iostream> #define N 8 void main() { void leave(int num[N]); int num[N]; int i,*p; p=num; for(i=0;i<N;i++) *(p+i)=i+1; leave(num); while(*p==0) p++; printf("最后留下的是第%d 个人\n\n",*p); } void leave(int num[N]) { int *p; int i=0,k=0,m=0; p=num; while(m<N-1) { if(*(p+i)!=0) k++;

if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==N) i=0; } }

10.6 #include <iostream> #define N 10 void main() { int count(char str[N]); int i; char str[N]; printf("输入一个字符串\n\n"); gets(str); printf("\n\n 字符串长度为:%d\n\n",count(str)); } int count(char str[N]) { char *p; int i=0; p=str; while(*p!='\0') { i++; p++; } return(i); }

10.7 #include <iostream> #define N 80 #define M 4 void main() {

void copy(char str1[N],char str2[N]); char str1[N],str2[N]; printf("输入字符串 str1\n\n"); gets(str1); printf("\n\n 输入字符串 str2\n\n"); gets(str2); copy(str1,str2); printf("\n\n 整合之后的字符串为:\n\n"); puts(str1); } void copy(char str1[N],char str2[N]) { char *p1,*p2; int i; p1=str1; p2=str2; for(i=0;i<strlen(str2);i++) *(p1+M+i)=*(p2+i); *(p1+M+i)='\0'; }

10.8 #include <iostream> #define N 80 void main() { void count(char str[N],int *cap,int *low,int *space,int *num,int *oth); char str[N]; int a=0,b=0,c=0,d=0,e=0; int *cap,*low,*space,*num,*oth; cap=&a; low=&b; space=&c; num=&d; oth=&e; printf("输入一个字符串\n\n"); gets(str); count(str,cap,low,space,num,oth); printf("\n\n 大写字母个数为:%d\n\n 小写字母个数为:%d\n\n 空格个数位:%d\n\n 数字个 数为:%d\n\n 其他字符个数为:%d\n\n",*cap,*low,*space,*num,*oth); } void count(char str[N],int *cap,int *low,int *space,int *num,int *oth) {

int i; for(i=0;str[i]!='\0';i++) { if(str[i]>='A'&&str[i]<='Z') (*cap)++; else if(str[i]>='a'&&str[i]<='z') (*low)++; else if(str[i]==' ') (*space)++; else if(str[i]>='0'&&str[i]<='9') (*num)++; else (*oth)++; } }

10.9 #include <iostream> #define N 3 void main() { void move(int *p); int a[N][N]; int *p,i,j; printf("输入一个%d*%d 的矩阵\n\n",N,N); for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",&a[i][j]); p=&a[0][0]; move(p); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d ",a[i][j]); } printf("\n"); } } void move(int *p) { int i,j,temp; for(i=0;i<N;i++) for(j=i;j<N;j++) { temp=*(p+i*N+j); *(p+i*N+j)=*(p+j*N+i); *(p+j*N+i)=temp;

} }

10.10 #include <iostream> #define N 3 void main() { void swap(int *p,int *q); void sort(int *p); int arr[N][N]; int i,j,*p; printf("输入一个%d*%d 的矩阵\n\n",N,N); for(i=0;i<N;i++) { for(j=0;j<N;j++) { scanf("%d",&arr[i][j]); } } p=&arr[0][0]; sort(p); printf("调整后的矩阵为:\n\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d ",arr[i][j]); } printf("\n"); } } void swap(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; } void sort(int *p) { int *max,*min; int i,j;

max=p; min=p; for(i=0;i<N;i++) { for(j=0;j<N;j++) { if(*(p+i*N+j)>*max) max=p+i*N+j; if(*(p+i*N+j)<*min) min=p+i*N+j; } } swap(max,(p+(N-1)*(N+1)/2)); swap(min,p); min=p+1; for(i=0;i<N;i++) { for(j=0;j<N;j++) { if((*(p+i*N+j)<*min)&&((p+i*N+j)!=p)) min=p+i*N+j; } } swap(min,(p+N-1)); min=p+1; for(i=0;i<N;i++) { for(j=0;j<N;j++) { if((*(p+i*N+j)<*min)&&((p+i*N+j)!=p)&&((p+i*N+j)!=(p+N-1))) min=p+i*N+j; } } swap(min,(p+(N-1)*N)); min=p+1; for(i=0;i<N;i++) { for(j=0;j<N;j++) { if((*(p+i*N+j)<*min)&&((p+i*N+j)!=p)&&((p+i*N+j)!=(p+N-1))&&((p+i*N+j)!=(p+(N-1)*N ))) min=p+i*N+j; } } swap(min,(p+N*N-1)); }

10.11

#include <iostream> #define N 5 void main() { void swap(char *p,char *q); void sort(char *p); char str[N][N],*p; int i; printf("输入%d 个字符串\n\n",N); for(i=0;i<N;i++) scanf("%s",str[i]); p=&str[0][0]; sort(p); printf("\n\n 排序后的%d 个字符串为\n\n",N); for(i=0;i<N;i++) printf("%s\n",str[i]); } void swap(char *p,char *q) { char s[N]; strcpy(s,p); strcpy(p,q); strcpy(q,s); } void sort(char *p) { int i,j; for(i=0;i<N;i++) { for(j=i+1;j<N;j++) { if(strcmp((p+i*N),(p+j*N))>0) swap((p+i*N),(p+j*N)); } } }

10.12 #include <iostream> #define N 5 #define M 10 void main() { void sort(char *p[N]);

char str[N][M],*p[N]; int i; printf("输入%d 个字符串\n\n",N); for(i=0;i<N;i++) scanf("%s",str[i]); for(i=0;i<N;i++) p[i]=str[i]; sort(p); printf("\n\n 排序后的%d 个字符串为\n\n",N); for(i=0;i<N;i++) printf("%s\n",p[i]); } void sort(char *p[N]) { int i,j; char *q; for(i=0;i<N;i++) { for(j=i+1;j<N;j++) { if(strcmp(p[i],p[j])>0) { q=p[i]; p[i]=p[j]; p[j]=q; } } } }

10.13 #include <iostream> #include <math.h> void main() { float integral(float a,float b,int n,double (*fun)(double)); int n=100; float a,b,c; double (*fun)(double); printf("输入积分范围:(a,b)\n\n"); scanf("%f%f",&a,&b); fun=sin;

c=integral(a,b,n,fun); printf("\n\nsin 积分结果为:%f\n\n",c); fun=cos; c=integral(a,b,n,fun); printf("\n\ncos 积分结果为:%f\n\n",c); fun=exp; c=integral(a,b,n,fun); printf("\n\nexp 积分结果为:%f\n\n",c); } float integral(float a,float b,int n,double (*fun)(double)) { int i; float x,h,area; h=(b-a)/n; x=a; area=0; for(i=0;i<n;i++) { x=x+h; area=area+(*fun)(x)*h; } return(area); }

10.14 #include <iostream> #define N 20 void main() { void swap(int *p,int *q); void back(int *p,int n); int a[N],i,n; printf("输入个数 n\n\n"); scanf("%d",&n); printf("\n\n 输入%d 个整数\n\n",n); for(i=0;i<n;i++) scanf("%d",&a[i]); back(a,n); printf("\n\n 逆序排列为:\n\n"); for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n\n"); }

void swap(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; } void back(int *p,int n) { int i; for(i=0;i<n/2;i++) { swap(p+i,p+n-1-i); } } 10.15 #include <iostream> #define M 4 #define N 5 void main() { void aver_count1(char *cou,float *sco); void aver_stu(float *sco,float *ave); void fail2(char *cou,int *num,float *sco,float *ave); void good(char *cou,int *num,float *sco,float *ave); char course[N][10],*cou; float score[M][N],aver[M],*sco,*ave; int number[M],*num,i,j; cou=course[0]; printf("输入%d 门课程名\n\n",N); for(i=0;i<N;i++) scanf("%s",cou+i*10); printf("\n\n 按顺序输入%d 个学生学号和%d 门课程的成绩\n\n",M,N); printf("学号 "); for(i=0;i<N;i++) printf("%s ",cou+i*10); num=number; sco=&score[0][0]; for(i=0;i<M;i++) { scanf("%d",num+i); for(j=0;j<N;j++) {

scanf("%f",sco+i*N+j); } } aver_count1(cou,sco); ave=aver; aver_stu(sco,ave); ave=aver; fail2(cou,num,sco,ave); ave=aver; good(cou,num,sco,ave); } void aver_count1(char *cou,float *sco) { int i; float sum,aver; sum=0; for(i=0;i<M;i++) sum+=(*(sco+i*N)); aver=sum/M; printf("第一门课%s 的平均成绩为:%f\n\n",cou,aver); } void aver_stu(float *sco,float *ave) { int i,j; float sum; for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { sum+=(*(sco+i*N+j)); } *(ave+i)=sum/N; } } void fail2(char *cou,int *num,float *sco,float *ave) { int i,j,k,flag; printf("============两门以上课程不及格的学生============\n\n"); printf("学号"); for(i=0;i<N;i++) printf(" %-8s",cou+i*10); printf(" 平均成绩\n\n"); for(i=0;i<M;i++)

{ flag=0; for(j=0;j<N;j++) { if(*(sco+i*N+j)<60) flag+=1; } if(flag>2) { printf("%-8d",*(num+i)); for(k=0;k<N;k++) { printf("%-8.2f",*(sco+i*N+k)); } printf("%-8.2f\n\n",*(ave+i)); } } } void good(char *cou,int *num,float *sco,float *ave) { int i,j,k,flag; printf("============ 平 均 成 绩 在 90 分 以 上 或 者 每 门 课 在 85 分 以 上 的 学 生 ============\n\n"); printf("学号"); for(i=0;i<N;i++) printf(" %-8s",cou+i*10); printf(" 平均成绩\n\n"); for(i=0;i<M;i++) { flag=0; for(j=0;j<N;j++) { if(*(sco+i*N+j)>=85) flag+=1; } if(flag==5||(*(ave+i)>=90)) { printf("%-8d",*(num+i)); for(k=0;k<N;k++) { printf("%-8.2f",*(sco+i*N+k)); } printf("%-8.2f\n\n",*(ave+i)); } } }

10.16 #include <iostream> #define N 50 void main() { char str[N],*p; int i,j,temp; int number[N],*num; printf("输入一个字符串\n\n"); gets(str); p=str; temp=0; j=0; num=number; for(i=0;(*(p+i))!='\0'&&i<N;i++) { if((*(p+i))>='0'&&(*(p+i))<='9') { if((*(p+i+1))>='0'&&(*(p+i+1))<='9') temp=temp*10+*(p+i)-48; else { temp=temp*10+*(p+i)-48; *(num+j)=temp; temp=0; j++; } } } printf("\n\n 字符串中共有%d 个整数,它们分别为:\n\n",j); for(i=0;i<j;i++) { printf("%d ",*(num+i)); } printf("\n\n"); } 10.17 #include <iostream> #define N 10 void main() { int strcmp(char *p1,char *p2);

char str1[N],str2[N]; char *p1,*p2; printf("输入字符串 str1\n\n"); gets(str1); printf("\n\n 输入字符串 str2\n\n"); gets(str2); p1=str1; p2=str2; printf("\n\n%d\n\n",strcmp(p1,p2)); } int strcmp(char *p1,char *p2) { int i,flag=0; for(i=0;*(p1+i)!='\0'&&*(p2+i)!='\0';i++) { if(*(p1+i)==*(p2+i)) flag=0; else { flag=*(p1+i)-*(p2+i); break; } } return flag; } 10.18 #include <iostream> void main() { char *mon[]={"一月份","二月份","三月份","四月份","五月份","六月份","七月份","八月份"," 九月份","十月份","十一月份","十二月份"}; int n; printf("输入一个月份号\n\n"); scanf("%d",&n); if(n>=1&&n<=12) printf("\n\n%s\n\n",mon[n-1]); else printf("\n\n%d 月份不存在\n\n",n); }

10.20 #include <iostream> #define N 5 #define MAX 100 void main()

{ void sort(char **p); char *pstr[N],**p,str[N][MAX]; int i; for(i=0;i<N;i++) pstr[i]=str[i]; printf("输入%d 个字符串\n\n",N); for(i=0;i<N;i++) gets(str[i]); p=pstr; sort(p); printf("\n\n 排序后的%d 个字符串为:\n\n",N); for(i=0;i<N;i++) puts(*(p+i)); } void sort(char **p) { int i,j; char *temp; for(i=0;i<N;i++) { for(j=i;j<N;j++) { if(strcmp(*(p+i),*(p+j))>0) { temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } }

10.21 #include <iostream> #define N 100 void main() { void sort(int **p,int n); int i,n; int *pnum[N],num[N],**p; printf("输入整数个数\n\n"); scanf("%d",&n);

for(i=0;i<n;i++) pnum[i]=&num[i]; printf("\n\n 输入%d 个整数\n\n",n); for(i=0;i<n;i++) scanf("%d",&num[i]); p=pnum; sort(p,n); printf("\n\n 排序后的%d 个整数为:\n\n",n); for(i=0;i<n;i++) printf("%d ",**(p+i)); printf("\n\n"); } void sort(int **p,int n) { int *temp; int i,j; for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(**(p+i)>**(p+j)) { temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } } 第十一章

11.1 #include <iostream> struct date { int year; int month;

int day; }date;

void main() { static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,day_sum; printf("输入年,月,日\n\n"); scanf("%d%d%d",&date.year,&date.month,&date.day); day_sum=0; for(i=0;i<date.month-1;i++) day_sum+=day_table[i]; day_sum+=date.day; if((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)&&(date.month>2)) day_sum+=1; printf("\n\n 该日在本年中是第%d 天\n\n",day_sum); }

11.2 #include <iostream> struct date { int year; int month; int day; }date;

void main() { int days(int y,int m,int d); printf("输入年,月,日\n\n"); scanf("%d%d%d",&date.year,&date.month,&date.day);

printf("\n\n 该日在本年中是第%d 天\n\n",days(date.year,date.month,date.day)); } int days(int y,int m,int d) { static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,day_sum; day_sum=0; for(i=0;i<m-1;i++) day_sum+=day_table[i]; day_sum+=date.day; if((y%4==0)&&(y%100!=0)||(y%400==0)&&(m>2)) day_sum+=1; return day_sum; }

11.3 #include <iostream> #define N 2 struct stu { int num; char name[10]; float score[3]; }stu[N]; void main() { void print(struct stu *p); int i,j; struct stu *p; p=stu; for(i=0;i<N;i++) { printf("\n\n 输入第%d 个学生的成绩\n\n",i+1);

printf("输入学号:"); scanf("%d",&((p+i)->num)); printf("\n 输入姓名:"); scanf("%s",(p+i)->name); for(j=0;j<3;j++) { printf("\n 输入成绩%d:",j+1); scanf("%f",&((p+i)->score[j])); } } print(stu); } void print(struct stu *p) { int i,j; printf("学号 { printf("%-8d%-8s",(p+i)->num,(p+i)->name); for(j=0;j<3;j++) { printf("%-8f",(p+i)->score[j]); } printf("\n\n"); } } 姓名 成绩 1 成绩 2 成绩 3\n\n"); for(i=0;i<N;i++)

11.4 #include <iostream> #define N 2 struct stu {

int num; char name[10]; float score[3]; }stu[N]; void main() { void input(struct stu *p); void print(struct stu *p); struct stu *p; p=stu; input(p); print(p); } void input(struct stu *p) { int i,j; for(i=0;i<N;i++) { printf("\n\n 输入第%d 个学生的成绩\n\n",i+1); printf("输入学号:"); scanf("%d",&((p+i)->num)); printf("\n 输入姓名:"); scanf("%s",(p+i)->name); for(j=0;j<3;j++) { printf("\n 输入成绩%d:",j+1); scanf("%f",&((p+i)->score[j])); } } } void print(struct stu *p) { int i,j; printf("学号 姓名 成绩 1 成绩 2 成绩 3\n\n"); for(i=0;i<N;i++)

{ printf("%-7d%-7s",(p+i)->num,(p+i)->name); for(j=0;j<3;j++) { printf("%-9.2f",(p+i)->score[j]); } printf("\n\n"); } }

11.5 #include <iostream> #define N 3 struct stu { char num[10]; char name[10]; float score[3]; float average; }stu[N]; void main() { void input(struct stu *p); void aver(struct stu *p); float aver_total(struct stu *p); void print(struct stu *p); struct stu *p; p=stu; input(p); aver(p); print(p); }

void input(struct stu *p) { int i,j; printf("按顺序依次输入学生的学号,姓名,成绩 1,成绩 2,成绩 3\n\n"); for(i=0;i<N;i++) { scanf("%s%s",(p+i)->num,(p+i)->name); for(j=0;j<3;j++) scanf("%f",&((p+i)->score[j])); } } void aver(struct stu *p) { int i,j; float sum; for(i=0;i<N;i++) { sum=0; for(j=0;j<3;j++) { sum+=(p+i)->score[j]; } (p+i)->average=sum/3; } } float aver_total(struct stu *p) { float sum=0; for(;p<stu+N;p++) sum+=p->average; return (sum/N); } void print(struct stu *p) { int i,j; struct stu *q;

float max=0; printf("三门课的总平均成绩为:%f\n\n",aver_total(p)); for(i=0;i<N;i++) { if((p+i)->average>max) { max=(p+i)->average; q=p+i; } } printf("最高分学生的数据为:\n\n"); printf("学号 姓名 成绩 1 成绩 2 成绩 3 平均成绩\n\n"); printf("%-7s%-7s",q->num,q->name); for(j=0;j<3;j++) { printf("%-8.2f",q->score[j]); } printf("%-8.2f",q->average); printf("\n\n"); }

11.8 #include <iostream> #include <malloc.h> #define NULL 0 #define LEN sizeof(struct student) struct student { long int num; float score; struct student *next; }list_a,list_b;

int n,sum; void main() { struct student *creat(void); struct student *insert(struct student *ha,struct student *hb); void print(struct student *head); struct student *ahead,*bhead,*abh; ahead=creat(); sum=n; bhead=creat(); sum=sum+n; abh=insert(ahead,bhead); print(abh); } struct student *creat(void) { struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); printf("输入学生的学号和成绩\n\n"); printf("如果输入的学号为 0,就停止输入\n\n"); scanf("%ld%f",&p1->num,&p1->score); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(LEN); scanf("%ld%f",&p1->num,&p1->score); } p2->next=NULL; return(head); }

struct student *insert(struct student *ha,struct student *hb) { struct student *pa1,*pa2,*pb1,*pb2; pa1=pa2=ha; pb1=pb2=hb; if(ha==NULL&&hb!=NULL) ha=hb; else { while((pb1->num>pa1->num)&&(pa1->next!=NULL)) { pa2=pa1; pa1=pa1->next; if(pb1->num<=pa1->num) { if(ha==pa1) ha=pb1; else pa2->next=pb1; pb2=pb1; pb1=pb1->next; pa2=pa1; pa1=pb2; pb2->next=pa2; } } if((pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1; } return (ha); } void print(struct student *head) { struct student *p; printf("\n\n 共有%d 条记录,分别为:\n\n",sum); p=head; if(head!=NULL) do { printf("%ld%8.2f\n",p->num,p->score);

p=p->next; }while(p!=NULL); }

11.9 #include <iostream> #include <malloc.h> #define N 13 struct person { int num; int next; }link[N+1];

void main() { int i,count,h; for(i=1;i<=N;i++) { if(i==N) link[i].next=1; else link[i].next=i+1; link[i].num=i; } printf("\n\n"); count=0; h=N; printf("退出者依次是:\n\n"); while(count<N-1) { i=0; while(i!=3) {

h=link[h].next; if(link[h].num) i++; } printf("%d ",link[h].num); link[h].num=0; count++; } printf("\n\n 最后的成员是:"); for(i=1;i<=N;i++) { if(link[i].num) printf("%d\n\n",link[i].num); } }

11.10 #include <iostream> #include <malloc.h> #define LEN sizeof(struct student) #define NULL 0 struct student { long int num; char name[20]; struct student *next; }a,b; int n; void main() { struct student *creat(void); struct student *dele(struct student *ahead,struct student *bhead); void print(struct student *head);

struct student *p1,*p2; printf("输入 a 中同学的学号,姓名\n\n"); p1=creat(); printf("输入 b 中同学的学号,姓名\n\n"); p2=creat(); print(dele(p1,p2)); } struct student *creat(void) { struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); scanf("%d%s",&p1->num,p1->name); head=NULL; while(p1->num!=0) { n+=1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(LEN); scanf("%d%s",&p1->num,p1->name); } p2->next=NULL; return(head); } struct student *dele(struct student *ahead,struct student *bhead) { struct student *ah,*bh; struct student *ap1,*ap2,*bp1,*bp2; ap1=ap2=ahead; bp1=bp2=bhead; while(ap1->next) { while(bp1->next) {

if(ap1->num!=bp1->num) { bp2=bp1; bp1=bp1->next; } else { if(ap1==ahead) ahead=ap1->next; else ap2->next=ap1; ap2=ap1; ap1=ap1->next; break; } } } return(ahead); } void print(struct student *head) { struct student *p; printf("删除后 a 中学生学号及成绩分别为:\n\n"); p=head; if(head!=NULL) { do { printf("%ld%s",p->num,p->name); p=p->next; }while(p!=NULL); } }


推荐相关:

C++程序设计_(谭浩强超级完整版)绝对完整!![1]_图文.ppt

C++程序设计_(谭浩强超级完整版)绝对完整!![1] - C++程序设计 谭浩强编著 清华大学出版社 课件制作:南京理工大学 陈清华 朱红 1 第一章C++概述 C++语言发展历史...

c程序设计(谭浩强)第七章习题答案.doc

c程序设计(谭浩强)第七章习题答案 - # include <stdio.

谭浩强C程序设计第三版课后答案(整本书).doc.doc

谭浩强C程序设计第三版课后答案(整本书).doc_工学_高等教育_教育专区。谭浩强C程序设计第三版课后答案(整本书) 程序设计(第三版) C 程序设计(第三版)课后...

c程序设计第四版(谭浩强)第十章答案.doc

c程序设计第四版(谭浩强)第十章答案 - #include<stdio.h

c++程序设计谭浩强课后习题答案(完整版).doc

c++程序设计谭浩强课后习题答案(完整版) - 第一章 1.5 题 #inclu

C语言谭浩强完整课件_图文.ppt

C语言谭浩强完整课件 - 本课件为谭浩强c语言教材的完整课件,从第一章到第十章,

C程序设计4(谭浩强)完整版-课后习题答案.doc

C程序设计4(谭浩强)完整版-课后习题答案 - C 程序设计 ( 第四版 )( 谭浩强 ) 第一 章课后习题答案 P006 1.1 向屏幕输出文字. //预编译. 代码均调试...

谭浩强C语言知识点总结.doc

谭浩强C语言知识点总结 - C 语言最重要的知识点 总体上必须清楚的: 1)程序

c程序设计第四版(谭浩强)第三章答案.doc

c程序设计第四版(谭浩强)第三章答案 - # include<stdio.

《C程序设计》最全的错误勘误-谭浩强版.doc

《C程序设计》最全的错误勘误-谭浩强版 - 谭浩强《C 程序设计》(第四版)错误不完全汇集 谭浩强《C 程序设计》 (第四版)错误不完全汇集 ......

C程序设计第四版谭浩强_习题&例题第7章.doc

C程序设计第四版谭浩强_习题&例题第7章 - 第 7 章函数 例 7.1

谭浩强c语言程序设计习题集.pdf

谭浩强c语言程序设计习题集 - 目录 重要次重要重复或欲删除基础第一章 C 语言

谭浩强-C程序设计教程_图文.ppt

谭浩强-C程序设计教程_电脑基础知识_IT/计算机_专业资料。第一章 ? 主要内

谭浩强C第四版目录.doc

谭浩强C第四版目录 - 第 1 章程序设计和 C 语言 1 1.1 什么是计算机

C++程序设计(谭浩强完整版)_图文.ppt

C++程序设计(谭浩强完整版) - C++程序设计 谭浩强编著 清华大学出版社

怎样走向成功之路(谭浩强).doc

怎样走向成功之路(谭浩强)。20世纪最有影响的IT人物之---谭浩强,为处于迷茫的人指引前进的道路 怎样走向成功之路 和大学生谈如何做人如何做事 谭浩强 谭浩强教授...

C++程序设计(谭浩强完整版)_图文.ppt

C++程序设计谭浩强编著 清华大学出版社 课件制作:南京理工大学 陈清华 朱红

C语言谭浩强完整课件资料_图文.ppt

C语言谭浩强完整课件资料 - 第1章 程序设计和C语言 1.1 什么是计算机程序

C++程序设计(谭浩强完整版)_图文.ppt

C++程序设计(谭浩强完整版) - C++程序设计 谭浩强编著 清华大学出版社

c语言程序设计谭浩强格式输入输出._图文.ppt

c语言程序设计谭浩强格式输入输出. - 数据输入输出的概念及在C语言中的实现 (

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