1. M是一个Byte,请计算M中bit为1的个数
#include <stdio.h>
int main()
{
int i,count;
char M=0x11; /*00010001b*/
printf("%x\n",M);
for(i=0,count=0;i<8;i++)
{
if( ((1<<i)&M) != 0) /*这个地方应该用括号括起来*/
{
count++;
}
}
printf("%d\n",count);
}
int main()
{
int i,count;
char M=0x11; /*00010001b*/
printf("%x\n",M);
for(i=0,count=0;i<8;i++)
{
if( ((1<<i)&M) != 0) /*这个地方应该用括号括起来*/
{
count++;
}
}
printf("%d\n",count);
}
2. 计算Num[100]中9的个数
#include <stdio.h>
int main()
{
int i,count;
char Num[100]={0x1,0x2,0x3,0x4,0x9,0x12,0x3,0x9};
for(i=0,count=0;i<100;i++)
if( *(Num+i) == 9)
count++;
printf("%d",count);
}
int main()
{
int i,count;
char Num[100]={0x1,0x2,0x3,0x4,0x9,0x12,0x3,0x9};
for(i=0,count=0;i<100;i++)
if( *(Num+i) == 9)
count++;
printf("%d",count);
}
3. 将整数M(4Bytes)转换成一个字符串
#include <stdio.h>
int main()
{
int i=0;
int M=12345;
char str[12];
do
{
str[ i ]= (M%10)+0x30;
i++;
} while( (M=M/10)>0 );
printf("%s",str);
}
int main()
{
int i=0;
int M=12345;
char str[12];
do
{
str[ i ]= (M%10)+0x30;
i++;
} while( (M=M/10)>0 );
printf("%s",str);
}
4. 将一个字符串倒置
#include <stdio.h>
#include <string.h>
int main()
{
int i,Len;
char str[12]="abcdef";
char temp;
Len=strlen(str);
for(i=0;i<Len/2;i++)
{
temp = *(str+i);
*(str+i) = *(str-i+Len-1);
*(str-i+Len-1) = temp;
}
printf("%s",str);
}
#include <string.h>
int main()
{
int i,Len;
char str[12]="abcdef";
char temp;
Len=strlen(str);
for(i=0;i<Len/2;i++)
{
temp = *(str+i);
*(str+i) = *(str-i+Len-1);
*(str-i+Len-1) = temp;
}
printf("%s",str);
}
5. 将一个单向链表 (linked list)逆序 (注:原题写成双向链表,是个陷阱)
q = h->next; /* h是头节点 */
h->next = NULL; /* h->next 充当临时变量 */
while( q!=NULL)
{
p = q;
q = q->next;
p->next = h->next;
h->next = p;
}
h->next = NULL; /* h->next 充当临时变量 */
while( q!=NULL)
{
p = q;
q = q->next;
p->next = h->next;
h->next = p;
}
6. 在一个字符串查找一个最长子串,要求这个子串的每个字符相同