demo_2_27


#define _CRT_SECURE_NO_WARNINGS 1
#include
#include

int count_bit_one(unsigned int n)
{
int count = 0;
//算法一
/*while (n)
{
if (n % 2 == 1)
{
count++;
}
n /= 2;
}*/
//算法二
/*int i = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}*/
//算法三
while (n)
{
n = n&(n - 1);
count++;
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
//写一个函数求a的二进制(补码)表中有几个1
int count = count_bit_one(a);
printf("count=%d\n", count);
//system("pause");
return 0;
}

int get_diff_bit(int m, int n)
{
int tmp = m^n;
int count = 0;
//return count_bit_one(tmp);
while (tmp)
{
tmp = tmp&(tmp - 1);
count++;
}
return count;
}
int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
get_diff_bit(m,n);//获取二进制中
printf("count = %d\n", count);
return 0;
}

void print(int m)
{
int i = 0;
printf("奇数位");
for (i = 30; i >= 0; i-= 2)
{
printf("%d", (m >> i)&i);
}
printf("\n");
printf("偶数位");
for (i = 31; i >= 1; i -= 2)
{
printf("%d", (m >> i)&i);
}
printf("\n");
}
int main()
{
int m = 0;
scanf("%d", &m);
print(m);
return 0;
}

//计算二进制位数中1的个数
void print(int *p, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d", *(p + i));
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);

return 0;
}

//乘法口诀表
void print_table(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-3d", i, j, i*j);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d", &n);
print_table(n);
return 0;
}

//将字符串逆序排列
//1.计数器
//2.指针-指针
//3.递归
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char arr[])
{
int left = 0;
int right = my_strlen(arr)-1;
while (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
//递归方法
//1.a和f的交换
//2.逆序 b c d e
void reverse_string(char arr[])
{
char tmp = arr[0];//s1
int len = my_strlen(arr);
arr[0] = arr[len - 1];//s2
arr[len - 1] = '\0';
//递归必须要有限制条件
if (strlen(arr + 1) >= 2)//s3
{
reverse_string(arr + 1);//把第二个地址传进去
}
arr[len - 1] = tmp;//s4
}

//输入非负整数,计算个位之和
int DigitSum(unsigned int num)
{
if (num > 9)
{
return DigitSum(num / 10) + num % 10;
}
else{
return num;
}
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("ret = %d\n", ret);
return 0;
}

//递归实现N的K次方
int Pow(int n, int k)
{
//n^k=n*n^(k-1)
if (k < 0)
{
return (1.0 / Pow(n, -k));
}
else if (k == 0)
{
return 1;
}
else{
return n*Pow(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
double ret = Pow(n, k);
printf("ret = %lf\n", ret);
return 0;
}

//描述一个学生 - 一些数据
//1.名字
//2.年龄
//3.电话
//4.性别
//struct - 结构体关键字 Stu - 结构体标签 struct Stu - 结构体类型
typedef struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;//三个全局的结构体变量
int main()
{
//变量的创建
struct Stu s;//局部的结构体变量
Stu s1 = {"张三",20,"15249287076","男"};//s1结构体在创建的同时 - 就是赋初值
return 0;
}

struct S
{
int a;
char c;
char arr[20];
double d;
};
struct T
{
char ch[10];
struct S s;
char *pc;
};
int main()
{
char arr[] = "hello bit\n";
struct T t = { "hehe", {100,'w',"hello world",3.14}, arr };
//结构体嵌套 - 结构体包含结构体 - 里面也要一对大括号进行初始化
printf("%s\n", t.ch);//hehe
printf("%s\n", t.s.arr);//hello world
printf("%lf\n", t.s.d);//3.14
printf("%s\n", t.pc);//hello bit
}

typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
void Print1(Stu tmp)
{
printf("name:%s\n", tmp.name);
printf("age:%d\n", tmp.age);
printf("tele:%s\n", tmp.tele);
printf("sex:%s\n", tmp.sex);
}
void Print2(Stu* ps)
{
printf("name: %s\n", ps -> name);
printf("age: %d\n", ps -> age);
printf("tele: %s\n", ps -> tele);
printf("sex: %s\n", ps -> sex);
}
int main()
{
Stu s = { "李四", 40, "15923668988", "男" };
Print1(s);//结构体传参
Print2(&s);//取地址传参
//Print1和Print2哪个更好?
//答案:Print2
//原因:函数传参的时候,参数需要压栈的。如果传递的一个结构体对象的时候,结构体过大,参数
// 压栈的系统开销较大,所以会导致性能的下降。
// 因此,结构体传参的时候,要传结构体的地址。
return 0;
}

int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = Add(a, b);
return 0;
}