計算機(jī)二級C語言上機(jī)題庫(四)
二、數(shù)組題:
50、刪除w數(shù)組中下標(biāo)為k的元素中的值。
arrout(int *w,int m)
{int k;for(k=0;k<m;k++)printf(“%d”,w[k]);prntf(----);}
arrdel(int *w,int n,int k)
{int i;for(i=k;i<n-1;i++)w[i]= w[i+1];n--;return n;}
getindex(int n)
{int i;do{printf(“\nenter the index[0<=i<%d]:”,n);scanf(“%d”,&i);}while(i<0||i>n-1);return i;}
51、從數(shù)組xx中找出個位和百位的數(shù)字相等的所有無符號整數(shù),結(jié)果保存在數(shù)組yy中,其個數(shù)由函數(shù)fun返回。當(dāng)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<num;i++){g=xx[i]%10;b=xx[i]/100;if(g= =b)bb[n++]=xx[i];}return n;}
52、從鍵盤輸入一組無符號整數(shù)并保存在數(shù)組xx[N]中,以整數(shù)0結(jié)束輸入,要求這些數(shù)的最大位數(shù)不超過4位,編寫函數(shù)從數(shù)組xx中找出個位和十位的數(shù)字之和大于5的所有無符號整數(shù),結(jié)果保存在數(shù)組yy中,個數(shù)由函數(shù)fun返回。當(dāng)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<num;i++){g=xx[i]%10;s=xx[i]/10%10;if((g+s)>5)bb[n++]=xx[i];}return n;}
53、求一維數(shù)組x[N]的平均值,并對所得結(jié)果進(jìn)行四舍五入(保留兩位小數(shù))。例如:當(dāng)x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},結(jié)果為: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且不是偶數(shù)的各整數(shù),并放在數(shù)組pp中,這些除數(shù)的個數(shù)由n返回。例如,若x的值為30,則有四個數(shù)符合要求,它們是1,3,5,15.
Void fun(int x,int pp[],int *n)
{inti,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=0i<n;i++)printf(“%d”,aa[i]);printf(“\n”);}
55、求能夠整除x且是偶數(shù)的數(shù),把這些數(shù)保存在數(shù)組bb中,并按從大到小的數(shù)序輸出。當(dāng)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(“\n\n”);for(i=--j;i>=0;i--)printf(“%d”,bb[i]);}
56、在主函數(shù)中,從鍵盤輸入若干個數(shù)放入數(shù)組x中,用0結(jié)束輸入但不計入數(shù)組。編寫函數(shù):輸出數(shù)組元素中小于平均值的元素。例如:數(shù)組中的值依次1,2,2,12,5,15則程序的運(yùn)行結(jié)果為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個人員的考試成績進(jìn)行分段統(tǒng)計,考試成績放在a數(shù)組中,各分段的人數(shù)存放b數(shù)組中:成績?yōu)?0到69的人數(shù)
存放到b[0]中,成績?yōu)?0到79的人數(shù)存放到b[1]中,------,成績?yōu)?0分以下的人數(shù)存到b[5]中,當(dāng)a數(shù)組中的數(shù)據(jù)
為:93,85,77,68,59,43,94,75,98。調(diào)用函數(shù)后,b數(shù)組中存放的數(shù)據(jù)是: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<n;i++)
if(a[i]<60)b[5]++;else b[(a[i]-60)/10]++;}
main()
{inti,a[100]={---},b[6];fun(a,b,9);printf(----);for(i=0;i<6;i++)printf(“%d”,b[i]);printf(“\n”);}
58、對a數(shù)組中n個人員的工資進(jìn)行分到統(tǒng)計,各段的人數(shù)存到b數(shù)組中:工資為1000以下的人數(shù)存到b[0]中,工資為1000到1999的人數(shù)存到b[1]中,-----。
Void fun(int a[],int b[],int n)
{inti;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]/100]++;}
Main()
{inti,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、從鍵盤輸入學(xué)生的成績,統(tǒng)計各分?jǐn)?shù)段學(xué)生的人數(shù),A類為90~100分,B類為80~90,------,當(dāng)成績?yōu)?時結(jié)束成績輸入,例如:輸入89,99,45,64,56,78,88,74,66,55,0是結(jié)果為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(“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]++;
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(“\n%c:%d”,ch+i,b[i]);}
60、刪去一維數(shù)組所有相同的數(shù),使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù),例如:若一維數(shù)組中的數(shù)據(jù)是:1,1,1,2,2,2,3,4,4,5,5,6,6,7,7,8,9,9,10,10,刪除后的內(nèi)容應(yīng)該是: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;return j;}
61、將形參a所指數(shù)組中的前半部分元素中的值和后半部分元素中的值對換,形參n中存放數(shù)組中數(shù)據(jù)的個數(shù),若n為
奇數(shù),則中間的元素不動,例如:1,2,3,4,5,6,7,8,9,則調(diào)換后為: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、從鍵盤輸入一組整數(shù),使用條件表達(dá)式找出最大的整數(shù),例如:1,2,3,5,4,0時,最大的數(shù)為:5.
Main()
{int num[N];int i=-1;int max=0;printf(---);do{i++;printf(“num[%d]=”,i);scanf(“%d”,&num[i]);max=max<num[i]?num[i]:max}
While(num[i]!=0);printf(“max=%d\n”,max);}
63、把a(bǔ)數(shù)組中的n個數(shù),和b數(shù)組中逆序的n個數(shù)一一對應(yīng)相乘、求平方,結(jié)果保存在c數(shù)組中。例如:當(dāng)a數(shù)組中的值是:1,3,5,7,8,b數(shù)組中的值是:2,3,4,5,8,調(diào)用該函數(shù)后,c中存放的數(shù)據(jù)是:64、225、400、441、256.
Void fun(int a[],int b[],int c[],int n)
{inti;for(i=0;i<n;i++)c[i]=(a[i]*b[n-1-i]*(a[i]*b[n-1-i]));}
main()
{inti;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(“%d”,c[i]);printf(“\n’);}
64、在x數(shù)組中放入n個采樣值,計算并輸出方差值。例如n=8,輸入:193.199,195.673,195.757-----,結(jié)果為1.135901。
Float fun(float x[],int n)
{int j;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;return s;}
65、計算并輸出給定10個數(shù)的方差(公式省略),給定的10個數(shù)為: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])
{int i;doble 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、從鍵盤輸入一個下標(biāo)n,把數(shù)組aa中比元素aa[n]小的元素 放在它的左邊,比它大的元素放在它的右邊,排列成新的數(shù)組仍然保存在原數(shù)組中。如數(shù)組aa={33,67,42,58,25,76,85,16,41,56},若輸入3,則結(jié)果輸出為33,42,25,16,41,56,58,67,76,85.
Void fun(int a[],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、交換數(shù)組aa中最大和最小兩個元素的位置,結(jié)果依然保存在原數(shù)組中,其它元素位置不變。例如,輸入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、把一維數(shù)組中的元素逆置,結(jié)果仍然保存在原數(shù)組中。
main()
{int i,j,t;int bb[N];for(i=0;i<N;i++)bb[i]=i;printf(---);for(i=0;i<N;i++)printf(“%d”,bb[i]);for(j=0,--i;j<=i;j++,i--){t=bb[j];
bb[j]=bb[i]; bb[i]=t;}printf(---);for(i=0;i<N;i++)printf(“%4d”,bb[i]);}
69、把形參a所指數(shù)組中的奇數(shù)按原順序一次存放到a[0],a[1],a[2]……中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9,1,4,2,3,6,5,8,7,刪除偶數(shù)后a所指數(shù)組中的數(shù)據(jù)為:9,1,3,5,7,返回值為5.
void 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;return j;}}
70、把數(shù)組aa中的奇數(shù)元素按原來的先后順序放在原數(shù)組后面。例如:輸入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、把數(shù)組aa中元素下標(biāo)為奇數(shù)的元素按從大到小的順序重新保存在原數(shù)組中其他元素位置不變。例如:若輸入33,67,42,58,25,76,85,16,41,56。則輸出結(jié)果為: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、把數(shù)組aa中下標(biāo)為偶數(shù)的元素按從小到大的順序重新保存在原數(shù)組中,其它元素位置不變。例如輸入:33,67,42,58,25,76,85,16,41,56,則輸出結(jié)果為;25,67,33,58,41,76,42,16,85,56
void fun(int aa[])
{inti,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、把數(shù)組aa中的偶數(shù)元素按原來的先后順序放在原數(shù)組后面,例如:輸入33,67,42,58,25,76,85,16,41,56。則輸出結(jié)果為: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、逆置數(shù)組元素中的值,若a所指數(shù)組中的的數(shù)據(jù)一次為1,2,3,4,5,6,7,8,9,則逆置后一次為:9,8,7,6,5,4,3,2,1.
void fun(int aa[],int n)
{int i,j;for(i=0;i<n/2;i++)
{t=a[i]; a[i]= a[n-1-i]; a[n-1-i]=t;}}
75、求100(不包括100)以內(nèi)能被2或5整除,但不能同時被2或5整除的自然數(shù)。結(jié)果保存在數(shù)組bb中,函數(shù)fun返回數(shù)組bb元素的個數(shù)。
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、如果數(shù)組aa的前一個元素比后一個元素小,則把它保存在數(shù)組,bb中并輸出,若輸入40,51,62,33,35,52,48,95,66,73,則結(jié)果輸出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(---);for(i=0;i<n;i++)
printf(“bb[%d]=%2d”,i,bb[i]);}
77、把1—100間的所有素數(shù)保存在數(shù)組aa中,輸出這些素數(shù)并計算它們的和。
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<i&&flag;j++)if(i%j= =0){flag=0;}if(flag){
Sum=+i;aa[k++]=i;}}printf(---);for(i=0;i<k;i++){if(i%10= =0)printf(“\n’);printf(“%4d”,aa[i]);}printf(“\nsum=%d’,sum);}
78、把一個整數(shù)插入到一個已經(jīng)按從小到大排序的數(shù)組中,插入后數(shù)組仍然有序。例如:在數(shù)組bb[N]={12,23,31,44,51,63,71,79,85,95}中插入93,結(jié)果為: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(“%d’,&n);prinf(“\n%d’,n);printf(---);for(i=0;i<N;i++){if(n<=bb[i])
{for(j=N;j>i;j--)bb[j]=bb[j-1];bb[j]=n;break;}}if(i= =N)bb[i]=n;printf(---);for(i=0;i<N+1;i++)prinf(“%4d”,bb[i]);}
79、計算x所指數(shù)組中N個數(shù)的平均值,平均值通過形參返回主函數(shù),將小于平均值且最接近平均值的數(shù)作為函數(shù)值返回,在主函數(shù)中輸出,例如:有10個正數(shù):46,30,32,40,6,17,45,15,48,26,平均值為30.5主函數(shù)中輸出: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所指數(shù)組中N個數(shù)的平均值作為函數(shù)返回;并將大于平均值的數(shù)放在形參y所指數(shù)組中,在主函數(shù)中輸出。例如:有10個正數(shù):46,30,32,40,6,17,45,15,48,26,平均值為30.5,主函數(shù)中輸出:46,32,40,45,48
double fun(double x[],double *y)
{ int i,j;double av;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;return av;}
81、計算形參x所指數(shù)組中N個數(shù)的平均值,將所指數(shù)組中大于平均值的數(shù)據(jù)移至數(shù)組的前部,小于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。例如有10個整數(shù):46,30,32,40,6,17,45,15,48,26,平均值為30.5,移動后的輸出為46,32,40,45,48,30,6,7,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];return av;}
82、計算形參x所指數(shù)組中N個數(shù)的平均值作為函數(shù)返回;將小于平均值的數(shù)放在數(shù)組的前部,平均值作為函數(shù)返回,例如有10個整數(shù):46,30,32,40,6,17,45,15,48,26,平均值為30.5,主函數(shù)輸出為: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];return av;}
83、計算scroe中m個人的平均成績aver,將低于aver的成績放在below中,通過函數(shù)名返回人數(shù)。當(dāng)scroe={10,20,30,40,50,60,70,80,90},m=9時,函數(shù)返回的人數(shù)應(yīng)該是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];
return j;}
main()
{int i,b,below[9];int score[9]={----};n=fun(score,9,below);printf(----);for(i=0;i<n;i++)printf(“%d”,below[i]);}
84、計算每個學(xué)生成績的平均分,例如當(dāng)scroe[N][M]={83.5,82,86,65,67},{80,91.5,84,99,95},{90.5,95,86,95,97}時,三個學(xué)生的平均分為: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所指數(shù)組中的最小值放在元素a[0]中,接著把形參a所指數(shù)組中的最大值放在a[1]元素中;再把a所指數(shù)組中的次小值放在a[2]中,把a所指數(shù)組中的次大值放在a[3];其余以此類推。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9,1,4,2,3,6,5,8,7;則按規(guī)則移動后數(shù)據(jù)排列為:1,9,2,8,3,7,4,6,5.
void fun(int a[],int n)
{inti,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-1;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]=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、把數(shù)組bb中的數(shù)按從小到大的排列,若輸入2,3,5,4,1,則結(jié)果為:1,2,3,4,5.
Void fun(int bb[],int n)
{int i,j,t;for(i=0;i<n;i++)f
or(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、從數(shù)組xx中找出個位和百位的數(shù)字相等的所有無符號整數(shù),結(jié)果保存在數(shù)組yy中,其個數(shù)由函數(shù)fun返回。例如:當(dāng)xx[8]={1111,2413,2321,2222,4245,3333,1414,5335}時,bb[6]={1111,2321,2222,4245,3333,1414}。
int fun(int xx[],int bb[],int num)
{int i,n=0;int g,b;for(i=0;i<num,i++){g=xx[i]%10;b=xx[i]/100%10;if(g= =b)bb[n++]=x[i];}return n;}
88、調(diào)用隨機(jī)函數(shù)產(chǎn)生20個互不相同的整數(shù),放在形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置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])break;if(i= = n){a[n]=x;
n++;}x=rand()%20;}}
89、計算NXN維矩陣元素的方差,結(jié)果由函數(shù)返回。例如:A= ---,S= ---的計算結(jié)果是14.414 -----
double fun(int a[][N],int n)
{int i,j;int k;double s=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);return sd;}
90、按行統(tǒng)計NXN維矩陣元素中的最大值,并把這些值按從小到大的順序保存在數(shù)組b中。
Void fun(int a[][N],int b[],int n)
{ int i,j;int t;
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、計算一個NXN矩陣的周邊元素平均值。當(dāng)N=4時:平均值為3.917。a= -----
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<n;i++) {for(j=0;j<n;j++){a[i][j]=rand()%10;printf(“%d”,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;return aver;
92、輸出一個NXN矩陣,對非對角線上 的元素賦值為0,對角線元素賦值為1.
Main()
{int bb[N][N],int i,j,n;printf(---);scanf(“%d”,&n); for(i=0;i<n;i++) for(j=0;j<n;j++){b[i][j]=0;if(i= =j) b[i][j]=1; if(j= =n-1-i)
b[i][j]=1;------}}
93、計算3名學(xué)生的平均成績。例如:當(dāng)scroe[N][M] ={83.5,82,86,65,67},{80,91.5,84,99,95},{90.5,95,86,95,97}時,五門學(xué)科的平均分為84.5,89.5,85.3,86.3,86.3.
main()
{int i,j;static float score[N][M]={---};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(“\nstudent%d\taverage=%5.1f”,i+1,bb[i]/N);return 0;}
94、輸出一個NXN矩陣,要求非周邊元素賦值0,周邊元素賦值1.
main()
{int bb[N][N];int i,j,n;clrscr();printf(----);scanf(“%d”,&n); for(i=0;i<n;i++) for(j=0;j<n;j++){if(i= =0 ||i= =n-1||j= =0|| i= =n-1)
bb[i][j]=1;else bb[i][j]=0;} for(i=0;i<n;i++){----} for(j=0;j<n;j++)printf(“%4d”,bb[i][j]);}}
95、輸出一個3X3的矩陣,要求必須使用行指針表示輸出變量。
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);}}
96、根據(jù)形參m(2≤m≤9),在二維數(shù)組中存放一張m行m列的表格。例如輸入2則輸出為:---,若輸入4:----
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(---);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、實現(xiàn)矩陣(3行3列)的轉(zhuǎn)置(即行列互換)。例如輸入下面的矩陣: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;
int 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(---);for(i=0;i<3;i++) {for(j=0;j<3;j++)printf(“%7d”, array[i][j]);printf(“\n”;)}}
98、有NXN矩陣,根據(jù)給定的m(m<=N)值,將每行元素中的值均右移m個位置,左邊置為0.例如,N=3,m=2,有下列矩陣
???
??????1 ??2 ???3
??????4 ??5 ???6
??????7 ??8 ???9
程序執(zhí)行結(jié)果為:
??????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,程序執(zhí)行結(jié)果為: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<N;i++)temp=a[0][i]; a[0][i]= a[k][i]; a[k][i]=temp;}}
100、將NXN矩陣中元素的值按列右移1個位置,右邊被移出矩陣的元素繞回左邊。例如,N=3,有下列矩陣:
??????????????????????????????????????????????????????????????????????????1 ?2 ?3
??????????????????????????????????????????????????????????????????????????4 ?5 ?6
??????????????????????????????????????????????????????????????????????????7 ?8 ?9
計算結(jié)果為: ????3 ?1 ?2
4 ?5 ?6
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、有NXN矩陣,將矩陣的外圍元素順時針逆轉(zhuǎn)。操作順序是:首先將第一行元素的值存入臨時數(shù)組r,然后使第一列成為第一行,最后一行成為第一列,最后一列成為第一行,臨時數(shù)組中的元素成為最后一列。例如,若N=3,有下列矩陣:
??????????????????????????????????????????????????????????????????????????1 ?2 ?3
??????????????????????????????????????????????????????????????????????????4 ?5 ?6
??????????????????????????????????????????????????????????????????????????7 ?8 ?9
計算結(jié)果為: 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、將NXN矩陣主對角線元素中的值與反向?qū)蔷€對應(yīng)位置上元素中的值進(jìn)行交換。例如,若N=3,有下列矩陣:
1 ?2 ?3
??????????????????????????????????????????????????????????????????????????4 ?5 ?6
??????????????????????????????????????????????????????????????????????????7 ?8 ?9
交換后為:3 ?2 ?1
5 ?6 ?4
8 ?7 ?9
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-i-1]=s;}}
103、計算NXN矩陣主對角線元素和反向?qū)蔷€元素之和,并作為函數(shù)值返回。例如:若N=3,有下列矩陣:
1 ?2 ?3
??????????????????????????????????????????????????????????????????????????4 ?5 ?6
??????????????????????????????????????????????????????????????????????????7 ?8 ?9
函數(shù)首先累加1、5、9,然后累加3、5、7函數(shù)的返回值為30.
Void fun(int t[][N],int n)
{int i,sum;sum=0;for(i=0;i<n;i++)sum+=t[i][i]; for(i=0;i<n;i++)sum+=t[i][n-i-1];return sum;}
104、建立一個NXN矩陣,矩陣元素的構(gòu)成規(guī)律是:最外層元素的值全部為1,從外向內(nèi)第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-1;j++)a[i][j]= a[N-i-1][j]=i+1;
For(i=i+1;k<N-I;k++)a[k][i]= a[k][N-i-1]=i+1;}}
105、在3X4的矩陣中找出在行上最大、在列上最小的那個元素,若沒有符合條件的元素則輸出相應(yīng)信息。例如:
????????????????????????????????????????????????????????????????????1 ?2 ?13 ?4
????????????????????????????????????????????????????????????????????7 ?8 ?10 ?6
????????????????????????????????????????????????????????????????????3 ?5 ?9 ??7
程序執(zhí)行結(jié)果為: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;i<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)-----}
106、有NXN矩陣,以主對角線為對稱線,對稱元素相加并將結(jié)果存放在左下三角元素中,右上三角元素為0. 例如:若N=3,有下列矩陣:
1 ?2 ?3
??????????????????????????????????????????????????????????????????????????4 ?5 ?6
??????????????????????????????????????????????????????????????????????????7 ?8 ?9
計算結(jié)果為:1 ?0 ?0
6?5 ?0
8?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、找出NXN矩陣中每列元素中的最大值,并按順序存放于形參B所指的一維數(shù)組中。
Void fun(int (*a)[N],int *b)
{int i,j; for(i=0;i<N;i++){b[i]=a[0][i];for(j=0;j<i;j++)if(b[i]<a[j][i]) b[i]=a[j][i];}
main()
{int ?x[N][ N] ={----};y[N];I,j;printf(---);for(i=0;i<N;i++) {for(j=0;j<N;j++)printf(“%4d”, x[i][j]); printf(“\n”);}fun(x,y);
Printf(---);for(j=0;j<N;j++) printf(“%3d”, y[j]); printf(“\n”);}
108、判定形參a所指的NXN(規(guī)定N為奇數(shù))的矩陣是否是“幻方”,若是函數(shù)返回值為1,不是函數(shù)值返回為0. “幻方”的判定條件是:矩陣每行每列主對角線及反對角線上元素之和都相等。例如一下3X3的矩陣就是一個“幻方”。
??????????????????????????????????????????????????????????????????????????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<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所指3X5矩陣中第K列的元素左移到第0列、第K列以后的每列元素一次繞到右邊。例如有一下矩陣:
?????????????????????????????????????????????????????????????????????????1 ?2 ?3 ?4 ?5
?????????????????????????????????????????????????????????????????????????1 ?2 ?3 ?4 ?5
?????????????????????????????????????????????????????????????????????????1 ?2 ?3 ?4 ?5
若K為2,順序執(zhí)行結(jié)果為: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<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;}}