如果说给定一个数组arr【5】={1,2,3,4,5};
要求打印格式为(1 2 3 4 5)要求每个数之间一个空格,末尾没有空格,那么怎么打印呢?
经过思考,我们可以用以下的方法(方法一)
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d", arr[i]);
if (i < 4)
{
printf(" ");
}
}
return 0;
}
又或者这样写(方法二)
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
printf("%d", arr[0]);
for (i = 1; i < 5; i++)
{
printf(" %d", arr[i]);
}
return 0;
}
由或者这样写(方法三)
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
int flag = 0;
for (i = 0; i < 5; i++)
{
if (flag)
{
printf(" ");
}
printf("%d", arr[i]);
flag++;
}
return 0;
}
方法的描述很简单,那么我们进入实战练习以下;
先看题目题目要求最后的打印就是要求的格式特殊,就是末尾没有空格;我们先不讨论本题的思路先只考虑打印达到题目要求,代码如下
#include <stdio.h>
int main()
{
int a = 0, b = 0; int i = 0;
while (scanf("%d %d", &a, &b) != EOF)
{
int j = 0;
for (j = a; j <= b; j++)
{
int m = 0;
for (m = 2; m <= j / 2; m++)
{
if (j % m == 0)
{
break;
}
}
if (m == j / 2 + 1)
{
printf("%d ", j);
}
}
printf("\n");
}
return 0;
}
运行出来显然不符合题目要求的格式打印每一行都多一个空格,那么我们就需要利用我们上面的办法进行限制从而达到要求,那么我们选那种方式呢?
本题时循环挨个查看是否为素数,如果是素数,那么就立刻打印出,查找完后,我们无法确定有多少个素数,那么方法一就不可取,方法二其实也是不可取的,这里不多解释,对于方法三我们进行以下约束
只需进行如下改动便可
正确
换行打印也是同理,举个(与方法三一个道理)
题目:
本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。
冒泡排序的算法步骤描述如下:
第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];
第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];
……
第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];
……
第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
5
8 7 6 0 1
输出样例:
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8
代码如下
这个代码也是打印格式特殊