抛开窗体和控件从VB到C语言

VB和C语言应用上的不同和区别

  • 通过简单算法观察运行速度
    • 排序在不同语言的表现
      • 二分法查找
  • 编程语言的本质
    • 面向过程的c
      • 可视化面向对象的vb

Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。是一种可用于微软自家产品开发的语言。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

  1. VB做为一门简单的,极易上手的语言,其如今地位在各大高级语言的碰撞下,Basic语言基本没什么用了,但用于新手入门,它仍然在部分中小学生的教育中发挥了重大作用,浙江省的高考中也是将技术纳入其中,而VB的编程题在其中占了很大的比重。
  2. 而c语言作为开发比较底层的语言,是计算机程序语言的基础,学好C语言对你今后学习JAVA、C++、VB等可以打下良好的基础,因为这些语言大部分都是由C语言扩充或衍生而来的。所以说c语言在大学于计算机相关的专业中也是必修的课程。
  3. 从 VB转到学习c语言,了解底层算法的共通性,以及面对不同对象的作用,有利于增加我们对学习计算机的热情。

下面从两大方面来介绍两种语言的不同和优劣。

通过简单算法观察运行速度

  • 算法以及数据结构是学习任何计算机语言都必须的一门知识。下面通过简单的排序算法和二分法查找去了解在不同语言下的优缺点。

排序在不同语言的表现

  • 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 - 1For 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
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
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在微软宣布停止更新后,很显然它在运行速度上未来会和其他语言有更大的差距。

二分法查找

  1. 接下来让我们在简单介绍下两种语言的二分法查找

VB

抛开窗体和控件从VB到C语言_第1张图片
1. key的赋值已在前文代码中提到,运用了val函数。而后面的Text1.Text则是控件的类别和名称。
2. 对分查找便是在一串数据中以最快的方法找到key这个数。
3. 对于本题感兴趣的也可以研究一下,出自浙江2021年一月选考技术。
c语言

#include 
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到C语言_第2张图片
  • 很显然,c语言是基于算法,函数,数据流图,伪代码…通过这些借助自身的思维来解决问题。

可视化面向对象的vb

  • vb是可视化的面向对象的编程语言,可视化在于它有丰富的工具可以用来使用,初学者就可以通过VB做到各种小程序的设计。而对于C语言中要简单的用代码在黑框框中实现扫雷这种小程序往往需要几百行的代码。
    抛开窗体和控件从VB到C语言_第3张图片
    通过上面的了解我们大致弄清楚了VB的作用,以及优缺点,同时也过渡到了更为高级的C语言。从VB学习进入到C语言,看似舍弃了一些极为有用的控件,但这也是向更高级程序员进步的一条道路。我们在C语言的磨砺中会更了解计算机语言,再上一层楼。

你可能感兴趣的:(c,c++,算法,数据结构)