删除排序,15个数从大到小,删除mysql 指定排序的数据x

SQL数据库 先从大到小排序 然后取10到15之间的数据。该怎么解决 - Sql Server当前位置:& &&&SQL数据库 先从大到小排序 然后取10到15之间的数据SQL数据库 先从大到小排序 然后取10到15之间的数据。该怎么解决&&网友分享于:&&浏览:173次SQL数据库 先从大到小排序 然后取10到15之间的数据。SQL数据库&先从大到小排序&然后取10到15之间的数据????
------解决方案--------------------
&&&&select&*,rid&=&row_number()&over&(order&by&colname&desc)
&&&&from&tb
where&rid&between&10&and&15
order&by&rid
------解决方案--------------------
--SQL&Server&2000
select&top&(5)&*&
from&(&select&top&15&*&from&表&order&by&排序列&desc&)&as&a
order&by&&排序列&&desc
--SQL&Server&08R2,2012通用方法
&&&&select&*,row_number()&over&(order&by&排序列&desc)&as&id
&&&&from&表
where&id&between&10&and&15
order&by&id
--SQL&Server&2012
select&*&from&表&order&by&排序列&desc&OFFSET&10&ROW&FETCH&NEXT&5&ROWS&ONLY
SQL&Server&2012在分页上的语法精简的还是比较方便的
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
在excel中如何同时把多列数据同时排序(DOC X页)
下载积分:1500
内容提示:在excel中如何同时把多列数据同时排序(DOC X页)
文档格式:DOC|
浏览次数:14|
上传日期: 09:44:05|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
在excel中如何同时把多列数据同时排序(DOC X页)
官方公共微信查看: 2965|回复: 6
[已解决]将某一列数据:大于0的数据从小到大排序,小于0的数据从大到小排序
数值排序结果22.06 434.67 819.86 349.02 913.95 2-181.68 1426.25 61400.27 12-108.35 1313.44 123.25 530.29 7139.04 10215.61 11
tgydslr发布于
C1=FREQUENCY(ABS(A$$1:A$$14)+(A$$1:A$$14&0)*2000,ABS(A1)+2000*(A1&0))复制代码下拉
QQ截图58.png (75.58 KB, 下载次数: 30)
21:29 上传
=ABS((COUNT(0/(A$2:A$15&0))+1)*(A2&0)-RANK(A2,A$2:A$15,0))复制代码
&&&本楼为最佳答案&&&
C1=FREQUENCY(ABS(A$$1:A$$14)+(A$$1:A$$14&0)*2000,ABS(A1)+2000*(A1&0))复制代码下拉
QQ截图58.png (75.58 KB, 下载次数: 30)
21:29 上传
hsl215 发表于
我试了一下,结果好像不是我要的那样
数值排序排序结果22.067434.673819.868349.022913.9592-181.68141426.25561400.27112-108.35131313.4410123.256530.2947139.04110215.61011
tgydslr 发表于
谢谢3楼的回复,这个公式跟我要的结果是一样的,但是我不明白是啥意思,能讲解一下吗?
QQ_E93E6C 发表于
谢谢3楼的回复,这个公式跟我要的结果是一样的,但是我不明白是啥意思,能讲解一下吗?
1、请注意frequency的意义。他返回一个垂直数组,一个是小于等于第二参数的数量,一个是大于他的数量,不用三键结束时,返回的是第一个小于等于的值。
2、楼主说的正数从小到大负数从大到小,按绝对值排的话到是统一的从小到大了,为了使负数排后面,所以给负数的绝对值统统加一个很大的数(正数的话不加),这样一来负数的就排后面了ABS(A$1:A$14)+(A$1:A$14&0)*2000就是这个意思。
tgydslr 发表于
将某一列数据:大于0的数据从小到大排序,小于0的数据从大到小排序,同时先排小于0的数字,后排大于0的数字,请教,急?
Powered by温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(787)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_085071',
blogTitle:'用Excel做数据排序的常用方法与技巧 ',
blogAbstract:'用Excel做数据排序的常用方法与技巧 \r\n  在用Excel制作相关的数据表格时,我们可以利用其强大的排序功能,浏览、查询、统计相关的数字。下面,我们以图1所示的“员工基本情况登记表”为例,来全面体验一番Excel的排序功能。\r\n  一、快速排序\r\n  如果我们希望对员工资料按某列属性(如“工龄”由长到短)进行排列,可以这样操作:选中“工龄”列任意一个单元格(如I3),然后按一下“常用”工具栏上的“降序排序”按钮即可(参见图1)。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}当前位置: >>
国家计算机二级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; f=f1;r1=f(a);f=f
2;r2 = (*f)(a,b); 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(x); else return f2(x,y); } 3将形参n所指变量中各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:, 新的数:为739。 void fun(unsigned long *n) {unsigned long x=0,i;i=1; while(*n){t=*n%10; if(t%2!=0){x=x+t*i;i=i*10;} *n=*n/10;}*n=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+t; n=n/10;}} 5将形参n所指变量中各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:,新的数为26846。 unsigned long fun(unsigned long n) {unsigned long x=0,s,i; s=n;i=1; while(s) {t=s%10; if(i%2= = 0)x=x+t*i;i=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); x2=(-b-sqrt(disc))/(2*a); printf(&x1=%6.2f,x2=%6.2f\n&,x1,x2);} else{p=-b/(2*a); q=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) printf(&A=%2d,B=%2d&,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); printf(&*******the result*******\n&); x1=(-b+sqrt(disc))/(2*a); x2=(-b-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; if((g+b)= = s)return″yes!″; else return″no!″; 10输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 main() {clrscr(); printf(&E\n&); scanf(″%ld″,&n); printf(&*** the absolute value ***\n&); if(n&0)n=-n;printf(&\n\n&); printf(″%ld″, n);} 11计算如下公式的值。A1=1,A2= 1/(1+A1),A3=1/(1+A2),?,AN=1/(1+AN+1)若n=10,则应输出:0.618056。 float fun(int n) {float A=1; for(i=1;i&=n;i++)A=1.0/(1+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);} 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++) {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); for(i=1;i&=n;i++){t=t*i;s=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; for(i=0;i&=n;i++) {s=s+j*1.0/(2*i+1);j*=-1;}*sn=s;} main() {int n=15;fun(&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&=n;k++) {s1=s;s+=(2*k-1)/s1;}} 3 1 5 3 7 5 2k+1 2k-1 17计算S的值:s=1 /3 *3 /5 *5 /7 *?*(2k-1) /(2k+1) 当k=5时,s=338.215158。 double fun(int n) {double s=1;double f=0.0; double p=0.0;int i=0; for(k=1; k&=n;k++) {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;}} 2 2 2 n-1 2 2 -3 18计算下式:S=3/2 -5/4 +7/6 -?+(-1) *(2n+1)/(2n) ,直到(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; while(x&e) {s=s+k*x;k=k*(-1);t=2*i; x=(2*i+1)/(t*t);i++;}} 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;} float fun(int m,int n) { p=1.0*jc(m)/jc(n)/jc(m-n);} 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; for(i=1;i&=n;i++) {t=2.0*i; s=s+(2.0*i-1)*(2.0*i+1)/(t*t);}} 2 2 21计算S的值:s=(1*3)/2 -(3*5)/4 + 2 n-1 2 (5*7)/6 -?+(-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; for(i=1;i&=n;i++) {t=2*i; s=s+k*(2*i-1)*(2*i+1)/(t*t); k=k*(-1);} 2 2 2 2 22计算下式:S=1/2 +3/4 +5/6 +?+(2N-1)/(2N) double fun(double e) {double s,x;s=0;i=0;x=1.0; while(x&e){i++; x=(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)flag=1;} if(n%400= = 0)flag=1;} 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; if(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; else if(n= = 1)return 1; else return 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; while(t&=x) {s1=t%10;s2=(t/10)%10;s3=t/100; if(s1+s2+s3==15){printf(&%d&,t); n++;}++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) {s1=t%10;s2=(t/10)%10;s3=t/100; if(s1+s2+s3==x){printf(“%d”,t); n++;}t++;}} 28打印出1~1000中满足:个位数字的立方等于其本身所有数。本题的结果为:1,64,125,216,729 main() {int i,g;clrscr(); for(i=1;i&1000;i++){g=i%10; if(g*g*g= = i)printf(&%4d&,i);}} 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) printf(&%5d&,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){t=a%b;a=b;b=t;} printf(&greatest common divisor:%d\n&,a);printf(&least common multiple:%d\n&,n*m/a);}31从键盘输入只有两个整数参与运算的一个四则运算式,然后计算出它的值。注意数字全部为正整数。例如,输入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'; else if(fg){ch=*p;flag=2;fg=0;} if(*p&='0'&&*p&='9'&&flag==2) b=b*10+*p-′0′;p++;} switch(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; printf(&\nInput n,m\n&); scanf(&%d,%d&,&n,&m); while(n&=m){sum+=n;n++;} printf(&sum=%ld\n&,sum);} 33求k!(k&13)并通过函数名传回主函数。例如:若k = 10,则应输出:3628800。 long fun(int k) {if(k&0)return(k*fun(k-1)); else if(k= = 0)return 1L;} 34求n!。例如7!=5040。 main() {int i,n;long f=1;printf(&Input n:&); scanf(&%d&,&n); for(i=1;i&=n;i++)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){t=x;x=y;y=t;} if(x&z){t=z;z=x;x=t;} if(y&z){t=y;y=z;z=t;} 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;} for(;i;i- - )printf(&%d&,aa[i-1]);} 37 求二分之一的圆面积,若圆的半径为 19.527 则输出为:s=598.950017。 float fun ( float r ) {return 3.14159 * r * r /2.0;} main( ) {printf(&Enter x:&); scanf(&%f&,&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;}} main( ) {int j,k;printf(?? ); scanf(&%d&,&k);printf(??); 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++) if(i%3= = 0||i%7= = 0)sum+=1.0/i;}} 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;} main() {int aa[1000],n,k;fun(aa, &n ); for(k=0;k&n;k++) if((k+1)%10==0)printf(&\n&); else printf(&%5d&,aa[k]);} 41统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。当n=时,结果应该为:c1=3、c2=1、c3=2。 void fun(long n) {c1=c2=c3=0; while(n) {switch(n%10) {case 1:c1++; 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;} if(yes){sum+=n++;} high- - ;}} 43统计所有小于等于n(n&2)的素数的个数,素数的个数作为函数值返回。 int fun(int n) {int i,j,count=0;printf(?); for(i=3;i&=n;i++) {for(j=2;j&i;j++) if(i%j= = 0) 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;} if(flag= = 1){n++;aver+=j;}} printf(&\n\n average=%4.2f&,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[j]=0;i++; while(a[i]= = 0)i++;}printf(?); for(i=2;i&=n;i++) if(a[i]!=0){count++;printf(?);}} 46判断一个数是否为素数。该数是素数时,函数返回字符串:yes!,否则函数返回字符串:no! char *fun(int n) {int i,m;m=1; for(i=2;i&n; i++) if(n%i= = 0){m=0;} if(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; for(i=2;i&j;i++) if(j%i= = 0){flag=0;} if(flag= = 1)bb[k++]=j;}} 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)) 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++){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:((b&c)?c:b));} 二、数组题: 50删除w数组中下标为k的元素中的值。arrout(int *w,int m) { for(k=0;k&m;k++)printf(&%d&,w[k]); 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{printf(&\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; b=xx[i]/100; if(g= = b) 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; s=xx[i]/10%10; if((g+s)&5)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]; avg=sum/10;avg=avg*1000; t=(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;} 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&=k;i++) {if(k%i= = 0&&i%2= = 0)bb[j++]=i;} 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 n) {double sum=0.0; double average=0.0;int i=0; for(i=0;i&n;i++)sum+=x[i]; average=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++) if(a[i]&60)b[5]++; else b[(a[i]- 60)/10]++;} 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]);printf(&\n&);} 58对a数组中n个人员的工资进行分段统计,各段的人数存到b数组中:工资为1000元以下的人数存到b[0]中,工资为元的人数存到b[1],工资为 元的人数存到b[2],工资为元的人数存到b[3],工资为元的人数存到b[4],工资为元的人数存到b[5]中。例如,当a数组中的数据为: 900、、、、,调用该函数后,b中存放的数据应是:1、1、2、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++) 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]);printf(&\n&);} 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]); }while (score[i]!=0); for(i=0;i&5;i++)bb[i]=0; for(i=0;i&n-1;i++) {grade=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]); else {a[j++]=t;t=a[i];} 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; for(i=0;i&n/2;i++){t=a[i]; a[i]=a[p+i];a[p+i]=t;}} 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]); max=max&num[i]?num[i]: }while (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]);} main() {int i,a[100]={1,3,5,7,8},b[100]={2,3,4,5,8},c[100]; fun(a,b,c,5); printf(&The result is:&); for(i=0;i&5;i++) printf(&%d &,c[i]);printf(&\n&);} 64在x数组中放入n个采样值,计算并输出方差值。N S= (xK-x’)2K=1 N N 其中 x’= K=1 XK N例如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; for(j=0;j&n;j++) s+=(x[j]-xa)*(x[j]-xa)/n;} 65计算并输出给定10个数的方差:0.5 1 S= 10 K=1 2 10 1 XK 其中 x’= 10 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。 10 (xK-x’)double fun(double x[10]) {double avg=0.0; double sum=0.0;double abs=0.0; for(i=0;i&10;i++)sum+=x[i]; avg=sum/10; for(i=0;i&10;i++) abs+=(x[i]-avg)*(x[i]-avg); sd=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; for(i=0;i&j;i++,k++)aa[k]=bb[i];} 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])max=i; if(aa[min]&aa[i])min=i;}t=aa[max]; 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- - ) {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++) if(a[i]%2= = 1){a[j]=a[i];++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)bb[k++]=aa[i]; else aa[j++]=aa[i];} for(i=0;i&k;i++,j++)aa[j]=bb[i];} 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&N;i=i+2) {for(j=i;j&N;j=j+2)if(aa[i]&aa[j]) {t=aa[j];aa[j]=aa[i];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&N;j=j+2) if(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]; else aa[j++]=aa[i];} for(i=0;i&k;i++,j++)aa[j]=bb[i];} 74逆置数组元素中的值。若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;i++){t=a[i]; a[i]=a[n-1-i];a[n-i-1]=t;}} 75求100(不包括100)以内能被2或5整除,但不能同时被2和5整除的自然数。结果保存在数组bb中,函数fun返回数组bb元素的个数。 int fun(int bb[]) {int i,j; for(i=1,j=0;i&100;i++) if((i%2!=0&&i%5= = 0)||(i%2= = 0&&i%5!=0)) 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++) if(aa[i]&aa[i+1])bb[n++]=aa[i]; printf(&\n*** display bb ***\n&); for(i=0;i&n;i++) printf(&bb[%d]=%2d&,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; for(j=2;j&i&&j++) if(i%j= = 0){flag=0;} if(flag){sum+=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]) {for(j=N;j&i;j- - )bb[j]=bb[j-1]; bb[j]=n;}} 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; for(i=0;i&N;i++) if(x[i]&*av&&*av-x[i]&=d) {d=*av-x[i];j=i;}return x[j];} 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; for(i=0;i&N;i++)av=av +x[i]/N; for(i=j=0;i&N;i++) if(x[i]&av)y[j++]=x[i]; 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; for(i=j=0;i&N;i++) if(x[i]&av){y[j++]=x[i];x[i]=-1;} 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; for(i=j=0;i&N;i++) if(x[i]&av) {y[j]=x[i];x[i]=-1;j++;}j=0; while(i&N) {if(x[i]!=-1)y[j++]=x[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[]){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];} main() {int i,n,below[9];int score[9]={?}; n=fun(score,9,below);printf(&\nBelow the average score are:&);for(i=0;i&n;i++) printf(&%d&,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; for(i=0;i&N;i++) {for(j=0;j&M;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[],int n) {int i,j,max,min,px,pn,t; for(i=0;i&n-1;i+=2) {max=min=a[i];px=pn=i; for(j=i+1;j&n;j++) {if(max&a[j]){max=a[j];px=j;} if(min&a[j]){min=a[j];pn=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++) for(j=0; j&n-1;j++) if(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; if(g= = b)bb[n++]=xx[i];}} 88调用随机函数产生20个互不相同的整数放在形参a所指数据组中(此数组在主函数中已置0)。 void fun(int *a) {int i,x,n=0;x=rand()%20; while(n&N) {for(j=0;j&n;j++) if(x= = a[i]) 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 double fun(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); 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);} 90按行统计N×N维矩阵元素中的最大值,并把这些值按从小到大的顺序保存在数组b中。 void fun(int a[][N],int b[],int n) {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]; for(i=0;i&n;i++) {for(j=0;j&n;j++)if(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) s+=a[i][j];}printf(&\n&);} k=4*n-4;aver =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; if(i= = j)bb[i][j]= 1; if(j= = n-1-i)bb[i][j]=1;} 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++){for(j=0;j&M;j++)bb[j]+=score[i][j];}for(i=0;i&M;i++) printf(&\nsubject%d\taverage=%5.1f&,i+1, bb[i]/N);return 0;} 94输出一个N×N矩阵,要求非周边元素赋值0,周边元素赋值1。 main() {int bb[N][N];int i,j,n;clrscr(); 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) bb[i][j]=1;else 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= for(i=0;i&3;i++){printf(&\n\n&); for(j=0;j&3;j++) printf(&%4d&,*(*(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);} main ( ) {int i,j,n;printf(&Enter n:&); scanf(&%d&,&n);fun(a,n); for(i=0;i&n;i++) {for(j=0;j&n;j++) printf(&%4d&,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];} 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); printf(&Converted array:\n&); for(i=0;i&3;i++){for(j=0;j&3;j++) printf(&%7d&,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++) {for(j=N-1-m;j&=0;j--) t[i][j+m]=t[i][j]; 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++) {temp=a[0][i];a[0][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]; for(j=N-1;j&0;j- - ) t[i][j]=t[i][j-1];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]; for(j=0;j&N;j++)t[j][0]=t[N-1][j]; for(j=N-1;j&=0;j- - ) t[N-1][N-1-j]=t[j][N-1]; for(j=N-1;j&=0;j- - )t[j][N-1]=r[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],int n) {int i,s; for(i=0;i&n;i++){s=t[i][i]; t[i][i]=t[i][n-i-1];t[i][n-1-i]=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; for(i=0;i&n;i++)sum+=t[i][i] ; for(i=0;i&n;i++)sum+=t[i][n-i-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]) {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++) 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;}} 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; while(k&M && find) {if(k!=i&&a[k][c]&=rmax) find=0;k++;} if(find)printf(&?&,i,c,a[i][c]); 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]) {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[j][i]=0;}}} 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]; 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); 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; 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++) for(i=0;i&M;i++) {temp=a[i][0]; for(j=0;j&N-1;j++) a[i][j]=a[i][j+1]; a[i][N-1]=temp}} 三、字符题: 110依次取出字符串中所有的小写字母以形成新的字符串,并取代原字符串。 void fun(char *s) {int i=0;char *p=s; while(*p){if(*p&='a'&&*p&='z') {s[i]=*p;i++;}p++;}s[i]= ′\0 ′;} 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′) {bb[n]= 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') return'9'-(ch-'0');} 113把s串中所有的字母改写成该字母的下一个字母,字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。例如:s串中原有的字符 串为:Mn.123Zxy,则调用该函数后,s串中的内容为:No.123Ayz。 fun(char *s) {char *p=s; while(*p){if(*p=='Z')*p='A'; else if(*p= = 'z')*p='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++) {if(s[i]=='z'||s[i]=='Z')s[i]-= 25; else s[i]+=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; 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);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;}return (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; while(*(pf+j)) {if(*(pf+j)&='a'&&*(pf+j)&='z') {*(pf+j)= *(pf+j)-32;j++;} else j++;}printf(&?&); puts(str);system(&pause&);} 118把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。结果由函数返回。例如,输入:123456,结果输出:654321。 unsigned long fun(char *s) {unsigned long t=0;int i=0; i=strlen(s); for(- -i&=0;i- - ){k=s[i]-′0 ′; t=t*10+k;}} 119把字符数组str中ASCII码为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。若输入“abcdefg”,则输出“AbCdEfG”。 void fun (char s[]) { for(i=0;s[i]!= ′\0′;i++) {if(s[i]%2!=0)s[i]-=32;}} 120把字符数组str中字符下标为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。例如,输入“acegikm”,输出“aCeGiKm”。 void fun (char s[]) {int i=0; while(s[i]!=′\0′) {if(i%2!=0)s[i]-= 32;i++;}} 121把字符串中的内容逆置。例如:字符串中原有的字符串为abcde,执行后的内容变为edcba。 void fun(char*s) {int i=0,t,n=strlen(s); for(;i&n/2;i++){t=*(s+i); *(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){str[i]=n%10+'0'; n/=10;i++;}str[i]= ′\0′;} 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- -; for(;k&=j/2;k++,j--) {ch=*(p2+k);*(p2+k)=*(p2+j); *(p2+j)=}*(p2+n)='\0'; for(;*p2;i++)*(p1+i)=*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))i++; for( ; *p2;i++)*(p1+i)= *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];i++)str[i]=str[i+1]; str[i]=printf(&?&);puts(str);} 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); printf(&***the origial string***\n&); while(*(p1+j)) {printf(&%c&,*(p1+j));j++;} for(i=0;i&j;i+=2)*p2++=*(str1+i); *p2='\0'; printf(&The new string is:%s&,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 ); for(i=0;i&n;i++)str2[i]=str1[i]; str2[i]='\0'; printf(&The new string is:%s\n&,str2);} 128若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch中是大写英文字母,则转换成对应的小写英文字母;若是其它字符则保持不变;并将转换后的结 果作为函数值返回。 char fun(char ch) {if((ch&='a')&&(ch&='z')) return ch -'a' + 'A'; if(isupper(ch))return ch +'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++) if(s[i]&s[j]){ch=s[j]; s[j]=s[i];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)); while(*p2)*p1++=*p2++; printf(&Display str1 \n&); puts(str1);} 131判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。 void fun(char *str, char ch ) {while(*str&&*str!=ch)str++; if(*str!=ch){str[0]= str[1]=0;}} main( ) {char s[81],c;printf(?);gets(s); printf(&?&);c=getchar(); fun(s,c);printf(?);} 132把s串中所有的字符前移一个位置,串中的第一个字符移到最后。若s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。 fun(char *s) {charb[N];sprintf(b,&%s%c&,s+1,*s); strcpy(s,b);} main( ) {char a[N]; printf(&Enter a string:&);gets(a); printf(&The original string is:&); puts(a);fun(a);printf(&The string after modified:&);puts(a);} 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++;} else t1[k++]=s[i]; t2[j]=0;t1[k]=0; for(i=0;i&k;i++)s[i]=t1[i]; for(i=0;i&j;i++)s[k+i]=t2[i];} 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];j++;} else{p[k]=s[i];k++;}} for(i=0;i&k;i++)t[j+i]=p[i]; t[j+k]=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++;} else {t[k]=s[i];k++;}} for(i=0;i&k;i++)p[j+i]=t[i]; 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;else k=n-2; c=s[k]; for(i=k-2;i&=1;i=i-2)s[i+2]=s[i]; s[1]=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; for(j=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;} 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); else{for(i=len-n;i&=len-1;i++) t[j++]=s[i];t[j]='\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++;} i=0; while(sum!=0){xx[i]= sum%y; sum=sum/y;i++;}} 140字符串str由数字字符‘0’和‘1’组成 (长度不超过8个字符) 可看作二进制数, , 编写函数: 把str字符串转换成十进制数, 结果由函数返回。 例如, 输入“1001”, 结果输出:9。 int fun(char *str) {char *p=n=*p-′0 ′; p++; while(*p){n=n*2+*p-'0';p++;}} 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); n=ch-‘a’;k[n]+=1;}s++; if(max&k[n])max=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){if(*p&='0'&&*p&='9') bb[*p-'0']++;p++;} for(i=1,j=0;i&10;i=i+2,j++) 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) {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]++; 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&*i++) {if(s[ 'a'& ]&=' (s[i =' ' i+1] \ i]&= &s[i z'&& +1]= ||s[ ==' 0')) 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; 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++;}} 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; while(*p){if(*p&='A'&&*p&='Z') *p+=32; if(*p&='a'&&*p&='z')alf[*p-'a']++; 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++;i++;}} 148str为一个字符序列,序列由字符0和1组成。查找该字符序列中0字符连续出现的最长长度(即0字符的个数),如果有几个0字符串长度相同,只记录最后一个0字符 串的相关信息。通过m和k返回最长0字符串的长度和最后0字符的下标。如果输入“”,结果为:0字符串最长长度为3,起始和结尾下标依次为5、7。 void fun (char *str,int *m,int *k) {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++;} if(*m&=bb[j]){*m=bb[j];*k=i-1;}}} 149统计一个长度为n的字符串在另一个字符串中出现的次数。若输入的字符串为:asd ascasdfg asd as asd mlosd,子字符串为asd,则应输出4。 int fun(char *str,char *substr) {char *p,*r;n=0; while(*str){p=r= while(*r)if(*r= = *p){r++;p++;} if(*r= = ′\0 ′)n++;str++;}} 150返回字符数组中指定字符的个数。 int fun (char s[],char ch) {int i=0,n=0; while(s[i]) {if(s[i]= = ch)n++;i++;}} 151分别统计字符串中大写字母和小写字母的个数。例如,给字符串ss输入:AaaaBBb123CCccccd则输出结果应为:upper=5,lower=9 void fun(char *s,int *a,int *b) {while(*s) {if(*s&='A'&&*s&='Z')(*a)++; if(*s&='a'&&*s&='z')(*b)++;s++;}} 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);} 152对指定字符在字符串a中出现的次数进行统计,统计的数据存到b数组中。其中:字符'Z'出现的次数存放到b[0]中,字符'Y'出现的次数存放到b[1]中,字符'X'出现 的次数存放到b[2]中, 字符'W'出现的次数存放到b[3]中, 字符'V'出现的次数存放到b[4]中, 其它字符出现的次数存放到b[5]中。 例如, 当a中的字符串为&AYYZXW1Y+ZWVP&, 调用该函数后,b中存放数据应是:2、3、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);i++) if(a[i]&='V'&&a[i]&='Z') b[4-(a[i]-'V')]++;else b[5]++;} main() {int i,b[6];char a[100]=&AYYZXW1Y+ZWVP&; fun(a,b);printf(&The result is:&); 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]!=NULL;i++) if(s[i]&='0'&&s[i]&='9' )n++; *t=} 154将形参S所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参S所指的字符串为abs5def126jkm3,程序执行后的输出 结果为:22。 int fun(char *s) {int sum=0; while(*s) {if(isdigit(*s))sum+=*s-48;s++;}} 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; if(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++;} 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]='\0';m=j;} 157把字符下标能被2或3整除的字符从字符串str中删除,把剩余的字符重新保存在字符串str中。例如,若输入“abcdefghijk”,则输出为“bfh”。 void fun(char s[], int n) {int i,k;k=0; for(i=0;i&n;i++){s[k++]=s[i]; if((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; for(i=0;i&n;i++) {if(i&1)s[k++]=s[i];flag=1; for(j=2;j&i&&j++) if(i%j= = 0){flag=0;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++; else{s[j++]=s[i];i++;}} s[j]='\0';} 160把ASCII码为偶数的字符从字符串str中删除,结果仍然保存在字符串str中,例如,输入abcdef,则输出ace。 void fun(char s[],int n) {int i,j;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++) {if(s[i]%2= = 0)s[j++]=s[i];} 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++;} 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]!=' ') str2[j++]=str1[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&。 main() {int i=0;char *str[3]={?}; char **p;char s[8];p= 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]= ′ \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')} s[i]= ′\0′; printf(& display the string \n&); while(*p)putchar(*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;p++;}*(str+i)='\0'; p= while(*(p+j)){k=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]); }while(str[i]!='*'); printf(&\n**display the string** \n&); while(j&i) {printf(”%c”,str[j]);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++) if(*p1++!=*p2- - ){t=1;} if(t= = 0)return(&yes!&); else return(&no!&);} 169判断形参S所指字符串是否为“回文”,若是,函数返回值为1,不是函数返回值为0。 int fun(char *s) {char *lp,*lp=s; rp=s+strlen(s)-1;while((toupper(*lp)==toupper(*rp))&&(lp&rp))lp++;rp- - ;} if(lp&rp)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)return &&&; if(*p1&*p2)return &&&; 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; for(j=i+1;j&N;j++) if(strlen(ps[k])&strlen(*(ps+j))) k=j;tp=ps[i];ps[i]=ps[k]; ps[k]=}printf(&?&); 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))&0) {p=*(pstr + i);pstr[i]=pstr[j]; *(pstr+j)=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='\0';} 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];}} 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]) if(k&=ul)u[ul++]=t[i];}} u[ul]='\0';} 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]) if(j&=tl)*u++ =s[i];}*u = '\0';} 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--; for(i=sl,j=0;i&=0;i-=2) {t[2*j]=s[i];t[2*j +1]=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); 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;} main() {char s[100],t[100];printf(&\nPlease enter string s:&);scanf(&%s&, s);fun(s, t); 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];if(i-1&=0) 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); 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]) if(j&=tl)*u++=s[i];} *u= '\0';ul=strlen(up); for(i=0;i&ul/2;i++) {r=up[i];up[i]=up[ul-1-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); 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';} main() {char s[100],t[100];printf(&\nPlease enter string s:&);scanf(&%s&,s);fun(s,t); printf(&The result is: %s\n&, t);} 182求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。 void fun(char (*ss)[N]) {int i,j,k=0,n,m, for(i=0;i&M;i++){len=strlen(ss[i]); if(i= = 0)n= if(len&n){n=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]='*';}} 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]); for(j=0;j&len-n;j++)ss[i][n+j]='*'; ss[i][n+j+1]='\0';}} 184 在形参 s 所指字符串中的每个数字字符之后插入一个*号。例如,形参 s 所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。 void fun(char *s) {int i,j,n; for(i=0;s[i]!='\0';i++) if(s[i]&='0'&&s[i]&='9'){n=0; while(s[i+1+n]!=0)n++; for(j=i+n+1;j&i;j--) s[j+1]=s[j];s[j+1]='*';i=i+1;}} 185在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理。例如,s所指字符串为:baacda,c 中的字符为:a,执行后s所指字符串为:baaaacdaa。 void fun(char *s,char c) {int i,j,n; for(i=0;s[i]!=0;i++) if(s[i]==c){n=0; while(s[i+1+n]!='\0')n++; for(j=i+n+1;j&i;j--)s[j+1]=s[j]; s[j+1]=c;i=i+1;}} 186将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9以下数字字符。例如,主函数中输入字符串:3,在 主函数中输出的函数值为:44831。 long ctod(char *s) {long d=0; while(

我要回帖

更多关于 cmd 删除指定大小文件 的文章

 

随机推荐