作业:

  1. 给定两个×××变量的值,将两个值的内容进行交换。

#include<stdio.h>
#include<stdlib.h>

void swap(int* num1, int* num2)
{
	int tmp = *num1;
	*num1 = *num2;
	*num2 = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(&a, &b);
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	system("pause");
	return 0;
}


2. 不允许创建临时变量,交换两个数的内容(附加题)

提示:用异或(按位异或)

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int a = 10;
	int b = 20;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d,b=%d", a, b);
	system("pause");
	return 0;
}

3. 求10 个整数中最大值。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int max;
	for (i = 0; i<sizeof(arr) / sizeof(arr[0]); i++)
	{
		scanf("%d", &arr[i]);
	}
	max = arr[0];
	for (i = 1; i<sizeof(arr) / sizeof(arr[0]); i++)
	{
		if (max < arr[i])
		{
			max = arr[i];
		}
	}
	printf("max = %d\n", max);
	system("pause");
	return 0;
}

4. 写一个函数返回参数二进制中 1 的个数

比如: 15       0000 1111       4 个 1

程序原型:

int  count_one_bits(unsigned int value)

{

       // 返回 1的位数

}

方法一:(模除)缺点;未考虑十进制是负数的情况,例-1则bit=0
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int count = 0;
	int num = -1;
	scanf("%d", &num);
	while (num)
	{
		if (num % 2 == 1)
		{
			count++;
		}
		num = num / 2;
	}
	printf("count= %d\n", count);
	system("pause");
	return 0;
}

方法二:(按位与和移位)

int main()
{
	int count = 0;
	int num = 15;
	int i = 32;
	while (i)
	{
		if (num & 1 == 1)
		{
			count++;
		}
		num = num / 2;
		num = num >> 1;
		i -= 1;
	}
	printf("count= %d\n", count);
	system("pause");
	return 0;
}


方法三:(x=x&(x-1)

#include <stdio.h>
 
int main()
{
int count = 0;
int num = 0;
scanf("%d",&num);
while(num)
{
count++;
num = num & (num-1);//有多少个1
}
printf("count = %d\n",count);
return 0;
}

教学:

1、 快捷键Tab

2、如何不花钱,搭建自己的博客(新浪SAE)

   不要在自己的博客中直接插入代码

3、

F9----断点

F10---逐过程

F11---逐语句

F5----跳转到第一个断点处

4、0A000涉及大端小端问题

5、交换变量而不引入第三方变量:(1)异或(2)加减(3)乘除(或两者缺点:大数会溢出)

(1)a^b相当于密码,密码^a=b,密码^b=a

所以(a^b)^a=b;(a^b)^b=a

6。scanf("^d",&arr[i]),需要地址,若arr[i]为其中的值则不匹配

7、最大数问题,动态处理

for (i = 0; i<sizeof(arr) / sizeof(arr[0]); i++)

8、&(按位与):不论1,0遇1都为自身

   <<移位运算,包括算术移位和逻辑移位

    (1)右移:缺出来的补齐最高位

     (2)左移:缺出来的补零

补码:原码取反+1,符号位不变

正数的原码与补码相同

-1的补码为 1111 1111

9、(1)num=x&9x-10判断是否是2^n,则num+(num-1)&num-0即可

   (2)int count_one_bits(unsigned int value),正数不需要考虑补码,负数需要考虑补码,

unsigned int value巧妙之处在于负数也可以使用

10、创建一个工作空间 workspacr project 用于在c语言中

wKiom1ZiO7DhrVIxAAAVYdHcCfk848.png

每个里面都有main(),编译是不会出错,链接时会出错,因为main()

所以每次编程建立一个新的工作空间

11、闪跳出运行界面,解决方法(1)ctrl+F5(2)最后+system("pause");

12、全局变狼靠后无法使用,它的作用域为从变量定义处开始,到本程序文件的末尾

13、形式参数,不能里面再定义一个

下列的写法是错误的

wKiom1ZiPg_xYu5HAAAWN9ouSJ8956.png

15、变量不复制

    局部变量:随机值

    静态变量和全局变量:为0

16、下面来看几个代码,并分析其结果

代码一:

#include<stdio.h>
#include<stdlib.h>

void fun()
{
	int num = 10;
	num++;
	printf("fun->%d\n", num);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	system("pause");
	return 0;
}

结果:

wKioL1ZiQF2ydeUgAAASlTiCXxE036.png

代码二:

#include<stdio.h>
#include<stdlib.h>

void fun()
{
	static int num = 10;
	num++;
	printf("fun->%d\n", num);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	system("pause");
	return 0;
}

结果:

wKioL1ZiQN7TjQTfAAASyEeJlio039.png

代码三:

#include<stdio.h>
#include<stdlib.h>

static int num = 10;

void fun()
{
	int num = 10;
	num++;
	printf("fun->%d\n", num);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	system("pause");
	return 0;
}

结果:

wKiom1ZiQR-ieHHlAAAUNbc1KWw095.png

代码四:

#include<stdio.h>
#include<stdlib.h>

static int num = 10;

void fun()
{
	num++;
	printf("fun->%d\n", num);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	system("pause");
	return 0;
}

结果:

wKiom1ZiQYWCT9lIAAAUekSTMtg049.png

代码:

test1.c中:

#include<stdio.h>
#include<stdlib.h>

void fun()
{
	int num = 10;
	num++;
	printf("fun->%d\n", num);
}


extern void fun();

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fun();
	}
	system("pause");
	return 0;
}

test2.c中:

void fun()
{
	int num = 10;
	num++;
	printf("fun->************%d\n", num);
}

结果:

wKioL1ZiRCDQQ0O3AABBlXVdQMA129.png17、2种static

    5种const

18、extern void fun 导入外部源文件变量