#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. 【PTA】5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即“小时:分钟:秒”,当小时等于24小时,置为0。

    5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即"小时:分钟:秒",当小时等于24小时,置为0. #include <stdio.h> ...

  2. Typora图床

    Typora图床 Typora+PicGo+Gitee(码云)实现高效Markdown图床 typora是我最早接触的markdown格式的轻文本编辑器,因为我是计算机专业,所以平常记笔记会有代码块, ...

  3. 论文翻译:2019_TCNN: Temporal convolutional neural network for real-time speech enhancement in the time domain

    论文地址:TCNN:时域卷积神经网络用于实时语音增强 论文代码:https://github.com/LXP-Never/TCNN(非官方复现) 引用格式:Pandey A, Wang D L. TC ...

  4. [STM32F4xx 学习] 如何在RAM中调试程序

    在RAM中调试程序指的是将程序下载到RAM里面(而不是Flash里面),然后在RAM中执行程序.调试. 为什么要在RAM中调试程序?总结起来有以下两点原因: 1. Flash 擦写次数有限,STM32 ...

  5. C#语言类型

    讨论 所有类型在,值类型,引用类型用new创建,值类型由编译器自动补全 int等引用类型是轻量化结构更像是结构体 值类型在栈中,引用类型在堆中 所有类型由类派生,可以说每个是对象,也可以不是 由于.N ...

  6. azure django bug

    azure web app service azure web app service无法部署dhango网站 本地服务器测试代码 实际azure测试 django service 没有部署选项,需要 ...

  7. 【Vue源码学习】响应式原理探秘

    最近准备开启Vue的源码学习,并且每一个Vue的重要知识点都会记录下来.我们知道Vue的核心理念是数据驱动视图,所有操作都只需要在数据层做处理,不必关心视图层的操作.这里先来学习Vue的响应式原理,V ...

  8. fluentd学习笔记

    转载自http://blog.csdn.net/qq_27252133/article/details/53520416 原文https://blog.laisky.com/p/fluentd/ 最近 ...

  9. linux可用内存判断

    free是完全没有占用的空闲内存,Available 减 free是操作系统为了优化运行速度拿来调用的内存, 程序需要的话操作系统会进行释放.所以一般看Available即可. free+buffer ...

  10. 常见线程池 newScheduledThreadPool 定时执行任务的线程池 简单介绍

    一  定时任务 package com.aaa.threaddemo; import static java.util.concurrent.TimeUnit.NANOSECONDS; import ...