8-1
代码
#include<stdio.h>
#define diff(x,y) ((x)-(y))
int main()
{
int i ,j;
scanf("%d %d",&i,&j);
printf("%d",diff(i,j));
return 0;
}
结果
8-2
第一个max(max(a,b),max(c,d))分析
1.比较a和b的大小,在比较c和d的大小
2.在第二部用a和b中最大的数和c和d中最大的数比较大小。
8-3
代码
#include<stdio.h>
#define swap(type,a,b) ((a=a+b),(b=a-b),(a=a-b))
int main()
{
int x,y;
scanf("%d %d",&x,&y);
swap(int,x,y);
printf("交换后的值x=%d \t y=%d",x,y);
return 0;
}
结果
排序之冒泡算法
public void bubbleSort(int[] array){
for(int i=0;i<array.length-1;i++){//控制比较轮次,一共 n-1 趟
for(int j=0;j<array.length-1-i;j++){//控制两个挨着的元素进行比较
if(array[j] > array[j+1]){//比较每一趟的数字大小,进行n躺就可以完成全部过程
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
这个第八章我觉得这个挺有意思的。详细分析过程
1.在第一次执行内循环(第二个for)i=0我们不妨假设array_length为5,我们会进行四次循环,每次循环交换两个数字,不可能会问为什么不交换五次呢,你不妨设置五个数字,如4.3.2.6.9.1.这个时候你就会发现他们之间会执行四次循环变成1.4.3.2.6.9你会发现这时并没有完全排序。
2.紧接着我们执行第二次内循环,i=1,我们会执行三次循环,你会问·为什么不执行四次呢,因为三次刚刚好,我们通过第一次循环定下了最小的数字.
3.定下四次最小数字,最后一个肯定最大,不需要定。
8-4
代码
#include<stdio.h>
#define MUMBER 5
void x (int x[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++){
for(j=0;j<n-1;j++){
if(x[j]<x[j+1])
temp=0;
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
int main(void)
{
int i;
int h[MUMBER];
printf("输入五个人升高身高\n");
for(i=0;i<MUMBER;i++){
printf("%d号:",i+1);scanf("%d",&h[i]);
}
x (h,MUMBER);
puts("升序");
for(i=0;i<MUMBER;i++){
printf("%d号:%d\n",i+1,h[i]);
}
return 0;
}
结果
改一下其中的算法就行。
注意
1.内循环temp要定义为0;
2printf中数组h要用i代替,不要想我定义成MUNBER结果数字都是一个样子。