作业:
给定两个×××变量的值,将两个值的内容进行交换。
#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语言中
每个里面都有main(),编译是不会出错,链接时会出错,因为main()
所以每次编程建立一个新的工作空间
11、闪跳出运行界面,解决方法(1)ctrl+F5(2)最后+system("pause");
12、全局变狼靠后无法使用,它的作用域为从变量定义处开始,到本程序文件的末尾
13、形式参数,不能里面再定义一个
下列的写法是错误的
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;
}
结果:
代码二:
#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;
}
结果:
代码三:
#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;
}
结果:
代码四:
#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;
}
结果:
代码:
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);
}
结果:
5种const
18、extern void fun 导入外部源文件变量
转载于:https://blog.51cto.com/10742910/1719782