您好,欢迎来到东饰资讯网。
搜索
您的当前位置:首页C语言程序设计(第三版)课后习题答案

C语言程序设计(第三版)课后习题答案

来源:东饰资讯网
 C程序设计(第三版)答案-谭浩强

程序是在VC6.0下编译的,所以头文件和TC的不太一样! 4-8

#include #define pi 3.1415 void main() {

float r,h,rl,ra,ss,sv,cv;

printf(\"输入圆的半径和圆柱的高\\n\\n\"); scanf(\"%f%f\ 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\} 4-9

#include void main() {

float F,c;

printf(\"输入一个华氏温度\\n\\n\"); scanf(\"%f\ c=5*(F-32)/9;

printf(\"摄氏温度为:%.2f\\n\\n\} 第五章 5-4

#include void main() {

int a,b,c,max;

printf(\"输入三个整数a,b,c\\n\\n\"); scanf(\"%d%d%d\ if(a>b) max=a; else max=b; if(maxprintf(\"最大的数为:%d\\n\\n\} 5-5

#include void main() {

float x,y;

printf(\"输入x\\n\\n\"); scanf(\"%f\ if(x<1) y=x;

else if(x<10) y=2*x-1; else y=3*x-11; printf(\"y=%f\\n\\n\} 5-6

#include void main() {

float m; int n;

printf(\"输入成绩\\n\\n\"); scanf(\"%f\

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 #include void main() {

int a,b,c,i,j,n;

printf(\"输入五位正整数\\n\\n\"); scanf(\"%d\ printf(\"\\n\\n\"); c=a;

for(i=1;;i++) { b=c%10; c=c/10; printf(\"%d\ if(c==0) {

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

printf(\"正整数为%d位数\\n\\n\ }

} c=a;

for(j=i-1;j>=0;j--) {

n=pow(10,j); b=c/n; c=c%n;

printf(\"%d\\n\ } } 5-8 if语句:

#include void main() { int I; float bonus;

printf(\"输入当月利润I\\n\\n\"); scanf(\"%d\

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\}

switch语句: #include void main() {

int I,n;

float bonus;

printf(\"输入当月利润I\\n\\n\"); scanf(\"%d\ 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\} 5-9

#include void main() {

int a,b,c,d,temp,min;

printf(\"输入四个数a,b,c,d\\n\\n\"); scanf(\"%d%d%d%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 \ if(b>c) { temp=b; b=c; c=temp; } if(b>d) { temp=b; b=d; d=temp; }

printf(\"%d \ if(c>d) { temp=c; c=d; d=temp; }

printf(\"%d \ printf(\"%d\} 5-10

#include #include void main() {

float x,y,a,b,c,d;

printf(\"输入点的坐标\\n\\n\"); scanf(\"%f%f\

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 #include void main() {

int m,n,max,min,i,k;

printf(\"输入两个正整数\\n\\n\"); scanf(\"%d%d\ 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\ 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\} 6-2

#include 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\} 6-3

#include #include void main() {

int n,k,i; float a,s=0;

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

printf(\"和s=%f\\n\\n\} 6-4

#include void main() {

int n,s,S=0,i,j; printf(\"输入n\\n\\n\"); scanf(\"%d\ for(i=1;j<=n;i++) { s=1;

for(j=1;j<=i;j++) { s=s*j; } S+=s; }

printf(\"和S=%d\\n\\n\} 6-5

#include

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\ 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\} 6-6

#include 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 \ } } 6-7

#include #include void main() {

int i,j,k,s; for(i=1;i<=1000;i++) { s=0;

for(j=1;jif(i%j==0) s+=j; } if(s==i) {

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

printf(\"%d its factors are \ for(j=1;jif(i%j==0) printf(\"%d \ } } } } 6-8

#include void main() {

int n,i;

float f1,f2,s,temp; printf(\"输入n\\n\\n\"); scanf(\"%d\ 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\} 6-9

#include #include void main() {

int i,n,l=100; float m,s=0;

printf(\"输入n\\n\\n\"); scanf(\"%d\ m=l;

for(i=1;i<=n;i++) { s+=2*m; m=m*0.5; }

printf(\"第%d次落地时经过%f米\\n\\n\ printf(\"第%d次落地后反弹%f米\\n\\n\} 6-10

#include void main() {

int m=1,n,i;

printf(\"输入n\\n\\n\"); scanf(\"%d\ for(i=1;im=(m+1)*2; }

printf(\"一共摘了%d个桃子\\n\\n\} 6-11

#include #include void main() {

float a,x1,x2; printf(\"输入a\\n\\n\"); scanf(\"%f\ 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\} 6-12

#include #include 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\ f1=f(x1); f2=f(x2); }while(f1*f2>0); x=root(x1,x2);

printf(\"方程在1.5附近的根为:%f\\n\\n\}

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 #include void main() {

float f(float);

float root(float,float); float x,x1,x2,f1,f2; do {

printf(\"输入x1,x2\\n\\n\"); scanf(\"%f%f\ f1=f(x1); f2=f(x2); }while(f1*f2>0); x=root(x1,x2);

printf(\"方程的根为:%f\\n\\n\}

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 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 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\ } }

} } 第七章 7-1

#include #include 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 \ } }

7-2

#include void main() {

int a[10],i,j,temp;

printf(\"输入10个整数\\n\\n\"); for(i=0;i<10;i++) {

scanf(\"%d\ }

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 \ }

printf(\"\\n\\n\"); } 7-3

#include void main() {

int a[9],i,s=0;

printf(\"输入一个3*3整型矩阵\\n\\n\"); for(i=0;i<9;i++) {

scanf(\"%d\ }

for(i=0;i<9;i+=4) {

s+=a[i]; }

printf(\"对角线元素之和为:%d\\n\\n\} 7-4

#include 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\ if((a[0]-a[9])>0) {

if(n<=a[9]) {

a[10]=n; } else {

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

{

if(a[i]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 \ } } 7-5

#include #define N 5 void main() {

int a[N]; int i,temp;

printf(\"输入5个个数\\n\\n\"); for(i=0;iscanf(\"%d\ }

for(i=0;i<=N/2;i++) {

temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; }

for(i=0;iprintf(\"%d \ }

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

7-6

#include #include 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\ }

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

#include

#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;ifor(j=0;jprintf(\"%4d\ }

printf(\"\\n\\n\"); } } 7-8

#include 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\ } }

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\ break; } }

if(flag==0) printf(\"不存在\\n\\n\"); } 7-9

#include 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\ }

printf(\"\\n\\n输入一个数n\\n\\n\"); scanf(\"%f\ low=0; high=14;

i=0;

while(low<=high) {

mid=(low+high)/2; if(a[mid]==n) {

printf(\"该数是数组中第%d个元素\\n\\n\ i++; break; }

else if(a[mid]if(i==0) printf(\"无此数!!\\n\\n\"); } 7-10

#include 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\ 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\ printf(\"英文小写字母:%d个\\n\\n\ printf(\"数字: %d个\\n\\n\ printf(\"空格: %d个\\n\\n\ printf(\"其他字符: %d个\\n\\n\} 7-11

#include void main() {

int i,j; for(i=0;i<5;i++) {

for(j=0;j<=i;j++) {

printf(\" \"); }

for(j=i;jprintf(\"* \"); }

printf(\"\\n\"); } } 7-12

#include 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

#include 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\\n\"); puts(a); } 7-14

#include 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\\n字符串a大于字符串b:%4d\\n\\n\ break; }

else if(k<0) {

printf(\"\\n\\n字符串a小于字符串b:%4d\\n\\n\ break; } else k=0; }

if(k==0) printf(\"\\n\\n字符串a等于字符串b:%4d\\n\\n\} 7-15

#include 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 void main() {

int max_div(int,int); int min_mul(int,int); int m,n;

printf(\"输入两个整数\\n\\n\"); scanf(\"%d%d\

if(max_div(m,n)==0) printf(\"\\n\\n无最大公约数为\\n\\n\"); else printf(\"\\n\\n最大公倍数为:%d\\n\\n\ printf(\"\\n\\n最大公倍数为:%d\\n\\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#include #include 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\ 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\}

void root2(float a,float b,float c) {

float p; p=-b/(2*a);

printf(\"\\n\\n方程的两个根为:x1=x2=%6.2f\\n\\n\}

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\} 8-3

#include void main() {

int prime(int); int x;

printf(\"输入一个正整数\\n\\n\"); scanf(\"%d\

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;iif(x%i==0) {

flag=1; break; }

else flag=0; }

return(flag); } 8-4

#include 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\ } }

exchange(a);

printf(\"\\n\\n转置后的矩阵为:\\n\\n\"); for(i=0;i<3;i++) {

for(j=0;j<3;j++) {

printf(\"%d \ }

printf(\"\\n\"); } } 8-5

#include 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 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 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 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 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\ printf(\"数字个数为: %d\\n\ printf(\"空格个数为: %d\\n\ printf(\"其它字符个数为:%d\\n\}

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 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\ 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

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;ifor(j=0;jif(str[j]>str[j+1]) {

temp=str[j]; str[j]=str[j+1]; str[j+1]=temp; } } } } 8-12

#include #include 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\

printf(\"\\n\\n在1附近的根为:%f\\n\\n\}

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 void main() {

float p(int,float); int n; float x;

printf(\"输入n和x\\n\\n\"); scanf(\"%d%f\

printf(\"\\n\\n%d阶勒德让多项式的值为:%f\\n\\n\}

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 #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;iprintf(\" NO.%d \ for(j=0;jprintf(\"%8.2f\ }

printf(\"%8.2f\\n\\n\ }

printf(\"课程平均\"); for(i=0;iprintf(\"%8.2f\ }

h=hightest(&s,&c,score);

printf(\"\\n\\n最高成绩为:%f 是第%d号学生,第%d门课的成绩\\n\\n\ printf(\"平均方差为:%f\\n\\n\}

void input(float a[][n2]) {

int i,j;

for(i=0;iprintf(\"\\n\\n输入%d个学生的5个成绩\\n\\n\ for(j=0;jscanf(\"%f\ } } }

void stu_aver(float a[][n2]) {

int i,j; float s;

for(i=0;ifor(j=0;js+=a[i][j]; }

a_stu[i]=s/n2;

} }

void cou_aver(float a[][n2]) {

int i,j; float s;

for(i=0;ifor(j=0;js+=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;ifor(j=0;jif(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;ix+=a_stu[i]*a_stu[i]; y+=a_stu[i]; }

return(x/n1-(y/n1)*(y/n1));

} 8-15

#include #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\ 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;iprintf(\"输入职工号\\n\\n\"); scanf(\"%d\

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;imin=i;

for(j=i;jif(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;iprintf(\"职工号:%6d 姓名:%10s\\n\\n\ } }

void search(int num[],char name[N][8],int n) {

int low,high,mid,flag; flag=0; low=0; high=N-1;

if((nnum[high])) flag=-1; while((low<=high)&&(flag==0)) {

mid=(low+high)/2; if(n==num[mid]) {

flag=mid+1;

printf(\"第%4d号职工的名字为:%8s\\n\\n\ break; }

else if(nif(flag==0||flag==-1) printf(\"不存在该职工\\n\\n\"); } 8-16

#include #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')&&(iif(((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\ 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

#include void main() {

void exchange(int n); int n;

printf(\"输入一个整数\\n\\n\"); scanf(\"%d\

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 void main() {

int day_num(int year,int mon,int day); int year,mon,day;

printf(\"输入年、月、日\\n\\n\");

scanf(\"%d%d%d\

printf(\"\\n\\n输入的日期是当年的第%d天\\n\\n\}

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;idays+=date[i]; }

days+=day;

if((year%4==0)&&((year%100)!=0)||(year%400==0)) days+=1; return days; }

第九章 9-1

#include

#define exchange(x,y) t=x;x=y;y=t void main() {

int x,y,t;

printf(\"输入x,y\\n\\n\"); scanf(\"%d%d\ exchange(x,y);

printf(\"\\n\\n交换后x=%d,y=%d\\n\\n\} 9-2

#include #define acr(x,y) ((x)%(y)) void main() {

int x,y;

printf(\"输入x,y\\n\\n\"); scanf(\"%d%d\

printf(\"\\n\\n余数为%d\\n\\n\} 9-3

#include #include

#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\

if(a>0&&b>0&&c>0&&(a+b>c||a+c>b||b+c>a)&&(fabs(a-b)s=s(a,b,c); area=area(a,b,c,s); flag=0;

printf(\"\\n\\n面积area= %8f\\n\\n\ } else {

printf(\"\\n\\n输入有误!!!是否重新输入?Y/N?\\n\\n\"); getchar(); m=getchar();

if(m=='Y'||m=='y') flag=1; else flag=0; } } } 9-4

#include

#define LEAP_YEAR(y) ((y%4==0)&&(y%100)!=0||(y%400)==0)

void main() { int y;

printf(\"输入年份\\n\\n\"); scanf(\"%d\

if(LEAP_YEAR(y)) printf(\"\\n\\n%d年是闰年\\n\\n\ else printf(\"\\n\\n%d年不是闰年\\n\\n\} 9-6

#include #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 #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 void main() {

float x,y,z,t;

printf(\"输入三个数x,y,z\\n\\n\"); scanf(\"%f%f%f\ t=(x>y)?x:y; t=(t>z)?t:z;

printf(\"\\n\\n三个数中最大的为:%f\\n\\n\}

#include

#define MAX(a,b) ((a)>(b)?(a):(b)) void main() {

float x,y,z;

printf(\"输入三个数x,y,z:\\n\\n\"); scanf(\"%f%f%f\

printf(\"\\n\\n其中最大的数为:%f\\n\\n\} 9-10

#include #define N 80 #define CHANGE 1 void main() {

char str[N]; int i;

printf(\"输入一行字符串\\n\\n\"); gets(str); #if CHANGE

for(i=0;iif(((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 void main() {

void swap(int *p,int *q); int x,y,z;

int *p1,*p2,*p3;

printf(\"输入三个整数\\n\\n\"); scanf(\"%d%d%d\ 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\}

void swap(int *p,int *q) {

int temp; temp=*p; *p=*q; *q=temp; } 10.2

#include #include #define N 80 void main() {

void swap(char *p,char *q); char str1[N],str2[N],str3[N];

printf(\"请输入三个字符串\\n\\n\"); scanf(\"%s\ scanf(\"%s\ scanf(\"%s\

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\}

void swap(char *p,char *q) {

char str[N]; strcpy(str,p); strcpy(p,q); strcpy(q,str); } 10.3

#include #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;iscanf(\"%d\ } } 10.4

#include #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\ for(i=0;iscanf(\"%d\ }

move(num,N,M);

printf(\"\\n\\n调整后的%d个整数为:\\n\\n\ for(i=0;iprintf(\"%d \ }

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 #define N 8 void main() {

void leave(int num[N]); int num[N]; int i,*p; p=num;

for(i=0;iwhile(*p==0) p++;

printf(\"最后留下的是第%d个人\\n\\n\}

void leave(int num[N]) {

int *p;

int i=0,k=0,m=0; p=num;

while(mif(*(p+i)!=0) k++; if(k==3) {

*(p+i)=0; k=0;

m++; } i++;

if(i==N) i=0; } } 10.6

#include #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\}

int count(char str[N]) {

char *p; int i=0; p=str;

while(*p!='\\0') { i++; p++; }

return(i); } 10.7

#include #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#include #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\}

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 #define N 3 void main() {

void move(int *p); int a[N][N]; int *p,i,j;

printf(\"输入一个%d*%d的矩阵\\n\\n\ for(i=0;iscanf(\"%d\ p=&a[0][0]; move(p);

for(i=0;ifor(j=0;jprintf(\"%d \ }

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

void move(int *p) {

int i,j,temp;

for(i=0;itemp=*(p+i*N+j);

*(p+i*N+j)=*(p+j*N+i); *(p+j*N+i)=temp; } }

10.10

#include #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\ for(i=0;ifor(j=0;jscanf(\"%d\ } }

p=&arr[0][0]; sort(p);

printf(\"调整后的矩阵为:\\n\\n\"); for(i=0;ifor(j=0;jprintf(\"%d \ }

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;ifor(j=0;jif(*(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;ifor(j=0;jif((*(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;ifor(j=0;jif((*(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;ifor(j=0;jif((*(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 #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\ for(i=0;iprintf(\"\\n\\n排序后的%d个字符串为\\n\\n\ for(i=0;ivoid 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;ifor(j=i+1;jif(strcmp((p+i*N),(p+j*N))>0) swap((p+i*N),(p+j*N)); } } } 10.12

#include #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\ for(i=0;iscanf(\"%s\ for(i=0;iprintf(\"\\n\\n排序后的%d个字符串为\\n\\n\ for(i=0;ivoid sort(char *p[N]) {

int i,j; char *q;

for(i=0;ifor(j=i+1;jif(strcmp(p[i],p[j])>0) {

q=p[i]; p[i]=p[j]; p[j]=q; } } } } 10.13

#include #include 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\ fun=sin;

c=integral(a,b,n,fun);

printf(\"\\n\\nsin积分结果为:%f\\n\\n\ fun=cos;

c=integral(a,b,n,fun);

printf(\"\\n\\ncos积分结果为:%f\\n\\n\ fun=exp;

c=integral(a,b,n,fun);

printf(\"\\n\\nexp积分结果为:%f\\n\\n\}

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;ix=x+h;

area=area+(*fun)(x)*h; }

return(area); } 10.14

#include #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\

printf(\"\\n\\n输入%d个整数\\n\\n\ for(i=0;iprintf(\"\\n\\n逆序排列为:\\n\\n\"); for(i=0;ivoid swap(int *p,int *q) {

int temp; temp=*p;

*p=*q; *q=temp; }

void back(int *p,int n) { int i;

for(i=0;iswap(p+i,p+n-1-i); } } 10.15

#include #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\ for(i=0;iscanf(\"%s\

printf(\"\\n\\n按顺序输入%d个学生学号和%d门课程的成绩\\n\\n\ printf(\"学号 \"); for(i=0;iprintf(\"%s \ num=number; sco=&score[0][0]; for(i=0;iscanf(\"%d\ for(j=0;jscanf(\"%f\ } }

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;iprintf(\"第一门课%s的平均成绩为:%f\\n\\n\}

void aver_stu(float *sco,float *ave) {

int i,j; float sum;

for(i=0;isum=0;

for(j=0;jsum+=(*(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;iprintf(\" %-8s\ printf(\" 平均成绩\\n\\n\"); for(i=0;iflag=0;

for(j=0;jif(*(sco+i*N+j)<60) flag+=1; }

if(flag>2) {

printf(\"%-8d\ for(k=0;kprintf(\"%-8.2f\ }

printf(\"%-8.2f\\n\\n\ } } }

void good(char *cou,int *num,float *sco,float *ave) {

int i,j,k,flag;

printf(\"============平均成绩在90分以上或者每门课在85分以上的学生============\\n\\n\"); printf(\"学号\"); for(i=0;iprintf(\" %-8s\ printf(\" 平均成绩\\n\\n\"); for(i=0;iflag=0;

for(j=0;jif(*(sco+i*N+j)>=85) flag+=1; }

if(flag==5||(*(ave+i)>=90)) {

printf(\"%-8d\ for(k=0;kprintf(\"%-8.2f\ }

printf(\"%-8.2f\\n\\n\ } } } 10.16

#include #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'&&iif((*(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\ for(i=0;iprintf(\"%d \ }

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

#include #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\}

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 void main() {

char *mon[]={\"一月份\二月份\三月份\四月份\五月份\六月份\七月份\八月份\九月份\十月份\十一月份\十二月份\ int n;

printf(\"输入一个月份号\\n\\n\"); scanf(\"%d\

if(n>=1&&n<=12) printf(\"\\n\\n%s\\n\\n\ else printf(\"\\n\\n%d月份不存在\\n\\n\}

10.20

#include #define N 5

#define MAX 100 void main() {

void sort(char **p);

char *pstr[N],**p,str[N][MAX]; int i;

for(i=0;iprintf(\"输入%d个字符串\\n\\n\ for(i=0;iprintf(\"\\n\\n排序后的%d个字符串为:\\n\\n\ for(i=0;ivoid sort(char **p) {

int i,j;

char *temp; for(i=0;ifor(j=i;jif(strcmp(*(p+i),*(p+j))>0) {

temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } } 10.21

#include #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\ for(i=0;iprintf(\"\\n\\n输入%d个整数\\n\\n\ for(i=0;iscanf(\"%d\ p=pnum; sort(p,n);

printf(\"\\n\\n排序后的%d个整数为:\\n\\n\ for(i=0;iprintf(\"%d \ printf(\"\\n\\n\"); }

void sort(int **p,int n) {

int *temp; int i,j;

for(i=0;ifor(j=i;jif(**(p+i)>**(p+j)) {

temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } } 第十一章 11.1

#include 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\ day_sum=0;

for(i=0;iif((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)&&(date.month>2)) day_sum+=1;

printf(\"\\n\\n该日在本年中是第%d天\\n\\n\} 11.2

#include 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\

printf(\"\\n\\n该日在本年中是第%d天\\n\\n\}

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;iif((y%4==0)&&(y%100!=0)||(y%400==0)&&(m>2)) day_sum+=1; return day_sum; } 11.3

#include #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;iprintf(\"\\n\\n输入第%d个学生的成绩\\n\\n\ printf(\"输入学号:\"); scanf(\"%d\ printf(\"\\n输入姓名:\"); scanf(\"%s\ for(j=0;j<3;j++)

{

printf(\"\\n输入成绩%d:\ scanf(\"%f\ } }

print(stu); }

void print(struct stu *p) {

int i,j;

printf(\"学号 姓名 成绩1 成绩2 for(i=0;iprintf(\"%-8d%-8s\ for(j=0;j<3;j++) {

printf(\"%-8f\ }

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

#include #define N 2 struct stu {

int num; char name[10]; float score[3]; }stu[N];

成绩3\\n\\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;iprintf(\"\\n\\n输入第%d个学生的成绩\\n\\n\ printf(\"输入学号:\"); scanf(\"%d\ printf(\"\\n输入姓名:\"); scanf(\"%s\ for(j=0;j<3;j++) {

printf(\"\\n输入成绩%d:\ scanf(\"%f\ } } }

void print(struct stu *p) {

int i,j;

printf(\"学号 姓名 成绩1 成绩2 成绩3\\n\\n\"); for(i=0;iprintf(\"%-7d%-7s\ for(j=0;j<3;j++) {

printf(\"%-9.2f\

}

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

#include #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;iscanf(\"%s%s\ for(j=0;j<3;j++)

scanf(\"%f\ } }

void aver(struct stu *p) {

int i,j; float sum; for(i=0;ifor(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(;paverage; return (sum/N); }

void print(struct stu *p) {

int i,j; struct stu *q; float max=0;

printf(\"三门课的总平均成绩为:%f\\n\\n\ for(i=0;iif((p+i)->average>max) {

max=(p+i)->average; q=p+i; } }

printf(\"最高分学生的数据为:\\n\\n\");

printf(\"学号 姓名 成绩1 成绩2 成绩3 平均成绩\\n\\n\"); printf(\"%-7s%-7s\ for(j=0;j<3;j++) {

printf(\"%-8.2f\ }

printf(\"%-8.2f\ printf(\"\\n\\n\"); } 11.8

#include #include #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\ 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\ }

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\ p=head; if(head!=NULL) do {

printf(\"%ld%8.2f\\n\ p=p->next; }while(p!=NULL); }

11.9

#include #include #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(counth=link[h].next; if(link[h].num) i++; }

printf(\"%d \ link[h].num=0;

count++; }

printf(\"\\n\\n最后的成员是:\"); for(i=1;i<=N;i++) {

if(link[i].num) printf(\"%d\\n\\n\ } } 11.10

#include #include

#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\ 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\ }

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=p->next; }while(p!=NULL); } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.cn 版权所有 湘ICP备2023022426号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务