C语言程序设计练习题
1.背景:
你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:
1 | 2 | 6 | 7 | 15 |
3 | 5 | 8 | 14 | 16 |
4 | 9 | 13 | 17 | 22 |
10 | 12 | 18 | 21 | 23 |
11 | 19 | 20 | 24 | 25 |
学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。
输入:
方阵N的大小。
switch case判断字符串输出;
方阵。
1.#include<stdio.h>
2.int main()
3.{ int i=0j=0gnt=1;
4. int a[100][100];
5. scanf("%d"&n);
6. for(g=0;g<n;g++)
7. { if(g%2!=0)
8. { for(i=0j=g;i<=g&&j>=0;i++j--)
9. { a[i][j]=t;
10. t++; }
11. }
12. else
13. { for(i=gj=0;i>=0&&j<=g;i--j++)
14. { a[i][j]=t;
15. t++; }
16. }
17. }
18. for(g=1;g<n;g++)
19. { if(g%2!=0)
20. { for(i=gj=n-1;i<n&&j>=g;i++j--)
21. { a[i][j]=t;
22. t++; }
23. }
24. else
25. { for(i=n-1j=g;i>=g&&j<n;i--j++)
26. { a[i][j]=t;
27. t++; }
28. }
29. }
30. for(i=0;i<n;i++)
31. { for(j=0;j<n;j++)
32. { if(j==n-1)
33. printf("%2d"a[i][j]);
34. else
35. printf("%2d "a[i][j]); }
36. printf("\n"); }
37. return 0;
38.}
2. 有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。
输入:
字符串
输出:
Yes或者No
说明:
如输出Yes,说明输入的字符串是一个回文字符串
输出No,说明输入的字符串不是一个回文字符串
请使用递归算法实现。
1.#include<stdio.h>
2.#include<string.h>
3.int main()
4.{
5. char a[100];
6. int ij=1k;
7. gets(a);
8. k=strlen(a);
9. for(i=0;i<k/2;i++)
10. { if(a[i]!=a[k-i-1])
11. { j=0;
12. break; }
13. }
14. if(j==0)
15. printf("No\n");
16. else
17. printf("Yes\n");
18.}
3.字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。
例如输入字符串" EFABCABCABCDABCDD ” 给定子字符串" ABC” ,输出是 3 。
函数原型: int countsub( char *str char *subs ) 。
参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。
返回值:包含的连续子字符串的个数。
预设代码:
1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
2.#include <stdio.h>
3.int countsub( char *str char *ss );
4.main( )
5.{ char s1[1000] = {0} s2[100] = {0};
6. gets(s1);
7. gets(s2);
8. printf("%d\n" countsub( s1 s2 ) ); }
9./* PRESET CODE END - NEVER TOUCH CODE ABOVE */
代码:
1.int countsub(char *strchar *ss)
2.{ int ijqk=0rmax=0flag=1h;
3. for(r=0;str[r]!='\0';r++);
4. for(i=0;i<=r;)
5. { for(j=iq=0;j<=r;j++)
6. { if(ss[q]=='\0')
7. { h=q;
8. k++;
9. flag=0;
10. break; }
11. if(str[j]==ss[q])
12. q++;
13. else
14. { if(k>max)
15. max=k;
16. k=0;
17. flag=1;
18. break; }
19. }
20. if(flag)
21. i++;
22. else
23. i=i+h; }
24. return max;
25. }
4.功能:
求整数 n 到 m 区间的累加和,其中n<=m。
输入:
区间的起始点n 区间的终止点m
输出:
累加和
要求:
使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。
1.#include<stdio.h>
2.int main()
3.{ int s=0ijk;
4. scanf("%d %d"&i&j);
5. k=i;
6. for(;i<=j;i++)
7. s+=i;
8. printf("The sum from %d to %d is %d.\n"kjs);
9. return 0;
10.}
5.小明上来大学,学习了用求解平方根的迭代公式。
其中:p 为 x 的近似平方根,e 是结果允许的误差。
输入:x e
输出:p 保留小数点后 8 位。
1.#include<stdio.h>
2.#include<math.h>
3.double mysqrt(double xdouble ydouble e)
4.{ if(fabs(y*y-x)<e)
5. ;
6. else
7. y=mysqrt(x(y+x/y)/2e);
8. return y; }
9.int main()
10.{ double xe;
11. scanf("%lf %lf"&x&e);
12. printf("%.8lf\n"mysqrt(x1.0e));
13. return 0;
14.}
6.请使用递归算法计算正整数n和m的最大公约数GCD(nm)。
= m 当 m<=n 且 n mod m =0
GCD(NM) = GCD(mn) 当n<m时
= GCD(m n mod m) 其他
输入:
n和m
输出:
n和m的最大公约数
1.#include<stdio.h>
2.int main()
3.{ int ixy;
4. scanf("%d %d"&x&y);
5. for(i=x;i>0;i--)
6. { if(x%i==0&&y%i==0)
7. { printf("%d\n"i);
8. return 0; }
9. }
10.}
7.请使用递归算法求下列序列的前n项之和。
1 + 1/2 - 1/3 + 1/4 -1/5 ......
输入:
n
输出:
序列的前n项和(精确到小数点之后第6位)
1.#include<stdio.h>
2.int main()
3.{ int ins;
4. double sum=0;
5. scanf("%d"&n);
6. if(n==1)
7. { printf("1\n");
8. return 0; }
9. for(i=2;i<=n;i++)
10. { if(i%2==0)
11. s=i;
12. else
13. s=-i;
14. sum+=(1.0/s); }
15. printf("%lf\n"sum+1);
16.}
8.求三个数的公式
小明和小红去参加拍卖会,身为富二代的小红很嚣张地说,"现在那个拍品我要定了,无论你出的价格是多少,我的出价都比你的价格的Y倍还多Z!”,她还给出了好几组X,Y,Z的值,但是聪明的小明随口说出了三个X,Y,Z的值,让小红的报价居然低于了小明,从而彻底打败了邪恶的小红。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论