admin管理员组文章数量:1794759
抛开窗体和控件从VB到C语言
VB和C语言应用上的不同和区别
- 通过简单算法观察运行速度
- 排序在不同语言的表现
- 二分法查找
- 编程语言的本质
- 面向过程的c
- 可视化面向对象的vb
下面从两大方面来介绍两种语言的不同和优劣。
通过简单算法观察运行速度- 算法以及数据结构是学习任何计算机语言都必须的一门知识。下面通过简单的排序算法和二分法查找去了解在不同语言下的优缺点。
- VB体系下的冒泡和选择排序
冒泡排序
Const n As Integer = 100 "类似于c语言中的int类型的常量 Dim i As Integer, j As Integer Dim Arr(1 To n) As Integer "arr是一个长度为n的数组,VB中运用上下界控制数组长度 " 这里给Arr数组随机赋值,代码略. "注意,在VB中通过控件输入的值都是字符类型(该类型在c语言中直接没有,可以用字符串数组来代替),需要将他们通过val函数转变成(数值)。同理输出是需要用str函数把数值在转变成字符。 For i = 1 To n - 1 " 这是外循环, 控制遍历检查的趟数, 这里走 N - 1 遍 For j = 1 To n - i " 这是内循环, 控制每趟检查的次数, 这里走 N - i 遍, 因为上一次的状态下已经有 i 个数排好了, 还有 N - i + 1 个数需要被检查 If Arr(j) > Arr(j + 1) Then " 这是负责检查的If语句,它的运行的次数也就是上文提到的执行次数 Swap(Arr(j), Arr(j + 1)) " 交换,它运行的次数是上文提到的交换次数 End If Next j Next i "Next End 为判断和循环结束的标志 Sub Swap(X1 As Integer,X2 As Integer)"同样需要对函数传入参数,格式也类似 X1 = X1 - X2 X2 = X2 + X1 X1 = X2 - X1 End Sub " 采用加减法交换的 过程(Sub) , 暂且可以理解为没有返回值的交换函数(Function) " 此冒泡运行时,总是将最大的数字往后丢 "也可以用function自定义函数写,类似c语言中自己写的函数选择排序
Const n As Integer = 100 Dim i As Integer , j As Integer, max As Integer Dim Arr(1 To n) As Integer " 这里给Arr数组随机赋值,代码略. For i = 1 To n - 1 max = i " 定义了一个变量max,用来标志本次循环最大的数. 首先默认置为当前位, 即 i For j = i + 1 To n If Arr(j) > Arr(max) Then max = j " 如果发现有个数比下标为max的元素大时, max下标就该指向那个数, 也就是赋值它的下标 End If Next j If max <> i Then Swap(Arr(i),Arr(max)) " 当max不等于原下标时, 说明最大值是另一个数, 交换 End If Next i Sub Swap(X1 As Integer,X2 As Integer) X1 = X1 - X2 X2 = X2 + X1 X1 = X2 - X1 End Sub " 该选择运行会把大的数往后丢了解过c语言的很明显就能看出在For循环和If判断语句中,两种语言有异曲同工之妙。
- C语言下的冒泡和选择
冒泡排序
#include<stdio.h> int main(void) { int n,i,t,tmp; scanf("%d", &n); int a[10]; for (i = 0;i < n;i++) { scanf("%d", &a[i]); } int m = n-1; for (i = 0;i < n ;i++) {//做n遍 for (t = 0;t < m;t++) {//每一遍都会搜索到m-1项 if (a[t] > a[t + 1]) { tmp = a[t]; a[t] = a[t + 1]; a[t + 1] = tmp; } //前一项和后一项进行比较,递增 } } for (i = 0;i < n;i++) { printf("%d ", a[i]); } }选择排序
#include<stdio.h> int main(void) { int a[10]; int n,i,min,t,tmp; scanf("%d", &n); for (i = 0;i < n;i++) { scanf("%d", &a[i]); } for (i = 0;i < n-1;i++) { min = i;//把每轮无序区的第一个设定成最小值 for (t = i + 1;t < n;t++) { if (a[t] < a[min]) min = t;//所有数和最小值比较,更小则把当前的t放入min中 } if (a[i] != min) { tmp = a[i]; a[i] = a[min]; a[min] = tmp;//一遍后把最小值放到有序区的末尾 } } for (i = 0;i < n;i++) { printf("%d ", a[i]); } }- 既然很明显他们的算法都是相同的,那在不同语言下程序的运行又有什么不同的表现呢?
- VB在解释性执行时速度很慢,相对于C语言,它不是等编译器把所有程序语句都编译以后再执行,而是读一句,编译一句。因此在速度上比c语言慢上了一大截。
- 除此之外,VB在微软宣布停止更新后,很显然它在运行速度上未来会和其他语言有更大的差距。
VB
1. key的赋值已在前文代码中提到,运用了val函数。而后面的Text1.Text则是控件的类别和名称。 2. 对分查找便是在一串数据中以最快的方法找到key这个数。 3. 对于本题感兴趣的也可以研究一下,出自浙江2021年一月选考技术。 c语言
#include <stdio.h> int main() { int key ;//要在数组中寻找的数 int i,n;//n为该数组的长度 scanf("%d %d",&n, &key); int arr[10]; for (i = 0;i < n;i++) { scanf("%d", &arr[i]); } int length = sizeof(arr) / sizeof(arr[0]);//数组的长度 int low = 0; int high = length - 1; while (low <= high) { int mid = (low + high) / 2;//对分查找每次从中间mid开始 if (arr[mid] > key) { high = mid - 1; } else if (arr[mid] < key) { low = mid + 1; } else { printf("找到了"); break; } } if (low > high) printf("没在数组中找到该数"); return 0; } 编程语言的本质- 根据初步的了解我们知道了他们的共同处,但很明显,他们所使用的领域是由区别的。
- 面向过程是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
- 很显然,c语言是基于算法,函数,数据流图,伪代码…通过这些借助自身的思维来解决问题。
- vb是可视化的面向对象的编程语言,可视化在于它有丰富的工具可以用来使用,初学者就可以通过VB做到各种小程序的设计。而对于C语言中要简单的用代码在黑框框中实现扫雷这种小程序往往需要几百行的代码。 通过上面的了解我们大致弄清楚了VB的作用,以及优缺点,同时也过渡到了更为高级的C语言。从VB学习进入到C语言,看似舍弃了一些极为有用的控件,但这也是向更高级程序员进步的一条道路。我们在C语言的磨砺中会更了解计算机语言,再上一层楼。
版权声明:本文标题:抛开窗体和控件从VB到C语言 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686887073a114498.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论