admin管理员组

文章数量:1534885

2024-07-28 作者:

【设计型】6.1 求最大值

问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。

输入范例

3 0 54 -710 27 32767 10 1 500 2

输出范例 32767

提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。#include

main() {

int score[10]; inti,max,j;

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

{

scanf("%d",&score[i]);

}

max=score[0];

for(i=0;i<9;i++)

{

if(max

{

max=score[i+1];

}

}

printf("%d\n",max); }

设计型】6.2 数组逆序输出

问题描述

从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。

提示:

用第一个与最后一个交换。

#include

main() {

int score[10]; inti,j,t;

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

{

scanf("%d",&score[i]);

}

for(i=0;i<=5;i++)

{

t=score[i];

j=9-i;

score[i]=score[j];

score[j]=t;

}

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

{

printf("%d ",score[i]);

}

printf("\n"); }

【设计型】6.3 谁能出线

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:

按顺序给出一个小组10个人的最后得分(int)。

输出:

能够出线的学生序号(0~9)。

#include

main() {

int score[10]; inti,max,j;

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

{

scanf("%d",&score[i]);

}

max=score[0];

for(i=1;i<10;i++)

{

if(score[i]>max)

{

max=score[i];

}

}

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

{

if(score[i]==max)

{

printf("%d\n",i);

}

} }

【设计型】6.4 统计素数的个数

求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。

输入:正整数m

输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)

如:

输入:10

输出:2 3 5 7 4

#include

main() {

intj,i,k,c,x,f=0;

int score[1000];

scanf("%d",&x);

for(i=2;i<=x;i++)

{

c=0;

for(j=1;j<=x;j++)

{

k=i%j; if(k==0)

{ c++;

}

} if(c==2)

{

score[f]=i; f++;

}

}

for(i=0;i<=f-1;i++)

{

printf("%4d",score[i]);

}

printf("\n");

printf("%d\n",f); }

【设计型】6.5 冒泡法排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

编写程序,对输入的十个数按照从小到大排序

1. #include

2. void read(int score[]);

3. void data(int score[]);

4. void print(int score[]);

5. main()

6. {

7. int score[10];

8. read(score);

9. data(score);

10. print(score);

11. printf("\n");

12. return 0;

13. }

14. void read(int score[])

15. {

16. int i;

17. for(i=0;i<10;i++)

18. {

19. scanf("%d",&score[i]);

20. }

21. }

22. void data(int score[])

23. {

24. int i,j,t;

25. for(i=0;i<9;i++)

26. {

27. for(j=i+1;j<10;j++)

28. {

29. if(score[i]>score[j])

30. {

31. t=score[j];

32. score[j]=score[i];

33. score[i]=t;

34. }

35. }

36. }

37. }

38. void print(int score[])

39. {

40. int i;

41. for(i=0;i<10;i++)

42. {

43. printf(" %d",score[i]);

44. }

45. }

【设计型】6.6 插入法排序

如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。

#include

void read(int score[]);

void data(int score[],int a);

void print(int score[]);

main() {

int score[11],a;

read(score);

scanf("%d",&a);

data(score,a);

print(score);

printf("\n"); }

void read(int score[])

{ int i;

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

{

scanf("%d",&score[i]);

} }

void data (int score[],int x) {

inti,j,k,t;

score[10]=x;

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

{

k=i;

for(j=i+1;j<11;j++)

{

if(score[k]>score[j])

{

k=j;

}

}

if(k!=i)

{

t=score[k];

score[k]=score[i];

score[i]=t;

}

} }

void print(int score[])

{ int i;

for(i=0;i<11;i++)

{

printf(" %d",score[i]);

} }

设计型】6.7 求各位数字组成的最大数

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

输入:自然数 n

输出:各位数字组成的最大数

1. #include

2. main()

3. {

4. int n,x;

5. scanf("%d",&n);

6. int score[40];

7. int i,j,k,t,f=0,p;

8. for(i=0;i<40&&n!=0;i++)

9. {

10. score[i]=n%10;

11. n=(n-score[i])/10;

12. f++;

13. }

14. for(j=0;j

15. {

16. k=j;

17. for(p=j+1;p

18. {

19. if(score[p]>score[k])

20. {

21. k=p;

22. }

23. }

24. if(k!=j)

25. {

26. t=score[k];

27. score[k]=score[j];

28. score[j]=t;

29. }

30. }

31. x=0;

32. for(i=0;i

33. {

34. x=x*10+score[i];

35. }

36. printf("%d\n",x);

37. }

设计型】6.8 二维数组

程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。

例如:

数组中的值为

假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)

#include

main() {

int s[4][4]; inti,j,k,n;

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

scanf("%d",&s[i][j]);

}

}

scanf("%d",&n);

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{ if(j<=i)

{

s[i][j]= s[i][j]*n;

}

}

}

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

printf("%4d",s[i][j]);

}

printf("\n");

} }

我的方法

#include

main() {

int score[4][4]; inti,j,k,n;

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

scanf("%d",&score[i][j]);

}

}

k=4;

scanf("%d",&n);

for(i=3;i>=0;i--)

{

for(j=0;j

{

score[i][j]= score[i][j]*n;

}

k--;

}

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

printf("%4d",score[i][j]);

}

printf("\n");

} }

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三

角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。

2、第n行的数字个数为n个。

3、每个数字等于上一行的左右两个数字之和。

编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1. #include

2. int main()

3. {

4. int a[40][40];

5. int i,j,n;

6. scanf("%d",&n);

7. for(i=0;i<=n;i++)

8. for(j=0;j<=n;j++)

9. {

10. if(i==j||j==0)

11. a[i][j]=1;

12. }

13. for(i=1;i<=n;i++)

14. for(j=1;j<=n;j++)

15. a[i][j]=a[i-1][j-1]+a[i-1][j];

16. for(i=0;i<=n;i++)

17. {

18. for(j=0;j<=n;j++)

19. if(j<=i)

20. printf("%3d",a[i][j]);

21. printf("\n");

22. }

23. }

【设计型】6.12 给数组中的元素按顺序编号

对数组 a[10] 中的十个整数从小到大进行

40. } 连续编号,输出各个元素的编号。要求不能

41. }

改变数组 a 中元素的顺序,且相同的整数

42. } 要具有相同的编号。例如数组是:

43. void p(int t[],int n)

A=(5,3,4,7,3,5,6,8,9,10) 则输出为:

(4,1,3,7,1,4,6,8,9,10)

1. #include

2. void s(int a[],int n);

3. void d(int s[],int t[],int n);

4. void p(int t[],int n);

5. main()

6. {

7. int n=10;

8. int a[40];

9. int t[40];

10. s(a,n);

11. d(a,t,n);

12. p(t,n);

13. printf("\n");

14. }

15. void s(int a[],int n)

16. {

17. int i;

18. for(i=0;i

19. {

20. scanf("%d",&a[i]);

21. }

22. }

23. void d(int a[],int t[],int n)

24. {

25. int i,j,c,m;

26. for(i=0;i

27. {

28. c=1;

29. for(j=0;j

30. {

31. if(a[i]>a[j])

32. {

33. t[i]=c+1;

34. c++;

35. }

36. else

37. {

38. t[i]=c;

39. }

44. {

45. int i;

46. for(i=0;i

47. {

48. printf("%3d",t[i]);

49. }

50. }

【设计型】6.15求一系列整数中出现最多的数字

给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。

输入:

有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值

输出:

出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数

输入样例:

1

1233

输出样例:

出现次数最多2次的数字是 3

1. #include

2. #define N 10

3. int in(int n,int yi[]);

4. void fordier(int yi[],int er[],int m);

5. void findmaxandprint(int er[],int n);

6. main()

7. {

8. int yi[30],n,m;/*第一数组别越界*/

9. static int er[N];

10. scanf("%d",&n);

11. m=in(n,yi);

12. fordier(yi,er,m);

13. findmaxandprint(er,N);

14. }

15. int in(int n,int yi[])

16. /*将所有输入的数分解放入第一数

组中

17. 并返回元素个数*/

18. {

19. int i,j=0,a,b;

20. for(i=0;i

21. {

22. scanf("%d",&a);

23. do

24. {

25. b=a%10;

26. yi[j]=b;

27. j++;

28. a=a/10;

29. }while(a>0);

30. }

31. return j;

32. }

33. void fordier(int yi[],int er[],int m)

34. /*第一数组元素的值作为第二数组

元素下标,

35. 每个元素出现次数作为第二数组元

素的值*/

36. {

37. int i,k;

38. for(i=0;i

39. {

40. k=yi[i];

41. er[k]=er[k]+1;

42. }

43. }

44. void findmaxandprint(int er[],int n)

45. {

46. int max,i;

47. max=er[0];

48. for(i=0;i

49. {

50. if(er[i]>max)

51. {

52. max=er[i];

53. }

54. }

55. printf("出现次数最多%d次的数字

是",max);

56. for(i=0;i

57. {

58. if(max==er[i])

59. printf(" %d",i);

60. }putchar('\n');

61. }

【探索型】6.16装箱问题

假设有n项物品,大小分别为s1,s2,...,sn,其中si是整数且满足:1<=si<=100。要把这些物品装入到容量为100的一批箱子(序号1~n)中。装箱方法是:对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。写一个程序来模拟这个装箱的过程。

输入:

有两行。第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小

输出:

每个物品所在的箱子序号,并输出所需的箱子数目

输入样例: 8

60 70 80 90 30 40 10 20

输出样例:

60 1

70 2

80 3

90 4

30 1

40 5

10 1 20 2

所需的箱子数目为5

1. #include

2. int p(int x[],int w[],int n);

3. main()

4. {

5. int x[100],w[100],n;

6. scanf("%d",&n);

7. int i,m,j;

8. for(i=0;i

9. {

10. scanf("%d",&w[i]);

11. }

12. for(j=0;j<100;j++)

13. {

14. x[j]=100;

15. }

16. m=p(x,w,n); /*函数调用时 注意

数据*/

17. printf("所需的箱子数目

为%d\n",m);

18. }

19. int p(int x[],int w[],int n)

20. {

21. int i,k,h=1;

22. for(i=0;i

23. {

24. for(k=0;k<100;k++) /*防止越界

*/

25. {

26. if(w[i]<=x[k])

27. {

28. printf("%d %d\n",w[i],k+1);

29. x[k]=x[k]-w[i];

30. if(k+1>h)

31. {

32. h=k+1;/*h代表箱子的代

号 若K+1号大于H 则交换 */

33. }

34. break; /*停止循环*/

35. }

36. }

37. }

38. return h;

39. }

【设计型】6.17 求大于m且紧靠m的k个素数

请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入17 5,则应输出19 23

29 31 37

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

#include

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. int fun(int m,int n,int zz[])

2. {

3. int i,j=0,c,p,k;

4. for(i=m+1;j

5. {

6. c=0;

7. for(k=1;k<=i;k++)

8. {

9. p=i%k;

10. if(p==0)

11. {

12. c++;

13. }

14. }

15. if(c==2)

16. {

17. zz[j]=i;

18. j++; /*可以防止越界哦*/

19. }

20. }

21. }

/* PRESET CODE BEGIN - NEVER

TOUCH CODE BELOW */

int main() {

intm,n,zz[1000];

scanf("%d%d",&m,&n); fun(m,n,zz);

for(m=0;m

printf("%6d",zz[m]);

printf("\n");

return 0;

}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

【设计型】6.18 找鞍点

编写fun函数,其功能是:在3×4

的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。

例如,有下列矩阵:

1 2 13 4

7 8 10 6

3 5 9 7

程序执行结果为:

find: x[2][2]=9

/* PRESET CODE BEGIN - NEVER

TOUCH CODE BELOW */

#include

#define M 3

#define N 4

/* PRESET CODE END - NEVER TOUCH

CODE ABOVE */

1. int fun(int x[3][4])

2. {

3. int i,j,k,p,h;

4. for(i=0;i<3;i++)

5. {

6. p=0;

7. for(j=1;j<4;j++)

8. {

9. if(x[i][p]

10. {

11. p=j;

12. }

13. }

14. h=0;

15. for(k=1;k<3;k++)

16. {

17. if(x[h][p]>x[k][p])

18. {

19. h=k;

20. }

21. }

22. if(h==i)

23. {

24. printf("find:x[%d][%d]=%d\n",i

,p,x[i][p]);

25. break;

26. }

27. }

28. if(h!=i)

29. {

30. printf("not find!\n");

31. }

32. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main()

{

int x[M][N],i,j;

for(i=0; i

for(j=0; j

scanf("%d",&x[i][j]);

fun(x);

return 0;

}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

【设计型】7.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。

例如:当a=45,b=12,调用该函数后,c=5241。

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

#include

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. int fun(int a,int b,int* p)

2. {

3. *p=(a%10)*1000+(b%10)*100+((a/

10)*10+(b/10));

4. return p;

5. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main() {

inta,b,c;

scanf("%d,%d",&a,&b);

fun(a,b,&c);

printf("%d\n",c);

return 0;

}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

【设计型】7.2 数组中奇偶数

请编一个函数 fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针odd 返回奇数之和,利用指针 even 返回偶数之和。

例如:数组中的值依次为: 1 , 8 , 2 ,3 , 11 , 6 ;则利用指针 odd 返回奇数之和 15 ;利用指针 even 返回偶数之和 16 。

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

#include

#define N 20

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. void fun(int a[],int n,int *o,int *e)

2. {

3. int i,p;

4. *e=0;

5. *o=0;

6. for(i=0;i

7. {

8.

9. p=a[i]%2;

10. if(p==0)

11. {

12. *e=*e+a[i];

13. }

14. else

15. {

16. *o=*o+a[i];

17. }

18. }

19.

20. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main()

{ int a[N],i,n,odd,even;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]); fun(a,n,&odd,&even);

printf("The sum of odd numbers:%d\n",odd);

printf("The sum of even

numbers:%d\n",even);

return 0;

}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

【设计型】7.3 浮点数四舍五入

请编一个函数 void fun(double a,double *h) ,函数的功能是对变量 h 中的值保留 2 位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。

例如: h 值为 8.32433 ,则函数返回 8.32 ;h 值为 8.32533 ,则函数返回 8.33 。

提示:将小数x四舍五入为整数y的方法是y=(int)(x+0.5)

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

#include

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. void fun(double a,double *h)

2. {

3. int t,c;

4. c=(int)(a*100+0.5);

5. *h=c*1.0/100;

6. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main( ) {

doublea,h;

scanf("%lf",&a); fun(a,&h);

printf("The result:%lf\n",h);

return 0;

}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

设计型】7.4 偶数分解

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

#include

#include

#include

int prime(int x) {

int i, t;

t=(int)sqrt(x);

for(i=2; i<=t; i++)

if(x%i==0)break;

return i>t; }

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. int fun(int x,int *a,int *b)

2. {

3. int i,p,k,w,f,j,q,c,s;

4. p=x%2;

5. if(x<=2)

6. {

7. return -1;

8. }

9. else

10. {

11. if(p!=0)

12. {

13. return 0;

14. }

15. else

16. {

17. for(i=2;i<0.5*x;i++)

18. {

19. k=x-i;

20. c=0;

21. for (j=1;j<=i;j++)

22. {

23. w=i%j;

24. if(w==0)

25. {

26. c++;

27. }

28. }

29. s=0;

30. for(f=1;f<=k;f++)

31. {

32. q=k%f;

33. if(q==0)

34. {

35. s++;

36. }

37. }

38. if(c==2&&s==2)

39. {

40. *a=i;

41. *b=k;

42. return 1;

43. break;

44. }

45. }

46. }

47. }

48. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main() {

int n, x, a, b, res;

scanf("%d", &n);

while(n>0)

{

scanf("%d", &x);

res=fun(x, &a, &b); if(res==1)

printf("%d = %d + %d\n", x, a, b); else if(res==-1)

printf("%d is invalid\n", x); else

printf("%d is odd\n", x);

n--;

}

return 0; }

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

【设计型】7.5 生成新数

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数:为739。

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

#include

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

1. int fun(int *n)

2. {

3. /*对于没有输入值的数组 一定要

对其初始化*/

4. int a[40]={0},i,p,x,j,h=0,c=0;

5. x=*n;

6. for(i=0;x!=0;i++)

7. {

8. p=x%10;

9. x=x/10;

10. if(p%2!=0)

11. {

12. a[c]=p; /*i不是连续变化*/

13. c++;

14. }

15. }

16. for(j=c;j>=0;j--) /*注意越界*/

17. {

18. h=h*10+a[j];

19. }

20. *n=h;

21. }

/* PRESET CODE BEGIN - NEVER TOUCH CODE

BELOW */

int main( )

{

int n=-1;

while(n>99999999||n<0)

{ scanf("%d",&n); }

fun(&n);

printf("%d\n",n);

return 0; }

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */

本文标签: cyu Word 文档