两个值交换
int a=6,b=8;
a=a^b;
b=a^b;
a=a^b;
printf("%d %d\n",a,b);
6:110 8:1000
a=1110 b:1000
b=110 a:1110
a=1000=8 b=110=6
数组
清零函数
bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:数组内容清零
参数:s:数组首地址 n:字节大小
返回值:无
#include<stdio.h>
#include<strings.h>
int main(int argc, char const *argv[])
{
int a[5]={97,98,99,100,101};
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
bzero(a,sizeof(a));
// for(int i=0;i<5;i++)
// a[i]=0;等效于将数组内容全部变为0
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
return 0;
}
memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:数组元素清零
参数:s:数组首地址 c:要设置的值 n:字节大小
返回值:数组首地址
#include<stdio.h>
#include<string.h>
int main(int argc, char const *argv[])
{
int a[5]={97,98,99,100,101};
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
memset(a,0,sizeof(a));//将数组内容全部替换为0
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
return 0;
}
strlen和sizeof的区别
sizeof是关键字,strlen是函数
sizeof是计算元素实际开辟的大小空间,strlen是计算字符串的实际元素个数
char a[]=“hello”; sizeof计算包括’\0’, strlen计算不包括’\0’
输入一个字符串,大小写转换输出
#include <stdio.h>
int main(int argc, char const *argv[])
{
char a[10] = {};
gets(a);
for(int i = 0;a[i] != '\0';i++)
{
if(a[i] >='a' && a[i] <= 'z')//核心部分begin
a[i] -= 32;
else if(a[i] >= 'A' && a[i] <= 'Z')
a[i] += 32;
}//end
puts(a);
return 0;
}
简单算法
1.选择排序
2个数比较1轮,5个数比较4轮
假设最左边位置为最小值,分别和剩下的每一个元素比较,比较的过程中如果遇到更小值,暂存更小值的下标,直到这一轮比较结束后,再把更小值和最左边元素交换
int main()
{
int a [5]={2,9,8,7,6};//目标:从小到大
for (int i =0;i<5-1;i++)//轮数
min=i; //min存下最小值的下标,初始化是赋值最左边的下标
for (int j=i+1; j<5; j++) //找到剩下的每一个元素
{
if (a[min]>a[j])
min=j;//比较的过程中,暂存更小值的下标
}
//交换a[min] a[i]
if(min!=i) //当最小元素位置和最左边不在同一位置时,再交换
{
a[min]=a[min]^a[i];
a[i]=a[min]^a[i];
a[min]=a[min]^a[i];
}
}//打印数组内容
for(int i=0; i<5;i++)
printf("%d\n",a[i]);
return 0;
}
2.冒泡排序
main()
{
int a[5]={6,5,4,3,2};
for (int i=0;i<5-1;i++)
{
for(int j=0;j<5-1-i;j++)
{
a[j]=a[j]^a[j+1];
a[j+1]=a[j]^a[j+1];
a[j]=a[j]^a[j+1];
}
}
}