#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

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;
}

demo_2_27的更多相关文章

随机推荐

  1. ProE许可、PTC许可、Creo许可、许可分析、分析许可

    Pro/Engineer操作软件(又简称ProE)是美国参数技术公司(PTC)旗下的CAD/CAM/CAE一体化的三维软件,Creo是美国PTC公司于2010年10月推出CAD设计软件包,creo是P ...

  2. sql多行合并一列

    with a as( select * from( select 1 userId , '天津' province union select 1 userId , '北京' union select ...

  3. bit操作常见trick

    x&(x-1)可以消去最右边的1, 如果判断一个数是否是2的指数的快捷方法,比如8,二进制位1000, 那么8&(8-1)为0,只要为0就是2的指数

  4. Linux无写权限打zip

    opt下tiger.txt没权限得时候可以这样直接用zip打包 zip /tmp/1.zip /opt/tiger.txt

  5. 使用 electron 和 electron-forge 加载 本地磁盘资源 img 的问题

    最近在学习使用 electron 进行桌面开发一款图片压缩的软件.遇到了加载本地磁盘文件的问题.记录一下其解决方案. 使用 electron 加载本地磁盘文件 第一种方法 设置webPreferenc ...

  6. Vue3.2中的setup语法糖,保证你看的明明白白!

    vue3.2 到底更新了什么? 根据原文内容的更新的内容主要有以下 5 块: 1.SSR:服务端渲染优化.@vue/server-renderer包加了一个ES模块创建, 与Node.js解耦,使在非 ...

  7. 【Containerd版】Kubeadm高可用安装K8s集群1.23+

    目录 基本环境配置 节点规划 网段规划及软件版本 基本配置 内核升级配置 K8s组件及Runtime安装 Containerd安装 K8s组件安装 高可用实现 集群初始化 Master01初始化 添加 ...

  8. Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)

    vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ...

  9. 羽夏看Win系统内核——句柄表篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  10. dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

    这是一个用于本机多进程进行 IPC 通讯的库,此库的顶层 API 是采用 ASP.NET Core 的 MVC 框架,其底层通讯不是传统的走网络的方式,而是通过 dotnetCampus.Ipc 开源 ...