Q=-b+sqrt(disc性格测试)/(2*a); P=-b-sqrt(disc性格测试)/(2*a); sqrt使用函数错哪了?希望高手帮帮忙。

当前位置: >>
二级C语言上机考题
填空题: 填空题: 一、数字题: 1用函数指针指向要调用的函数,规定 在_2_处使f指向函数f1,在_3_处使f 指向函数f2。 当调用正确时, 程序输出: x1=5.=3.*x1+x1* x2=40.000000 double fun(double a, double b) {double (*f)();double r1,r2; doubl
e f=f1 f1;r1=f(a);f=f2 f2;r2 = (*f)(a,b); f1 f2 return r1+r2;} 2用函数指针指向要调用的函数,规定 在_2_处使f指向函数f1,在_3_处使f 指向函数f2。 当调用正确时, 程序输出: x1=5.=3.*x1+x1* x2=40.000000 double fun(double x, double y) {if(i==1)return f1 f1(x); else return f2 f2(x,y); } 3将形参n所指变量中各位上为偶数的 数去除, 剩余的数按原来从高位到低位 的顺序组成一个新的数, 并通过形参指 针n传回所指变量。 例如, 输入一个数: ,新的数:为739。 void fun(unsigned long *n) {unsigned long x=0,i;i=1; while(*n){t=*n%10 10; 10 if(t%2!=0){x=x+t*i;i=i*10;} 0 *n=*n/10;}*n=x;} x 4将形参n所指变量中各位上为偶数的 数取出, 并按原来从高位到低位相反的 顺序组成一个新的数, 并作为函数值返 回。例如,输入一个数:,新 的数为64862。 unsigned long fun(unsigned long n) {unsigned long x=0; while(n) {t=t%10; if(i%2= = 0)x=10*x 10*x+t; 10*x n=n/10; n/10;}} n/10; 5将形参n所指变量中各位上为偶数的 数取出, 并按原来从高位到低位的顺序 组成一个新的数,并作为函数值返回。 例如,输入一个数:,新的数 为26846。 unsigned long fun(unsigned long n) {unsigned long x=0,s,i; s=n;i=1; 1 while(s) s {t=s%10; if(i%2= = 0)x=x+t*i;i=i*10 i*10;} i*10 s=s/10;}} 2 6 求 方 程 ax +bx+c=0 的根 。 例 如 ,当 a=1,b=2,c=1时, 方程的两个根分别是: x1=-1.00,x2=-1.00。 main() {float a,b,c,disc,x1,x2,p,q; scanf(&%f,%f,%f&,&a,&b,&c); disc=b*b-4*a*c;clrscr(); printf(&*******the result *******\n&); if(disc&=0) {x1=(-b+sqrt(disc))/(2*a) ( b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(&x1=%6.2f,x2=%6.2f\n&,x1,x2);} else{p=-b/(2*a) -b/(2*a); q=sqrt(fabs(disc))/(2*a); sqrt(fabs(disc))/(2*a); sqrt(fabs(disc))/(2*a) printf(&x1=%6.2f+%6.2f i\n&,p,q); printf(&x2=%6.2f-%6.2f i\n&,p,q);}} 7输出方程组A+B=56, A+2B=72的一组正 整数解。结果是:A=40,B=16。 main() {int i,j;clrscr(); for(i=0;i&100; i++) for(j=0;j&100; j++) if(i+j= = 56&&i+2*j= = 72 i+j= i+j 56&&i+2*j= 72) printf(&A=%2d,B=%2d&,i,j i,j);} i,j 2 8求方程ax +bx+c=0的两个实数根。例 如,当a=1,b=2,c=1时,方程的两个根 分别是x1=-1.00, x2=-1.00。 main() {float a,b,c,disc,x1,x2;clrscr(); do{printf(&Input a,b,c:&); scanf(&%f,%f,%f&,&a,&b,&c); disc=b*b-4*a*c; if(disc&0) printf(&disc=%f\n Input again!\n&,disc); }while(disc&0 disc&0); disc&0 printf(&*******the result*******\n&); x1=(-b+sqrt(disc))/(2*a); ( b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a) sqrt(disc))/(2*a); ( printf(&\nx1=%6.2f\nx2=%6.2f\n&,x1,x2);} 9判断一个数的个位数字和百位数字之 和是否等于其十位上的数字, 是则返回 “yes!”,否则返回“no!”。 char *fun(int n){int g,s,b;g=n%10;s=n/10%10; b=n/100%10 n/100%10; n/100%10 if((g+b)= = s)return″yes!″; ″yes!″; ″yes!″ else return″no!″ ″no!″; ″no!″ 10输入一个长整数,如果这个数是负 数,则取它的绝对值,并显示出来。例 如, 输入: -3847652, 结果为: 3847652。 main() {clrscr(); printf(&E\n&); scanf(″%ld″,&n); ″%ld″,&n) printf(&*** the absolute value ***\n&); if(n&0)n=-n; n=n=printf(&\n\n&); printf(″%ld″, n);} ( %ld″ n) 11计算如下公式的值。A1=1,A2= 1/(1+A1),A3=1/(1+A2),…,AN=1/(1+A N+1)若n=10,则应输出:0.618056。 float fun(int n) {float A=1; 1 for(i=1;i&=n;i++)A=1.0/(1+A); n A;} return A 12计算并输出下列级数的前N项之和 SN,直到SN+1大于q为止。 SN=2/1+3/2+4/3 +…N+1/N例如,若q的值为50.0,则函 数值为50.416687。 double fun(double q) {n=2;s = 2.0; while(s&= &=q){s=s+(double)(n+1)/n; &= n++;}printf(&n=%d\n&,n); n++;} 13计算S=f(-n)+f(-n+1)+… +f(0)+f(1)+f(2)+…+f(n)的值。当n 为5时,S的值为:10.407143。 ┌(x+1)/(x-2) x&0 f(x) =┤0 x=0 或 x=2 └(x-1)/(x-2) x&0 float f(double x) {if(x==0.0||x==2.0)return 0.0; else if(x&0.0)return(x -1)/(x-2); else return (x +1)/(x-2);} double fun(int n) {double s=0.0,y; for(i=-n;i&=n;i++) n {y=f(1.0*i);s+=y;}} 14求1+2!+3!+...+N! 的和。 若N=6则和 为873。 main() {int i,n;long s=0,t=1; clrscr();printf(&\nInput n:\n&); scanf(&%d&,&n &n); &n for(i=1;i&=n;i++){t=t*i;s=s+t t*i; s+t;} t*i s+t printf(&1!+2!+3!...+%d!=%ld\n&,n,s);} 15计算Sn=1/1-1/3+1/5-1/7+… 1/(2n+1)的值。若n的值为15时,输出 的结果是:S=0.769788,N=15。 void fun(float *sn,int n) {int i,j=1;float s=0.0; 1 for(i=0;i&=n;i++) {s=s+j*1.0/(2*i+1);j*=-1;}*sn *sn=s;} *sn main() {int n=15;fun(&s,n &s,n); &s,n printf(&S=%f N=%d\n&,s,n);} 16 计 算 SN 的 值 : SN=1/1+3/1+5/4+ … +(2N-1)/(SN-1)当N=50时,SN=71.433699。 double fun(int n) {double s=1.0,s1=0.0; for(k=2 k=2;k&=n;k++) k=2 {s1=s;s+=(2*k-1)/s1 s+=(2*ks+=(2*k 1)/s1;}} 3 1 5 3 7 5 17 计 算 S 的 值 : s=1 /3 *3 /5 *5 /7 * … *(2k-1) /(2k+1)2k+1 2k-1当k=5时,s=338.215158。 double fun(int n) {double s=1;double f=0.0; 1 double p=0.0;int i=0; for(k=1; k&=n;k++) k&=n; {f=2*k-1;p=2*k+1; for(i=1;i&2*k+1;i++)f*=2*k-1; for(i=1;i&2*k-1;i++)p*=2*k+1; s*=f/p; s*=f/p;}} 2 2 2 18计算下式:S=3/2 -5/4 +7/6 -… n-1 2 +(-1) *(2n+1)/(2n) ,直到 2 -3 (2n+1)/2n 的绝对值小于等于10 ,并 把计算结果作为函数值返回。 例如, 若 E的值为1E-3,函数值为0.551690。 double fun(double e) {int i,k;double s,t,x; s=0;k=1;i=2;x=3/4; 3 while(x&e) & {s=s+k*x;k=k*(-1);t=2*i; x=(2*i+1) (2*i+1)/(t*t);i++;}} (2*i+1) 19求P的值p=m!/(n!*(m-n)!)例如: m=11, n=4时, 运行结果为330.000000。 long jc(int m){long s=1; for(i=1;i&=m;i++)s=s*i s*i;} s*i float fun(int m,int n) { p=1.0*jc(m)/jc(n)/jc(m-n);} return p 2 2 20计算S的值:s=(1*3)/2 +(3*5)/4 + 2 2 (5*7)/6 +…+(2*n-1)*(2*n+1)/(2+n) 例如,当形参N的值为10时,函数返回 9.612558。 double fun(int n) {double s,t;s=0; 0 for(i=1;i&=n;i++) n {t=2.0*i; s=s+(2.0*i-1)*(2.0*i+1)/(t*t) (t*t);} (t*t)} 2 2 21计算S的值:s=(1*3)/2 -(3*5)/4 + 2 (5*7)/6 -… n-1 2 +(-1) (2*n-1)*(2*n+1)/(2+n) 例如,当形参N的值为10时,函数返回 -0.204491。 double fun(int n) {int i,k;double s,t;s=0;k=1; 1 for(i=1;i&=n;i++) {t=2*i 2*i; 2*i s=s+k*(2*i-1)*(2*i+1)/(t*t); k=k*(-1) ( 1);}2 2 2 22 计 算 下 式 : S=1/2 +3/4 +5/6 + … + 2 (2N-1)/(2N) double fun(double e) {double s,x;s=0;i=0;x=1.0; 0 while(x&e){i++ i++; i++ x=(2.0*i)/((2.0*i 2.0*i)*(2.0*i)); 2.0*i s=s+x;}} 23判断某一个年份是否为闰年。例如, 1900年不是闰年,2004是闰年。 int fun(int n) {int flag=0; if(n%4= = 0){if(n%100!=0 n%100!=0)flag=1;} n%100!=0 if(n%400= = 0)flag=1;} n%400= n%400 24从键盘输入3个整数,然后找出最大 的数并输出。例如,输入12,45,43,最 大值为45。 main() {int a,b,c,clrscr(); printf(&\nInput three numbers:\n&); scanf(&%d,%d,%d&,&a,&b,&c); printf(&%d,%d,%d\n&,a,b,c); if(a&b)max=a;else max=b max=a; max=b; max=a if(max&c) max=c max=c; printf(&max=%d\n&,max);} 25使从键盘上输入一个整数n,输出n对 应的斐波那契数列。 main() {int i,n=0;scanf(&%d&,&n); for(i=0;i&n;i++) printf(&%d &,fun(i));} int fun(int n) {if(n= = 0) return 0; n else if(n= = 1)return 1; n else return fun(n-1)+fun(n-2);} fun(n-1)+fun(n-2); 26找出100至x (x≤999) 之间各位上的 数字之和为15的所有整数,然后输出; 符合条件的整数个数作为函数值返回。 当n值为500时, 各位数字之和为15的整 数有:159、168、177……共有26个。 fun(int x) {int n,s1,s2,s3,t;n=0;t=100; 0 while(t&=x) x {s1=t%10;s2=(t/10)%10 (t/10)%10 (t/10)%10;s3=t/100; if(s1+s2+s3==15){printf(&%d&,t); n++;}++t; ++t;}} ++t; 27找出100-999之间(含100和999)所 有整数中各位上数字之和为X X为一个 ( 正整数)的整数,然后输出。符合条件 的整数个数作为函数值返回。 例如:当X 值为5时,满足条件的数为:104、113、 122、131、140、203、212、221、230、 302、311、320、401、410、500共有15 个。 int fun(int x) {int n,s1,s2,s3,t;n=0;t=100; while(t&=999 999) 999 {s1=t%10;s2=(t/10 t/10)%10;s3=t/100; t/10 if(s1+s2+s3==x){printf(“%d”,t); x n++;}t++;}} 28打印出1~1000中满足: 个位数字的立 方等于其本身所有数。本题的结果为: 1,64,125,216,729 main() {int i,g;clrscr(); for(i=1;i&1000;i++){g=i%10 i%10; i%10 if(g*g*g= = i)printf(&%4d&,i);}} g*g*g= g*g*g 29打印出满足个位的数字、 十位上的数 字和百位上的数字都相等的所有三位数 。 本 题 的 打 印 结 果 为 : 111,222,333,444,555,666,777,888,999。 main() {int g,s,b;clrscr(); for(g=1;g&10;g++) for (s=1;s&10;s++) for(b=1;b&10;b++) {if(g= = s&&s= = b) g s&&s= printf(&%5d&,g+s*10+b*100 g+s*10+b*100);}} g+s*10+b*100 30求两个正整数m和n的最大公约和最 小公倍数。 main() {int a,b,n,m,t;clrscr(); printf(&\nInput two numbers:\n&); scanf(&%d,%d&,&n,&m); if(n&m){a=m;b=n;}else{a=n;b=m;} while(b!=0 b!=0){t=a%b; a%b;a=b;b=t;} b!=0 a%b; printf(&greatest common divisor:%d\n&,a);printf(&least common multiple:%d\n&,n*m/a n*m/a);} n*m/a31从键盘输入只有两个整数参与运算 的一个四则运算式,然后计算出它的 值。注意数字全部为正整数。例如,输 入308*28,结果为。 main() {int a=0,b=0,flag=1,fg=1;char *p, char str[10];clrscr(); printf(&\n Input a string \n&); gets(str);p= while(*p) {if(*p&='0'&&*p&='9'&&flag= = 1) a=a*10+*p-'0' a*10+*pa*10+*p '0'; else if(fg){ch=*p;flag=2;fg=0;} if(*p&='0'&&*p&='9'&&flag==2) b=b*10+*p-′0′;p++;} b*10+*pb*10+*p switch(ch ch) ch {case '+':result=a+b; case '-':result=a-b; case '*':result=a*b; case '/':result=(float)a/b;} printf(&\nresult=%f&,result);} 32计算两个自然数n和m(m&10000)之间 所有数的和 (n和m从键盘输入) 例如: 。 当n=1,m=100时,sum=5050 main() {int n,m;sum=0; sum=0; sum=0 printf(&\nInput n,m\n&); scanf(&%d,%d&,&n,&m); while(n&=m){sum+=n;n++;} sum+=n; sum+=n printf(&sum=%ld ld\n&,sum);} ld 33求k! (k&13) 并通过函数名传回主函 数。 例如: = 10, 若k 则应输出: 3628800。 long fun(int k) {if(k&0)return(k*fun(k-1)); & k else if(k= = 0)return 1L;} = 34求n!。例如7!=5040。 main() {int i,n;long f=1;printf(&Input n:&); scanf(&%d&,&n &n); &n for(i=1 i=1;i&=n;i++)f*=i f*=i; i=1 f*=i printf(&%d!=%ld\n&,n,f);} 35把从键盘输入的3个整数按从小到大输 出。若输入33,78,25.则输出25,33,78。 main() {int x,y,z,t;clrscr(); printf(&Input x,y,z\n&); scanf(&%d%d%d&,&x,&y,&z); if(x&y x&y){t=x;x=y;y=t;} if(x&z x&z){t=z;z=x;x=t;} x&z if(y&z y&z){t=y;y=z;z=t;} y&z printf(&******the result*******\n&); printf(&from small to big:%d %d %d\n&,x,y,z);} 36将十进制正整数m转换成k进制 (2≤k ≤9)数的数字输出。例如,若输入8 和2,则应输出1000 void fun( int m, int k ) {int aa[20],i; for(i=0;m;i++ ){aa[i]=m%k m%k;m/=k;} m%k k for(;i;i- - )printf(&%d&,aa aa[i-1]);} aa 37 求二分之一的圆面积,若圆的半径 为 19.527 则输出为:s=598.950017。 float fun ( float r ) {return 3.14159 * r * r /2.0;} main( ) {printf(&Enter x:&); scanf(&%f&,&x &x); &x printf(&s=%f\n &,fun(x));} 38读入一个整数k(2≤k≤10000),打 印它的所有质因子若输入整数:3410, 则应输出:2、5、11、31。 IsPrime(int n) {int i,m;m = 1; for(i=2;i&n;i++)}} if(!(n%i)){m=0;break break %1 main( ) {int j,k;printf(…… ); scanf(&%d&,&k &k);printf(……); &k for( j = 2; j &= j++ ) if((!(k%j))&&(IsPrime(j))) printf(&\n %4d&,j );printf(&\n&);} 39计算并输出n (包括n) 以内能被3或7 整除的所有自然数的倒数之和。如当n 为32后,输出为:s=1.226323。 double fun(int n) {double sum=0.0; if(n&0&&n&=100) {for(i=1;i&=n i&=n;i++) i&=n if(i%3= = 0||i%7= = 0)sum+=1.0/i i%3= 1.0/i;} i%3 0||i%7= 1.0/} 40求出1到1000之内能被7或11整除但 不能同时被7和11整除的所有整数放在 数组a中,通过n返回这些数的个数。 void fun(int *a, int *n) {int i,j=0; for(i=1;i&=1000;i++) {if(((i%7==0)||(i%11==0))&&i%77!=0) a[j++]=i;}*n=j;} i j main() {int aa[1000],n,k;fun(aa, &n ); aa, for(k=0;k&n;k++) if((k+1)%10==0)printf(&\n&); else printf(&%5d&,aa[k]);} 41统计长整数n的各个位上出现数字1、 2、3的次数,并通过外部(全局)变量 c1、 c3返回主函数。 c2、 当n= 时,结果应该为:c1=3、c2=1、c3=2。 void fun(long n) {c1=c2=c3=0; while(n) {switch(n%10 n%10) n%10 {case 1:c1++; break case 2:c2++; case 3:c3++;}n/=10;}} 42计算并输出high以内最大的10个素 数之和。若high的值为100,则函数的 值为732。 int fun(int high) {int sum=0,n=0,j, whil((high&= 2)&& &&(n&10)) && {yes=1; for(j=2;j&=high/2;j++ ) if(high%j==0){yes=0;} break if(yes){sum+=n++;} highhigh- - ;}} 43统计所有小于等于n(n&2)的素数的 个数,素数的个数作为函数值返回。 int fun(int n) {int i,j,count=0;printf(…); for(i=3;i&=n;i++) {for(j=2; j=2;j&i;j++) j=2; if(i%j= = 0) i if(j&=i){count++;printf(…);}}} 44求1~100 (不包括100) 以内所有素数 的平均值。最后结果为42.40。 main() {int i,j,n=0,float aver=0; for(j=2;j&100; j++) {flag=1; for(i=2;i&j; i++) if(j%i= = 0){flag=0;} j%i= j%i if(flag= = 1){n++;aver+=j;}} flag= flag printf(&\n\n average=%4.2f&,aver/n aver/n);} aver/n 45用筛选法可得到2~n(n&10000)之 间的所有素数,方法是:首先从素数2 开始,将所有2的倍数的数从数表中删 去(把数表中相应位置的值置成0); 接着从数表中找下一个非0数,并从数 表中删去该数的所有倍数;依此类推, 直到所找的下一个数等于n为止。这样 会得到一个序列:2,3,5,7,11,13, 17,19,23,…… int fun(int n) {int a[10000],i,j,count=0; for(i=2;i&=n;i++)a[i]=i;i=2; while(i&n) {for(j=a[i]*2;j&=n;j+=a[i] a[i]) a[i] a[j]=0;i++; while(a[i] = 0)i++;}printf(…); a[i]= a[i] for(i=2;i&=n;i++) if(a[i]!=0){count++;printf(…);} 0} 46判断一个数是否为素数。 该数是素数 时,函数返回字符串:yes!,否则函数 返回字符串:no! char *fun(int n) {int i,m;m=1; for(i=2;i&n; i++) 2 if(n%i= = 0){m=0;} n%i= n%iif(m= = 1&&n&1)return(&yes!&); else return(&no!&);} 47寻找两个整数之间的的所有素数 (包 括这两个整数),把结果保存在数组bb 中,函数返回素数的个数。例如,输入 6和21, 则输出为: 7,11,13,17 19,21。 int fun(int n,int m,int bb[N]) {int i,j,k=0, for(j=n;j&=m;j++) {flag=1 flag=1; flag=1 for(i=2;i&j;i++) if(j%i = 0){flag=0;} j%i= j%i if(flag = 1)bb[k++]=j;}} flag= flag 48甲乙丙丁四人同时开始放鞭炮, 甲每 隔t1秒放一次, 乙每隔t2秒放一次, 丙 每隔t3秒放一次,丁每隔t4秒放一次, 每人各放n次。 函数fun的功能是根据形 参提供的值, 求出总共听到多少次鞭炮 声作为函数值返回。 注意, 当几个鞭炮 同时炸响, 只算一次响声, 第一次响声 是在第0秒。 例如, 若t1=7, t2=5, t3=6, t4=4, n=10, 则总共可听到28次鞭炮声。 #define OK(i,t,n) ((i%t= = 0)&&(i/t&n)) i int fun(int t1,int t2,int t3,int t4,int n) {int count,t,maxt=t1; if(maxt&t2)maxt=t2; if(maxt&t3)maxt=t3; if(maxt&t4)maxt=t4;count=1; for(t=1;t&maxt*(n-1);t++) t++){if(OK(t,t1,n)||OK(t,t2,n)||OK(t,t3,n)||OK(t,t4,n))count++;}} 49从三个形参a,b,c中找出中间的那 个数,作为函数值返回。例如,当a=3, b=5,c=4时,中数为4。 int fun(int a, int b,int c) { t=(a&b)?(b&c?b:(a&c?c:a)):((a&c)? a a:((b&c)?c:b));} b 二、数组题: 50删除w数组中下标为k的元素中的值。 arrout(int *w,int m) { for(k=0;k&m;k++)printf(&%d&,w[k]); m printf(&\n&);} arrdel(int *w,int n,int k) { for(i=k;i&n-1;i++)w[i]=w[i+1]; n--;} getindex(int n) {do{ doprintf(&\nEnter the index[0&=i&%d]:&,n);scanf(&%d&,&i);}while(i&0||i&n-1);} 51从数组xx中找出个位和百位的数字 相等的所有无符号整数, 结果保存在数 组yy中,其个数由函数fun返回。当 xx[8]={135,78,72,32,222,424,333,141,541} 时 bb[6]={787,232,222,424,333,141}。 , int fun(int xx[],int bb[],int num) {int i,n=0;int g,b; for(i=0;i&i++){g=xx[i]%10 xx[i]%10; xx[i]%10 b=xx[i]/100; if(g= = b) bb[n++]=xx[i] bb[n++]=xx[i];}} 52从键盘输入一组无符号整数并保存 在数组xx[N]中,以整数0结束输入, 要求这些数的最大位数不超过4位, 编 写函数从数组xx中找出个位和十位的 数字之和大于5的所有无符号整数, 结 果保存在数组yy中,个数由函数fun返 回。当xx[8]={123,11,25,222,42,333, 14,5451}时, bb[4]={25,42,333,5451}。 int fun(int xx[],int bb[],int num) {int i,n=0;int g, for(i=0;i&i++){g=xx[i]%10 xx[i]%10; xx[i]%10 s=xx[i]/10%10; if((g+s)&5)bb[n++]=xx[i];} bb[n++]=xx[i]; bb[n++]=xx[i]} 53求一维数组x[N]的平均值, 并对所得 结果进行四舍五入(保留两位小数)。 例如:当x[10]={15.6,19.9,16.7, 15.2,18.3,12.1,15.5,11.0,10.0,16. 0},结果为:avg=15.030000。 double fun(double x[10]) {double avg=0.0; double sum=0.0; for(i=0;i&10;i++)sum+=x[i]; sum+=x[i]; sum+=x[i] avg=sum/10;avg=avg*1000 avg*1000; avg*1000 t=(avg+5)/10; (avg+5)/10; (avg+5)/10 avg=(double)t/100;} 54求出能整除x且不是偶数的各整数, 并放在数组pp中,这些除数的个数由n 返回。例如,若x的值为30,则有4个数 符合要求,它们是1,3,5,15。 void fun(int x, int pp[], int *n){int i,j=0; for(i=1;i&=x;i+=2) if((x%i)= = 0)pp[j++]=i;*n=j;} i j main() {int x,aa[1000],n,i;printf(…); scanf(&%d&,&x);fun(x, aa, &n ); for(i=0;i&n;i++)printf(&%d&,aa[i]); printf(&\n&);} 55求能整除x且是偶数的数,把这些数 保存在数组bb中,并按从大到小的顺序 输出。当x=20时,依次输出:20,10,4,2。 void fun(int k,int bb[]) {int j=0; for(i=1 i=1;i&=k;i++) i=1 {if(k%i = 0&&i%2 = 0)bb[j++]=i;} k%i= k%i 0&&i%2= printf(&\n\n&); for(i=- -i&=0;i- - ) printf(&%d &,bb[i]);} 56在主函数中, 从键盘输入若干个数放 入数组x中,用0结束输入但不计入数 组。 编写函数: 输出数组元素中小于平 均值的元素。例如:数组中元素的值依次 为1,2,2,12,5,15,则程序的运行结果为 1,2,2,5。 void fun(int x[] int x[],int n) {double sum=0.0; double average=0.0;int i=0; for(i=0;i&n;i++)sum+=x[i]; sum+=x[i]; sum+=x[i] average=sum/n; sum/n; sum/n for(i=0;i&n;i++) if(x[i]&average) {if(i%5==0)printf(&\n&); printf(&%d,&,x[i]);}} 57将n个人员的考试成绩进行分段统 计,考试成绩放在a数组中,各分段的 人数存到b数组中:成绩为60到69的人 数存到b[0]中, 成绩为70到79的人数存 到b[1],成绩为80到89的人数存到 b[2],成绩为90到99的人数存到b[3], 成绩为100的人数存到b[4],成绩为60 分以下的人数存到b[5]中。当a数组中 的数据是:93、85、77、68、59、43、 94、75、98。调用该函数后,b数组中 存放的数据应是:1、2、1、3、0、2。 void fun(int a[],int b[],int n) { for(i=0;i&6;i++)b[i]=0; for(i=0;i&n;i++) n if(a[i]&60)b[5]++; else b[(a[i]- 60)/10]++;} main() {int i,a[100]={…},b[6]; fun(a,b,9 a,b,9); a,b,9 printf(&the result is: &); for(i=0;i&6;i++) printf(&%d &,b[i]);printf(&\n&);} 58对a数组中n个人员的工资进行分段 统计,各段的人数存到b数组中:工资 为1000元以下的人数存到b[0]中, 工资 为元的人数存到b[1], 工资 为元的人数存到b[2], 工资 为元的人数存到b[3], 工资 为元的人数存到b[4], 工资 为元的人数存到b[5]中。 例 如,当a数组中的数据为:900、1800、 2700、 3800、 5900、 、 7500、 3800,调用该函数后,b中存放的数据 应是:1、1、2、3、0、2。 void fun(int a[], int b[], int n) { for(i=0;i&6;i++)b[i]=0; 0 for(i=0;i&n;i++) if(a[i]&=5000)b[5]++; else b[a[i]/1000]++;} main() {int i,a[100]={…},b[6]; fun(a, b, 9); printf(&The result is: &); for(i=0;i&6;i++) printf(&%d &,b[i] b[i]);printf(&\n&);} b[i] 59从键盘输入学生的成绩, 统计各分数 段学生的人数。 A类为90~100分, B类为 80~89分,C类为70~79分,D类为60~69 分, 59分以下的为E类。 当成绩为0时结 束成绩的输入。例如,输入89,99,45, 64,56,78,88,74,66,55,0 。 结 果 为 A:1,B:2,C:2,D:2,E:3 main() {float score[N];int bb[5]; int grade,i=-1,n=0;char ch='A'; printf(&Input a score(0~100);\n&); do{i++;n++;printf(&score[%d]=&,i); scanf (”%f”,&score[i] ”%f”,&score[i]); ”%f”,&score[i] }while (score[i]!=0); for(i=0;i&5;i++)bb[i]=0; bb[i]=0; bb[i]=0for(i=0;i&n-1;i++) {grade=score[i]/10; score[i]/10; score[i]/10 switch(grade) {case 10:case 9:bb[0]++; case 8:bb[1]++; case 7:bb[2]++; case 6:bb[3]++; default:bb[4]++;}} for(i=0;i&5;i++) printf(&\n%c:%d&,ch+i,bb[i]);} 60删去一维数组中所有相同的数, 使之 只剩一个。 数组中的数已按由小到大的 顺序排列, 函数返回删除后数组中数据 的个数。 例如, 若一维数组中的数据是: 1,1,1,2,2,2,3,4,4,5,5,6,6,7, 7,8,9,9,1010。删除后的内容应该是: 1,2,3,4,5,6,7,8,9,10。 int fun(int a[],int n) {int i,t,j=0;t=a[0]; for(i=1;i&n;i++)if(t= = a[i]); a[i]) ( else {a[j++]=t;t=a[i];} a[j++]=t; a[j++]=t a[j++]=t;} 61将形参a所指数组中的前半部分元素 中的值和后半部分元素中的值对换。 形 参n中存放数组中数据的个数, 若n为奇 数,则中间的元素不动。例如:若a所 指数组中的数据依次为:1、2、3、4、 5、6、7、8、9,则调换后为:6、7、8、 9、5、1、2、3、4。 void fun(int a[],int n) {int i,t,p;p=(n%2==0)?n/2:n/2+1; 1 for(i=0;i&n/2;i++){t=a[i]; a[i]=a[p+i];a[p+i] a[p+i]=t;}} i a[p+i] 62从键盘输入一组整数, 使用条件表达 式 找 出最 大的 整数 。例如 ,若 输入 1,2,3,5,4,0时,最大的数为5。 main() {int num[N];int i=-1;int max=0; printf(&\nInput integer number:\n&); do{i++;printf(&num[%d]=&,i); scanf(&%d&,&num[i]); &num[i]) &num[i] max=max&num[i]? max&num[i]?num[i]: max&num[i]? }while (num[i]!=0 ; num[i]!=0) num[i]!=0 printf(&max=%d\n&,max);} 63把a数组中的n个数,和b数组中逆序 的n个数一一对应相乘、求平方,结果 存在c数组中。 例如: 当a数组中的值是: 1、3、5、7、8,b数组中的值是:2、3、 4、5、8 调用该函数后,c中存放的数 据是:64、225、400、441、256void fun(int a[],int b[],int c[],int n){ for (i=0;i&n;i++) c[i]=(a[i]*b[n-1-i])*(a[i]*b[n-1-i]);} c[i] main() {int i,a[100]={1,3,5,7,8},b[100]={2,3,4,5,8},c[100]; fun(a,b,c, a,b,c,5); a,b,c, printf(&The result is:&); for(i=0;i&5;i++) printf(&%d &,c[i] c[i]);printf(&\n&);} c[i] 64在x数组中放入n个采样值, 计算并输 出方差值。N S= (xK-x’)2 N N 其中 x’= K=1 XK NK=1例如n=8,输入:193.199、195.673、 195.757、 196.051、 196.092、 196.596、 196.579、196.763时,结果应为: 1.135901。 float fun(float x[], int n) {float xa=0.0,s; for(j=0;j&n;j++)xa+=x[j]/n;s=0; 0 n for(j=0;j&n;j++) s+=(x[j]-xa)*(x[j]-xa)/n;} 65计算并输出给定10个数的方差:0.5 1 S= 10 K=1 1 其中 x’= 10 10 XK 10 (xK-x’)K=1 给定的10个数为15.0,19.0,16.0,15.0,18.0,12.0, 15.0,11.0,10.0,16.0,输出为s=2.758623。double fun(double x[10]) {double avg=0.0; double sum=0.0;double abs=0.0;2 for(i=0;i&10;i++)sum+=x[i]; sum+=x[i]; sum+=x[i] avg=sum/10; for(i=0;i&10;i++) abs+=(x[i]-avg)*(x[i]-avg); abs+=(x[i]-avg)*(x[i]-avg); sd=sqrt(abs/10);} sqrt(abs/10); sqrt(abs/10) 66从键盘输入一个下标n,把数组aa中 比元素aa[n]小的元素放在它的左边, 比它大的元素放在它的右边, 排列成的 新数组仍然保存在原数组中。如数组 aa={33,67,42,58,25,76,85, 16,41,56} 若 输 入 3 , 则 结 果 输 出 为 33,42,25,16,41,56,58,67,76,85。 void fun(int aa[], int n) {int i,j=0,k=0,t;int bb[N]; t=aa[n]; for(i=0; i&N; i++) {if(aa[i]&t)bb[j++]=aa[i]; if(aa[i]&t)aa[k++]=aa[i];} aa[k++]=t; aa[k++]=t; for(i=0;i&j;i++,k++)aa[k]=bb[i];} i&j; i&j 67交换数组aa中最大和最小两个元素 的位置, 结果依然保存在原数组中, 其 它元素位置不变。例如,输入 33,67,42,58,25,76,85,16,41,56,则 输出33,67,42,58,25,76,16,85,41,56 void fun(int aa[]) {int i,j,t;int max=0,min=0; for(i=0; i&N; i++) {if(aa[max]&aa[i] aa[max]&aa[i])max=i; aa[max]&aa[i] if(aa[min]&aa[i] aa[min]&aa[i])min=i;}t=aa[max]; aa[min]&aa[i] aa[max]=aa[min]; aa[max]=aa[min];aa[min]=t;} 68把一维数组中的元素逆置。 结果仍然 保存在原数组中。 main() {int i,j,t;int bb[N]; for(i=0;i&N;i++)bb[i]=i; printf(&\n*** original list ***\n&); for(i=0;i&N;i++)printf(&%4d&,bb[i]); for(j=0,- -j&=i;j++,i- - ) j=0,j++,ij=0, j++,i {t=bb[j];bb[j]=bb[i];bb[i]=t;} printf(&\n****** new list ******\n&); for(i=0;i&N;i++)printf(&%4d&,bb[i]);} 69把形参a所指数组中的奇数按原顺序 依次存放到a[0]、 a[1]、 a[2]、 ……中, 把偶数从数组中删除, 奇数个数通过函 数值返回。例如:若a所指数组中的数 据最初排列为:9、1、4、2、3、6、5、 8、7,删除偶数后a所指数组中的数据 为:9、1、3、5、7,返回值为5。 int fun(int a[],int n) {int i,j;j=0; for(i=0;i&n;i++) a[j]=a[i];++j ++j;} if(a[i]%2= = 1){a[j] = a[j] ++} 70把数组aa中的奇数元素按原来的先 后顺序放在原数组后面。例如,输入 33,67,42,58,25,76,85,16,41,56,则 输出42,58,76,16,56,33,67,25,85,41 void fun(int aa[]) {int i,j=0,k=0;int bb[N]; for(i=0; i&N; i++) {if(aa[i]%2!=0 aa[i]%2!=0)bb[k++]=aa[i]; aa[i]%2!=0 else aa[j++]=aa[i];} for(i=0;i&k;i++,j++ i++,j++)aa[j]=bb[i];} i++,j++ 71把数给aa中元素下标为奇数的元素 按从大到小的顺序重新保存在原数组 中其它元素位置不变。例如,若输入 33,67,42,58,25,76,85,16,41,56。则 输 结 为 33,76,42,67,25,58,85,56,41,16。 出 果 : void fun(int aa[]) {int i,j,t; for (i=1 i=1;i&N;i=i+2) i=1 {for(j=i;j&N;j=j+2)if(aa[i]&aa[j]) {t=aa[j];aa[j]=aa[i];aa[i]=t t=aa[j]; aa[i]=t;}}} t=aa[j] aa[i]=t 72把数组aa中元素下标为偶数的元素 按从小到大重新保存在原数组中, 其它 元 素 位 置 不 变 。 例 如 , 输 入 33,67,42,58,25,76,85,16,41,56则输 出25,67,33,58,41,76,42,16,85,56 void fun(int aa[]) {int i,j,t; for (i=0;i&N;i=i+2) {for(j=i j=i;j&N;j=j+2) j=i if(aa[i]&aa[j] aa[i]&aa[j]) aa[i]&aa[j] {t=aa[j];aa[j]=aa[i];aa[i]=t;}}} 73把数组aa中的偶数元素按原来的先 后顺序放在原数组后面。例如,输入 33,67,42,58,25,76,85,16,41,56输出 结果33,67,25,85,41,42,58,76,16,56 void fun(int aa[]) {int i,j=0,k=0;int bb[N]; for (i=0;i&N; i++) {if(aa[i]%2= = 0)bb[k++]=aa[i]; aa[i]%2= aa[i]%2 else aa[j++]=aa[i];} for(i=0;i&k i&k;i++,j++)aa[j]=bb[i];} i&k74逆置数组元素中的值。若a所指数组 中的数据依次为: 1,2,3,4,5,6,7,8,9, 则逆置后依次为: 9,8,7,6,5,4,3,2,1。 void fun(int a[],int n) {int i,t; for(i=0;i&n/2 &n/2;i++){t=a[i]; &n/2 a[i]=a[n-1-i];a[n-i-1] a[n- 1]=t;}} i a[n 75求100(不包括100)以内能被2或5 整除,但不能同时被2和5整除的自然 数。结果保存在数组bb中,函数fun返 回数组bb元素的个数。 int fun(int bb[]) {int i,j; for(i=1,j=0 i=1,j=0;i&100;i++) i=1,j=0 if((i%2!=0&&i%5= = 0)||(i%2= = 0&&i%5!=0)) bb[j++]=i; bb[j++]=i;} 76如果数组aa的前一个元素比后一个元素 小,则把它保存在数组bb中并输出。若输入 40,51,62,33,35,52,48,95,66,73则结果输 出40,51,33,35,48,66 main() {int i,n=0;int aa[N]={… };int bb[N]; … for(i=0;i&N-1;i++) N if(aa[i]&aa[i+1])bb[n++]=aa[i] bb[n++]=aa[i]; bb[n++]=aa[i] printf(&\n*** display bb ***\n&); for(i=0;i&n;i++) printf(&bb[%d]=%2d&,i,bb[i] i,bb[i]);} i,bb[i] 77把1~100间的所有素数保存在数组aa 中,输出这些素数并计算它们的和。 main() {int n,i,j,k,flag,int aa[50]; sum=0;k=0; for(i=2;i&100;i++) {flag=1; flag=1; flag=1 for(j=2;j&i&&j++) if(i%j= = 0){flag=0 flag=0;} flag=0 if(flag){sum+=i;aa[k++]=i aa[k++]=i;}} aa[k++]=i printf(&\n*** prime number ***\n&); for(i=0;i&k;i++) {if(i%10= = 0)printf(&\n&); printf(&%4d&,aa[i]);} printf(&\nsum=%d&,sum);} 78把一个整数插入到一个已经按从小 到大排序的数组中。 插入后, 数组仍然 有序。 例如, 在数组bb[N]={12,23,31, 44,51,63,71,79,85,95}中插入93, 果 结 为 bb[N]{11,21,31,41,51,61,71, : 79,81,93,95} main() {int i,j;int bb[N+1]={……}; printf(&\nInput n \n&); scanf(&%d&,&n);printf(&\nn=%d&,n); printf(&\n*** original list ***\n&); for(i=0;i&N;i++)printf(&%4d&,bb[i]); for(i=0;i&N;i++){if(n&=bb[i]) bb[j]=bb[j{for(j=N;j&i j&i;j- - )bb[j]=bb[j-1] j&i bb[j]=bb[j 1]; bb[j]=n;}} break if(i= = N)bb[i]=n; printf(&\n***** new list ******\n&); for(i=0;i&N+1;i++)printf(&%4d&,bb[i]);} 79计算x所指数组中N个数的平均值,平 均值通过形参返回主函数, 将小于平均 值且最接近平均值的数作为函数值返 回,在主函数中输出。例如,有10个正 数:46,30,32,40,6,17,45,15,48,26, 平均值为: 30.50主函数中输出: m=30.0 double fun(double x[],double *av) {int i,j;double d,s;s=0; for(i=0;i&N;i++)s=s+x[i]; *av=s/N;d=32767; *av for(i=0;i&N;i++) if(x[i]&*av&&*av-x[i]&=d) {d=*av-x[i];j=i;}return x[j] x[j];} i 80计算形参x所指数组中N个数的平均 值作为函数值返回; 并将大于平均值的 数放在形参y所指数组中,在主函数中 输出。 例如, 有10个正数: 46,30,32,40, 6,17,45,15,48,26, 平均值为: 30.500 主函数中输出:46,32,40,45,48 double fun(double x[],double *y) {int i,j;av=0; 0 for(i=0;i&N;i++)av=av +x[i]/N; x[i]/N; x[i for(i=j=0;i&N;i++) if(x[i]&av)y[j++ j++]=x[i]; j++ y[j]=-1;} 81计算形参x所指数组中N个数的平均 值,将所指数组中大于平均值的数据移 至数组的前部, 小于等于平均值的数据 移至x所指数组的后部,平均值作为函 数值返回, 在主函数中输出平均值和移 动后的数据。例如,有10个正数: 46,30,32,40,6,17,45,15,48,26, 平均 值为:30.500000。移动后的输出为: 46,32,40,45,48,30,6,17,15,26 double fun(double *x){int i,j;double s,av,y[N];s=0; for(i=0;i&N;i++)s=s+x[i];av=s/N s/N; s/N for(i=j=0;i&N;i++) if(x[i]&av){y[j++] j++]=x[i];x[i]=-1;} j++] for(i=0;i&N;i++) if(x[i]!=-1)y[j++]=x[i]; for(i=0;i&N;i++)x[i]=y[i];} 82计算形参x所指数组中N个数的平均 值作为函数值返回; 并将小于平均值的 数放在数组的前部, 平均值做为函数值 返回。 例如, 有10个正数: 46,30,32,40, 6,17,45,15,48,26,平均值为:30.5 主函数中输出: 30,6,17,15,26,46,32,40,45,48. double fun(double *x) {int i,j;double av,y[N];av=0; for(i=0;i&N;i++)av+=x[i]/N x[i]/N; x[i]/N for(i=j=0;i&N;i++) if(x[i]&av) {y[j]=x[i];x[i]=-1;j++ j++;}j=0; j++ while(i&N) {if(x[i]!=-1)y[j++]=x[i];i++ i++;} i++ for(i=0;i&N;i++)x[i]=y[i];} 83计算scroe中m个人的平均成绩aver,将低 于aver的成绩放在below中, 通过函数名返回 人数。当score={10,20,30,40,50,60, 70,80,90},m=9时,函数返回的人数应该是 4,below={10,20,30,40}。int fun(int score[],int m,int below[])if(g= = b)bb[n++]=xx[i] bb[n++]=xx[i];} bb[n++]=xx[i]} 88调用随机函数产生20个互不相同的整数放 在形参a所指数据组中 (此数组在主函数中已 置0)。 void fun(int *a) {int i,x,n=0;x=rand()%20; while(n&N) N {for(j=0;j&n;j++) if(x= = a[i]) break if(i= = n){a[n]=x;n++;} x=rand()%20;}} 89计算N×N维矩阵元素的方差, 结果 由函数返回。例如: 46 30 32 的 计 算 结 果 是 14.414 求 方差的公式为: A= 40 6 17 45 15 48 S=0.5 1 n K=1 1 其中 x’= n K=1 n xK n (xK-x’)2{int i,j=0;float aver=0.0; for(i=0;i&m;i++)aver+=score[i]; aver/=(float)m; for(i=0;i&m;i++) if(score[i]&aver)below[j++]=score[i] score[i]; score[i]} main() {int i,n,below[9];int score[9]={…}; n=fun(score,9,below below); belowprintf(&\nBelow the average score are:&);for(i=0;i&n;i++) printf(&%d&,below[i] below[i] below[i]);} 84 计算每个学生成绩的平均分,例如当 score[N][M]={{83.5,82,86,65,67},{80,91 .5,84,99,95},{90.5,95,86,95,97}}时,三 个学生的平均分为:76.7,89.9,92.7。 main() {int i,j; static float score[N][M]={……}; float bb[N];clrscr(); for(i=0;i&N;i++)bb[i]=0; bb[i]=0; bb[i]=0 for(i=0;i&N;i++) {for(j=0;j&M;j++)bb[i]+=score[i][j]; bb[i]+=score[i][j] bb[i]+=score[i][j]; bb[i]/=M;} for(i=0;i&N;i++)printf(&\nstudent%d\taverage=%5.1f&,i+1,bb[i]);}85把形参a所指数组中的最小值放在元 素a[0]中,接着把形参a所指数组中的 最大值放在a[1]元素中;再把a所指数 组元素中的次小值放在a[2]中,把a所 指数组元素中的次大值放在a[3]; 其余 以此类推。例如:若a所指数组中的数 据最初排列为:9、1、4、2、3、6、5、 8、7;则按规则移动后,数据排列为: 1、9、2、8、3、7、4、6、5。 void fun(int a[] a[],int n) {int i,j,max,min,px,pn,t; for(i=0;i&n-1;i+=2) {max=min=a[i]; a[i];px=pn=i; a[i]; for(j=i+1 i+1;j&n;j++) i+1 {if(max&a[j] a[j]){max=a[j];px=j;} a[j] if(min&a[j] a[j]){min=a[j];pn=j;}} a[j] if(pn!=i){t=a[i];a[i]=a[pn]=t; if(px==i)px=} if(px!=i+1){t=a[i+1];a[i+1]= a[px]=t;}}} 86把数组bb中的数按从小到大的排列, 若输入 2,3,5,4,1, 结果为1,2,3,4,5。 void fun(int bb[],int n) {int i,j,t; for(i=0; i&n i&n;i++) for(j=0; j&n-1;j++) j&nif(bb[j]&bb[j+1]) {t=bb[j];bb[j]=bb[j+1];bb[j+1]=t;}} 87从数组xx中找出个位和百位的数字相等的 所有无符号整数,结果保存在数组yy中,其 个 数 由 函 数 fun 返 回 。 例 如 : 当 xx[8]={21,33, } 时 , bb[6]={2,14}。 int fun(int xx[],int bb[],int num) {int i,n=0;int g,b; for(i=0;i&i++) {g=xx[i]%10;b=xx[i]/100%10; xx[i]%10; xx[i]%10double fun(int a[][N] int a[][N],int n) {int i,j;double s=0.0; double f=0.0;double aver=0.0; double sd=0.0; for(i=0;i&n;i++) for(j=0;j&n;j++)s+=a[i][j]; aver=s/(n*n) s/(n*n); s/(n*n) for(i=0;i&n;i++) for(j=0;j&n;j++) f+=(a[i][j]-aver)*(a[i][j]-aver); f/=(n*n);sd=sqrt(f) sqrt(f);} sqrt(f) 90按行统计N×N维矩阵元素中的最 大值,并把这些值按从小到大的顺序保 存在数组b中。 void fun(int a[][N],int b[],int n n) int {int i,j; for(i=0;i&n;i++) for(j=0;j&n;j++) if(b[i]&a[i][j] b[i]=a[i][j]; b[i]&a[i][j]) b[i]&a[i][j] for(i=0;i&n;i++) {for(j=0;j&n;j++)if(b[i]&b[j] b[i]&b[j]) b[i]&b[j] {t=b[i];b[i]=b[j];b[j]=t;}}} 91计算一个N×N矩阵的周边元素平 均值。当N=4时:平均值为3.917。 6 0 2 0 6 7 5 5 A= 8 6 4 8 1 9 2 0 double fun(int a[][N],int n) {int i,j; double s=0.0;double aver=0.0; printf(&***** The array *****\n&); for(i=0;i&n;i++) {for(j=0;j&n;j++){a[i][j]=rand()%10; printf(&%4d&,a[i][j]); if(i= = 0||i= = n-1||j= = 0||j= = n-1) 1||j= 0||j= i 0||i= s+=a[i][j];}printf(&\n&);} k=4*n-4;aver =s/k;} 4*ns/k; 4*n s/k 92输出一个N×N矩阵,对非对角线上的 元素赋值为0,对角线元素赋值为1。 main() {int bb[N][N];int i,j,n; printf(&\nInput n:\n&); scanf(&%d&,&n); for(i=0;i&n;i++) for(j=0;j&n;j++){bb[i][j]=0; bb[i][j]=0; bb[i][j]=0 if(i= = j)bb[i][j]= 1; if(j= = n-1-i)bb[i][j]=1;} j printf(& \n***** the result ***** \n&); for(i=0;i&n;i++){printf(&\n\n&);for(j=0;j&n;j++)printf(&%4d&,bb[i][j]);}}93计算三名学生学科的平均成绩。例 如,当score[N][M]={{83.5,82,86, 65,67},{80,91.5,84,99,95},{90,95, 86,95,97}}时,五门学科的平均分为 84.5,89.5,85.3,86.3,86.3。 main() {int i,j; static float score[N][M]={…}; static float bb[N];clrscr(); for(i=0;i&M;i++)bb[i]=0.0; for(i=0;i&N;i++) N{for(j=0;j&M;j++)bb[j]+=score[i][j];} Mfor(i=0;i&M;i++) printf(&\nsubject%d\taverage=%5.1 f&,i+1, bb[i]/N);return 0;} bb[i]/N) 94输出一个N×N矩阵, 要求非周边元素 赋值0,周边元素赋值1。 main() {int bb[N][N];int i,j,n;clrscr();3 printf(& \nInput n:\n&); scanf(&%d&,&n); for(i=0;i&n;i++) for(j=0;j&n;j++) {if(i= = 0||i= = n-1||j= = 0||j= = n-1) 1||j= 0||j= i 0||i= bb[i][j]=1;else bb[i][j]=0 bb[i][j]=0;} printf(& \n*** the result *** \n&); for(i=0;i&n;i++){printf(& \n\n&); for(j=0;j&n;j++) printf(&%4d&,bb[i][j]);}} 95输出一个3×3的矩阵, 要求必须使用 行指针表示输出变量。 main() {static int array[3][3]={……}; int (*p)[3],j,i;p= array for(i=0;i&3;i++){printf(&\n\n&); for(j=0;j&3;j++) printf(&%4d&,*(*(p+i)+j) *(*(p+i)+j));}} *(*(p+i)+j) 96根据形参m(2≤m≤9),在二维数组 中存放一张m行m列的表格。 例如:若输入2 则输出: 1 2 2 4 若输入4 则输出: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 fun(int a[][M], int m) {int j,k; for(j=0;j&m;j++) for(k=0;k&m;k++) a[j][k]=(k+1)*(j+1);} a[j][k] main ( ) {int i,j,n;printf(&Enter n:&); scanf(&%d&,&n);fun(a,n a,n); a,n for(i=0;i&n;i++) {for(j=0;j&n;j++) printf(&%4d&,a[i][j] a[i][j]); a[i][j] printf(&\n&);}} 97实现矩阵(3行3列)的转置(即行列 互换)。例如,输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 100 400 700 200 500 800 300 600 900 int fun(int array[3][3]) {int i,j,arr[3][3]; memcpy(arr,array,9*sizeof(int)) ; for(i=0;i&3;i++) for(j=0;j&3;j++) array[i][j]=arr[j][i] arr[j][i];} arr[j][i] main() {int i,j;int array[3][3]={…}; for(i=0;i&3;i++) {for(j=0;j&3;j++) printf(&%7d&,array[i][j]); printf(&\n&);}fun(array array); array printf(&Converted array:\n&); for(i=0;i&3;i++){for(j=0;j&3;j++) printf(&%7d&,array[i][j] array[i][j]); array[i][j] printf(&\n&);}} 98有N×N矩阵,根据给定的m(m&=N) 值, 将每行元素中的值均右移m个位置, 左边置为0。例如,N=3,m=2,有下列 矩阵 1 2 3 4 5 6 7 8 9 程序执行结果为 0 0 1 0 0 4 0 0 7 void fun(int (*t)[N],int m) {int i,j; for(i=0;i&N;i++ i++) i++ {for(j=N-1-m;j&=0;j--) t[i][j+m]=t[i][j]; m for(j=0;j&m; j++)t[i][j]=0;}} 99将a所指4*3矩阵中第k行的元素与第 0行元素交换。例如,有如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 若k为2,程序执行结果为: 7 8 9 4 5 6 1 2 3 10 11 12 void fun(int (*a)[N],int k) {int i,for(i=0;i&N;i++) N {temp=a[0][i];a[0][i]=a[k][i] a[k][i]; a[k][i] a[k][i]=}} 100将N×N矩阵中元素的值按列右移1 个位置, 右边被移出矩阵的元素绕回左 边。例如,N=3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为 3 1 2 6 4 5 9 7 8 void fun(int (*t)[N]) {int i,j,x; for(i=0;i&N;i++){x=t[i][N-1]; N N for(j=N-1;j&0;j- - ) t[i][j]=t[i][j-1];t[i][0]=x; t[i][0]=x;}} t[i][0]=x; 101有N×N矩阵,将矩阵的外围元素顺 时针旋转。 操作顺序是: 首先将第一行 元素的值存入临时数组r,然后使第一 列成为第一行,最后一行成为第一列, 最后一列成为最后一行, 临时数组中的 元素成为最后一列。例如,若N=3,有 下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 7 4 1 8 5 2 9 6 3 void fun(int (*t)[N]) {int j,r[N]; for(j=0;j&N;j++)r[j]=t[0][j]; for(j=0;j&N;j++)t[0][N-j-1]=t[j][0] t[j][0]; t[j][0] for(j=0;j&N;j++)t[j][0]=t[N-1][j]; for(j=N-1;j&=0;j- - ) j t[N-1][N-1-j]=t[j][N-1]; for(j=N-1;j&=0;j- - )t[j][N-1]=r[j];} j 102将N×N矩阵主对角线元素中的值与 反向对角线对应位置上元素中的值进 行交换。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 交换后为: 3 2 1 4 5 6 9 8 7 void fun(int t[][N] t[][N],int n) {int i,s; for(i=0;i&n i=0;i&n;i++){s=t[i][i]; i=0;i&n t[i][i]=t[i][n-i-1];t[i][n-1-i]=s;}} s 103计算N×N矩阵的主对角线元素和反 向对角线元素之和,并作为函数值返 回。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 函数首先累加1、5、9,然后累加3、5、 7,函数的返回值为30。 fun(int t[][N],int n) {int i,sum=0; sum=0; for(i=0;i&n;i++)sum+=t[i][i] ; t[i][i] for(i=0;i&n;i++)sum+=t[i][n-i-1]; 1} 104建立一个N×N的矩阵。矩阵元素的 构成规律是: 最外层元素的值全部为1; 从外向内第2层元素的值全部为2;第3 层元素的值全部为3,…依次类推。例 如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 void fun(int (*a)[N] (*a)[N]) {int i,j,k,m; if(N%2= = 0)m=N/2;else m=N/2+1; for(i=0;i&m;i++) {for(j=i;j&N-i;j++) i a[i][j]=a[N-i-1][j]=i+1; for(k=i+1;k&N-i;k++) a[k][i]=a[k][N-i-1]=i+1 i+1;}} i+1 105在3×4的矩阵中找出在行上最大、 在列上最小的那个元素, 若没有符合条 件的元素则输出相应信息。例如, 1 2 13 4 7 8 10 6 3 5 9 7 程序执行结果为:9 void fun(int (*a)[N]) {int i=0,j,find=0,rmax,c,k; while((i&M)&&(!find)){rmax=a[i][0];c=0; for(j=1;j&N;j++) if(rmax&a[i][j]){rmax=a[i][j]; c=j;}find=1;k=0; j while(k&M && find) {if(k!=i&&a[k][c]&=rmax) find=0;k++;} 0 if(find)printf(&…&,i,c,a[i][c]); i++;} i++; if(!find)printf(&not found!\n&);} 106有N×N矩阵, 以主对角线为对称线, 对称元素相加并将结果存放在左下三 角元素中, 右上三角元素置为0。 例如, 若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0 6 5 0 10 14 9 void fun(int (*t)[N] [N]) [N] {int i,j; for(i=1;i&N;i++) {for(j=0;j&i;j++) {t[i][j] =t[i][j]+t[j][i]; t[i][j] t[j][i]=0;}}} t[j][i] 107 找出 N*N 矩阵中每列元素中的最大 值, 并按顺序依次存放于形参 B 所指的 一维数组中。 void fun(int (*a)[N],int *b) {int i,j; for(i=0;i&N;i++) {b[i]=a[0][i] a[0][i]; a[0][i] for(j=1;j&N;j++) if(b[i]&a[j][i])b[i]=a[j][i];}} & main() {int x[N][N]={12,5,…,3}y[N],i,j; printf(“\nThe matrix:\n”); for(i=0;i&N;i++) {for(j=0;j&N;j++) printf(“%4d”,x[i][j]); printf(“\n”);} fun(x,y x,y); x,y printf(“\nThe result is:”); for(j=0;j&N;j++) printf(“%3d”,y[j]); printf(“\n”);} 108 判定形参 a 所指的 N*N(规定 N 为 奇数)的矩阵是否是“幻方”,若是函 数返回值为 1,不是函数返回值为 0。 “幻方”的判定条件是:矩阵每行、每 列、 主对角线及反对角线上元素之和都 相等。例如以下 3*3 的矩阵就是一个 “幻方”。 4 9 2 3 5 7 8 1 6 int fun(int (*a)[N]) {int i,j,m1,m2,row, m1=m2=0; for(i=0;i&N;i++) {j=N-i-1;m1+=a[i][i];m2+=a[i][j];} if(m1!=m2)return 0; for(i=0;i&N;i++) {row=colum=0; 0 for(j=0;j&N;j++) {row+=a[i][j];colum+=a[j][i];} if((row!=colum)|| ||(row!=m1)) || return 0;}return 1;} 109 将 a 所指 3*5 矩阵中第 k 列的元素 左移到第 0 列、 k 列以后的每列元素 第 依次左移, 原来左边的各列依次绕到右 边。例如有以下矩阵: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 若 k 为 2,移序执行结果为: 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 void fun(int (*a)[N],int k) {int i,j,p, for(p=1;p&=k;p++) k for(i=0;i&M;i++) {temp=a[i][0]; for(j=0;j&N-1;j++) N a[i][j]=a[i][j+1]; a[i][N-1]=temp temp}} temp 三、字符题: 110依次取出字符串中所有的小写字母 以形成新的字符串,并取代原字符串。 void fun(char *s) {int i=0;char *p=s; while(*p *p){if(*p&='a'&&*p&='z') *p{s[i]=*p;i++;}p++;}s[i]= ′\0 ′;} i++; ′; i++ 111把字符串str中的数字字符转换成 数字并存放到整型数组bb中,例如: str=“Bcd123e456hui890”,结果为: 。 int fun(char s[],int bb[],int num) {int i,n=0; for(i=0;i&i++) {if(s[i]&=′0′&&s[i]&=′9′ s[i]&=′0′&&s[i]&=′9′) s[i]&=′0′&&s[i]&=′9′ {bb[n]= s[i]- ′0′ s[i]- ′0′;n++;}}} 112若形参ch中是数字字符'0'~'9', 则'0'转换成'9','1'转换成'8','2' 转换成'7',…,'9'转换成'0';若是 其它字符则保持不变; 并将转换后的结 果作为函数值返回。 char fun(char ch) {if(ch&='0'&&ch&='9' ch&='9') ch&='9' return'9'-(ch-'0' '0');} '0' 113把s串中所有的字母改写成该字母 的下一个字母, 字母z改写成字母a。 大 写字母仍为大写字母, 小写字母仍为小 写字母,其它的字符不变。例如:s串 中原有的字符串为:Mn.123Zxy,则调 用该函数后,s串中的内容为: No.123Ayz。 fun(char *s) {char *p=s; s while(*p){if(*p=='Z')*p='A' 'A'; 'A' else if(*p= = 'z')*p='a' 'a'; 'a' else if(isalpha(*p))*p=(*p)+1; p++;}} 114数组str全由大小写字母字符组成。 编写函数:把str中的字母转换成紧接 着的下一个字母,如果原来的字母为 ‘z’或‘Z’,则相应地转换成‘a’ 或‘A’,结果仍保存在原数组中。例 如 , 若 输 入 “StudentZz” , 则 输 出 “TuvefouAa”。 void fun(char s[]) { for(i=0;s[i]!=′\0′;i++) s[i]!=′ s[i]!= {if(s[i]=='z'||s[i]=='Z')s[i]-= 25 25; else s[i]+=1;}} 1 115给定程序的功能是将大写字母转换 为对应小写字母之后的第五个字母; 若 小写字母为v~z,使小写字母的值减 21。转换后的小写字母作为函数值返 回。例如,若形参是字母A,则转换为 小写字母f; 若形参是字母W, 则转换为 小写字母b。 char fun(char c) {if(c&='A'&&c&='Z')c=c+32; if(c&='a'&&c&='u')c=c+5; c=c+5; else if(c&='v'&&c&='z') c=c-21;} main() {char c1,c2; printf(&\nEnter a letter(A-Z):&); c1=getchar(); if(isupper(c1)){c2=fun(c1); c2=fun(c1);printf(&\n\nThe letter\'%c\'change to\'%c\'\n&,c1,c2);}else printf(&\nEnter (A-Z)!\n&);} 116将字符串tt中的大写字母都改为对 应的小写字母,其他字符不变。例如, 若 输 入 “Are you come from Sichuan?”,则输入“are you come from sichuan?”。 char *fun(char tt[]) { for(i=0;tt[i];i++){ if((tt[i]&='A')&&( tt[i]&= ′Z ′ ′)) tt[i]+=32; tt);} tt[i]+=32;}return (tt tt 117把一个字符串中的所有小写字母字 符全部转换成大写字母字符, 其他字符 不变, 结果保存原来的字符串中。 如当 str[N]=“123 abcdef ABCDEF!”结果 输出:“123 ABCDEF ABCDEF!” void main() { char str[N]=&123abcdef ABCDEF!&; char *pf=clrscr(); printf(&***original string ***\n&); puts(str);j=0 j=0; j=0 while(*(pf+j)) {if(*(pf+j)&='a'&&*(pf+j)&='z') {*(pf+j)= *(pf+j)-32;j++;} *(pf+j)-32; else j++ j++;}printf(&…&); puts(str);system(&pause&);} 118把从主函数中输入的由数字字符组 成的字符串转换成一个无符号长整数, 并且逆序输出。 结果由函数返回。 例如, 输入:123456,结果输出:654321。 unsigned long fun(char *s) {unsigned long t=0;int i=0;4 i=strlen(s); for(- -i&=0;i- - ){k=s[i]-′0 ′ s[i]′; s[i] t=t*10+k t*10+k;}} t*10+k 119把字符数组str中ASCII码为奇数的 小写字母转换成对应的大写字母, 结果 仍 保存 在原 数组 中。 若输入 “abcdefg”,则输出“AbCdEfG”。 void fun (char s[]) { for(i=0 s[i]!= ′\0′;i++) i=0;s[i]!= i=0 {if(s[i]%2!=0 s[i]%2!=0)s[i]-=32;}} s[i]%2!=0 120把字符数组str中字符下标为奇数 的小写字母转换成对应的大写字母, 结 果 仍 保存 在原 数组 中。例 如, 输入 “acegikm”,输出“aCeGiKm”。 void fun (char s[]) {int i=0; while(s[i]!=′\0′) s[i]!=′ s[i]!= {if(i%2!=0)s[i]-= 32 i++;}} 32;i++ i++; 121把字符串中的内容逆置。例如:字 符串中原有的字符串为abcde,执行后 的内容变为edcba。 void fun(char*s) {int i=0,t,n=strlen(s); for(;i&n/2 i&n/2;i++){t=*(s+i); i&n/2 *(s+i)=*(s+n- i);*(s+n- i)=t; *(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}} 122把一个整数转换成字符串,并倒序 保 存 在 字 符 数 组 str 中 。 例 如 : 当 n=时,str=“”。 void fun(long int n) {int i=0; while(n&0 n&0){str[i]=n%10+'0'; n%10+' n&0 n%10+ n/=10;i++;}str[i]= ′\0′;} str[i]= 123把从主函数中输入的字符串str2倒 置 后 接 在 字 符 串 str1 后 面 。 例 如 : str1=“How do”,str2=“?od uoy”, 结果输出:“How do you do?”。 void fun(char *str1,char *str2) {int i=0,j=0,k=0,n; char *p1=str1;char *p2=str2; while(*(p1+i))i++; while(*(p2+j))j++;n=j- -; j for(;k&=j/2;k++,j--) {ch=*(p2+k);*(p2+k)=*(p2+j); *(p2+j)=}*(p2+n)='\0' *(p2+n)='\ *(p2+n)=' 0'; for(;*p2 *p2;i++)*(p1+i)=*p2++; *p2 *(p1+i)='\0';} 124把从主函数中输入的字符串str2接 在 字 符 串 str1 的 后 面 。 例 如 : str1=“How do”,str2=“ you do?”, 结果输出:How do you do? void fun(char *str1,char *str2){int i=0;char *p1=str1;char *p2=str2;while(*(p1+i) *(p1+i))i++; *(p1+i) for( ; *p2;i++)*(p1+i)= *p2++; *p2++; *p2 *(p1+i)='\0';} 125把字符串str中的字符向前移动一 位,原来的第一个字符移动到字符串 尾, 结果仍然保存在原字符串中。 例如, 输入“how do you do?”,则结果输出 “ow do you do?h”。 main() {char str[N],clrscr(); printf(&\n Input a string:\n&); gets(str); printf(&\n*** original string ***\n&); puts(str);ch=str[0]; for(i=0;str[i+1] str[i+1];i++)str[i]=str[i+1]; str[i+1] str[i]=printf(&…&);puts(str);} str[i]=ch 126把字符串str1中下标为偶数的字符 保存在字符串str2中并输出。若 str1=“cdefghij”则str2=“cegi”。 main() {char str1[LEN],str2[LEN]; char *p1=str1,*p2=str2; int i=0,j=0;clrscr(); printf(&Enter the string:\n&); scanf(″%s″,str1); (″%s″,str1); printf(&***the origial string***\n&); while(*(p1+j)) {printf(&%c %c&,*(p1+j));j++;} %c for(i=0;i&j;i+=2)*p2++=*(str1+i); *p2='\0'; printf(&The new string is:%s&,str2 str2);} str2 127从一个字符串中截取前面若干个给定长 度的子字符串。 例如: 当str1=“cdefghij”, 然后输入4,则str2=“cdef”。 main() {char str1[LEN],str2[LEN]; int n,i;clrscr(); printf(&Enter the string:\n&); gets(str1); printf(&Enter the position of … &); … scanf(″%d″,&n ); ″%d″,&n for(i=0;i&n;i++)str2[i]=str1[i]; str2[i]=str1[i];str2[i]='\0'; printf(&The new string is:%s\n&,str2 str2);} str2 128若形参ch中是小写英文字母,则转 换成对应的大写英文字母; 若ch中是大 写英文字母, 则转换成对应的小写英文 字母; 若是其它字符则保持不变; 并将 转换后的结果作为函数值返回。 char fun(char ch) {if((ch&='a')&& &&(ch&='z')) && return ch -'a' + 'A'; if(isupper(ch))return ch +'a'-'A' 'A'; 'A'} 129 把 字 符 串 str 中 的 字 符 按 字 符 的 ASCII码降序排列。例如,如果输入 “cdefgh”,则输出为“hgfedc”。 void fun(char s[],int n) {int i,j; for(i=0;i&n;i++) for(j=i;j&n;j++) i if(s[i]&s[j]){ch=s[j]; s[j]=s[i];s[i]=}} s[j]=s[i] 130用字符串str2替换字符串str1前面的所 有字符。例如,如果输入str1=“abced”, str2=“fk”,则输出“fkced”。 main() {char str1[81],str2[81]; char *p1=str1,*p2=str2;clrscr(); do{printf(& Input str1 \n&); gets(str1);printf(&Input str2 \n&); gets(str2); }while(strlen(str1)&strlen(str2) strlen(str1)&strlen(str2)); strlen(str1)&strlen(str2) while(*p2 *p2)*p1++=*p2++; *p2 printf(&Display str1 \n&); puts(str1 str1);} str1 131判断字符ch是否与串str中的某个 字符相同;若相同,什么也不做,若不 同,则插在串的最后。 void fun(char *str, char ch ) {while(*str&&*str!=ch)str++; if(*str!= !=ch){str[0]= != str[1]=0;}} str[1] main( ) {char s[81],c;printf(…);gets(s); printf(&…&);c=getchar(); fun(s,c s,c);printf(…);} s,c 132把s串中所有的字符前移一个位置, 串中的第一个字符移到最后。若s串中 原有的字符串为:Mn.123xyZ,则调用 该函数后, s串中的内容为: n.123xyZM。 fun(char *s) {charb[N];sprintf(b,&%s%c&,s+1,*s); strcpy(s,b s,b);} s,b main( ) {char a[N]; printf(&Enter a string:&);gets(a); printf(&The original string is:&); puts(a);fun(a); aprintf(&The string after modified:&);puts(a);} puts 133将s所指字符串中的所有数字字符 移到所有非数字字符之后, 并保持数字 字符串和非数字字符串原有的先后次 序。例如,形参s所指的字符串为: def35adh3kjsdf7。执行结果为: defadhkjsdf3537。 void fun(char *s) {int i,j=0,k=0;char t1[80],t2[80]; for(i=0;s[i]!='\0';i++) if(s[i]&='0'&&s[i]&='9') {t2[j]=s[i];j++; j++;} j++; else t1[k++]=s[i]; t2[j]=0;t1[k]=0; for(i=0;i&k;i++)s[i]=t1[i] s[i]=t1[i]; s[i]=t1[i] for(i=0;i&j; i&j;i++)s[k+i]=t2[i];} i&j; 134 将形参 S 所指字符串中的所有字母 字符顺序前移, 其它字符顺序后移, 处 理后新字符串的首地址作为函数值返 回 。例 如, S 所 指字 符串为 asd123fgh543df,处理后新字符串为: asdfghdf123543. char *fun(char *s) {int i,j,k,n;char *p,*t; n=strlen(s)++; t=(char *)malloc(n*sizeof(char)); p=(char *)malloc(n*sizeof(char)); j=0;k=0; for(i=0;i&n;i++)if(((s[i]&=’a’&&(s[i]&=’z))||s[i]&=’A’&&s[i]&=’Z’))){t[j]=s[i] s[i];j++;} s[i] else{p[k]=s[i];k++;}} for(i=0;i&k;i++)t[j+i]=p[i]; k t[j+k]=0;} 0 135 将形参 S 所指字符串中的所有数字 字符顺序前移, 其他字符顺序后移, 处 理后新字符串的首地址作为函数值返回。例如,S 所指字符串为: asd123fgh5##43df,处理后新字符串 为:123543asdfgh##df。 char *fun(char *s) {int i,j,k,n;char *p,*t; n=strlen(s)+1; t=(char *)malloc(n*sizeof(char)); p=(char *)malloc(n*sizeof(char )); j=0;k=0; for(i=0;i&n;i++) {if(9sdigit(s[i])) {p[j]=s[i];j++;} j else {t[k]=s[i];k++;}} for(i=0;i&k;i++)p[j+i]=t[i]; k p[j+k]=0;} 136把形参s所指字符串中下标为奇数 的字符右移到下一个奇数位置, 最右边 被移出字符串的字符绕回放到第一个 奇数位置, 下标为偶数的字符不动。 例 如, 形参s所指的字符串为: abcdefgh, 执行结果为:ahcbedgf。 void fun(char *s) {int i,n,k;n=0; for(i=0; s[i]!='\0'; i++)n++; if(n%2= = 0)k=n-1; n 1;else k=n-2; c=s[k] s[k]; s[k] for(i=k-2;i&=1;i=i-2)s[i+2]=s[i]; s[1]=c;} c 137对形参s所指字符串中下标为奇数 的字符按ASCII码大小递增排序,并将 排序后下标为奇数的字符取出, 存入形 参p所指字符数组中,形成一个新串。 例如,形参s所指的字符串为: baawrskjghzlicda,执行后p所指字符 数组中的字符串应为:aachjlsw。 void fun(char *s,char *p) {int i,j,n,x,t;n=0; for(i=0;s[i]!='\0';i++)n++; for(i=1;i&n-2;i=i+2){t=i; t=i; for(j=i+2 i+2;j&n;j=j+2) if(s[t]&s[j])t=j; if(t!=i){x=s[i];s[i]=s[t];s[t]=x;}} for(i=1,j=0;i&n;i=i+2,j++) p[j]=s[i];p[j]=0;} 0 138把形参s所指字符串中最右边的n个 字符复制到形参t所指字符数组中,形 成一个新串。若s所指字符串的长度小 于n, 则将整个字符串复制到形参t所指 字符数组中。例如,形参s所指的字符 串为:abcdefgh,n的值为5,程序执行 后t所指字符数组中的字符串应为: defgh。 void fun(char *s,int n,char *t) {int len,i,j=0;len=strlen(s); if(n&=len)strcpy(t,s t,s); t,s else{for(i=len-n;i&=len-1;i++) t[j++]=s[i] s[i];t[j]='\0' s[i] ' 0';}} 139把str字符串转换成任意进制的数, 结果保存在数组xx中, 由函数返回转换 后数组xx的实际长度。其中x表示str 原来的进制,y表示要转换成的进制。 输 入str=“1111”,x=2,y=10, 结 果输 出 : 15 。 如 果 输 入 str=“15” , x=10,y=2,结果输出:1111。 int fun(char *str,int x,int y) {int i=0;char *p= for(i=0;i&N;i++)xx[i]=0; sum=*p-'0';p++; while(*p){sum=sum*x+*p-'0';p++;} sum*x+*psum*x+*p '0'; i=0; while(sum!=0){xx[i]= sum%y; sum%y; sum=sum/y; sum=sum/y;i++;}} 140 字 符 串 str 由 数 字 字 符 ‘0’ 和 ‘1’组成(长度不超过8个字符),可 看作二进制数,编写函数:把str字符 串转换成十进制数,结果由函数返回。 例如,输入“1001”,结果输出:9。 int fun(char *str) {char *p=n=*p-′0 ′ n=*p′; n=*p p++; while(*p){n=n*2+*p-'0';p++;} n*2+*pn*2+*p '0';} 141 找出形参 s 所指字符串中出现频率 最高的字母(不区分大小写),并统计 其出现的次数。 例如, 形参 S 所指的字 符串为 abcAbsantrless,程序执行后 的 输 出 结 果 为 : letter ‘a’:3 times,letter ‘s’:3 times。 void fun(char *s) {int k[26]={0},n,i,max=0; while(*s) {if(isalpha(*s)){ch=tolower(*s *s); *s n=ch-‘a’;k[n]+=1;}s++; 1 if(max&k[n])max=k[n] k[n];} k[n] printf(“\n After count:\n”);for(i=0;i&26;i++) if(k[i]= = max)printf(……);} 142按‘0’到‘9’统计一个字符串中 的奇数数字字符各自出现的次数, 结果 保 存 在 数 组 num 中 。 若 输 入 “x=6+0.909*bc”, 则结果 为:1=3,3=2,5=2,7=1,9=2。 void fun(char *tt,int num[]) {int i,j;int bb[10];char *p= for(i=0;i&10;i++) {num[i]=0;bb[i]=0;} while(*p *p){if(*p&='0'&&*p&='9') *p bb[*p-'0']++;p++;} bb[*p-'0']++ for(i=1,j=0;i&10;i=i+2,j++) num[j]=bb[i];} num[j]=bb[i] 143从字符串str中取出所有数字字符, 并分别计数,然后把结果保存在数组b 中并输出, 把其他字符保存在b[10]中。 例如:当str1=“abcde090”时, 结 为 0:2,1:1,2:1,3:1,4:1,5:1,6:1, 果 : 7:1,8:1,9:2,other charactor:5 main() {int i,b[11]; char *str=&abcde090&; char *p=clrscr(); printf(&*** the origial data ***\n&); puts(str); for(i=0;i&11;i++)b[i]=0; while(*p){switch(*p) (*p) {case '0':b[0]++; case '1':b[1]++; case '2':b[2]++; case '3':b[3]++; case '4':b[4]++; case '5':b[5]++; case '6':b[6]++; case '7':b[7]++; case '8':b[8]++; case '9':b[9]++; b[10]++;}p++; p++;} default: b[10]++; p++;} printf(&****** the result ********\n&); for(i=0;i&10;i++) printf(&\n%d:%d&,i,b[i]); printf(&\nother charactor:%d&,b[i]);} 144统计字符串str中的单词个数, 结果 由变量num传回。例如:str=“how do you do”,结果为:num=4。 void fun(char *s,int *num) {int i,n=0; for(i=0; i&*num i&*i++) {if(s[ 'a'& ]&=' (s[i =' ' i+1] 0')) i]&= &s[i z'&& +1]= ||s[ =='\ n++;}*num=n *num=n; n++ *num=n;} 145分类统计一个字符串中元音字母和 其他字符的个数(不区分大小写)。例 如 , 输 入 aeiouAOUpqrt , 结 果 为A:2 E:1 I:1 O:2 U:2 other:4。 void fun(char *str,int bb[]) {char *p=int i=0; for(i=0;i&6;i++)bb[i]=0; bb[i]=0; bb[i]=0 while(*p){switch(*p) {case 'A':case 'a':bb[0]++; case 'E':case 'e':bb[1]++; case 'I':case 'i':bb[2]++; case 'O':case 'o':bb[3]++; case 'U':case 'u':bb[4]++; default: bb[5]++ p++; bb[5]++;}p++; p++;}} 146从‘a’到‘z’统计一个字符串中 所有字母字符各自出现的次数, 结果保 存在数组alf中。 (不区分大小写, 不能 使用字符串库函数)。 例如, 输入: “A =abc+5*c”,结果为:a=2,b=1,c=2。 void fun(char *tt,int alf[]) {char *p= for(i=0;i&26;i++)alf[i]=0; alf[i]=0; alf[i]=0 while(*p){if(*p&='A'&&*p&='Z') *p+=32; *p+=32; if(*p&='a'&&*p&='z')alf[*p-'a']++; p++; p++;}} 147查找str中值为x的元素,返回该字符序 列中值为x的元素个数,并把这些值为x的元 素下标依次保存在数组bb中。例如,在 “abcdefahij”中查找‘a’,结果为:2个 ‘a’,下标依次为0、6。 int fun(char *str,char ch) {int i=0,n=0;char t= char *p= while(*p){if(*p= = t)bb[n++]=i; *p= bb[n++]=i *p bb[n++]= p++;i++;}} 148str为一个字符序列,序列由字符0 和1组成。 查找该字符序列中0字符连续 出现的最长长度(即0字符的个数), 如果有几个0字符串长度相同,只记录 最后一个0字符串的相关信息。通过m 和k返回最长0字符串的长度和最后0字 符的下标。 如果输入“”, 结5 果为: 0字符串最长长度为3, 起始和结 尾下标依次为5、7。 void fun (char *str,int *m,int *k *k) char {int i, j=0;int bb[N]; char *p=*m=0;*k=0; for(i=0;i&N;i++)bb[i]=0;i=0; while(*(p+i)){if(*(p+i)=='0') {bb[j]++;i++;}else{j++;i++;} bb[j]++; bb[j]++ if(*m&=bb[j]){*m=bb[j];*k=i-1;}}} (*m&=bb[j]) 149统计一个长度为n的字符串在另一 个字符串中出现的次数。 若输入的字符 串为:asd ascasdfg asd as asd mlosd, 子字符串为asd,则应输出4。 int fun(char *str,char *substr) {char *p,*r;n=0; n=0; n=0 while(*str){p=r= while(*r)if(*r= = *p *r= *r *p){r++;p++;} if(*r= = ′\0 ′ *r= ′)n++;str++;} *} 150返回字符数组中指定字符的个数。 int fun (char s[],char ch) {int i=0,n=0; while(s[i] s[i]) s[i] {if(s[i]= = ch s[i]= s[i] ch)n++;i++;}} return n 151分别统计字符串中大写字母和小写 字母的个数。例如,给字符串ss输入: AaaaBBb123CCccccd则输出结果应为: upper=5,lower=9 void fun(char *s,int *a,int *b) {while(*s) {if(*s&='A'&&*s&='Z')(*a)++; (*a)++; if(*s&='a'&&*s&='z')(*b)++; (*b)++;s++;}} (*b)++; main( ) {char s[100];int upper=0,lower=0; printf(&\nPlease a string:&); gets(s);fun(s,&upper,&lower); printf(&\nupper=%d lower=%d\n&,upper,lower upper,lower);} upper,lower 152对指定字符在字符串a中出现的次 数进行统计, 统计的数据存到b数组中。 其中:字符'Z'出现的次数存放到b[0] 中, 字符'Y'出现的次数存放到b[1]中, 字符'X'出现的次数存放到b[2]中,字 符'W'出现的次数存放到b[3]中,字符 'V'出现的次数存放到b[4]中,其它字 符出现的次数存放到b[5]中。 例如, 当 a中的字符串为&AYYZXW1Y+ZWVP&,调用 该函数后, b中存放数据应是: 3、 2、 1、 2、1、4。 void fun(char *a, int b[]) { for(i=0;i&6;i++)b[i]=0; for(i=0;i&strlen(a) strlen(a);i++) strlen(a) if(a[i]&='V'&& &&a[i]&='Z') && b[4-(a[i]-'V')]++;else b[5]++;} else main() {int i,b[6];char a[100]=&AYYZXW1Y+ZWVP&; fun(a,b a,b);printf(&The result is:&); a,b for(i=0;i&6;i++)printf(&%d&,b[i]); printf(&\n&);} 153统计形参s所指字符串中数字字符 出现的次数,例如,形参s所指的字符 串为:abcdef35adgh3kjsdf7。输出结 果为:4。 void fun(char *s,int *t) {int i,n;n=0; for(i=0;s[i]! s[i]!=NULL;i++) s[i]! if(s[i]&='0'&&s[i]&='9' )n++; &='9' *t=} 154将形参S所指字符串中的数字字符 转换成对应的数值, 计算出这些数值的 累加和作为函数值返回。例如,形参S 所指的字符串为abs5def126jkm3, 程序 执行后的输出结果为:22。 int fun(char *s) {int sum=0; while(*s) {if(isdigit(*s))sum+=*s-48 48;s++;} 48} 155按条件删除一个字符串指定字符一 半的数目, 如果该字符串所包含的指定 字符的个数是奇数, 则不予删除, 如果 其数目是偶数, 则删除原串后半部分的 指定字符。其中,a指向原字符串,删 除后的字符串存放在b所指的数组中, c 中存放指定的字符。例如:当a输入 “abababa”,c=‘a’时,b的输出为 “ababb”; 如果a的输入为“ababa”, 则b的输出为“ababa”。 void fun(char a[],char b[],char c) {int i=0,j=0;int n=0;int m=0; while(a[i]!='\0') {if(a[i]= = c)n++;i++;}i=0; i=0; i=0if(n%2) {while(a[j]!='\0'){b[j]=a[j];j++;} b[j]='\0';}else{while(a[i]!='\0') {b[j++]=a[i]; if(a[i]==c)m++; if((m&n/2)&&(a[i]==c))j- -;i++;} j ′\ ′; b[j]= ′\0 ′;}} 156只保留字符串中的大写字母,删除 其他字符。 void fun(char *s) {int i=0,j=0;char *p=s; while(*(p+i)) {if(*(p+i)&='A'&&*(p+i)&='Z') {s[j++]=*(p+i);}i++;} s[j++]=*(p+i); i++; s[j++]=*(p+i) i++ s[j]='\0';m=j;} m=j; m=j 157把字符下标能被2或3整除的字符从 字符串str中删除,把剩余的字符重新 保存在字符串str中。例如,若输入 “abcdefghijk”,则输出为“bfh”。 void fun(char s[], int n) {int i,k;k=0; k=0; k=0 for(i=0;i&n;i++){s[k++]=s[i]; if((i%2= = 0)||(i%3= = 0) (i%2= (i%2 0)||(i%3= 0))k--;} s[k]= ‘\0’;} 158把字符下标为非素数的字符从字符 串str中删除,把字符下标为素数的字 符重新保存在字符串str中。例如,输 入“abcdefghijkl”, 输出“cdfhl”。 void fun(char s[],int n) {int i,j,k,k=0; k=0; k=0 for(i=0;i&n;i++) {if(i&1)s[k++]=s[i];flag=1; for(j=2 j=2;j&i&&j++) j=2 if(i%j= = 0){flag=0;k- -;}} k s[k]='\0';} 159删除字符数组中小于等于指定字符 的字符, 指定字符从键盘输入, 结果仍 保存在原数组中。例如,输入 “abcdefghij”,指定字符为‘d’, 则结果输出“defghij”。 void fun (char s[], char ch) {int i=0,j=0; while(s[i]){if(s[i]&ch)i++; i++; i++ else{s[j++]=s[i];i++;}} s[j++]=s[i]; s[j++]=s[i] s[j]='\0';} s[j]='\0' 160把ASCII码为偶数的字符从字符串 str中删除, 结果仍然保存在字符串str 中,例如,输入abcdef,则输出ace。 void fun(char s[],int n) {int i,j;j=0; j=0; j=0 for (i=0;i&n;i++) {if(s[i]%2!=0)s[j++]=s[i];} s[j]= ′\0′;} 161把ASCII码为奇数的字符从字符串 str中删除, 结果仍然保存在字符串str 中。例如,输入abcdef,输出bdf。 void fun(char s[],int n) {int i,j;j=0; for(i=0; i&n i&n;i++) {if(s[i]%2= = 0)s[j++]=s[i];} s[i]%2= s[i]%2 s[j]= ′\0′;} 162从键盘输入一个字符串及一个指定 字符, 然后把这个字符及其后面的所有 字符全部删除。结果仍然保存在原串 中。例如,输入“abcdef”,指定字符 为‘e’,则输出“abcd”。 main() {int i=0;char str[N]; printf(&\n Input a string:\n&); gets(str); printf(&\n I\n&); scanf(&%c&, &ch); while(str[i]!='\0') {if(str[i]= = ch)i++;}i++;i++ str[i]= ′\0′; printf(&\n*** display string ***\n&); puts(str);} 163把字符串str1中的非空格字符拷贝 到字符串str2中。例如,str1=“glad to see you!”,则str2=“gladtoseeyou!”。 main() {static char str1[N]=&glad to see you!&; char str2[N];int i=0,j=0;clrscr(); printf(&\n***** str1*****\n &); puts(str1); while(str1[i]){if(str1[i]!=' ') str1[i]!=' str2[j++]=str1[i];i++;} i++; i++ printf(&\n***** str2 *****\n &); for(i=0;i&j;i++) printf(&%c&,str2[i]);} 164把一个二维字符数组每行字符串最 大的字符拷贝到字符数组s中。如果str[3]={&efjh&,&efknls&,&owys&},则s=&hsy&。char **p;char s[8];p=str p= p=str for(i=0;i&3;i++){s[i]=*p[i]; while(*p[i]) {if(s[i]&*p[i])s[i]=*p[i]; p[i]++;}}s[i]= ; p[i]++ s[i]= ′ \0′ printf(& new string \n&);puts(s);} 165从键盘输入若干字符放到一个字符 数组中当按回车键时结束输入, 最后输 出这个字符数组中的所有字符。 main() {int i=0;char s[81];char *p=s; printf(& Input a string \n&); for(i=0;i&80;i++) {s[i]=getchar(); if(s[i]=='\n')} break s[i]= ′\0′; printf(& display the string \n&); while(*p)putchar(*p++ *p++);} *p++ 166把一个字符串中的字符(字母)按 从小到大排序, 并把这个全部由字母组 成的字符串保存在原串中, 函数返回这 个字符串的长度。输入“cixbr2.3”, 如果为bcirx,字符串长度为5。 int fun (char *str) {int i=0,j=0,k=0,m=0;char *p= while(*p) {if((*p&='A'&&*p&='Z')||(*p&='a'&&*p&='z')) *(str+i++)=*p; *(str+i++)=*p;p++;}*(str+i)='\0'; p= p= while(*(p+j)){k=j;m=j m=j; m=j while(*(p+k)){if(*(p+k)&*(str+m)) {t=*(str+m);*(str+m)=*(p+k); *(p+k)=t;}k++;}j++;}} 167从键盘输入一组字符串, 以‘*’结 束输入,并显示出这个字符串。例如, 输入abcdefghi*, 结果显示adcdefghi。 main() {int i=-1,j=0;char str[N]; printf(&\n Input a string \n&); do{i++;scanf(”%c”,&str[i] ”%c”,&str[i]); ”%c”,&str[i] }while(str[i]!='*' str[i]!='*'); str[i]!='*' printf(&\n**display the string** \n&); while(j&i) {printf(”%c”,str[j] ”%c”,str[j]);j++;}} ”%c”,str[j] 168判断一个数是否为回文数。当字符 串是回文时,函数返回字符串:yes!, 否则函数返回字符串:no!,并在主函 数中输出。 char *fun(char*str) {char *p1,*p2;int i,t=0; p1=p2=str+strlen(str)-1; for(i=0; i&=strlen(str)/2 i&=strlen(str)/2;i++) if(*p1++!=*p2- - ){t=1;} *p1++!=*p2 *p1++!=*p2if(t= = 0)return(&yes!&); t else return(&no!&);} 169判断形参S所指字符串是否为“回 文”,若是,函数返回值为1,不是函 数返回值为0。 int fun(char *s) {char *lp,*lp=s; s rp=s+strlen(s)-1;while((toupper(*lp)==toupper(*rp))&&(lp&rp))main() {int i=0;char *str[3]={…};lp++;rp- - ;} if(lp&rp)return 0 return 0;else return 1;} 170比较字符串str1和str2的大小,并 返回比较的结果。例如: 当 str1=“cdef”,str2=“cde”时,函 数fun返回“&”。 char *fun(char *str1,char *str2) {char *p1=str1,*p2=str2; while(*p1&&*p2) {if(*p1&*p2 *p1&*p2)return &&&; *p1&*p2 if(*p1&*p2 *p1&*p2)return &&&; *p1&*p2 p1++;p2++;} if(*p1= = *p2)return &= = &; if(*p1= = ′\0′)return &&&; else return &&&;} 171利用指针数组对形参ss所指字符串 数组中的字符串按由长到短的顺序排 序, 并输出排序结果。 ss所指字符串数 组中共有N个字符串,且串长小于M。 void fun(char (*ss)[M]) {char *ps[N],*int i,j,k; for(i=0;i&N;i++)ps[i]=ss[i]; for(i=0;i&N-1;i++){k=i; i for(j=i+1 i+1;j&N;j++) i+1 if(strlen(ps[k] ps[k])&strlen(*(ps+j))) ps[k] k=j;tp=ps[i];ps[i]=ps[k]; k=j ps[k]=}printf(&…&); tp for(i=0; i&N; i++)puts(ps[i]);} 172 用冒泡法对 6 个字符串进行排序。 fun ( char *pstr[6]) {int i,j;char *p; for(i=0;i&5;i++){for(j=i+1;j&6;j++){ if(strcmp(*(pstr+i),*(pstr+j) *(pstr+j))&0) *(pstr+j) {p=*(pstr + i);pstr[i]=pstr[j] pstr[j]; pstr[j] *(pstr+j)=p;}}}} p 173将仅在字符串s中出现而不在字符 串t中出现的字符, 和仅在字符串t中出 现而不在字符串s中出现的字符,构成 一个新字符串放在u中, u中的字符按原 字符串中字符顺序排列, 不去掉重复字 符。例如:当s=&112345&,t=&24677& 时,u中的字符串为:&1135677&。 void fun(char *s,char *t,char *u) {int i,j,sl,sl=strlen(s); tl=strlen(t); for(i=0;i&i++) {for(j=0;j&j++) if(s[i]==t[j]) if(j&= &=tl)*u++=s[i];} &= for(i=0;i&i++) {for(j=0;j&j++) if(t[i]==s[j]) if(j&= &=sl)*u++=t[i];}*u *u='\0';} &= *u 174将既在字符串s中出现、 又在字符串 t中出现的字符形成一个新的字符串放 在u中, u中字符按原字符串中字符顺序 排列,但去掉重复字符。例如,当 s=&122345&,t=&2467&时,u中的字符 串为:&24&。 void fun(char *s,char *t,char *u) {int i,j,sl,tl,k,ul=0; sl=strlen(s);tl=strlen(t); for (i=0;i&i++) {for(j=0;j&j++) if(s[i]==t[j]) if(j&tl){for(k=0;k&k++) if(s[i]= = u[k]) = if(k&=ul)u[ul++]=s[i] s[i];}} s[i] u[ul] = '\0';} 175将未在字符串s中出现, 而在字符串 t中出现的字符,形成一个新的字符串 放在u中, u中字符按原字符串中字符顺 序排序,但去掉重复字符。例如:当 s=&12345&,t=&24677&时,u中的字符 为:&67&。 void fun(char *s, char *t, char *u) {int i,j,sl,tl,k,ul=0; sl=strlen(s);tl=strlen(t); for(i=0;i&i++) {for(j=0;j&j++) if(t[i]==s[j]) if(j&=sl){for(k=0;k&k++) if(t[i]==u[k]) break if(k&=ul)u[ul++]=t[i] t[i];}} t[i] u[ul]='\0';} u[ul] 176将在字符串s中出现、 而未在字符串 t中出现的字符形成一个新的字符串放 在u中, u中字符按原字符串中字符顺序 排列,不去掉重复字符。例如:当 s=&112345&,t=&2467&时,u中的字符 串为&1135&。 void fun(char *s,char *t, char *u) {int i,j,sl, sl=strlen(s);tl=strlen(t); for(i=0;i&i++) {for(j=0;j&j++) if(s[i]==t[j]) break if(j&=tl)*u++ =s[i] s[i];}*u = '\0' 0';} s[i] 177将在字符串s中下标为奇数位置上 的字符, 紧随其后重复出现一次, 放在 一个新串t中, t中字符按原字符串中字 符出现的逆序排列。(注意0为偶数) 例如:当s中的字符串为:&1234567& 时,则t中的字符串应为:&664422&。 void fun(char *s,char *t) {int i,j,sl=strlen(s); if(sl%2)sl-=2;else sl--; else for(i=sl,j=0;i&=0;i-=2) 0 {t[2*j]=s[i];t[2*j +1]=s[i] s[i]; s[i] j++;}t[2*j]='\0';} 178从字符串s尾部开始, 按逆序把相邻 的两个字符交换位置, 并依次把每个字 符紧随其后重复出现一次, 放在一个新 串t中。 当s中的字符串为: &12345&时, 则t中的字符串应为:&&。 void fun (char *s, char *t) {int i,j,sl=strlen(s); strlen(s); for(i=sl-1,j=0;i&=0;i-=2) {if(i-1&=0)t[j++]=s[i-1]; if(i-1&=0)t[j++]=s[i-1]; t[j++]=s[i];t[j++]=s[i];} t[j]=0;} t[j]=0; main() {char s[100],t[100];printf(&\nPlease enter string s:&);scanf(&%s&, s);fun(s, t);6 printf(&The result is: %s\n&, t);} 179从字符串s尾部开始, 按逆序把在其 中出现的每相邻的两个字符, 紧随其后 重复出现一次,放在一个新串t中,若 字符串s中头部有剩余的单个字符也重 复,放在t的最后。例如:当s中的字符 串为: &12345&时, 则t中的字符串应为: &&。 void fun(char *s,char *t) {int i,j,sl=strlen(s); for(i=sl-1,j=0;i&=0;i-=2) {t[j++]=s[i]; if(i-1&=0)t[j++]=s[i-1]; t[j++]=s[i] s[i];if(i-1&= &=0) s[i] &= t[j++]=s[i-1];}t[j] ='\0';} main() {char s[100],t[100]; printf(&\nPlease enter string s:&); scanf(&%s&,s);fun(s,t s,t); s,t printf(&The result is: %s\n&,t);} 180将在字符串s中出现、 而未在字符串 t中出现的字符,构成一个新的字符串 放在u中, u中字符按原字符串中字符顺 序的逆序排列,不去掉重复字符。 例如,当s=&112345&,t=&2467&时,u 中的字符是:&5311&。 void fun(char *s,char *t,char *u) {int i,j,sl,tl,char r,*up=u; sl=strlen(s);tl=strlen(t); for(i=0;i&i++) {for(j=0;j&j++) if(s[i]==t[j]) break if(j&= j&=tl)*u++=s[i];} j&= *u= '\0';ul=strlen(up); for(i=0;i&ul/2;i++) {r=up[i] up[i];up[i]=up[ul-1-i]; up[i] up[ul-1-i]=r;}} 181把在字符串s中出现的每个字符, 紧 随其后重复出现一次, 形成一个新串放 在t中, 且在t中把原相邻字符的位置进 行了交换。例如:当s中的字符串为: &12345&时,则t中的字符串应为: &&。 void fun(char *s,char *t) {int i,j,sl=strlen(s) strlen(s); strlen(s) for(i=0,j=0;i&i+=2) {if(i+1&sl){t[2*j]=s[i+1]; t[2*j +1]=s[i+1];j++;} t[2*j]=s[i];t[2*j+1]=s[i]; j++;}t[2*sl]='\0';} j++ main() {char s[100],t[100];printf(&\nPlease enter string s:&);scanf(&%s&,s);fun(s,t s,t); s,t printf(&The result is: %s\n&, t);} 182求出形参ss所指字符串数组中最长 字符串的长度, 其余字符串左边用字符 *补齐,使其与最长的字符串等长。 void fun(char (*ss)[N] (*ss)[N]) {int i,j,k=0,n,m, for(i=0;i&M;i++){len=strlen(ss[i]); if(i= = 0)n= n= if(len&n){n=k=i; k=i;}} k=i; for(i=0; i&M; i++) if(i!=k){m=n;len=strlen(ss[i]); for(j=j&=0;j- - ) ss[i][m--]=ss[i][j]; for(j=0;j&n-j++)ss[i][j] ss[i][j]='*';}} ss[i][j] 183求出形参ss所指字符串数组中最长 字符串的长度, 将其余字符串右边用字 符*补齐,使其与最长的字符串等长。 void fun(char (*ss)[N]) {int i,j,n,len=0; for(i=0;i&M;i++){n=strlen(ss[i]); if(i= = 0)len=n; if(n&len)len=n;} for(i=0;i&M;i++){n=strlen(ss[i] ss[i]); ss[i] for(j=0;j&len-n;j++)ss[i][n+j] ss[i][n+j]='*'; ss[i][n+j] ss[i][n+j+1]='\0';}} ss[i][n+j+1] 184 在形参 s 所指字符串中的每个数字 字符之后插入一个*号。例如,形参 s 所指的字符串为:def35adh3kjsdf7。 执行结果为:def3*5*adh3*kjsdf7*。 void fun(char *}

我要回帖

更多关于 brusting disc 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信