一.raptor的使用
raptor的一个页面
1.赋值
变量:可以用理解数学中的自变量的方式去理解,它是可以随时改变的,赋值就是将一个数字赋给变量,变量必须是字母。
其中第一个框应该输入变量如这里的i,第二个框应输入数字,如这里的1。
2.输入
输入提示(第一个框):需要用英文引号括起来,输入提示顾名思义就是在程序运行起来后提示用户需要输入数据了,如这里输入的"please input"。
输入变量(第二个框):你需要填入一个变量,用于储存程序运行到此处后你所输入的数据,如这里的输入n。
那么程序运行到此处后会跳出:
3.循环
循环语句只需要填一个框,为循环退出的条件如:
注意:循环语句使用一般需要加入循环调整,要不然会近入死循环如:
4.输出
输出框内填入的数据用双引号括起来,运行时系统会把里面的内容直接输出,即上图一会输出i。而不加双引号(只有变量才可以该操作)系统会把它转换为对应的数据输出,那么上图二会输出1。
5.选择
选择语句向框内填入条件,满足条件向yes方向执行,不满足则向no方向执行。
用一上五个语句我们可以完成一个输出1到50以内的偶数
在程序语言中“=”表示赋值,“==”表示等于,然后这里“i%2”表示i除以2的余数。
6.调用
如果把所有内容写在一个图里是很繁杂的,我们需要多个图来写,就有了主图和子图,而调用就是把子图与主图之间联系起来。调用的框内只需要填入子图的名称。
二.排序问题
简介:排序顾名思义就是把混乱数据变得有序,接下来讲的排序是按大小关系来排(不是所有排序都是按大小顺序的标准)。要把一个数据从小到大排列,那就避免不了判断大小,这个不像我们小学做数学题一样扫一眼就能写出来,要知道在程序中一次只能比较两个数的大小,也许我们会3个数的排序的程序,那么4个,10个,20个甚至更多呢,那么要把一个数据有序的排列起来就需要一定的技巧。
实现:
1.首先我们需要一个主图用来产生随机数,其中a[i]是一个数组相当于数学中的数列,它用来存储产生的随机数,i 就是它的下标。floor(random*100+1)的作用是产生1到100的随机数。然后我们来给a数组中的这些随机数排序。
输出子图:
下面三种排序的主图和输出子图都是一样的,只是中间的排序子图不同,运用了三种方法。
1.冒泡排序
- 从数组a的第一个元素开始,依次往后读取a中的各个元素。
- 对每两个相邻的元素进行比较,如果当前元素大于下一个元素,则执行交换操作。
- 经过这一步,最大的元素会被放置在数组的最后位置。
- 然后重新从数组的头部开始新一轮的比较,这次只比较剩余的元素,在剩余元素中找到最大的元素放在倒数第二的位置。
- 当所有的元素都经过至少一次的比较后,冒泡排序过程完成。此时,数组中的元素是按照从小到大的顺序排列的。
动画图:
raptor图:
c代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[10],t;
srand((unsigned int)time(NULL));
for (int i = 0; i < 10; i++)
{
a[i] = rand() % 100 + 1;
printf("%d ", a[i]);
}
printf("\n");
for (int i = 0; i < 9; i++)
{
for(int j=0;j<9-i;j++)
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
2.简单选择排序
从所有个元素中找出最小的元素与第一个元素交换,那么现在第一个是有序,我们从第二个开始找,找到最小的一个与第二个元素交换,现在前两个就是有序的了,以此类推循环下去直到进行到最后一个这串元素就排好了。
动画图:
raptor图:
c代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int a[10],t;
srand ((unsigned int)time(NULL));
for (int i = 0; i < 10; i++)
{
a[i] = rand() % 100 + 1;
printf("%d ", a[i]);
}
printf("\n");
for (int i = 0; i < 9; i++)
{
for (int j = i + 1; j < 10; j++)
{
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for (int i=0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
3.插入排序
首先认为第一个数是有序的,然后从第二个数开始与前一个比较,并排好序,然后接着第三个与前面排后序的从后往前逐个比较,找到适当的位置(大于前一个,小于后一个)并插入,以此类推,直到最后一个,就可以排好了
动画图:
raptor图:
c代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int a[10], t;
srand((unsigned int)time(NULL));
for (int i = 0; i < 10; i++)
{
a[i] = rand() % 100 + 1;
printf("%d ", a[i]);
}
printf("\n");
for (int i = 1; i < 10; i++)
{
if (a[i] < a[i - 1])
{
int t = a[i];
int j = i - 1;
for (j=i-1;j>=0&&t<a[j];j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
三.二分法查找
简介:
在做一些数据处理的时候可能需要查找是否存在某个数,而当这些数是有序排列的时候用二分查找是很高效的,而且也比较简单。二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素。
注意:这里查找指的是查找一个数所在数组的下标位置。
实现:
这种方法是通过将目标元素和查找范围的中间值做比较(如果目标元素=中间值,查找结束),通过做比较将目标元素分到较大/或者较小的一组。从而将查找范围缩小一半。重复多次,直到目标元素=新的范围的中间值,查找结束。
1.主图
2.子图
c代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int k, a[10] = { 2,3,5,6,9,13,18,20,29,30 };
scanf("%d", &k);
int left = 0, right = 9;
int m = (left + right) / 2;
while (a[m] != k && left < right)
{
if (a[m] < k)
{
left = m + 1;
}
else
{
right = m - 1;
}
m = (left + right) / 2;
}
if(a[m]==k)
{
printf("%d",m);
}
else
{
printf("NO");
}
return 0;
}