c语言上机题库(2)

2019-08-29 00:17

b=b*10+*p-′0′;p++;} switch(ch)

{case '+':result=a+b;break; case '-':result=a-b;break; case '*':result=a*b;break; case '/':result=(float)a/b; break;}

printf(\

32计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。例如:当n=1,m=100时,sum=5050 c3返回主函数。当n=123114350时,结果应该为:c1=3、c2=1、c3=2。 void fun(long n) {c1=c2=c3=0; while(n)

{switch(n)

{case 1:c1++;break; case 2:c2++;break; case 3:c3++;}n/=10;}}

42计算并输出high以内最大的10个素数之和。若high的值为100,则函数的值为732。 {if(OK(t,t1,n)||OK(t,t2,n)||OK(t,t3,n)||OK(t,t4,n))

count++;}return count;}

49从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。

int fun(int a, int b,int c) {int t;

t=(a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b));return t;} 二、数组题: double average=0.0;int i=0; for(i=0;i{if(i%5==0)printf(\printf(\

57将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分段的人数存到b数组中:成绩为60到69的人数存到b[0]中,成绩为70到79的人数存到b[1],成绩为80到89的main()

{int n,m;long sum;sum=0; printf(\scanf(\while(n<=m){sum+=n;n++;} printf(\

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

for(i=1;i<=n;i++)f*=i; printf(\

35把从键盘输入的3个整数按从小到大输出。若输入33,78,25.则输出25,33,78。 main()

{int x,y,z,t;clrscr(); printf(\scanf(\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(\37求二分之一的圆面积,若圆的半径为19.527则输出为:s=598.950017。 float fun ( float r )

{return 3.14159 * r * r /2.0;} main( )

{float x;printf(\scanf(\

printf(\

38读入一个整数k(2≤k≤10000),打印它的所有质因子若输入整数:3410,则应输出:2、5、11、31。 IsPrime(int n) {int i,m;m = 1; for(i=2;i

if(!(n%i)){m=0;break;}return m ;} main( )

{int j,k;printf(?? );

scanf(\??); for( j = 2; j <= k; j++ ) if((!(k%j))&&(IsPrime(j)))

printf(\39计算并输出n(包括n)以内能被3或7整除的所有自然数的倒数之和。如当n为32后,输出为:s=1.226323。 double fun(int n)

{int i;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;} return sum;}

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==0))&&iw!=0) a[j++]=i;}*n=j;} main()

{int aa[1000],n,k;fun(aa, &n ); for(k=0;k

if((k+1)==0)printf(\else printf(\

41统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、

int fun(int high)

{int sum=0,n=0,j,yes; whil((high>= 2)&&(n<10)) {yes=1;

for(j=2;j<=high/2;j++ )

if(high%j==0){yes=0;break;} if(yes){sum+=high;n++;} high--;}return sum;} 43统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。 int fun(int n)

{int i,j,count=0;printf(?); for(i=3;i<=n;i++) {for(j=2;j

if(j>=i){count++;printf(?);}} return count;}

44求1~100(不包括100)以内所有素数的平均值。最后结果为42.40。 main()

{int i,j,n=0,flag;float aver=0; for(j=2;j<100; j++) {flag=1;

for(i=2;i

if(j%i==0){flag=0;break;} 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

{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(?);} return count;}

46判断一个数是否为素数。该数是素数时,函数返回字符串:yes!,否则函数返回字符串:no!

char *fun(int n) {int i,m;m=1;

for(i=2;i

if(n%i==0){m=0;break;}

if(m==1&&n>1)return(\else return(\

47寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。例如,输入6和21,则输出为:7,11,13,17 19,21。

int fun(int n,int m,int bb[N]) {int i,j,k=0,flag; for(j=n;j<=m;j++) {flag=1;

for(i=2;i

if(j%i==0){flag=0;break;}

if(flag==1)bb[k++]=j;}return k;}

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

if(maxt

50删除w数组中下标为k的元素中的值。arrout(int *w,int m) {int k;

for(k=0;k

arrdel(int *w,int n,int k) {int i;

for(i=k;i

printf(\scanf(\return i;}

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

if(g==b) bb[n++]=xx[i];} return n;}

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, s;

for(i=0;i

if((g+s)>5)bb[n++]=xx[i];} return n;}

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])

{int i;long t;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;return avg;}

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(\for(i=0;i

55求能整除x且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。当x=20时,依次输出:20,10,4,2。 void fun(int k,int bb[]) {int i;int j=0; for(i=1;i<=k;i++)

{if(k%i==0&&i%2==0)bb[j++]=i;} printf(\

for(i=--j;i>=0;i--) printf(\

56在主函数中,从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。编写函数:输出数组元素中小于平均值的元素。例如:数组中元素的值依次为1,2,2,12,5,15,则程序的运行结果为1,2,2,5。

void fun(int x[],int n) {double sum=0.0;

人数存到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) {int i;

for(i=0;i<6;i++)b[i]=0; for(i=0;i

else b[(a[i]- 60)/10]++;} main()

{int i,a[100]={?},b[6]; fun(a,b,9);

printf(\for(i=0;i<6;i++)

printf(\58对a数组中n个人员的工资进行分段统计,各段的人数存到b数组中:工资为1000元以下的人数存到b[0]中,工资为1000到1999元的人数存到b[1],工资为2000到2999元的人数存到b[2],工资为3000到3999元的人数存到b[3],工资为4000到4999元的人数存到b[4],工资为5000到5999元的人数存到b[5]中。例如,当a数组中的数据为:900、1800、2700、3800、5900、3300、2400、7500、3800,调用该函数后,b中存放的数据应是:1、1、2、3、0、2。

void fun(int a[], int b[], int n) {int i;

for(i=0;i<6;i++)b[i]=0; for(i=0;i

if(a[i]>=5000)b[5]++; else b[a[i]/1000]++;} main()

{int i,a[100]={?},b[6]; fun(a, b, 9);

printf(\for(i=0;i<6;i++)

printf(\

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

do{i++;n++;printf(\scanf (”%f”,&score[i]); }while (score[i]!=0); for(i=0;i<5;i++)bb[i]=0; for(i=0;i

{case 10:case 9:bb[0]++;break; case 8:bb[1]++;break; case 7:bb[2]++;break; case 6:bb[3]++;break; default:bb[4]++;}} for(i=0;i<5;i++)

printf(\

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

61将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放

数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:置不变。例如,输入33,67,42,58,25,76,85,16,41,56,则输出33,67,42,58,25,76,16,85,41,56 40,51,62,33,35,52,48,95,66,73则结果输出40,51,33,35,48,66 main()

{int i,j;double av,y[N];av=0; for(i=0;i

{int i,t,p;p=(n%2==0)?n/2:n/2+1; for(i=0;i

62从键盘输入一组整数,使用条件表达式找出最大的整数。例如,若输入1,2,3,5,4,0时,最大的数为5。 main()

{int num[N];int i=-1;int max=0; printf(\do{i++;printf(\scanf(\

max=max

printf(\

63把a数组中的n个数,和b数组中逆序的n个数一一对应相乘、求平方,结果存在c数组中。例如:当a数组中的值是:1、3、5、7、8,b数组中的值是:2、3、4、5、8 调用该函数后,c中存放的数据是:64、225、400、441、256

void fun(int a[],int b[],int c[],int n) {int i;

for (i=0;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(\for(i=0;i<5;i++)

printf(\

64在x数组中放入n个采样值,计算并输出方差值。

N (xK-x’)2

S= K=1 N

N XK

其中 x’= K=1 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) {int j;float xa=0.0,s;

for(j=0;j

s+=(x[j]-xa)*(x[j]-xa)/n; return s;}

65计算并输出给定10个数的方差: 1 100.5

S= (xK-x’)

10

K=1

其中 x’= 1 10 XK 10 给定的10个数为15.0,19.0,16.0,15.0,18.0,12.0, K=1

15.0,11.0,10.0,16.0,输出为s=2.758623。 double fun(double x[10]) {int i;double avg=0.0;

double sum=0.0;double abs=0.0; double sd;

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);return sd;} 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

{if(aa[i]>t)bb[j++]=aa[i]; if(aa[i]

for(i=0;i

67交换数组aa中最大和最小两个元素的位置,结果依然保存在原数组中,其它元素位

void fun(int aa[])

{int i,j,t;int max=0,min=0; for(i=0; i

{if(aa[max]

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

for(i=0;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

if(a[i]%2==1){a[j]=a[i];++j;} return 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

{if(aa[i]%2!=0)bb[k++]=aa[i]; else aa[j++]=aa[i];}

for(i=0;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

{for(j=i;jfor (i=0;iaa[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

{if(aa[i]%2==0)bb[k++]=aa[i]; else aa[j++]=aa[i];}

for(i=0;i

for(i=0;i

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; return j;} 76如果数组aa的前一个元素比后一个元素小,则把它保存在数组bb中并输出。若输入

{int i,n=0;int aa[N]={??};int bb[N]; for(i=0;i

if(aa[i]

printf(\

77把1~100间的所有素数保存在数组aa中,输出这些素数并计算它们的和。 main()

{int n,i,j,k,flag,sum;int aa[50]; sum=0;k=0;

for(i=2;i<100;i++) {flag=1;

for(j=2;j

if(flag){sum+=i;aa[k++]=i;}} printf(\for(i=0;i

{if(i==0)printf(\printf(\printf(\

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 n;int bb[N+1]={??}; printf(\

scanf(\printf(\for(i=0;ii;j--)bb[j]=bb[j-1]; bb[j]=n;break;}} if(i==N)bb[i]=n;

printf(\for(i=0;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

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; double av;av=0;

for(i=0;i

if(x[i]>av)y[j++]=x[i]; y[j]=-1;return av;}

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

if(x[i]>av){y[j++]=x[i];x[i]=-1;} for(i=0;i

if(x[i]!=-1)y[j++]=x[i]; for(i=0;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)

if(x[i]

{y[j]=x[i];x[i]=-1;j++;}j=0; while(i

{if(x[i]!=-1)y[j++]=x[i];i++;} for(i=0;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

if(score[i]

{int i,n,below[9];int score[9]={?}; n=fun(score,9,below); printf(\the average score are:\for(i=0;i

printf(\

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

{for(j=0;j

for(i=0;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

{if(maxa[j]){min=a[j];pn=j;}} if(pn!=i){t=a[i];a[i]=min;a[pn]=t; if(px==i)px=pn;}

if(px!=i+1){t=a[i+1];a[i+1]=max; 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; ibb[j+1])

{t=bb[j];bb[j]=bb[j+1];bb[j+1]=t;}}

87从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun返回。例如:当xx[8]={1111,2413,2321,2222,4245,3333, 1414,5335}时,bb[6]={11112321,2222,4245,3333,1414}。 int fun(int xx[],int bb[],int num) {int i,n=0;int g,b; for(i=0;i

{g=xx[i];b=xx[i]/100; if(g==b)bb[n++]=xx[i];} return n;}

88调用随机函数产生20个互不相同的整数放在形参a所指数据组中(此数组在主函数中已置0)。 void fun(int *a)

{int i,x,n=0;x=rand() ; while(n

{for(j=0;j

if(i==n){a[n]=x;n++;} x=rand() ;}}

89计算N×N维矩阵元素的方差,结果由函数返回。例如:

46 30 32 A= 40 6 17 45 15 48 的计算结果是14.414求方差

的公式为: 0.5 1 n 2

(xK-x’) S=

n

K=1

for(j=0;j

printf(\

95输出一个3×3的矩阵,要求必须使用行指针表示输出变量。 main()

{static int array[3][3]={??}; int (*p)[3],j,i;p=array;

for(i=0;i<3;i++){printf(\for(j=0;j<3;j++)

printf(\

96根据形参m(2≤m≤9),在二维数组中存放一张m行m列的表格。 例如:若输入2 则输出: 1 2

2 4

若输入4

则输出: 1 2 3 4

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;i0;j--)

t[i][j]=t[i][j-1];t[i][0]=x;}} 101有N×N矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,if(rmax

{if(k!=i&&a[k][c]<=rmax) find=0;k++;}

if(find)printf(\?\i++;}

if(!find)printf(\

106有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0

n 1

xK 其中 x’= n

K=1

double fun(int a[][N],int n) {int i,j;int k;double s=0.0; double f=0.0;double aver=0.0; double sd=0.0; for(i=0;i

for(j=0;j

f+=(a[i][j]-aver)*(a[i][j]-aver); f/=(n*n);sd=sqrt(f);return sd;}

90按行统计N×N维矩阵元素中的最大值,并把这些值按从小到大的顺序保存在数组b中。

void fun(int a[][N],int b[],int n) {int i,j;int t; for(i=0;i

if(b[i]

{for(j=0;j

91计算一个N×N矩阵的周边元素平均值。当N=4时:平均值为3.917。

6 0 2 0 A=

6 7 5 5 8 6 4 8 1 9 2 0

double fun(int a[][N],int n) {int i,j;int k;

double s=0.0;double aver=0.0;

printf(\for(i=0;i

{for(j=0;j

if(i==0||i==n-1||j==0||j==n-1) s+=a[i][j];}printf(\

k=4*n-4;aver =s/k;return aver;} 92输出一个N×N矩阵,对非对角线上的元素赋值为0,对角线元素赋值为1。 main()

{int bb[N][N];int i,j,n; printf(\scanf(\for(i=0;i

for(j=0;j

if(j==n-1-i)bb[i][j]=1;}

printf(\for(i=0;i

for(j=0;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

{for(j=0;j

printf(\1, bb[i]/N);return 0;} 94输出一个N×N矩阵,要求非周边元素赋值0,周边元素赋值1。 main()

{int bb[N][N];int i,j,n;clrscr(); printf(\scanf(\for(i=0;i

{if(i==0||i==n-1||j==0||j==n-1) bb[i][j]=1;else bb[i][j]=0;}

printf(\for(i=0;i

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

a[j][k]=(k+1)*(j+1);} main ( )

{int i,j,n;printf(\scanf(\for(i=0;i

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

printf(\

for(i=0;i<3;i++){for(j=0;j<3;j++) printf(\printf(\

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

{for(j=N-1-m;j>=0;j--) t[i][j+m]=t[i][j];

for(j=0;j

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,temp;

for(i=0;i

{temp=a[0][i];a[0][i]=a[k][i]; a[k][i]=temp;}}

100将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,

临时数组中的元素成为最后一列。例如,若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=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

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;sum=0;

for(i=0;i

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

a[i][j]=a[N-i-1][j]=i+1; for(k=i+1;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

6 5 0 10 14 9

void fun(int (*t)[N]) {int i,j;

for(i=1;i

{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

if(b[i]

{int x[N][N]={12,5,?,3}y[N],i,j; printf(“\\nThe matrix:\\n”); for(i=0;i

printf(“M”,x[i][j]); printf(“\\n”);} fun(x,y);

printf(“\\nThe result is:”); for(j=0;j

printf(“=”,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,colum; m1=m2=0;

for(i=0;i

{j=N-i-1;m1+=a[i][i];m2+=a[i][j];} if(m1!=m2)return 0; for(i=0;i

{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,temp; for(p=1;p<=k;p++) for(i=0;i

for(j=0;j

while(*p){if(*p>='a'&&*p<='z')

{s[i]=*p;i++;}p++;}s[i]= ′\\0 ′;} 111把字符串str中的数字字符转换成数字并存放到整型数组bb中,例如:str=“Bcd123e456hui890”,结果为:123456890。

int fun(char s[],int bb[],int num) {int i,n=0;

for(i=0;i

{if(s[i]>=′0′&&s[i]<=′9′) {bb[n]= s[i]- ′0′;n++;}} return 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');return ch;}

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[]) {int i;

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;return c;} main()

{char c1,c2;

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

116将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Are you come from Sichuan?”,则输入“are you come from sichuan?”。 char *fun(char tt[]) {int i;

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() {int j;

char str[N]=\char *pf=str;clrscr();

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

118把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。结果由函数返回。例如,输入:123456,结果输出:654321。

unsigned long fun(char *s)

{unsigned long t=0;int k;int i=0;

i=strlen(s);

for(--i;i>=0;i--){k=s[i]-′0 ′; t=t*10+k;}return t;} 119把字符数组str中ASCII码为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。若输入“abcdefg”,则输出“AbCdEfG”。

void fun (char s[]) {int i;

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

*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}} 122把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=“86427531”。 void fun(long int n) {int i=0;

while(n>0){str[i]=n+'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 ch; 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)=ch;}*(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],ch;int i;clrscr(); printf(\gets(str);

printf(\puts(str);ch=str[0];

for(i=0;str[i+1];i++)str[i]=str[i+1]; str[i]=ch;printf(\?\

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(\scanf(″%s″,str1);

printf(\while(*(p1+j))

{printf(\

for(i=0;i

printf(\

127从一个字符串中截取前面若干个给定长度的子字符串。例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。 main()

{char str1[LEN],str2[LEN]; int n,i;clrscr();

printf(\gets(str1);

printf(\nter the position of ??\); scanf(″%d″,&n );

for(i=0;i

printf(\128若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch中是大写英文字母,则转换成对应的小写英文字母;若是其它字符则保持不变;并将转换后的结果作为函数值返回。

char fun(char ch)

{if((ch>='a')&&(ch<='z')) return ch -'a' + 'A';

if(isupper(ch))return ch +'a'-'A'; return ch;}

129把字符串str中的字符按字符的ASCII码降序排列。例如,如果输入“cdefgh”,则输出为“hgfedc”。

void fun(char s[],int n) {int i,j;char ch; for(i=0;i

if(s[i]

{char str1[81],str2[81];

char *p1=str1,*p2=str2;clrscr(); do{printf(\gets(str1);printf(\gets(str2);

}while(strlen(str1)

printf(\puts(str1);}

131判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。

void fun(char *str, char ch ) {while(*str&&*str!=ch)str++; if(*str!=ch){str[0]=ch; str[1]=0;}} main( )

{char s[81],c;printf(?);gets(s); printf(\?\fun(s,c);printf(?);}

132把s串中所有的字符前移一个位置,串中的第一个字符移到最后。若s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。 fun(char *s)

{charb[N];sprintf(b,\strcpy(s,b);} main( )

{char a[N];

printf(\printf(\puts(a);fun(a);

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

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

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

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

else {t[k]=s[i];k++;}}

for(i=0;i

136把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 void fun(char *s)

{int i,n,k;char c;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;is[j])t=j;

if(t!=i){x=s[i];s[i]=s[t];s[t]=x;}} for(i=1,j=0;i

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 sum;int i=0;char *p=str; for(i=0;i

while(*p){sum=sum*x+*p-'0';p++;} i=0;

while(sum!=0){xx[i]= sum%y; sum=sum/y;i++;}return i;} 140字符串str由数字字符‘0’和‘1’组成(长度不超过8个字符),可看作二进制数,编写函数:把str字符串转换成十进制数,结果由函数返回。例如,输入“1001”,结果输出:9。

int fun(char *str)

{int n;char *p=str;n=*p-′0 ′; p++;

while(*p){n=n*2+*p-'0';p++;} return n;}

141找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计其出现的次数。例如,形参S所指的字符串为abcAbsantrless,程序执行后的输出结果为:letter ‘a’:3 times,letter ‘s’:3 times。

void fun(char *s)

{int k[26]={0},n,i,max=0;char ch; while(*s)

{if(isalpha(*s)){ch=tolower(*s); n=ch-‘a’;k[n]+=1;}s++; if(max

printf(“\\n After count:\\n”); for(i=0;i<26;i++)

if(k[i]==max)printf(??);}

142按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。若输入“x=112385713.456+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=tt; 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++) while(*p){if(*p==t)bb[n++]=i; p++;i++;}return n;}

148str为一个字符序列,序列由字符0和1组成。查找该字符序列中0字符连续出现的最长长度(即0字符的个数),如果有几个0字符串长度相同,只记录最后一个0字符串的相关信息。通过m和k返回最长0字符串的长度和最后0字符的下标。如果输入“01001000”,结果为:0字符串最长长度为3,起始和结尾下标依次为5、7。

void fun (char *str,int *m,int *k) {int i, j=0;int bb[N]; char *p=str;*m=0;*k=0;

for(i=0;i

if(*m<=bb[j]){*m=bb[j];*k=i-1;}}} 149统计一个长度为n的字符串在另一个字符串中出现的次数。若输入的字符串为:asd ascasdfg asd as asd mlosd,子字符串为asd,指向原字符串,删除后的字符串存放在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; printf(\puts(str1);

while(str1[i]){if(str1[i]!=' ') str2[j++]=str1[i];i++;}

printf(\for(i=0;i

printf(\

164把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。如果str[3]={\,\,\,则s=\。 main()

{int i=0;char *str[3]={?}; char **p;char s[8];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]= ′ \\0′;

printf(\165从键盘输入若干字符放到一个字符数组中当按回车键时结束输入,最后输出这个字num[j]=bb[i];} 143从字符串str中取出所有数字字符,并分别计数,然后把结果保存在数组b中并输出,把其他字符保存在b[10]中。例如:当str1=“ab123456789cde090”时,结果为: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=\char *p=str;clrscr();

printf(\puts(str);

for(i=0;i<11;i++)b[i]=0; while(*p){switch(*p) {case '0':b[0]++;break; case '1':b[1]++;break; case '2':b[2]++;break; case '3':b[3]++;break; case '4':b[4]++;break; case '5':b[5]++;break; case '6':b[6]++;break; case '7':b[7]++;break; case '8':b[8]++;break; case '9':b[9]++;break; default: b[10]++;}p++;}

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

printf(\

printf(\

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++) {if(s[i]>='a'&&s[i]<='z'&&(s[i+1]==' '||s[i+1]=='\\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=str;int i=0; for(i=0;i<6;i++)bb[i]=0; while(*p){switch(*p)

{case 'A':case 'a':bb[0]++;break; case 'E':case 'e':bb[1]++;break; case 'I':case 'i':bb[2]++;break; case 'O':case 'o':bb[3]++;break; case 'U':case 'u':bb[4]++;break; default: bb[5]++;}p++;}}

146从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。(不区分大小写,不能使用字符串库函数)。例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。

void fun(char *tt,int alf[]) {int i;char *p=tt;

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=ch; char *p=str;

则应输出4。

int fun(char *str,char *substr) {int n;char *p,*r;n=0;

while(*str){p=str;r=substr; while(*r)if(*r==*p){r++;p++;} else break;

if(*r==′\\0 ′)n++;str++;} return n;}

150返回字符数组中指定字符的个数。 int fun (char s[],char ch) {int i=0,n=0; while(s[i])

{if(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)++;

if(*s>='a'&&*s<='z')(*b)++;s++;}} main( )

{char s[100];int upper=0,lower=0; printf(\gets(s);fun(s,&upper,&lower); printf(\

lower=%d\\n\

152对指定字符在字符串a中出现的次数进行统计,统计的数据存到b数组中。其中:字符'Z'出现的次数存放到b[0]中,字符'Y'出现的次数存放到b[1]中,字符'X'出现的次数存放到b[2]中,字符'W'出现的次数存放到b[3]中,字符'V'出现的次数存放到b[4]中,其它字符出现的次数存放到b[5]中。例如,当a中的字符串为\调用该函数后,b中存放数据应是:2、3、1、2、1、4。 void fun(char *a, int b[]) {int i;

for(i=0;i<6;i++)b[i]=0; for(i=0;i='V'&&a[i]<='Z')

b[4-(a[i]-'V')]++;else b[5]++;} main()

{int i,b[6];char

a[100]=\

fun(a,b);printf(\for(i=0;i<6;i++)printf(\printf(\

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=n ;} 154将形参S所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参S所指的字符串为abs5def126jkm3,程序执行后的输出结果为:22。

int fun(char *s) {int sum=0; while(*s)

{if(isdigit(*s))sum+=*s-48;s++;} return sum;}

155按条件删除一个字符串指定字符一半的数目,如果该字符串所包含的指定字符的个数是奇数,则不予删除,如果其数目是偶数,则删除原串后半部分的指定字符。其中,a

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

{if(i>1)s[k++]=s[i];flag=1; for(j=2;j

159删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存在原数组中。例如,输入“abcdefghij”,指定字符为‘d’,则结果输出“defghij”。 void fun (char s[], char ch) {int i=0,j=0;

while(s[i]){if(s[i]

for (i=0;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

{if(s[i]%2==0)s[j++]=s[i];} s[j]= ′\\0′;} 162从键盘输入一个字符串及一个指定字符,然后把这个字符及其后面的所有字符全部删除。结果仍然保存在原串中。例如,输入“abcdef”,指定字符为‘e’,则输出“abcd”。 main()

{int i=0;char str[N];char ch; printf(\gets(str);

printf(\scanf(\while(str[i]!='\\0')

{if(str[i]==ch)break;i++;} str[i]= ′\\0′;

printf(\puts(str);}

163把字符串str1中的非空格字符拷贝到字符串str2中。例如,str1=“glad to see you!”,则str2=“gladtoseeyou!”。 main()

{static char str1[N]=\char str2[N];int i=0,j=0;clrscr();

符数组中的所有字符。 main()

{int i=0;char s[81];char *p=s; printf(\for(i=0;i<80;i++) {s[i]=getchar();

if(s[i]=='\\n')break;} s[i]= ′\\0′;

printf(\while(*p)putchar(*p++);}

166把一个字符串中的字符(字母)按从小到大排序,并把这个全部由字母组成的字符串保存在原串中,函数返回这个字符串的长度。输入“cixbr2.3”,如果为bcirx,字符串长度为5。

int fun (char *str) {int i=0,j=0,k=0,m=0; char t;char *p=str; while(*p)

{if((*p>='A'&&*p<='Z')||(*p>='a'&&*p<='z')) *(str+i++)=*p;p++;}*(str+i)='\\0'; p=str;

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++;}return i;}

167从键盘输入一组字符串,以‘*’结束输入,并显示出这个字符串。例如,输入abcdefghi*,结果显示adcdefghi。 main()

{int i=-1,j=0;char str[N];

printf(\do{i++;scanf(”%c”,&str[i]); }while(str[i]!='*');

printf(\while(j

{printf(”%c”,str[j]);j++;}} 168判断一个数是否为回文数。当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出。 char *fun(char*str)

{char *p1,*p2;int i,t=0;

p1=str;p2=str+strlen(str)-1; for(i=0; i<=strlen(str)/2;i++) if(*p1++!=*p2--){t=1;break;} if(t==0)return(\else return(\

169判断形参S所指字符串是否为“回文”,若是,函数返回值为1,不是函数返回值为0。 int fun(char *s) {char *lp,*rp;lp=s; rp=s+strlen(s)-1;

while((toupper(*lp)==toupper(*rp))&&(lp

lp++;rp--;}

if(lp”。 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个字符


c语言上机题库(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:土木工程造价任务书2015年

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: