Tips:
int a[10]; 定义数组,指定数组包含10个元素
t=[6]; 引用a数组中序号为6的元素
比较大的数组要定义在函数外面,const int N =1e6+5;int a[N];
#include
int main()
{
int a[10];//定义数组
for(int i=0;i<=9;i++){//对数组元素a[0]~a[9]赋值
a[i]=i;}
//或者这样 int a[10]={0,1,2,3,4,5,6,7,8,9};
for(int i=9;i>=0;i--)//输出a[9]~a[0]共10个数组元素
{
printf("%d ",a[i]);
}
return 0;
}
#include
int main()
{
int a[10];//定义数组
for(int i=0;i<=9;i++)
{
scanf("%d",&a[i]);//对数组赋值
}
for(int i=0;i<=4;i++)
{
int t=a[i];//通过变量t实现a[i]和a[9-i]交换
a[i]=a[9-i];
a[9-i] = t;
}
for(int i=0;i<10;i++)//输出a[0]~a[0]十个数组元素
{
printf("%d ",a[i]);
}
return 0;
}
#include
int main()
{
int a[105],n=0;//有时难以精确计算所需要的数组大小,数组声明应该稍大一些
while(~scanf("%d",&a[n])){
n++;//用这种方式可以知道数组中元素个数
}
for(int i=n-1;i>=0;i--)//实现a[i]到a[0]输出
{
printf("%d ",a[i]);
}
return 0;
}
这样写是错的,想知道个数就得先scanf a[0],而输入数据又需要使用循环(用到n)
输入:1 2 3 1
输出:1 2 3
#include
int main()
{
int n,a[1005];
scanf("%d",&n);
int f=0;
for(int i=0;i
原来是这样写的 两个错误 一是应该当数据全部输入结束再进行比较(第一个for循环的后一个花括号位置放错了
二是j的初始条件写错了 int j=1的话 当i的值变成了1时 a[i]和a[j]一定相等
应该是和a[i]后一个数字比较 int j= i+1;
#include
int main()
{
int n,a[1005];
scanf("%d",&n);
int f=0;
for(int i=0;i
输入:2(个数)1 2 2(最后一个是指定数据项)
输出:Yes
#include
int main()
{
int n,a[25],s,i;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&a[i]);
}
int x;
scanf("%d",&x);
int f =0;//为假
for(int i=0;i<=n-1;i++)//一定要有这一步 才能使x一个一个比对过去
{
if(x==a[i])
{
f=1;break; }//一定要break 查找到了就不要继续下去了!!!!!!!
}
printf(f?"Yes":"No");//f是否为真
return 0;
}
最后一步不能像下面这样写
for(i=0;i<=n-1;i++)
{
if(x==a[i])
{
printf("Yes");
break; }
else{
printf("No");//这样写的话 每次查找不到就会输出一个no
}
题目:给4,2,8,5,7,1按从小到大排序输出
举例: 2 3 5 1 6 4
第一次:1 3 5 2 6 4
第二次:1 2 5 3 6 4(而不是1 2 3 5 6 4
第一个数跟后面所有的数比,最小的放在第一个。第二个再跟后面所有的数比,最小的放在第二个。
输出最小数的序号
#include
int main()
{
int a[]={4,2,8,5,7,1};
int n= sizeof a / sizeof a[0];//计算数据个数
int m= 0,i;
for(i=0;ia[i])//最小的放在初始位置
{
m=i;
}
}
printf("%d",m);
}
看n个数,k趟选择排序后的结果:
#include
int main()
{
int i,n,k,a[1005];
scanf("%d %d",&n,&k);
for(i=0;i
完整代码(绝对值比较,并且输入0时数据输入结束)
#include
#include
int main()
{
int i,n,a[1005];
while(~scanf("%d",&n)&&n!=0){
for(int i=0;i
如果是要求输出每趟排序并且排序完成即结束循环
#include
int main()
{
int n,a[105];
scanf("%d",&n);
for(int i=0;ia[j]){
m=j;
}
}
if(m!=i){
int t=a[m];
a[m]=a[i];
a[i]=t;
}
else{
continue;
}
for(int k=0;k
第一个数和第二个数比较,若逆序则交换;(前面的数字交换了以后再与下一个数比较,逆序则交换,直到最大的数到了最后一个位置。 例:4 2 8 5 7 1
比较次数 (n-1-i) i初始值为0
第一次:2 4 5 7 1 8 6-1-0次
第二次:2 4 5 1 7 8 6-1-1次
第三次:2 4 1 5 7 8
第四次:2 1 4 5 7 8
第五次:1 2 4 5 7 8
#include
int main()
{
int a[]={4,2,8,5,7,1};
int n = sizeof a /sizeof a[0];
int i;
for(i=0;ia[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[1+j]=t;
}
for(i=0;i
在两两交换过程中可能已经排好序了,如何优化呢?
(第二行
for(i=0;ia[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[1+j]=t;
f=1;//说明数据已经换好了
}
if(f==0) break;//上一步if不成立 f数值不改变
}
如果要求输出每趟并且排序完立刻结束:
#include
int main()
{
int n, a[105];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n - 1; i++) {
int f = 0;
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
f = 1;
}
else{
continue;
}
}
if(f==0)
{
break;
}
for (int k = 0; k < n - 1; k++) {
printf("%d ", a[k]);
}printf("%d\n", a[n - 1]);
}
return 0;
}
如果是n个数排序呢?
#include
int main()
{
int i,n=0,a[105];
while(~scanf("%d",&a[n])){
n++;//*****very important//主要是这一步
}
for(i=0;i
右图中的错误就是 没有给i初始值 这样系统会随机给初始值
可以看出循环k次时的数据 (中间输出)
#include
int main()
{
int i,n,k,a[1005];
scanf("%d %d",&n,&k);
for(i=0;ia[j+1])//漏写了这一步!!!!!
{
int t=a[j];
a[j]=a[j+1];
a[1+j]=t;
}
}
}
for(i=0;i
要求:输入数据有多组,每组的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,所有的数的绝对值都不相等。
#include
#include
int main()
{
int a[105],n,i;
while(~scanf("%d",&n)&&n!=0){//注意这个花括号从哪到哪
for(i=0;i
将一组数据按奇偶分两行输出 如图所示
会发现使用一个数组很难实现先输出奇数行 再换行 再输出偶数行
#include
int main()
{
int a[105],n,m=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(i%2==1){
printf("%d ",x);//第奇数个直接输出
}
else{
//第偶数个数输出时 从a[0]开始 第二个数是a[0]第四个数是a[1]
a[m]=x;
m++;
}
}
printf("\n");
for(int i=0;i
输入偶数个数字 第一个和最后一个一起输出 第二个和倒数第二个一起输出
#include
int main()
{
int n,a[55],i;
scanf("%d",&n);
for(i=0;i