c语言练习
一、两个数交换的4种方法
1.使用第三个变量来进行替换
#include
int main()
{
int a , b ,c;
printf("请输入a,b的值\n");
scanf("%d %d",&a,&b);
printf("交换前:a = %d,b = %d\n",a,b);
c = a;
a = b;
b = c;
printf("交换后,a=%d,b=%d\n",a,b);
return 0;
}
2.使用一个封装函数来进行交换
#include
int swap ( int *a , int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
return 0;
}
int main()
{
int a,b;
printf("请输入a,b的值\n");
scanf("%d %d",&a,&b);
printf("交换前:a = %d,b = %d\n",a,b);
swap(&a,&b);
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
3.使用加减法来进行交换
#include
int main()
{
int a , b;
printf("请输入a,b的值\n");
scanf("%d %d",&a,&b);//如a=10,b=20
a = a + b;//a=30
b = a - b;//b=30-20=10
a = a - b;//a=30-10=20
printf("交换后,a=%d,b=%d\n",a,b);
return 0;
}
4.使用异或来进行交换
#include
int main()
{
int a,b;
printf("请输入a,b两个数的值");
scanf("%d %d",&a,&b);
printf("交换前 a=%d,b=%d\n",a,b);//a=01,b=11
a = a^b;//a=10
b = a^b;//b=10^11=01
a = a^b;//a=10^01=11
printf("交换后 a=%d,b=%d\n",a,b);
return 0;
}
二、整型数组中的数据内容从小到大排序:
1.分析的图片

2.代码:
#include
#include
#include
int main()
{
int a[5],i,max,j;
srand((unsigned)time(NULL));//初始化随机数的值,以时间作为参考
/* 给数组a 赋值 随机值*/
for( i = 0; i <5;i++)
{
a[i] = rand()%51 + 10;//产生10 到 60的随机数
}
/* 打印数组没排列之前的值*/
printf("%d %d %d %d %d\t",a[0], a[1],a[2],a[3],a[4]);
printf("\n");
/* 进行数组元素大小的排列*/
for ( i = 0 ;i <5;i++)
{
/* 第一轮:a[0] 与a[1] 比较 且 进行换值
a[1] 与a[2] 比较 且 进行换值
a[2] 与a[3]...
a[3] 与a[4]....
a[4]会得到最大值
第二轮 : 可以不让a[4] 参与比较
直到第四轮结束
*/
for ( j = 0 ; j <4;j++
{
/* 数组元素 进行比较大小 并交换值*/
if ( a[j] > a[ j+1 ] )
{
max = a[j]; a[j] = a[j+1];
a[j+1] = max;
}
}
}
//打印排列后的数组
printf("%d %d %d %d %d\t",a[0],a[1],a[2],a[3],a[4]);
printf("\n");
return 0;
}
三、递归函数
1)函数调用自己本身
2)使用递归函数的时候,一定要有中断条件
3)代码分析如下:
int Fun(int data)
{
int result;
if(data != 1)
{
result = data *Fun(data - 1);
return result;
}
return 1;
}
Fun(4) 是:result = 4 *fun(3)//再次调用fun(3)函数
Fun(3) ----> result = 3*fun(2)
Fun(2)--->result = 2*fun(1)--->此时执行fun(1)函数---》返回1
则fun(2)的返回值--》2*fun(1)=2*1=1
Fun(3)的返回值--》3*fun(2) = 3*2=6
Fun(4)的返回值--》4*fun(3)=4*6=28