[关闭]
@Arbalest-Laevatain 2018-05-21T15:32:32.000000Z 字数 3708 阅读 1064

Anyview 第七章 函数

C语言


/******

【习题7.010】写一函数求3个整数中最小的数。

******/

  1. int min(int x, int y, int z)
  2. /* 返回3个整数x,y和z中最小的数 */
  3. {
  4. int min=x;
  5. if (y<min)
  6. {
  7. min=y;
  8. }
  9. if (z<min)
  10. {
  11. min=z;
  12. }
  13. return min;
  14. }

/******

【习题7.020】编写函数,求用1元、5元和10元三种纸币

支付n元钱共有多少种支付法?
例如,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
******/

  1. int change(int n)
  2. {
  3. int m=0;
  4. int x=1,i,y=5,j,z=10,k;
  5. for (i=0;i<=n;i++)
  6. {
  7. for (j=0;j<=n;j++)
  8. {
  9. for (k=0;k<=n;k++)
  10. {
  11. if (i*x+j*y+k*z == n)
  12. m++;
  13. }
  14. }
  15. }
  16. return m;
  17. }
  18. int change(int n)
  19. {
  20. int i,j,k,t=0;
  21. for (i=0;i<n/10;i++)
  22. {
  23. k=(n-i*10)/5;
  24. for (j=0;j<=k;j++)
  25. {
  26. t++;
  27. }
  28. }
  29. return t;
  30. }

/******

【习题7.030】先编写一个判断素数的函数。再编写一个函数

将一个偶数表示为两个素数之和,并返回其中较小的素数。
注:素数指只能被1和自身整除的正整数。规定0,1不是素数。
******/

  1. int prime(int n)
  2. /* 判断素数,如果是素数返回1,不是素数则返回0 */
  3. {
  4. int flag=1,i;
  5. for (i=2;i<n;i++)
  6. {
  7. if (n%i==0)
  8. {
  9. flag=0;
  10. return flag;
  11. }
  12. }
  13. return flag;
  14. }
  15. int f(int i)
  16. /* 将偶数i表示为两个素数之和,返回其中较小的素数*/
  17. {
  18. int max=0,min=0,j,k;
  19. for (j=1;j<i;j++)
  20. {
  21. for (k=1;k<i;k++)
  22. {
  23. if (prime(j) && prime(k) && j+k==i)
  24. {
  25. if (j<k)
  26. {
  27. min=j;
  28. max=k;
  29. if (min>1)
  30. return min;
  31. }
  32. }
  33. }
  34. }
  35. return min;
  36. }

/******

【习题7.050】编写函数,将字符串中ASCII码最小的字符

放在第一个字符位置,其余字符依次往后移。
******/

  1. void func(char *str)
  2. /* 将字符串str中ASCII码最小的字符放在第一个 */
  3. /* 字符位置,其余字符依次往后移。 */
  4. {
  5. int i,t=0;
  6. char min=str[0];
  7. int l=strlen(str);
  8. for (i=0;i<l;i++)
  9. {
  10. if(str[i]<min)
  11. {
  12. min=str[i];
  13. t=i;
  14. }
  15. }
  16. if (t)
  17. for (i=t-1;i>=0;i--)
  18. {
  19. str[i+1]=str[i];
  20. }
  21. str[0]=min;
  22. }

/******

【习题7.060】编写函数将一个nxn的二维数组按“次对角线”翻转。

例如:翻转前的数组 翻转后的数组
1 2 3 9 6 3
4 5 6 ---> 8 5 2
7 8 9 7 4 1
******/

  1. void invert(char a[N][N])
  2. {
  3. int i,j,k;
  4. for (i=0;i<N;i++)
  5. {
  6. for (j=0;j<N-i;j++)
  7. {
  8. k=a[i][j];
  9. a[i][j]=a[N-1-j][N-1-i];
  10. a[N-1-j][N-1-i]=k;
  11. }
  12. }
  13. }

/******

【习题7.064】编写函数将一个NxN的二维数组“水平”翻转。

例如:翻转前的数组 翻转后的数组
1 2 3 7 8 9
4 5 6 ---> 4 5 6
7 8 9 1 2 3
******/

  1. void invertH(char a[N][N])
  2. {
  3. int i, j;
  4. char t[N];
  5. for (i = 0; i < N / 2; i++)
  6. {
  7. for (j = 0; j < N; j++)
  8. {
  9. t[j] = a[i][j];
  10. a[i][j] = a[N - 1 - i][j];
  11. a[N - 1 - i][j] = t[j];
  12. }
  13. }
  14. }

/******

【习题7.065】编写函数将一个NxN的二维数组“垂直”翻转。

例如:翻转前的数组 翻转后的数组
1 2 3 3 2 1
4 5 6 ---> 6 5 4
7 8 9 9 8 7
******/

  1. void invertV(char a[N][N])
  2. {
  3. int i, j;
  4. char t;
  5. for (i = 0; i < N; i++)
  6. {
  7. for (j = 0; j < N / 2; j++)
  8. {
  9. t = a[i][j];
  10. a[i][j] = a[i][N - 1 - j];
  11. a[i][N - 1 - j] = t;
  12. }
  13. }
  14. }

/******

【习题7.067】编写函数将一个NxN的二维数组的周边元素

“顺时针”轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 4 1 2
4 5 6 ---> 7 5 3
7 8 9 8 9 6
******/

  1. void turningClockwise(char a[N][N])
  2. {
  3. t1 = a[0][N - 1];
  4. t2 = a[N/2][0];
  5. t3 = a[N/2][N - 1];
  6. t4 = a[N-1][0];
  7. for (i = N-1; i >0; i--)
  8. {
  9. a[0][i] = a[0][i-1];
  10. }
  11. for (i = 1; i < N ; i++)
  12. {
  13. a[N-1][i-1] = a[N-1][i];
  14. }
  15. a[0][0] = t2;
  16. a[1][N - 1] = t1;
  17. a[N - 1][N - 1] = t3;
  18. a[N / 2][0] = t4;
  19. }
  20. void turningClockwise(char a[N][N])
  21. {
  22. int i;
  23. int float=1;
  24. int t=a[0][N-1];
  25. for (i=N;i>0;i--)
  26. a[0][i]=a[0][i-1];
  27. for (i=0;i<N;i++)
  28. a[i][0]=a[N-1][i+1];
  29. for (i=N-1;i>0;i--)
  30. a[i][N-1]=a[i-1][N-1];
  31. a[1][N-1]=t;
  32. }

/******

【习题7.068】编写函数将一个NxN的二维数组的

周边元素“逆时针”轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 2 3 6
4 5 6 ---> 1 5 9
7 8 9 4 7 8
******/

  1. void turningAnticlockwise(char a[N][N])
  2. {
  3. int i, j;
  4. char t1,t2,t3,t4;
  5. t1 = a[0][0];
  6. t2 = a[N/2][0];
  7. t3 = a[N/2][N - 1];
  8. t4 = a[N-1][N-1];
  9. for (i = 0; i <N-1; i++)
  10. {
  11. a[0][i] = a[0][i+1];
  12. }
  13. for (i = N-1; i >0 ; i--)
  14. {
  15. a[N-1][i] = a[N-1][i-1];
  16. }
  17. a[0][N-1] = t3;
  18. a[N/2][0] = t1;
  19. a[N/2][N - 1] = t4;
  20. a[N -1][0] = t2;
  21. }

/******

【习题7.072】编写函数将一个NxN的二维数组a的元素

按行向右轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 3 1 2
4 5 6 ---> 6 4 5
7 8 9 9 7 8
******/

  1. void turningRight(char a[N][N])
  2. {
  3. }

/******

【习题7.075】编写函数将一个NxN的二维数组a的元素

按行向左轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 2 3 1
4 5 6 ---> 5 6 4
7 8 9 8 9 7
******/

  1. void turningLeft(char a[N][N])
  2. {
  3. }

/******

【习题7.082】编写函数将一个NxN的二维数组a的元素

按列向下轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 7 8 9
4 5 6 ---> 1 2 3
7 8 9 4 5 6
******/

  1. void turningDown(char a[N][N])
  2. {
  3. }

/******

【习题7.085】编写函数将一个NxN的二维数组a的元素

按列向上轮转1位。
例如:轮转前的数组 轮转后的数组
1 2 3 4 5 6
4 5 6 ---> 7 8 9
7 8 9 1 2 3
******/

  1. void turningUp(char a[N][N])
  2. {
  3. }

/******

【习题7.103】编写函数,求整数m和n的最大公约数,

并作为函数的返回值。
******/

  1. int gdc(int m, int n)
  2. {
  3. }

/******

【习题7.105】 编写函数,求整数m和n的最小公倍数,

并作为函数的返回值。
******/

  1. int lcm(int m, int n)
  2. {
  3. }

include

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int prime(int n)
/* 判断素数,如果是素数返回1,不是素数则返回0 */
{
int flag=1,i;
for (i=2;i {
if (n%i==0)
{
flag=0;
printf("prime=%d\n",flag);
return flag;
}
}
printf("prime=%d\n",flag);
return flag;
}

int f(int i)
/* 将偶数i表示为两个素数之和,返回其中较小的素数*/
{
int max=0,min=0,j,k;
for (j=1,k=1;j {
if (prime(j) && prime(k) && j+k==i)
{
min=j;
max=k;
}

}
printf("f=%d %d\n",min,max);
return min;

}

int main(int argc, char *argv[]) {
int a,b,c;
scanf("%d",&c);
if (c%2==0)
{
f(c);
}
prime(c);
return 0;
}

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注