广工Anyview试题答案 第七章
时间:2025-05-02
时间:2025-05-02
广工Anyview试题答案 第七章
/**********
【习题7.067】编写函数将一个NxN的二维数组的周边元素 “顺时针”轮转1位。
例如:轮转前的数组轮转后的数组
1 2 3 4 1 2
4 5 6 ---> 7 5 3
7 8 9 8 9 6
**********/
voidturningClockwise(char a[N][N])
{
int i;
int flog=1;
int t=a[0][N-1];
for(i=N-1;i>0;i--)
a[0][i]=a[0][i-1];
for(i=0;i<N-1;i++)
a[i][0]=a[i+1][0];
for(i=0;i<N-1;i++)
a[N-1][i]=a[N-1][i+1];
for(i=N-1;i>0;i--)
a[i][N-1]=a[i-1][N-1];
a[1][N-1]=t;
}
/**********
【习题7.010】写一函数求3个整数中最小的数。
**********/
int min(int x, int y, int z)
/* 返回3个整数x,y和z中最小的数 */
{
if(x<=y&&x<=z)
return x;
if(y<=x&&y<=z)
return y;
if(z<=y&&z<=x)
return z;
}
/**********
【习题7.020】编写函数,求用1元、5元和10元三种纸币 支付n元钱共有多少种支付法?
广工Anyview试题答案 第七章
例如,16元可有6种支付方法:
方法 1 2 3 4 5 6
10元 0 0 0 0 1 1
5元 0 1 2 3 0 1
1元 16 11 6 1 6 1
**********/
int change(int n)
{
inti,j,k;
int m=0;
for(i=0;i<=n;i++)
for(j=0;j<=n/5;j++)
for(k=0;k<=n/10;k++)
if(i+j*5+k*10==n)
m++;
return m;
}
/**********
【习题7.030】先编写一个判断素数的函数。再编写一个函数 将一个偶数表示为两个素数之和,并返回其中较小的素数。
注:素数指只能被1和自身整除的正整数。规定0,1不是素数。 **********/
int prime(int n)
/* 判断素数,如果是素数返回1,不是素数则返回0 */
{
int k;
if(n==0||n==1)
return 0;
for (k=2;k<(n/2);k++)
if(n%k==0)
return 0;
return 1;
}
int f(int i)
/* 将偶数i表示为两个素数之和,返回其中较小的素数*/
{
int n;
for(n=3;n<=i;n++)
if(prime(i-n)&&prime(n))
return n;
}
广工Anyview试题答案 第七章
/**********
【习题7.050】编写函数,将字符串中ASCII码最小的字符
放在第一个字符位置,其余字符依次往后移。
**********/
voidfunc(char *str)
/* 将字符串str中ASCII码最小的字符放在第一个 */
/* 字符位置,其余字符依次往后移。 */
{
int i=1,m=0,k;
for(m=0,i=1;str[i]!='\0';i++)
{
if(str[m]>str[i])
m=i;
}
k=str[m];
for(i=m-1;i>=0;i--)
str[i+1]=str[i];
str[0]=k;
}
/**********
【习题7.060】编写函数将一个nxn的二维数组按“次对角线”翻转。 例如:翻转前的数组翻转后的数组
1 2 3 9 6 3
4 5 6 ---> 8 5 2
7 8 9 7 4 1
**********/
void invert(char a[N][N])
{
inti,j;
int b[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[N-1-j][N-i-1];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=b[i][j];
}
/**********
【习题7.064】编写函数将一个NxN的二维数组“水平”翻转。 例如:翻转前的数组翻转后的数组
1 2 3 7 8 9
4 5 6 ---> 4 5 6
广工Anyview试题答案 第七章
7 8 9 1 2 3
**********/
voidinvertH(char a[N][N])
{
inti,j;
int b[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[N-i-1][j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=b[i][j];
}
/**********
【习题7.065】编写函数将一个NxN的二维数组“垂直”翻转。 例如:翻转前的数组翻转后的数组
1 2 3 3 2 1
4 5 6 ---> 6 5 4
7 8 9 9 8 7
**********/
voidinvertV(char a[N][N])
{
inti,j;
int b[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[i][N-1-j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=b[i][j];
}
/**********
【习题7.068】编写函数将一个NxN的二维数组的
周边元素“逆时针”轮转1位。
例如:轮转前的数组轮转后的数组
1 2 3 2 3 6
4 5 6 ---> 1 5 9
7 8 9 4 7 8
**********/
voidturningAnticlockwise(char a[N][N])
{
int i;
广工Anyview试题答案 第七章
char t=a[0][0];
for(i=0;i<N-1;i++)
a[0][i]=a[0][i+1];
for(i=0;i<N-1;i++)
a[i][2]=a[i+1][2];
for(i=0;i<N-1;i++)
a[2][2-i]=a[2][2-i-1];
a[2][0]=a[1][0];
a[1][0]=t;
}
/**********
【习题7.072】编写函数将一个NxN的二维数组a的元素 按行向右轮转1位。
例如:轮转前的数组轮转后的数组
1 2 3 3 1 2
4 5 6 ---> 6 4 5
7 8 9 9 7 8
**********/
voidturningRight(char a[N][N])
{
int b[N][N],i,j;
for(i=0;i<N;i++)
for(j=1;j<N;j++)
b[i][0]=a[i][N-1],
b[i][j]=a[i][j-1];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=b[i][j];
}
/**********
【习题7.075】编写函数将一个NxN的二维数组a的元素 按行向左轮转1位。
例如:轮转前的数组轮转后的数组
1 2 3 2 3 1