c - end - exam

本是古典 何须时尚 2022-08-11 10:28 119阅读 0赞
  1. /*
  2. 0816-exam
  3. 1.编写一个函数,作用是把一个char组成的字符串循环右移n个。
  4. 函数头是这样的:void loop_move(char *src, int n)
  5. */
  6. #include <stdio.h>
  7. #include <string.h>
  8. void loop_move(char *str, int n)
  9. {
  10. char dest[1024];
  11. int len = strlen(str);
  12. n = n % len; //若n值大于输入的字符串长度,对其取模
  13. strcpy(dest, (str + (len - n)) );
  14. strcat(dest, str);
  15. dest[len] = '\0';
  16. printf("%s\n", dest);
  17. }
  18. int main(void)
  19. {
  20. char str[1024];
  21. int n;
  22. scanf("%s%d", str, &n);
  23. loop_move(str, n);
  24. return 0;
  25. }
  26. /*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./1
  27. helloword 5
  28. owordhell
  29. akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$
  30. */
  31. <pre name="code" class="cpp">
  32. /*
  33. 0816-exam
  34. 2.unsigned int型一个数组, 按照比特位中“1” 的个数对数组元素进行从小到大排序,
  35. 如果含有“1”的个数相同,按从小到大排序, unsigned int 32位
  36. 函数原型 int sort(unsigned int *a, int len);
  37. */
  38. #include <stdio.h>
  39. #define N 5
  40. //统计一个数里二进制1的个数,保存到k里面,并返回k值
  41. int num_b(unsigned int num)
  42. {
  43. int k = 0;
  44. do{
  45. if( (num % 2) == 1){
  46. k++;
  47. }
  48. }while( (num = (num / 2)) != 0 );
  49. return k;
  50. }
  51. int sort(unsigned int *a, int len)
  52. {
  53. int i, j;
  54. int tmp;
  55. for(i = 0; i < len - 1; i++){
  56. for(j = 0; j < len - i -1; j++){
  57. if( num_b(a[j]) > num_b(a[j + 1]) ){
  58. tmp = a[j + 1];
  59. a[j + 1] = a[j];
  60. a[j] = tmp;
  61. }
  62. //若数字二进制1的值相等,对其值进行比较
  63. if( num_b(a[j]) == num_b(a[j + 1]) ){
  64. if(a[j] > a[j + 1] ){
  65. tmp = a[j + 1];
  66. a[j + 1] = a[j];
  67. a[j] = tmp;
  68. }
  69. }
  70. }
  71. }
  72. for(i = 0; i < len; i++){
  73. printf("%d ", a[i]);
  74. }
  75. printf("\n");
  76. return 0;
  77. }
  78. int main(void)
  79. {
  80. unsigned int num[N];
  81. int i;
  82. printf("Enter 5 number:\n");
  83. for(i = 0; i < N; i++){
  84. scanf("%d", &num[i]);
  85. }
  86. sort(num, N);
  87. return 0;
  88. }
  89. /*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./2
  90. Enter 5 number:
  91. 1 2 3 4 5
  92. 1 2 4 3 5
  93. akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./2
  94. Enter 5 number:
  95. 5 4 2 1 3
  96. 1 2 4 3 5
  97. */
  98. /*
  99. 3.输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分
  100. 所有偶数位于后半部分
  101. */
  102. #include <stdio.h>
  103. #include <time.h>
  104. #define N 10
  105. void init_num(int num[])
  106. {
  107. int i;
  108. srand(time(NULL));
  109. for(i = 0; i < N; i++){
  110. num[i] = rand()%100;
  111. }
  112. }
  113. void print_num(int num[])
  114. {
  115. int i;
  116. for(i = 0; i < N; i++){
  117. printf("%d ", num[i]);
  118. }
  119. printf("\n");
  120. }
  121. int *sort(int num[], int dest[])
  122. {
  123. int i, j = 0;
  124. // int dest[N];
  125. //12345
  126. for(i = 0; i < N; i++){
  127. if(num[i] % 2 == 1){ //奇数
  128. dest[j++] = num[i];
  129. }
  130. }
  131. for(i = 0; i < N; i++){
  132. if(num[i] % 2 == 0){ //偶数
  133. dest[j++] = num[i];
  134. }
  135. }
  136. return dest;
  137. }
  138. int main(void)
  139. {
  140. int num[N];
  141. int dest[N];
  142. int *tmp;
  143. init_num(num);
  144. print_num(num);
  145. tmp = sort(num, dest);
  146. print_num(tmp);
  147. return 0;
  148. }
  149. /*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./3
  150. 27 43 0 98 25 70 41 93 84 44
  151. 27 43 25 41 93 0 98 70 84 44
  152. akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./3
  153. 26 55 40 91 86 37 76 65 61 74
  154. 55 91 37 65 61 26 40 86 76 74
  155. */
  156. /*
  157. exam-0816
  158. 用C语言实现一个revert函数,它的功能是将输入的字符串到序返回
  159. char *revert(char *str)
  160. */
  161. #include <stdio.h>
  162. #include <string.h>
  163. #define N 1024
  164. char *revert(char *str)
  165. {
  166. static char dest[N];
  167. int len = strlen(str);
  168. int i, j;
  169. i = len;
  170. for(j = 0; i != 0; i--){
  171. dest[j++] = str[--len];
  172. }
  173. dest[j] = '\0';
  174. return dest;
  175. }
  176. int main(void)
  177. {
  178. char str[N];
  179. scanf("%s", str);
  180. printf("%s\n", revert(str));
  181. return 0;
  182. }
  183. /* ./4
  184. helloword
  185. drowolleh
  186. */
  187. /*
  188. exam-0816
  189. 实现函数void * memove(void *dest, const void *src, size_t n)
  190. */
  191. #include <stdio.h>
  192. #define N 1024
  193. void *memmove(void *dest, const void *src, size_t n)
  194. {
  195. int i = 0;
  196. char tmp[N];
  197. char *d = dest;
  198. const char *s = src;
  199. for(i = 0; i < n; i++){
  200. tmp[i] = s[i];
  201. }
  202. for(i = 0; i < n; i++){
  203. d[i] = s[i];
  204. }
  205. return dest;
  206. }
  207. int main(void)
  208. {
  209. char src[N], dest[N] = { 0 };
  210. char *p;
  211. int n;
  212. scanf("%s %d", src, &n);
  213. p = memmove(dest, src, n);
  214. printf("%s\n", p);
  215. return 0;
  216. }
  217. /*$ ./5
  218. helloword 6
  219. hellow
  220. */

发表评论

表情:
评论列表 (有 0 条评论,119人围观)

还没有评论,来说两句吧...

相关阅读