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 文档
版权声明:本文标题:cyu Word 文档 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/shuma/1722132441a917616.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论