欢迎光临散文网 会员登陆 & 注册

计算机二级C语言上机题库(四)

2021-03-01 08:07 作者:朝颜晚扶桑  | 我要投稿

二、数组题:

50、删除w数组中下标为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、从数组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<num;i++){g=xx[i]%10;b=xx[i]/100;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<num;i++){g=xx[i]%10;s=xx[i]/10%10;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,则有四个数符合要求,它们是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且是偶数的数,把这些数保存在数组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(\n\n);for(i=--j;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]中,------,成绩为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<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数组中n个人员的工资进行分到统计,各段的人数存到b数组中:工资为1000以下的人数存到b[0]中,工资为1000到1999的人数存到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、从键盘输入学生的成绩,统计各分数段学生的人数,A类为90~100分,B类为80~90,------,当成绩为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(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、删去一维数组所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数,例如:若一维数组中的数据是:1,1,1,2,2,2,3,4,4,5,5,6,6,7,7,8,9,9,10,10,删除后的内容应该是: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所指数组中的前半部分元素中的值和后半部分元素中的值对换,形参n中存放数组中数据的个数,若n为

奇数,则中间的元素不动,例如: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(---);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数组中的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)

{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数组中放入n个采样值,计算并输出方差值。例如n=8,输入:193.199,195.673,195.757-----,结果为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个数的方差(公式省略),给定的10个数为:15.0,19.0,16.0,15.0,18.0,12.0,15.0,11.0,10.0,16.0输出为

S=2.758623

double fun(double x[10])

{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、从键盘输入一个下标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 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、交换数组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(---);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所指数组中的奇数按原顺序一次存放到a[0],a[1],a[2]……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除偶数后a所指数组中的数据为: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、把数组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[])

{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、把数组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 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)以内能被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中并输出,若输入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(---);for(i=0;i<n;i++)

printf(bb[%d]=%2d,i,bb[i]);}

771100间的所有素数保存在数组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<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把一个整数插入到一个已经按从小到大排序的数组中,插入后数组仍然有序。例如:在数组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(%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所指数组中N个数的平均值,平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出,例如:有10个正数:4630324061745154826,平均值为30.5主函数中输出: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个正数:4630324061745154826,平均值为30.5,主函数中输出:4632404548

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所指数组中N个数的平均值,将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如有10个整数:4630324061745154826,平均值为30.5,移动后的输出为463240454830671526.

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所指数组中N个数的平均值作为函数返回;将小于平均值的数放在数组的前部,平均值作为函数返回,例如有10个整数:4630324061745154826,平均值为30.5,主函数输出为:3061715264632404548

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计算scroem个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。当scroe=102030405060708090},m=9时,函数返回的人数应该是4below=10203040}。

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计算每个学生成绩的平均分,例如当scroe[N][M]=83.5,82,86,65,67,{80,91.5,84,99,95},{90.5,95,86,95,97}时,三个学生的平均分为:76.789.992.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所指数组中的数据最初排列为:914236587;则按规则移动后数据排列为:192837465.

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、把数组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++)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、从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun返回。例如:当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、调用随机函数产生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])break;if(i= = n){a[n]=x;

n++;}x=rand()%20;}}

89、计算NXN维矩阵元素的方差,结果由函数返回。例如:A= ---,S= ---的计算结果是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、按行统计NXN维矩阵元素中的最大值,并把这些值按从小到大的顺序保存在数组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矩阵的周边元素平均值。当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名学生的平均成绩。例如:当scroe[N][M] ={83.5,82,86,65,67},{80,91.5,84,99,95},{90.5,95,86,95,97}时,五门学科的平均分为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、根据形参m(2≤m≤9),在二维数组中存放一张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、实现矩阵(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;

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矩阵,根据给定的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,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

计算结果为:     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矩阵,将矩阵的外围元素顺时针逆转。操作顺序是:首先将第一行元素的值存入临时数组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、将NXN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若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矩阵主对角线元素和反向对角线元素之和,并作为函数值返回。例如:若N=3,有下列矩阵:

1  2  3

                                                                          4  5  6

                                                                          7  8  9

函数首先累加1、5、9,然后累加3、5、7函数的返回值为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矩阵,矩阵元素的构成规律是:最外层元素的值全部为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-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的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如:

                                                                    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;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矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素为0. 例如:若N=3,有下列矩阵:

1  2  3

                                                                          4  5  6

                                                                          7  8  9

计算结果为:1  0  0

5  0

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所指的一维数组中。

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(规定N为奇数)的矩阵是否是“幻方”,若是函数返回值为1,不是函数值返回为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,顺序执行结果为: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;}}


计算机二级C语言上机题库(四)的评论 (共 条)

分享到微博请遵守国家法律