c - end - exam

来源:互联网 发布:编程规范命名规则 编辑:程序博客网 时间:2024/05/07 03:57
/*0816-exam1.编写一个函数,作用是把一个char组成的字符串循环右移n个。函数头是这样的:void loop_move(char *src, int n)*/#include <stdio.h>#include <string.h>void loop_move(char *str, int n){char dest[1024];int len = strlen(str);n = n % len;  //若n值大于输入的字符串长度,对其取模strcpy(dest, (str + (len - n)) );strcat(dest, str);dest[len] = '\0';printf("%s\n", dest);}int main(void){char str[1024];int n;scanf("%s%d", str, &n);loop_move(str, n);return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./1helloword 5owordhellakaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ */<pre name="code" class="cpp">/*0816-exam 2.unsigned int型一个数组, 按照比特位中“1” 的个数对数组元素进行从小到大排序,  如果含有“1”的个数相同,按从小到大排序, unsigned int 32位  函数原型 int sort(unsigned int *a, int len);*/#include <stdio.h>#define N 5//统计一个数里二进制1的个数,保存到k里面,并返回k值int num_b(unsigned int num){int k = 0;do{ if( (num % 2) == 1){k++;}}while( (num = (num / 2)) != 0 );return k;}int sort(unsigned int *a, int len){int i, j;int tmp;for(i = 0; i < len - 1; i++){for(j = 0; j < len - i -1; j++){if( num_b(a[j]) > num_b(a[j + 1])  ){tmp = a[j + 1];a[j + 1] = a[j];a[j] = tmp;}//若数字二进制1的值相等,对其值进行比较if( num_b(a[j]) == num_b(a[j + 1]) ){if(a[j] > a[j + 1] ){tmp = a[j + 1];a[j + 1] = a[j];a[j] = tmp;}}}}for(i = 0; i < len; i++){printf("%d ", a[i]);}printf("\n");return 0;}int main(void){unsigned int num[N];int i;printf("Enter 5 number:\n");for(i = 0; i < N; i++){scanf("%d", &num[i]);}sort(num, N);return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./2Enter 5 number:1 2 3 4 51 2 4 3 5 akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./2Enter 5 number:5 4 2 1 31 2 4 3 5 */

/*3.输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分所有偶数位于后半部分*/#include <stdio.h>#include <time.h>#define N 10void init_num(int num[]){int i;srand(time(NULL));for(i = 0; i < N; i++){num[i] = rand()%100;}}void print_num(int num[]){int i;for(i = 0; i < N; i++){printf("%d ", num[i]);}printf("\n");}int *sort(int num[], int dest[]){int i, j = 0;//int dest[N];//12345for(i = 0; i < N; i++){if(num[i] % 2 == 1){ //奇数dest[j++] = num[i];}}for(i = 0; i < N; i++){if(num[i] % 2 == 0){ //偶数dest[j++] = num[i];}}return dest;}int main(void){int num[N];int dest[N];int *tmp;init_num(num);print_num(num);tmp = sort(num, dest);print_num(tmp);return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./327 43 0 98 25 70 41 93 84 44 27 43 25 41 93 0 98 70 84 44 akaedu@akaedu-G41MT-D3:~/lin/816_c_end_exam$ ./326 55 40 91 86 37 76 65 61 74 55 91 37 65 61 26 40 86 76 74 */

/*exam-0816 用C语言实现一个revert函数,它的功能是将输入的字符串到序返回char *revert(char *str)*/#include <stdio.h>#include <string.h>#define N 1024char *revert(char *str){static char dest[N];int len = strlen(str);int i, j;i = len;for(j = 0; i != 0; i--){dest[j++] = str[--len];}dest[j] = '\0';return dest;}int main(void){char str[N];scanf("%s", str);printf("%s\n", revert(str));return 0;}/* ./4helloworddrowolleh*/

/*exam-0816 实现函数void * memove(void *dest, const void *src, size_t n)*/#include <stdio.h>#define N 1024void *memmove(void *dest, const void *src, size_t n){int i = 0;char tmp[N];char *d = dest;const char *s = src;for(i = 0; i < n; i++){tmp[i] = s[i];}for(i = 0; i < n; i++){d[i] = s[i];}return dest;}int main(void){char src[N], dest[N] = { 0 };char *p;int n;scanf("%s %d", src, &n);p = memmove(dest, src, n);printf("%s\n", p);return 0;}/*$ ./5helloword 6hellow*/



0 0