#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. 【Android】安卓中的存储

    [Android]安卓中的存储 1.存储在App内部 最简单的一种.在尝试过程中发现,手机中很多文件夹都没有权限读写.我们可以将我们需要写的文件存放到App中的files文件夹中,当然我们有权限在整个 ...

  2. winform 中心旋转 图片旋转

    //设置左上角到中心点 g.TranslateTransform(int.Parse(x), int.Parse(y)); //旋转角度 g.RotateTransform(int.Parse(&qu ...

  3. 【机器学习】GMM和EM算法

    机器学习算法-GMM和EM算法 目录 机器学习算法-GMM和EM算法 1. GMM模型 2. GMM模型参数求解 2.1 参数的求解 2.2 参数和的求解 3. GMM算法的实现 3.1 gmm类的定 ...

  4. hbase region, store, storefile和列簇,的关系

    先来一张大图. Hbase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写:另外一部分作为BlockCache,主要用于读数据:这里主要介绍写数据的部分,即Mems ...

  5. C++11之future(二)

    如果有两个线程,其中一个线程想要获取另一个线程的返回值,该怎么办? 于是接下来要谈的package_task就是为了解决这个问题而诞生的. // ConsoleApplication5.cpp : 定 ...

  6. 返回值Student-Json

    MyController中 index.jsp 修改url

  7. 基于 SSR 的预渲染首屏直出方案

    基于 SSR 的预渲染首屏直出方案 Create React Doc 是一个使用 React 的 markdown 文档站点生成工具.此前在 Create React Doc 中引入了预渲染技术来预先 ...

  8. react diff算法浅析

    diff算法作为Virtual DOM的加速器,其算法的改进优化是React整个界面渲染的基础和性能的保障,同时也是React源码中最神秘的,最不可思议的部分 1.传统diff算法计算一棵树形结构转换 ...

  9. Edge 91以上554、10080出现ERR_UNSAFE_PORT解决办法

    解决办法 在注册表下面这个路径新建一个键值名为1的,输入10080(或554),重启浏览器,即可解决问题. 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micro ...

  10. new Date时间格式转换方法

    平时经常会使用到时间转换,组件库已经有很多组件可以自动生成时间类型了,但是底层的封装方法还是得有 获取当前时间 new Date()  或者自己拥有一个毫秒时间 方法如下 /** * title: 时 ...