0


程序设计基础I-单元测试3(机测)

7-1 sdut-C语言实验-顺序查找

输入n个正整数(1<= n <= 100),查找n个数中是否存在数x。如果存在则返回第一次出现的下标,否则输出“NO”。

输入格式:

第一行输入n,然后输入n个正整数。
第二行输入x。

输出格式:

如果数列中存在x则输出其下标,否则输出“NO”。

输入样例1:

  1. 10 7 0 9 4 3 8 2 1 5 4
  2. 6

输出样例1:

  1. NO

输入样例2:

  1. 5 8 7 8 3 9
  2. 8

输出样例2:

  1. 0
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d",&n);
  6. int a[n],i,j,z;
  7. for(i=0;i<n;i++)
  8. scanf("%d",&a[i]);
  9. scanf("%d",&z);
  10. int t=0,k;
  11. for(i=0;i<n;i++)
  12. {
  13. if(a[i]==z)
  14. {
  15. k=i;
  16. t=1;
  17. break;
  18. }
  19. }
  20. if(t==1)
  21. printf("%d",k);
  22. if(t==0)
  23. printf("NO");
  24. return 0;
  25. }

7-2 sdut- C语言实验-数组逆序(数组移位2)

有n个整数,使其最前m个数变成最后面的m个数,其他各数顺序向前移m(m < n < 100)个位置。

输入格式:

输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。

输出格式:

按先后顺序输出n个整数。

输入样例:

  1. 5 1 2 3 4 5
  2. 2

输出样例:

  1. 3 4 5 1 2
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,m;
  5. scanf("%d",&n);
  6. int a[n],b[n],i,j;
  7. for(i=0;i<n;i++)
  8. {
  9. scanf("%d",&a[i]);
  10. b[i]=a[i];
  11. }
  12. scanf("%d",&m);
  13. for(i=0;i<n;i++)
  14. {
  15. if(i+m<n)
  16. a[i]=b[i+m];
  17. else
  18. a[i]=b[i+m-n];
  19. }
  20. for(i=0;i<n;i++)
  21. {
  22. if(i==n-1)
  23. printf("%d\n",a[i]);
  24. else
  25. printf("%d ",a[i]);
  26. }
  27. return 0;
  28. }

7-3 sdut-C语言实验- 排序

给你N(N<=100)个数,请你按照从小到大的顺序输出。

输入格式:

输入数据第一行是一个正整数N,第二行有N个整数。

输出格式:

输出一行,从小到大输出这N个数,中间用空格隔开。

输入样例:

  1. 5
  2. 1 4 3 2 5

输出样例:

  1. 1 2 3 4 5
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,i,j,t;
  5. scanf("%d",&n);
  6. int a[100];
  7. for(i=0;i<n;i++)
  8. {
  9. scanf("%d",&a[i]);
  10. }
  11. for(i=0;i<=n-1;i++)
  12. {
  13. for(j=0;j<=n-1-i;j++)
  14. {
  15. if(a[j]>a[j+1])
  16. {
  17. t=a[j];
  18. a[j]=a[j+1];
  19. a[j+1]=t;
  20. }
  21. }
  22. }
  23. for(i=0;i<n;i++)
  24. {
  25. if(i==0)
  26. printf("%d",a[i]);
  27. else
  28. printf(" %d",a[i]);
  29. }
  30. return 0;
  31. }

7-4 冒泡法排序之过程

本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。

冒泡排序的算法步骤描述如下:

第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];

第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];

……

第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];

……

第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

  1. 5
  2. 8 7 6 0 1

输出样例:

  1. 7 6 0 1 8
  2. 6 0 1 7 8
  3. 0 1 6 7 8
  4. 0 1 6 7 8
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,t;
  5. scanf("%d",&n);
  6. int a[100];
  7. for(int i=0;i<n;i++)
  8. {
  9. scanf("%d",&a[i]);
  10. }
  11. if(n==1)
  12. printf("%d",a[0]);
  13. for(int i=0;i<n-1;i++)
  14. {
  15. for(int j=0;j<n-1-i;j++)
  16. {
  17. if(a[j]>a[j+1])
  18. {
  19. t=a[j];
  20. a[j]=a[j+1];
  21. a[j+1]=t;
  22. }
  23. }
  24. for(int i=0;i<n;i++)
  25. {
  26. if(i==n-1)
  27. printf("%d\n",a[i]);
  28. else
  29. printf("%d ",a[i]);
  30. }
  31. }
  32. return 0;
  33. }

7-5 sdut-C语言实验-统计输出

编写一个程序,输入一个1到300之间的数据n,然后输入n个1到100范围内的数, 统计1到10、11到20等每10个分数段出现的数值个数,并输出相应的星号和个数。 如下图所示,在1到10范围内生成了4个值,而在11到20范围内并没有生成范围为11到20的值。如果输入的数据不在要求范围内则输出相应的错误提示信息。

1.png

输入格式:

输一个整数n(1<=n<=300)。
输入n个整数,取值范围在1到100之间。

输出格式:

输出每个数据段的星号和数据出现的次数。

输入样例1:

  1. 30
  2. 1 2 3 12 13 14 15 22 23 24 34 45 46 47 48 56 57 66 69 70 71 77 78 79 99 90 88 91 100 6

输出样例1:

  1. 1 to 10: ****(4)
  2. 11 to 20: ****(4)
  3. 21 to 30: ***(3)
  4. 31 to 40: *(1)
  5. 41 to 50: ****(4)
  6. 51 to 60: **(2)
  7. 61 to 70: ***(3)
  8. 71 to 80: ****(4)
  9. 81 to 90: **(2)
  10. 91 to 100: ***(3)

输入样例2:

  1. 301

输出样例1:

  1. You must enter a number in the range 1 to 300
  1. #include<iostream>
  2. using namespace std;
  3. const int N=310;
  4. int ge,yi,er,sa,si,wu,li,qi,ba,ji;
  5. int main()
  6. {
  7. int n;
  8. scanf("%d",&n);
  9. if(n<1||n>300) printf("You must enter a number in the range 1 to 300");
  10. else
  11. {
  12. for(int i=0;i<n;i++)
  13. {
  14. int x;
  15. scanf("%d",&x);
  16. if(x<1||x>100) printf("You must enter a number in the range 1 to 300");
  17. else if(x>=1&&x<=10) ge++;
  18. else if(x>=11&&x<=20) yi++;
  19. else if(x>=21&&x<=30) er++;
  20. else if(x>=31&&x<=40) sa++;
  21. else if(x>=41&&x<=50) si++;
  22. else if(x>=51&&x<=60) wu++;
  23. else if(x>=61&&x<=70) li++;
  24. else if(x>=71&&x<=80) qi++;
  25. else if(x>=81&&x<=90) ba++;
  26. else if(x>=91&&x<=100) ji++;
  27. }
  28. printf(" 1 to 10: ");
  29. for(int i=0;i<ge;i++) printf("*");printf("(%d)\n",ge);
  30. printf("11 to 20: ");
  31. for(int i=0;i<yi;i++) printf("*");printf("(%d)\n",yi);
  32. printf("21 to 30: ");
  33. for(int i=0;i<er;i++) printf("*");printf("(%d)\n",er);
  34. printf("31 to 40: ");
  35. for(int i=0;i<sa;i++) printf("*");printf("(%d)\n",sa);
  36. printf("41 to 50: ");
  37. for(int i=0;i<si;i++) printf("*");printf("(%d)\n",si);
  38. printf("51 to 60: ");
  39. for(int i=0;i<wu;i++) printf("*");printf("(%d)\n",wu);
  40. printf("61 to 70: ");
  41. for(int i=0;i<li;i++) printf("*");printf("(%d)\n",li);
  42. printf("71 to 80: ");
  43. for(int i=0;i<qi;i++) printf("*");printf("(%d)\n",qi);
  44. printf("81 to 90: ");
  45. for(int i=0;i<ba;i++) printf("*");printf("(%d)\n",ba);
  46. printf("91 to 100: ");
  47. for(int i=0;i<ji;i++) printf("*");printf("(%d)\n",ji);
  48. }
  49. return 0;
  50. }

7-6 sdut-C语言实验-求一个3*3矩阵对角线元素之和

给定一个3*3的矩阵,请你求出对角线元素之和。

输入格式:

按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。

输出格式:

从左下角到右上角这条对角线上的元素之和。

输入样例:

  1. 1 2 3
  2. 3 4 5
  3. 6 0 1

输出样例:

在这里给出相应的输出。例如:

  1. 13
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,sum;
  5. int a[3][3];
  6. for(i=0;i<=2;i++)
  7. {
  8. for(j=0;j<=2;j++)
  9. {
  10. scanf("%d",&a[i][j]);
  11. }
  12. }
  13. sum=a[2][0]+a[1][1]+a[0][2];
  14. printf("%d",sum);
  15. return 0;
  16. }

7-7 sdut- C语言实验-矩阵转置

输入N*N的矩阵,输出它的转置矩阵。

输入格式:

第一行为整数N(1≤N≤100)。
接着是一个N*N的矩阵。

输出格式:

转置矩阵。

输入样例:

  1. 2
  2. 1 2
  3. 1 2

输出样例:

  1. 1 1
  2. 2 2
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d",&n);
  6. int a[n][n],b[n][n],i,j;
  7. for(i=0;i<n;i++)
  8. {
  9. for(j=0;j<n;j++)
  10. {
  11. scanf("%d",&a[i][j]);
  12. b[i][j]=a[i][j];
  13. }
  14. }
  15. for(i=0;i<n;i++)
  16. {
  17. for(j=0;j<n;j++)
  18. {
  19. a[i][j]=b[j][i];
  20. }
  21. }
  22. for(i=0;i<n;i++)
  23. {
  24. for(j=0;j<n;j++)
  25. {
  26. if(j==n-1)
  27. printf("%d\n",a[i][j]);
  28. else
  29. printf("%d ",a[i][j]);
  30. }
  31. }
  32. return 0;
  33. }

7-8 sdut-C语言实验- 杨辉三角

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是“中国三角形”(Chinese triangle)。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。

让我们开始做题吧!

输入格式:

输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。

输出格式:

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

输入样例:

  1. 2
  2. 3
  3. 0

输出样例:

  1. 1
  2. 1 1
  3. 1
  4. 1 1
  5. 1 2 1
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,i,j;
  5. int a[30][30];
  6. while(scanf("%d",&n)!=EOF)
  7. {
  8. a[0][0]=1;
  9. a[1][0]=1;
  10. a[1][1]=1;
  11. for(i=2;i<n;i++)
  12. {
  13. a[i][0]=1;
  14. a[i][i]=1;
  15. }
  16. for(i=2;i<n;i++)
  17. {
  18. for(j=1;j<=n-1;j++)
  19. {
  20. a[i][j]=a[i-1][j-1]+a[i-1][j];
  21. }
  22. }
  23. for(i=0;i<n;i++)
  24. {
  25. for(j=0;j<=i;j++)
  26. {
  27. if(j==i)
  28. printf("%d\n",a[i][j]);
  29. else
  30. printf("%d ",a[i][j]);
  31. } if(i==n-1)
  32. printf("\n");
  33. }
  34. }
  35. return 0;
  36. }

本文转载自: https://blog.csdn.net/r2931887650/article/details/143106915
版权归原作者 代码欢乐豆 所有, 如有侵权,请联系我们删除。

“程序设计基础I-单元测试3(机测)”的评论:

还没有评论