C语言程序设计(第四版)实例源代码

  • 时间:
  • 浏览:136
  • 来源:跟我学网络

教材中的源程序代码 例 1.1 # include <stdio.h> int main( ) { printf(“How are you!\n”); printf(“Welcome you!”); return 0; } 例 1.2 #include <stdio.h> int main ( ) /*主函数*/ { int a ,b,sum; /*定义变量*/ a=111;b=222; /*为变量赋值*/ sum=a+b; /*求两数之和*/ printf (“sum is: %d”,sum); /*输出 sum 的值*/ return 0; } 例 1.3 #include <stdio.h> int sumab (int x, int y); /*函数声明*/ int main () /*主函数*/ { int a,b,sum; /*定义变量*/ printf("请输入变量 a 与 b 的值:"); /*提示信息*/ scanf ("%d %d", &a, &b); /*输入变量 a 和 b 的值*/ sum=sumab(a,b); /*调用 sumab 函数*/ printf("a 与 b 的和等于%d", sum); /*输出 sum 的值*/ return 0; } int sumab (int x, int y) /*定义 sumab 函数,并定义形参 x、y */ { int z; z=x+y; return z; } 例 2.1 #include <stdio.h> int main() { int a=200,b=100,c; c=a+b+15; printf("%d,%d,%d,%d\n", a,b,c,a-b-70); printf("%o,%o,%o,%o\n", a,b,c,a-b-70); printf("%x,%x,%x,%x\n", a,b,c,a-b-70); getch(); return 0; } 例 2.2 #include <stdio.h> int main() { int a,b,c; unsigned d; long e; scanf("%d,%o,%x,%u,%ld ", &a,&b,&c,&d,&e); printf("%d,%d,%d,%u,%ld \n", a,b,c,d,e); return 0; } 例 2.3 #include <stdio.h> int main() { float a,b; double x,y; scanf("%f,%e,%lf,%le", &a,&b,&x,&y); printf("%f,%e,%lf,%le \n", a,b,x,y); return 0; } 例 2.4 #include <stdio.h> int main() { printf("A\102\x43\\DE\t\b\b\x23\43\x61\x62\n"); printf("\‘A\’\53\"\101\"\t\b\43\141\142\x63\b\x64\n"); return 0; } 例 2.5 #include <stdio.h> int main() { char c1,c2,c3=‘P’; scanf("%c", &c1); c2=‘D’; printf("%c%c%c" ,c1,c2,c3); printf(",%c,%c,%c \n " ,c1,c2,c3); return 0; } 例 2.6 #include <stdio.h> int main() { char c1,c2; printf("请输入 2 个两个大写英文字符:"); scanf("%c, %c",&c1,&c2); printf("%c%c ", c1, c2); c1=c1+32; c2=c2+32; printf("%c, %c\n " , c1, c2); return 0; } 例 2.7 #include <stdio.h> int main() { int i,j,k; i=6; j=++i; /*表达式++i 的值是 7 */ k=i++; /*表达式 i++的值是 7 */ printf("%d,%d,%d\n " ,j,k,i); i=-6; j=--i; /*表达式--i 的值是-7 */ k=i--; /*表达式 i--的值是-7 */ printf("%d,%d,%d\n " ,j,k,i); return 0; } 例 2.8 #include <stdio.h> int main() { int m,n,i,j,k=5; i=(j=6,j++,k+j); printf("%d,%d \n", (n=3*4, m=n+5), i); printf("%d,%d,%d,%d \n ", n, m, j, (n, m,j)); return 0; } 例 2.9 #include <stdio.h> int main() { int a;float b; double c; char d; printf("%d, %d, %d, %d \n",sizeof(a),sizeof(b),sizeof(c),sizeof(d)); printf("%d, %d, %d\n ", sizeof(int),sizeof(unsigned int),sizeof(long int)); printf("%d, %d, %d\n ", sizeof(float),sizeof(double),sizeof(char)); return 0; } 例 3.1 #include <stdio.h> int main() { float x, y,c,area; printf(“输入长和宽:”); scanf(“%f, %f”, &x,&y); c=2*(x+y); area=x*y; printf(“周长是:%f\n”, c); printf(“面积是:%f\n”, area); return 0; } 例 3.2 #include <stdio.h> int main() { int a=65,b=97; printf(“%d %d\n”,a,b); printf(“%d,%d\n”,a,b); printf(“%c,%c\n”,a,b); printf(“a=%d,b=%d”,a,b); return 0; } 例 3.3 #include <stdio.h> int main() {int a,b; char c; float s1,s2,sum; a=65; b=-3; s1=123.4; s2=56.75; sum=s1+s2; c=‘A’; printf(“%d %c%d %o %f %c %d”,a,a,b,b,sum,c,c); return 0; } 例 例 3.4 #include <stdio.h> int main( ) {printf(“\“what do you like?\””); return 0; } 例 3.5 #include <stdio.h> int main( ) {int i = 56, j=13; float f=12.3456; printf(“i=%-4d”, i); printf(“j=%4d\n”,j); printf(“f=%6.2f\n”,f); return 0; } 例 3.6 #include <stdio.h> int main() {int a=2,b=8; float x=123.4567, y=-567.123; char c=’A’; long d=1234567; unsigned long e=65535; printf(“%3d%3d\n”,a,b); printf(“%-12f,%-12f\n”,x,y); printf(“%7.2f,%7.2f\n”,x,y); printf(“%e,%10.2e\n”,x,y); printf(“%c,%d,%o,%x\n”,c,c,c,c); printf(“%ld,%lo,%lx\n”,d,d,d); printf(“%u,%o,%x\n”,e,e,e); printf(“%s,%5.3s\n”,“computer”, “computer”); return 0; } 例 3.7 # include <stdio.h> int main ( ) { int a,b; scanf(“%d %d”, &a,&b); /*由键盘输入两个数并赋给变量 a、b*/ printf(“a+b=%d\n”,a+b); /*计算总和并输出内容*/ printf(“(a+b)/2=%f \n”, (float) (a+b)/2.0); /*输出平均值*/ return 0; } 例 3.8 #include <stdio.h> int main( ) {char ch; printf(“Input a character:”); ch=getchar( ); /*输入一个字符,并赋给变量 ch*/ printf(“\nThe character you input is:”); putchar(ch); return 0; } 例 3.9 #include <stdio.h> int main( ) { char ch; printf(“Input a character:”); ch=getch(); /*输入一个字符,并赋给变量 ch*/ printf(“\nThe character you input is:“); putchar(ch); return 0; } 例 3.10 #include <stdio.h> int main() {int k,m,n; printf(“输入用分表示的时间数:”); scanf(“%d”, &k); m=k/60; n=k%60; printf(“\n%d 分等于%d 小时%d 分。\n”, k, m, n); return 0; } 例 3.11 #include <stdio.h> int main() {char ch; float s1,s2; printf("输入一个小写英文字母:"); ch=getchar(); printf("\n%c,%d,%o,%x\n",ch,ch,ch,ch); s1=ch*ch; s2=3.14*ch*ch; printf("%f,%f\n",s1,s2); return 0; } 例 4.1 # include <stdio.h> int main() { int x; printf("Input x:"); scanf("%d",&x); if (x>0) printf("x=%d\n", x); return 0; } 例 4.2 # include <stdio.h> int main() { int a ; printf("输入一个整数:"); scanf("%d",&a); if (a%2= =0) printf("%d 是偶数\n", a); else printf("%d 是奇数\n",a); return 0; } 例 4.3 # include <stdio.h> int main() { float x,y; printf("Input x:"); scanf("%f",&x); if(x<1) y=x+1; else if (1<=x && x<2) y=x+2; /*或写成 else if (x<2) y=x+2;*/ else y=x+3; printf("x=%f, y=%f\n",x,y); return 0; } 例 4.4 # include <stdio.h> int main() { int m, k; scanf("%d",&m); k=(m/10==3)?(m=m*10) : (m=m*6); printf("%d\n",k); return 0; } 例 4.5 # include <stdio.h> int main() {char ch; printf("Input Y/N(y/n):"); scanf("%c",&ch); switch(ch) {case 'y' : case 'Y' : printf("this is 'Y' or 'y'\n"); break; case 'n' : case 'N' : printf("this is 'N' or 'n'\n"); break; default : printf("this is other char.\n"); } return 0; } 例 4.6 # include <stdio.h> int main() { float x,y; printf("Input x:"); scanf("%f",&x); if(x<10) if(x<0) y=5*x-6; else y=4*x; else y=2*x+3; printf("x=%f, y=%f\n",x,y); return 0; } 例 4.7 # include <stdio.h> int main() { float x,y; printf("Input x:"); scanf("%f",&x); switch(x>=0) {case 0 : y=5*x-6; break; case 1: switch (x>=10) {case 0 : y=4*x; break; case 1 : y=2*x+3; break; } } printf("y=%f\n",y); return 0; } 例 4.8 # include <stdio.h> int main() {float a,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b) {t=a; a=b; b=t;} /*交换 a、b,使 a 中存储小的数*/ if(a>c) {t=a; a=c; c=t;} /*交换 a、c,使 a 中存储小的数*/ if(b>c) {t=b; b=c; c=t;} /*交换 b、c,使 c 中存储大的数*/ printf("%f , %f , %f\n", a,b,c); return 0; } 例 4.9 # include <stdio.h> int main (void) { double value1, value2; char op; printf ("输入一个运算表达式(如 2.3+4.5): "); scanf ("%lf %c %lf", &value1, &op, &value2); switch (op) { case '+' : printf ("两数和=%.2f\n", value1+value2); break; case '-' : printf ("两数差=%.2f\n", value1-value2); break; case '*' : printf ("两数积=%.2f\n", value1*value2); break; case '/' : /* 嵌套的 if,判断除数是否为 0 */ if (value2 != 0) { printf ("两数商=%.2f\n", value1 / value2); break;} else {printf ("分母不能为 0!\n"); break;} default : printf ("错误的符号!\n"); break; } return 0; } 本题还可用嵌套的 if 语句编写。程序代码如下: # include <stdio.h> int main (void) { double value1, value2; char op; printf ("输入一个运算表达式(如 2.3+4.5): "); scanf ("%lf %c %lf", &value1, &op, &value2); if (op == '+') printf("两数和==%.2f\n", value1 + value2); else if (op == '-') printf ("两数差=%.2f\n", value1 - value2); else if (op == '*') printf ("两数积=%.2f\n", value1 * value2); else if(op == '/') /* 嵌套的 if,判断除数是否为 0 */ if (value2 != 0) printf ("两数商=%.2f\n", value1 / value2); else printf ("分母不能为 0!\n"); else printf ("错误的符号!\n"); return 0; } 例 4.10 # include <stdio.h> int main() { float score; int grade; scanf("%f", &score); /*输入 0 到 100 范围内的实数*/ grade =(int)(score/10); /*将 0 到 100 范围内的实数转变成 0 到 10 之间的整数*/ switch(grade) { case 10 : case 9 : printf("A\n"); break; case 8 : printf("B\n"); break; case 7 : printf("C\n"); break; case 6 : printf("D\n"); break; default : printf("E \n"); } return 0; } 例 4.11 #include <math.h> #include <stdio.h> int main() { float a,b,c,d,x1,x2,p,q; printf("输入方程系数 a,b,c(输入时每两个数间用逗号分隔):"); scanf("%f,%f,%f", &a,&b,&c); d=b*b–4*a*c; if(fabs(d)<=1e–6) /*此时即可认为 d==0*/ printf("有两个相等的实根:%8.4f\n", –b/(2*a)); else if (d>1e–6) /*此时即可认为 d>0*/ { x1=(–b+sqrt(d))/(2*a); x2=(–b–sqrt(d))/(2*a); printf("有两个不相等的实根:%8.4f 和 %8.4f\n", x1, x2); } else { p=–b/(2*a); q=sqrt(–d)/(2*a); printf("有两个共轭复根\n"); printf("%8.4f+%8.4fi\n",p,q); printf("%8.4f–%8.4fi\n",p,q); } return 0; } 例 4.12 # include <stdio.h> int main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=10*0.1; bon2=bon1+10*0.075; bon4=bon2+20*0.05; bon6=bon4+20*0.03; bon10=bon6+40*0.015; printf("利润值:"); scanf("%ld",&i); if (i<=10) bonus=i*0.1; else if (i<=20) bonus=bon1+(i-10)*0.075; else if (i<=40) bonus=bon2+(i-20)*0.05; else if (i<=60) bonus=bon4+(i-40)*0.03; else if (i<=100) bonus=bon6+(i-60)*0.015; else bonus=bon10+(i-100)*0.01; printf("奖金是%f\n",bonus); return 0; } # include <stdio.h> int main() {long i; int c; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=10*0.1; bon2=bon1+10*0.075; bon4=bon2+20*0.05; bon6=bon4+20*0.03; bon10=bon6+40*0.015; printf("利润值:"); scanf("%ld",&i); c=i/10; if (c>10) c=10; switch(c) { case 0 : bonus=i*0.1;break; case 1 : bonus=bon1+(i-10)*0.075;break; case 2 : case 3 : bonus=bon2+(i-20)*0.05;break; case 4: case 5 : bonus=bon4+(i-40)*0.03;break; case 6 : case 7 : case 8 : case 9 : bonus=bon6+(i-60)*0.015;break; case 10 : bonus=bon10+(i-100)*0.01; } 例 5.1 # include <stdio.h> int main() { int i=1, sum=0; while(i<=99) {sum+=i; i+=2; } printf("sum=%d\n",sum); return 0; } 例 5.2 # include <stdio.h> int main() { int n,sum=0; do { scanf("%d",&n); sum+=n; }while(sum<=1000); printf("sum=%d\n",sum); return 0; } 例 5.3 # include <stdio.h> int main() { int num,digit; printf("Input a number: "); scanf("%d",&num); do {digit=num%10; printf("%d",digit); num/=10; }while(num!=0); printf("\n"); return 0; } 例 5.4 # include <stdio.h> int main() { int i,n; long s=1; printf("Input a number(1~10): "); scanf("%d",&n); for(i=1;i<=n;i++) s = s*i; printf("%d!=%ld\n",n,s); return 0; } 例 5.5 #include<stdio.h> int main() { int n=0; printf("Input a string: "); for(;getchar()!='\n';n++) ; printf("%d\n",n); return 0; } 例 5.6 # include <stdio.h> int main() { int i,j; for(i=1;i<10;i++) /*外层循环控制输出的行数*/ { for(j=1;j<=i;j++) /*内层循环控制每行输出的列数,以及输出的内容*/ printf("%d*%d=%-3d",j,i,i*j); printf("\n"); } return 0; } 例 5.7 # include <stdio.h> int main() { int i,j,k,n=5; char c1= ‘ ’, c2=‘*’; for(i=0;i<n;i++) {for(j=0;j<n-i;j++) /*输出每行中前面部分的若干个空格*/ printf("%c", c1); for(k=0;k<=2*i;k++)/*输出每行中后面部分的若干个*号*/ printf("%c", c2); printf("\n"); } return 0; } 例 5.8 # include <stdio.h> int main( ) {int i, j; double item, sum; /* item 存放阶乘 */ sum = 0; for( i = 1; i <= 100; i++ ) { item = 1; /* 每次求阶乘都从 1 开始 */ for ( j = 1; j <= i; j++ ) /* 内层循环算出 item = i! */ item = item * j; sum = sum + item; } printf("1! + 2! + 3! + … + 100! = %e\n", sum); } 例 5.9 #include<math.h> int main() { int i,m,k; printf("Input a number: "); scanf("%d",&m); k=sqrt(m); for(i=2;i<=k;i++) if (m%i==0) break; if (i<=k) printf("%d is not a prime number.\n",m); else printf("%d is a prime number.\n",m); return 0; } 例 5.10 # include <stdio.h> int main() {int i=0,n; long sum=0; while (i<100) {scanf("%d",&n); i++; if (n<=0) continue; sum+=n; } printf("sum=%ld\n",sum); return 0; } 例 5.11 # include <stdio.h> int main() { int i,n,sum=0; i=1; scanf(“%d”,&n); loop : if (i<=n) { sum+=i; i++; goto loop; } printf("sum=%d\n",sum); return 0; } 例 5.11 # include <stdio.h> # include <math.h> int main() { float i=1.0; int k=1; double t=1.0, pi=0; do{ pi= pi+t; i+=2; k=-k; t=k/i; }while(fabs(t)>=1e-6); pi= pi*4; printf("pi=%f\n",pi); return 0; } 例 5.12 # include <stdio.h> int main() { float x; int i=0, j=0, k=0, n; for (n=1: n<=1000: n++) { printf("请输入第%d 个学生的成绩。\n", n); scanf("%f ", &x); if (x>=80) i++; else if (x>=60) j++; else k++; } printf("大于或等于 80 分的人数为%d。\n", i); printf(大于或等于 60 分并且小于 80 分的人数为%d。\n", j); printf("小于 60 分的人数为%d。\n", k); return 0; } 例 5.13 # include <stdio.h> int main() {int men,women,child; for(men=0;men<=45;men++) for(women=0;women<=45;women++) for(child=0;child<=45;child++) if(men+women+child==45&&men*3+women*2+child*0.5==45) printf("men=%d women=%d child=%d\n",men,women,child); return 0; } 例 5.13 # include <stdio.h> # include <math.h> int main() { float i=1.0; int k=1; double t=1.0, pi=0; do{ pi= pi+t; i+=2; k=–k; t=k/i; }while(fabs(t)>=1e–6); pi= pi*4; printf("pi=%f\n",pi); return 0; } 例 5.14 # include <stdio.h> int main() {int men,women,child; for(men=0;men<=45;men++) for(women=0;women<=45;women++) for(child=0;child<=45;child++) if(men+women+child==45&&men*3+women*2+child*0.5==45) printf("men=%d women=%d child=%d\n",men,women,child); return 0; } 改进后的程序如下: # include <stdio.h> int main() { int men,women,child; for(men=0;men<=15;men++) for(women=0;women<=22;women++) { child=45–men–women; if (men*3+women*2+child*0.5==45) printf("men=%d women=%d child=%d\n",men,women,child); } return 0; } 例 5.15 main( ) {int m, n, p, q, k, t ; scanf(“%d, %d”, &m,&n); if (n<m) {q=n; p=m; } /*m 和 n 中的大数放在 p 中,小数放在 q 中*/ else {q=m; p=n; } for(k=1; k<=q; k++) if (n%k==0 && m%k==0) t=k; if (t==1) printf(“%d 和%d 互质\n”, m, n); else printf(“%d 和%d 的最大公约数是:%d\n”, m, n, t); for(k=m*n; k>=p; k--) if (k%n==0 && k%m==0) t=k; printf(“%d 和%d 的最小公倍数是:%d\n”, m, n, t); } 例 6.1 #include <stdio.h> int main() {int n, sum=0, a[10]; float aver; for ( n=0; n<10; n++) {scanf(“%d”, &a[n]); sum=sum+ a[n]; } aver =sum/10.0: for(n=0;n<=9;n++) printf(“%d,”, a[n]); printf(“%d,%f\n”, sum,aver); return 0; } 例 6.2 # include <stdio.h> # define N 10 int main() { int n,k,sign=0; int num[N]={16,35,48,29,56,43,93,64,90,48}; printf("请输入被查找的数: ") ; scanf("%d", &n); for ( k=0; k<N; k++) if (n==num[k]) {printf("被查找的数%d 在数组的第 %d 个位置 \n",num[k] , k+1); sign=1;} if (sign!=1 ) printf("Have no this number.") ; return 0; } 例 6.3 # define N 10 # include <stdio.h> # include <math.h> int main() {int k, max, loca=0, a[N]; srand(time(NULL) ); /*设置随机数种子为当前时间*/ for (k=0;k<N;k++) a[k]=rand(); /*产生随机数*/ for (k=0;k<N;k++) printf("%d,",a[k]); printf("\n"); max=a[0]; for(k=1;k<N;k++) if (a[k]>max) {max=a[k]; loca=k;} printf("%d,%d\n",max,loca); return 0; } 例 6.4 # define N 10 # include <stdio.h> int main ( ) { int i, j, m, temp, a[N]; for (i=0; i<N; i++) scanf ("%d", &a[i]); for(i=0;i<=N-1;i++) printf("%5d", a[i]); printf("\n"); for (i=0; i<=N-2; i++) {m=i; for (j=i+1; j<=N-1; j++) if (a[j]>a[m]) m=j; temp=a[i]; a[i]=a[m]; a[m]=temp; } for (i=0; i<=N-1; i++) printf ("%5d", a[i]); printf("\n"); return 0; } 例 6.5 # define N 11 # include <stdio.h> int main() {int i,k,y; int x[N]={98,96,87,78,72,64,56,51,43,36}; for (k=0;k<=N-2;k++) printf(“%d ,”,x[k]); printf(“\n input the number inserted\n”); scanf(“%d”,&y); if (y<=x[N-2]) x[N-1]=y; /*若 y 小于或等于 x[N-2],则将 y 插在最后*/ else { i=0; while (i<N-1) {if (y>x[i]) /*若 y 大于 x[i],则将 y 插在下标为 i 的位置*/ {for (k=N-2;k>=i;k--) /*下标大于或等于 i 的元素依次向后移动一个位置*/ x[k+1]=x[k]; x[i]=y; break; } i++; } } for (k=0;k<=N-1;k++) printf(“%d ,”,x[k]); printf(“\n”); return 0; } 例 6.6 # define N 15 # include <stdio.h> int main() { int top, bott, mid, loca, a, b[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; scanf("%d",&a); top=0; bott=N-1; loca=-1; while (top<=bott) {mid=(top+bott)/2; if (a==b[mid]) {printf("%d,%d\n", a, mid); loca=mid; break; } else if (a<b[mid]) bott=mid-1; else top=mid+1; } if (loca==-1) printf("Did not find out %d\n",a); return 0; } 例 6.7 # include <stdio.h> int main() { int a[2][3],b[2][3],c[2][3],d[2][3] ,i,j,k=1; for (i=0;i<2;i++) for (j=0;j<3;j++) {a[i][j]=k++; b[i][j]=a[i][j]+6; } for (i=0;i<2;i++) for (j=0;j<3;j++) {c[i][j]=a[i][j]+2*b[i][j]; d[i][j]=8*a[i][j]-b[i][j]; } for (i=0;i<2;i++) {for (j=0;j<3;j++) printf("%5d”,c[i][j]); printf("\n"); } for (i=0;i<2;i++) {for (j=0;j<3;j++) printf("%5d”,d[i][j]); printf("\n"); } return 0; } 例 6.8 # include <stdio.h> int main() { int a[2][2]={1,2,4,5}; int b[2][2]={7,8,10,11}; int i,j,a1[2][2],b1[2][2],c[2][2]; for (i=0;i<2;i++) for (j=0;j<2;j++) {a1[j][i]=a[i][j]; /* a1 是 a 的转置矩阵*/ b1[j][i]=b[i][j]; /* b1 是 b 的转置矩阵*/ } for (i=0;i<2;i++) for (j=0;j<2;j++) c[i][j]=5*a1[i][j]-2*b1[i][j]; for (i=0;i<2;i++) {for (j=0;j<2;j++) printf("%5d”,c[i][j]); printf("\n"); } return 0; } 例 6.9 # define N 7 # include <stdio.h> int main() {int i, j, a[N][N]; for (i=1; i<N; i++) /*第 1 列和对角线的元素值都取 1*/ {a[i][i]=1; a[i][1]=1; } for (i=3; i<N; i++) for (j=2; j<=i-1; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; /*除第 1 列和对角线及对角线以上的元素外*/ /*其它元素 a[i][j]满足 a[i][j]=a[i-1][j-1]+a[i-1][j]*/ for (i=1; i<N; i++) {for (j=1; j<=i; j++) printf(“%5d”, a[i][j]); printf(“\n”); } return 0; } 例 6.10 # define M 60 # define N 5 int main() {int i, j; float score[M][N], aver[M], sum; for (i=0; i<M; i++) /*输入每个学生成绩*/ for (j=0; j<N; j++) scanf(“%f”, &score[i][j]); for (i=0; i<M; i++) {sum=0; for (j=0; j<N; j++) /*计算每个学生总分及平均分*/ sum=sum+ score[i][j]; aver[i]=sum/N; } for (i=0; i<M; i++) printf(“%f\n”, aver[i]); } 例 6.11 #include <stdio.h> #define N 100 /*假设输入的字符数小于 100*/ int main() { char a[N]; int i, k=0; scanf ("%c", &a[k]); while(a[k]!= '#') { k++; scanf ("%c", &a[k]); } for (i=0; i<k; i++) if ('a'<=a[i]&&a[i]<='z'||'A'<=a[i]&&a[i]<='Z') printf ("%c", a[i]); printf("\n"); return 0; } 例 6.12 # include <stdio.h> int main() { char a[30]; int i,k=0; printf("请输入一串字符(小于 30 个字符)\n"); scanf("%s",a); printf("%s\n",a); for (i=0;i<30;i++) if ('a'<=a[i]&&a[i]<= 'z') k++; printf("其中小写英文字母有%d 个\n",k); return 0; } 例 6.13 int main() { int i; char s1[12]={"abcdefghijk"}; char s2[10]="123456"; strcpy(s1,s2); puts(s1); puts(s2); for (i=0;i<12;i++) printf("%c,",s1[i]); printf("\n"); strcpy(s1,"ABCDEFGH"); puts(s1); for (i=0;i<12;i++) printf("%c,",s1[i]); return 0; } 例 6.14 # include <string.h> # include <stdio.h> int main() {int i, j=0; char ch, s1[30], s2[30] ; printf("Please input a string:"); gets(s1); printf("Please input a char:"); scanf("%c",&ch); for (i=0;s1[i]!='\0';i++) if (s1[i]!=ch) s2[j++]=s1[i]; s2[j]='\0'; puts(s2); return 0; } 例 6.15 # define K 10 # include <stdio.h> int main() { int m, n; char ch, a[K+1]; printf(“input character :\n”); for ( n=1; n<=K; n++) /*没有使用下标为 0 的数组元素*/ scanf(“%c”,&a[n]) ; for ( n=1; n<=K-1; n++) for ( m=1; m<=K-n; m++) if (a[m]>a[m+1]) {ch= a[m]; a[m]= a[m+1]; a[m+1]=ch;} for ( n=1; n<=K; n++) printf(“%3c”, a[n]) ; return 0; } 使用冒泡法,也可以对若干个数字或若干个字符串进行排序(升序或降序)。下面程序是对 K个字符串进行从小到大排序。 #include <string.h> #include <stdio.h> #define K 6 int main() { int m, n; char ch[10] , a[K][10]; printf("input character string:\n"); for ( n=0; n<=K–1; n++) gets(a[n]) ; for ( n=0; n<=K–2; n++) for ( m=0; m<=K–2–n; m++) if (strcmp(a[m],a[m+1])>0) {strcpy(ch, a[m] ); strcpy( a[m], a[m+1] ); strcpy(a[m+1], ch); } for ( n=0; n<=K–1; n++) puts(a[n]); return 0; } 例 6.16 # include <string.h> # include <stdio.h> # define N 6 int main() { int i,k=0,h; char big[20], str[N][20]; /*设每个字符串的长度都小于 20*/ for (i=0;i<N;i++) gets(str[i]); strcpy(big,str[0]); h=strlen(str[0]); for (i=1;i<N;i++) {if (strcmp(str[i],big)>0) strcpy(big,str[i]); if (strlen(str[i])>h) { h=strlen(str[i]); k=i; } } printf("The largest string is:%s\n",big); printf("The longest string is:%s, the length is %d\n",str[k],h); return 0; } 例 6.17 # include <string.h> # include <stdio.h> int main( ) { char str1[80],str2[80]; int i,j=0,k=0,num; gets(str1); while (str1[k]==' ') k++; /*循环结束时,k 值是英文句子前面的空格数*/ for (i=k;str1[i]!='\0';i++) str2[j++]=str1[i]; /*将 str1 的前端空格去除后复制到 str2 中*/ if (strlen(str2)==0) printf("There are 0 words \n"); /*若输入的是空句子,包含 0 个单词*/ else {num=1; for (i=1;str2[i]!='\0';i++) if (str2[i]==' '&&str2[i+1]!=' ') num++; /*若一个空格后连接一个非空格,则表示出现了一个单词*/ printf("There are %d words \n",num); } return 0; } 例 6.18 # include <stdio.h> # define N 6 int main() {char number[N][10], name[N][10], phnoe[N][15], address[N][20], find[10]; int k, p,mark=0; for(k=0; k<N; k++) /*输入每个学生的信息*/ {gets(number[k]); gets(name[k]); gets(phnoe[k]); gets(address ); } printf(“输入需要查找的学生的学号:\n” ); gets(find); for(k=0; k<N; k++) if (strcmp(find, number[k])==0) {p=k; mark=1; break;} if (mark==1) printf(“%s,%s,%s,%s\n”, number[p], name[p], phnoe[p]),address[p]); else printf(“没有发现!”); return 0; } 例 7.1 #include <stdio.h> #define N 10 int score[N]={97,90,88,82,79,78,73,68,66,65}; void function1( ) {int i; float s=0; for(i=0;i<N;i++) s=s+score[i]; printf("平均分为:%f\n", s/N); return ; } int function2(int n) {int i,j,k=–1; for(i=0;i<N;i++) if (n==score[i]) k=i+1; return k; } int main() { int a, t; function1( ); printf("输入一个分数"); scanf("%d",&a); t=function2(a); if (t>=0) printf("该分数在%d 个分数中排名第%d。",N,t); else printf("不存在此分数!"); return 0; } 例 7.2 例 7.2 int max(int a, int b) { int x; if(a>b) x=a; else x=b; return x; } 例 7.3 #include<stdio.h> void fun(int b) /*函数定义,b 为形参*/ { int st[20]={2,6,3,5,7,1,4,3,4,2,2,6,6,1,7,5,5,2,1,7}; int k ,n=0; for (k=0; k<20; k++) if (st[k]==b) n++; printf("\n %d appear %d times.\n", b,n); } int main() { int a,yn=0; while(yn==0) { printf("Input a number(0—9): "); scanf("%d", &a); fun(a); /*调用函数,a 为实参*/ printf("If continue, please input 0, otherwise input 1:"); scanf("%d", &yn); } return 0; } 例 7.4 #include <stdio.h> float fadd(float a , float b) /*函数定义*/ {float s; s=a+b; return(s); /*返回计算结果:两个实数的和*/ } int main() { float x,y,sum,aver; scanf(“%f,%f”,&x,&y); /*输入两个实数*/ sum=fadd(x,y); /*函数调用*/ aver=fadd(x*x,y*y)/2; printf(“\n%f,%f”,sum,aver); return 0; } 例 7.5 # include <stdio.h> #include <math.h> int prime(int i) /*函数定义*/ { int j,k,flag=1; k=sqrt(i); for (j=2;j<=k;j++) if (i%j==0) {flag=0; break; } return flag; } int main( ) { int i; for (i=3; i<100; i++) if (prime(i)==1) /*函数调用*/ printf ("%4d",i) ; printf("\n"); return 0; } 例 7.6 #include <stdio.h> int imax(int x,int y) /*函数定义*/ {return (x>y?x:y); } int main() { int n1,n2,n3,n4,d; scanf(“%d,%d,%d,%d”,&n1,&n2,&n3,&n4); d=imax(imax(n1,n2),imax(n3,n4)); /*函数调用*/ printf(“The max=%d”,d); return 0; } 例 7.7 #include <stdio.h> double sum(int m); /*函数声明*/ long fact(int p); /*函数声明*/ int main() { int n; float total; printf(“\nplease input n:”); scanf(“%d”,&n); total=sum(n); /*函数调用*/ printf(“\ne=%f”, total); return 0; } double sum(int m) /*函数定义*/ { double s=1; int i; for(i=1;i<=m; i++) s+=1.0/fact(i); /*函数调用*/ return(s); } long fact(int k) /*函数定义*/ { long f=1; int i; for(i=1;i<=k; i++) f*=i; return(f); } 例 7.8 #include <stdio.h> long fact(int n); /*函数声明*/ int main() { int n; printf(“\nplease enter n:”); scanf(“%d”,&n); printf(“\n n!=%ld”,fact(n)); /*函数调用*/ return 0; } long fact(int n) /*函数定义*/ {if (n==1||n==0) return(1); /*若是终结条件,返回终结条件下的值*/ else return(n*fact(n-1)); /*若非终结条件,递归调用函数自身*/ } 例 7.9 #include <stdio.h> long fib(int n); /*函数声明*/ int main ( ) {int i ; for (i=1; i<=20; i++) { printf (“%10ld”, fib(i)) ; /*函数调用*/ if ( i%5==0 ) printf(“\n”); } return 0; } long fib(int n) /*函数定义*/ {if ((n==1)||(n==2)) return 1; else return (fib(n-1)+fib(n-2)); } 例 7.10 #include <stdio.h> void move(char x,char y) {printf(“%c-->%c\n”,x,y); } void hanoi(int n,char one,char two,char three) { if (n==1) move(one,three); else {hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } main() {int m; scanf(“%d”,&m); hanoi(m,‘A’,‘B’,‘C’); } 例 7.11 #include <stdio.h> void add(int b[],int n); /*函数声明*/ int main() {int i,a[ ]={0,1,2,3,4,5,6,7,8,9}; for(i=0;i<10;i++) printf(“%3d”,a[i]); add(a,10); /*函数调用*/ for(i=0;i<10;i++) printf(“%3d”,a[i]); return 0; } void add(int b[],int n) /*函数定义*/ { int i; for(i=0;i<n;i++) b[i]+=3; return; } 例 7.12 #include <stdio.h> #define N 100 float average(float a[],int n); /*函数声明*/ int main() {float weight[N],aver; int i, num=0; printf("input weight:\n"); for(i=0;i<N;i++) scanf("%f",& weight[i]); printf("\n"); aver=average(weight, N); /*调用函数 average,数组名 weight 为实参*/ printf("average=%f\n",aver); for(i=0;i<N;i++) {if (weight[i]<aver) num++; } printf("less than average: %d", num); return 0; } float average(float a[ ],int n) /*定义函数 average,计算平均体重。*/ {int i; float av , sum=a[0]; for(i=1;i<n;i++) sum=sum+a[i]; av=sum/n; return(av); } 例 7.13 # include <stdio.h> int a=0; float b; /*定义全局变量 a,b*/ float func(int s[ ],int n); /*函数声明*/ int main() { int k; int x[10]; /*定义局部变量*/ for (k=0;k<10;k++) scanf(“%d”,&x[k]); b=func(x,10); for (k=0;k<10;k++) if (x[k]>b) a++; printf(“\n %d”,a); /*输出全局变量 a 的值*/ return 0; } float func(int s[ ],int n) {int k,a=0; float b; /*定义局部变量 k,a,b*/ for(k=0;k<n;k++) a=a+s[k]; printf(“\n%d”,a); /*输出局部变量 a 的值*/ b=(float)a/n; return(b); } 例 7.14 #include <stdio.h> int sum(int x); /*函数声明*/ int main( ) {int i,k; for(i=1;i<=10;i++) {k=sum(i); printf("%d,”, k); } printf("\n1+2+ … +%2d = %2d\n",i–1,k); return 0; } int sum(int x) { static int s=0; /*定义静态存储类型内部变量*/ s=s+x; return s; } 例 7.15 /*file1.c*/ # include <stdio.h> int x=0; int main() { func( ); printf(“\nx=%d”,x); return 0; } /*file2.c*/ extern int x; /*外部变量声明*/ int func( ) { x+=3; } 例 7.16 /*file1.c*/ #include <stdio.h> int main( ) {extern char get_ch(); /*外部函数声明*/ printf(“%c”,get_ch()); return 0; } /*file2.c*/ char get_ch() {char ch; ch=getchar(); if (‘a’<=ch && ch<=‘z’) ch=ch-32; return(ch); } 例 7.17 #include <stdio.h> int numb() /*函数 numb 随机产生一个正的两位整数*/ {int n; mark1: n=rand(); /*rand()值是 0 到 32767 之间的随机整数*/ if (n>=100 || n<10) goto mark1; return n; } void add() /*函数 add 练习加法*/ {int a,b,c,x=1; while(x==1) {a=numb(); b=numb(); printf("%d+%d=",a,b); scanf("%d",&c); if (a+b==c) printf("回答正确!\n"); else printf("回答错误!\n"); printf("若想停止练习加法请输入 0, 否则请输入 1。\n"); scanf("%d",&x); } return; } void sub() /*函数 sub 练习减法*/ {int a,b,c,x=1; while(x==1) {mark2: a=numb(); b=numb(); if (a<b) goto mark2; printf("%d–%d=",a,b); scanf("%d",&c); if (a–b==c) printf("回答正确!\n"); else printf("回答错误!\n"); printf("若想停止练习减法请输入 0, 否则请输入 1。\n"); scanf("%d",&x); } return; } main() {int d; srand(time(NULL)); /*设置随机数种子为当前时间*/ while (1) {printf("––––––––––––小学生两位数加、减法练习软件–––––––––––\n"); printf("––––––––––––––––––––1、练习两位数加法––––––––––––––\n"); printf("––––––––––––––––––––2、练习两位数减法––––––––––––––\n"); printf("––––––––––––––––––––3、结束练习––––––––––––– –––––\n"); printf("–––请输入 1 或 2 或 3–––:"); scanf("%d",&d); if (d==1) add(); else if (d==2) sub(); else if (d==3) {printf("––––––本次练习结束了,再见!––––––– \n"); break; } else printf("––––––输入错误!请重新输入!––––– \n"); } } 例 7.18 #include <stdio.h> #define SIZE 100 /*不妨设班级学生数少于 100*/ void inputdata( ); /*函数声明*/ void calculdata( ); /*函数声明*/ void statisdata( ); /*函数声明*/ void querydata ( ); /*函数声明*/ float score[SIZE][4]; /* score 存储每个学生平时、期中、期末和总评成绩*/ char name[SIZE][15]; /* name 存储每个学生姓名*/ int sum; /* sum 存储实际学生人数*/ int main() { int choo; while(1) { printf("请选择下面的某一项任务:"); printf("\n(1)输入每个学生的姓名、平时成绩、期中成绩、期末成绩。"); printf("\n(2)计算并输出每个学生的总评成绩。"); printf("\n(3)根据总评成绩对学生分类统计,输出各分数段的学生数。"); printf("\n(4)根据输入的学生姓名,查找并打印该学生的各项成绩。"); printf("\n(5)结束程序运行。"); printf("\n 请输入你的选择(1 或 2 或 3 或 4 或 5):"); scanf("%d", &choo); if (choo==5)break; switch(choo) {case 1 : inputdata( ); break; /*调用输入学生姓名成绩函数*/ case 2 : calculdata( ); break; /*调用计算总评成绩函数*/ case 3 : statisdata( ); break; /*调用统计各分数段人数函数*/ case 4 : querydata( ); break; /*调用根据姓名查找函数*/ } } printf("\n 程序运行结束,再见。"); return 0; } void inputdata( ) /*输入学生姓名成绩函数*/ { printf("请输入实际学生人数:"); scanf("%d", &sum); int i; for(i=0;i<sum;i++) {printf("\n 请输入第%d 个学生的姓名:",i+1); gets(name[i]); printf("请顺序输入该学生平时、期中、期末成绩(例如 98,85,96):"); scanf("%f,%f,%f",&score[i][0], &score[i][1],&score[i][2]); } return; } void calculdata( ) /*计算总评成绩函数*/ { int i; for(i=0;i<sum;i++) score[i][3]= 0.1*score[i][0]+ 0.3*score[i][1]+ 0.6*score[i][2] printf("\n 每个学生总评成绩如下:\n"); for(i=0;i<sum;i++) printf("%s:%f\n",name[i],score[i][3]); return; } void statisdata( ) /*统计各分数段人数函数*/ { int i,d, grade[5]={0}; /* grade 存储分类统计结果(各分数段人数)*/ for (i=0;i<sum;i++) { d=(int)(score[i][3]/10); switch(d) { case 10 : case 9 : grade[4]=grade[4]+1;break; case 8 : grade[3]=grade[3]+1;break; case 7 : grade[2]=grade[2]+1;break; case 6 : grade[1]=grade[1]+1;break; default : grade[0]=grade[0]+1; } } printf("\n 总评成绩≥90 的人数是:%d", grade[4] ); pr...