第一题:
P1-1:递归写法,效率低
#include <stdio.h>
/*
1. 写一个函数返回参数值为1的个数
比如:15 0000 1111 4个1
程序原型:
int count_one_bits(unsigned int value)
{
//返回1的位数
}
*/
int fuc(int x)
{
if(x!=0)
{
if(x%2==1)
{
return 1+fuc(x/2);
}
else
{
return fuc(x/2);
}
}
return 0;
}
void mainp1()
{
int num;
num=fuc(234);
printf("%d\n",num);
}
P1-2:while写法,一直除到n为0
#include <stdio.h>
int fuc(int x)
{
int count =0;
//x=x&(x-1)
while(x!=0)
{
if(x%2==1)
count++;
x/=2;
}
return count;
}
void main()
{
printf("%d\n",fuc(100));
}
P1-3:与运算,有多少个1就运行几次。效率最高
#include <stdio.h>
int fuc(int x)
{
int count=0;
while(x!=0)
{
count++;
x=x&(x-1);
}
return count;
}
void main()
{
printf("%d\n",fuc(521));
}
第二题:
#include <stdio.h>
#include <math.h>
//2. 求100~200之间的素数
int fuc(int x) //是素数就return1
{
int count=2;
if (x%2==0)return 0;
else if(x%2!=0)
{
while(count<=sqrt(x))
{
if(x%count==0)
return 0;
count++;
}
}
return 1;
}
void main()
{
int num=100;
for(num;num<=200;num++)
if(fuc(num)==1)
printf("%d ",num);
printf("\n");
}
第三题:
#include <stdio.h>
//3. 输出乘法口诀表
void main()
{
int i,l;
for(i=1;i<=9;i++)
{
for (l=1;l<=i;l++)
printf("%d*%d=%d ",i,l,i*l);
printf("\n");
}
}
第四题:
#include <stdio.h>
//
//4.不允许创建临时变量,交换两个数的内容
void main()
{
int a=10,b=20;
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n",a,b);
}
第五题:
#include <stdio.h>
//5. 求10个数中最大值。
void main()
{
int ar[]={23,13,56,2,89,100,54,6,3,540};
int i=0;
int n=(sizeof(ar)/sizeof(*ar));
int max=ar[0];
for(i;i<n;i++)
{
if(ar[i]>max)
max=ar[i];
}
printf("MAX:%d",max);
}