【程序39】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include <stdio.h>
int main(int argc, char* argv[])
{
int temp1,temp2,i,j,end,number;
int a[9] = {1,2,6,8,9,12,16,72};
printf("The original array is :");
for(i = 0;i < 8;i++)
{
printf("%5d",a[i]);
}
printf("\n");
printf("please insert a number:");
scanf("%d",&number);
end = a[7];
for(i = 0;i < 8;i++)
{
if(number > end)
{
a[8] = number;
}
else
{
if(a[i] > number)
{
temp1 = a[i];
a[i] = number;
for(j = i+1;j < 9;j++)
{
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break;
}
}
}
for(i = 0;i < 9;i++)
{
printf("%6d",a[i]);
}
printf("\n");
}
运行结果:
略分析一下代码:
主要就是那一段把后面的元素往后移动的代码段:
首先,如果要插入的地方,后面的元素都要往后移,要注意,这里元素不能给覆盖掉,所以就要创建临时变量来储存。
容易被覆盖的有两个元素:
- 一个是插入位置的元素容易被插入元素覆盖;
- 一个是插入位置的元素容易覆盖后面一个元素;
因此这两个元素就用temp1和temp2来保存。
还有就是注意
for(j = i+1;j < 9;j++)
{//注意这里的是9,意思是原来数组的最后一个元素从a[7]挤到了a[8]。
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
后退的过程就类似一个螺旋,既要循环交换值又要往前进(j++)。
【程序40】
题目:将一个数组逆序输出。
最简单的方法就是根据下标逆向输出!
#include <stdio.h>
int main(int argc, char* argv[])
{
int i,j,temp,temp1;
int a[7] = {4,3,2,5,1,9,8};
printf("The original array is:\n");
for(i = 0;i < 7;i++)
{
printf("%5d",a[i]);
}
printf("\n");
printf("The reverse array is:\n");
for(i = 6;i >= 0;i--)
{
printf("%6d",a[i]);
}
printf("\n");
}
运行结果:
【程序41】
题目:学习static定义静态变量的用法
这里静态变量的作用就是会一直保存每次执行自增的值,实现累加,普通变量就会被置为0
#include <stdio.h>
varfunc()
{
int var = 0;
static int static_var = 0;
printf("var equal %d \n",var);
printf("static var equal %d \n",static_var);
printf("\n");
var++;
static_var ++;
}
int main(int argc, char* argv[])
{
int i;
for(i = 0;i < 3;i ++)
{
varfunc();
}
}
运行结果:
【程序42】
题目:学习使用auto定义变量的用法
这里auto的作用就是保证数值不变。
#include <stdio.h>
int main(int argc, char* argv[])
{
int i,num;
num = 2;
for(i = 0;i < 3;i++)
{
printf("The num equal %d \n",num);
num ++;
{
auto int num = 1;
printf("The intenal block number qual %d\n",num);
num ++;
}
}
}