进阶--编程练习

xiaoxiao2021-02-28  56

1. 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求:

不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

#include<stdio.h> #include<string.h> #include<assert.h> void reverse_word(char *left,char *right)//逆序一个单词 { assert(left!=NULL); assert(right!=NULL);     while(left<right) char tmp=*left; *left=*right; *right=tmp; left++; right--; } } void reverse(char *str)//逆序一个字符串 { int len=strlen(str); char *left=str; char *right=str+len-1; char *start=str; char *end=str; reverse_word(left,right); while(*end!='\0') {    start=end; while((*end!=' ')&&(*end!='\0')) { end++; }   reverse_word(start,end-1);   end++; } } int main() { char a[]="student a am i"; reverse(a);     printf("%s\n",a); return 0; }

2.编写函数: unsigned int  reverse_bit(unsigned int value);

这个函数的返回 值value的二进制位模式从左到右翻转后的值。如:

在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回:   2550136832

#include<stdio.h> unsigned reverse_bit(unsigned int value) { int sum=0; int i=0; for(i=0;i<32;i++) { //sum=sum<<1; //sum+=(value>>i)&1;方法一:将二进制数的每一位取出来,每取一次sum左移一位 sum+=((value>>i)&1)<<(31-i);按照每一位的权值左移(相当于乘以2^31-i) } return sum; } int main() { int n=25; unsigned ret=reverse_bit(25); printf("%u\n",ret); return 0; }

转载请注明原文地址: https://www.6miu.com/read-82626.html

最新回复(0)