关于纯c语言实现的改进暗通道去雾算法测试程序的信息

想了解C语言,求指导

C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。

C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,Turbo C等等……

[编辑本段]C语言的发展历史

C语言的原型ALGOL 60语言。(也称为A语言)

1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。

1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。

1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。

而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。即是著名的ANSI C。

1978年由美国电话电报公司(ATT)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《KR》,也有人称之为《KR》标准。但是,在《KR》中并没有定义一个完整的标准C 语言,后来由美国国家标准协会(American National Standards Institute)在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。

1988年,随着微型计算机的日益普及, C语言出现了许多版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。

[编辑本段]C语言的优点

1. 简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。

2. 运算符丰富

C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

3. 数据结构丰富

C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

4. C是结构式语言

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

5. C语法限制不太严格,程序设计自由度大

虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。

6. C语言允许直接访问物理地址,可以直接对硬件进行操作

因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。

7. C语言程序生成代码质量高,程序执行效率高

一般只比汇编程序生成的目标代码效率低10へ20%。

8. C语言适用范围大,可移植性好

C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。

[编辑本段]C语言的缺点

1. C语言的缺点主要是表现在数据的封装性上,这一点使得C在数据的安全性上做的有很大缺陷,这也是C和C++的一大区别。

2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

[C语言指针]

指针就是C语言的一大特色,可以说C语言优于其它高级语言的一个重要原因就是因为它有指针操作可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性。

[编辑本段]C源程序的结构特点

1.一个C语言源程序可以由一个或多个源文件组成。

2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。

4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

[编辑本段]学习C语言

在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?

学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。

那么,我们如何学好《C程序设计》呢?

一.学好C语言的运算符和运算顺序

这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。

先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序.

二.学好C语言的四种程序结构

(1)顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

例如;a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。

(2) 分支结构

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。

学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。

①if(条件)

{分支体}

这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x=0时,其绝对值不变,而x0时其绝对值是为x的反号,因此程序段为:if(x0) x=-x;

②if(条件)

{分支1}

else

{分支2}

这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根

分析:因为当b^2-4ac=0时,方程有两个实根,否则(b^2-4ac0)有两个共轭复根。其程序段如下:

d=b*b-4*a*c;

if(d=0)

{x1=(-b+sqrt(d))/2a;

x2=(-b-sqrt(d))/2a;

printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);

}

else

{r=-b/(2*a);

i =sqrt(-d)/(2*a);

printf(“x1=%8.4f+%8.4fi\n”r, i);

printf(“x2=%8.4f-%8.4fi\n”r,i)

}

③嵌套分支语句:其语句格式为:

if(条件1) {分支1};

else if(条件2) {分支2}

else if(条件3) {分支3}

……

else if(条件n) {分支n}

else {分支n+1}

嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。

④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。

(3)循环结构:

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do ?Cwhile循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。

在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。

顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。

(4)模块化程序结构

C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。

三.掌握一些简单的算法

编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义

结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学

C源程序的关键字—————————————————————————————

所谓关键字就是已被C语言本身使用, 不能作其它用途使用的字。例如关键字不能用作变量名、函数名等

由ANSI标准定义的C语言关键字共32个 :

auto double int struct break else long switch

case enum register typedef char extern return union

const float short unsigned continue for signed void

default goto sizeof volatile do if while static

根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。

1 数据类型关键字

A基本数据类型(5个)

void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果

char :字符型类型数据,属于整型数据的一种

int :整型数据,通常为编译器指定的机器字长

float :单精度浮点型数据,属于浮点数据的一种

double :双精度浮点型数据,属于浮点数据的一种

B 类型修饰关键字(4个)

short :修饰int,短整型数据,可省略被修饰的int。

long :修饰int,长整形数据,可省略被修饰的int。

signed :修饰整型数据,有符号数据类型

unsigned :修饰整型数据,无符号数据类型

C 复杂类型关键字(5个)

struct :结构体声明

union :共用体声明

enum :枚举声明

typedef :声明类型别名

sizeof :得到特定类型或特定类型变量的大小

D 存储级别关键字(6个)

auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配

static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数

extern :指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用”

const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)

volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

2 流程控制关键字

A 跳转结构(4个)

return :用在函数体中,返回特定值(或者是void值,即不返回值)

continue :结束当前循环,开始下一轮循环

break :跳出当前循环或switch结构

goto :无条件跳转语句

B 分支结构(5个)

if :条件语句

else :条件语句否定分支(与if连用)

switch :开关语句(多重分支语句)

case :开关语句中的分支标记

default :开关语句中的“其他”分治,可选。

C 循环结构(3个)

for :for循环结构,for(1;2;3)4;的执行顺序为1-2-4-3-2…循环,其中2为循环条件

do :do循环结构,do 1 while(2); 的执行顺序是 1-2-1…循环,2为循环条件

while :while循环结构,while(1) 2; 的执行顺序是1-2-1…循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

评论|给力3不给力0

说句实在话,如果你想依靠程序设计为今后工作打基础或者想从事程序设计方面的工作的话,现在已经晚了点了。

如果你不想从事计算机工作,那么学这些也没有什么用,不会对你的毕业就业有什么作用。

如果你是想从事计算机程序设计工作的话,你有几种现在可以选择的道路。

1、学习简单的程序设计语言VB,然后学VB.net,这种计算机语言比较简单,学起来快,如果你C语言学的好的话,1个月就能把这些语言学的差不多,至少可以做点东西了。但现在需要VB人才的不多。

2、学习C++/C#/Java,这些语言要的人多,但学习周期长,你想在短时间内学好,是不太现实的,如果你打算走这条路,那就要做好持久战的准备,毕业也未必能马上找到合适的工作。

从我自己的角度来说,如果你学习C++的话,可能要学半年(我是在大学里自学的,花了半年,现在还在学,因为C++确实比想象的要复杂的多),光学C++是没有用的,你必须要会主流的编译器VC++或VS,当然还有别的选择,但就现在看,很多公司需要这些的。这个学习有牵涉到Windows程序设计、Win32 API、MFC,学习这些至少要2-3年,所以,说实在的,这是个持久战,除非你不打算深入学习,如果是这样,你也没有必要去学习C++。

或许你可以学习Java或C#,这些在语法上和C比较类似,但他们是面向对象的,你没有这样的基础,学起来也可能要比较长的时间。

说句实在的话,如果你对程序设计没有兴趣,或你不打算从事这个行业,呢就别学了,因为他对的今后的工作没有什么帮助。你要考虑的是你将来到底要干什么工作?你的发展方向是什么?毕业后是什么打算?学什么才对你未来发展有帮助?这些问题才是你的当务之急。

关于纯c语言实现的改进暗通道去雾算法测试程序的信息

MATLAB代码 求分析 何的去雾算法里面的暗通道算法 每一句都是什么意思啊?又分别对应论文里的什么原理?

function dark = darkChannel(imRGB)

r=imRGB(:,:,1);

g=imRGB(:,:,2);

b=imRGB(:,:,3); 分别提取三色的灰度图

[m n] = size(r); 提取单色图矩阵的宽度和长度

a = zeros(m,n); 创建m*n的零矩阵a

for i = 1: m

for j = 1: n

a(i,j) = min(r(i,j), g(i,j));

a(i,j)= min(a(i,j), b(i,j)); 依次比较三色分量的最小值提取为暗通道图

end

end

d = ones(15,15); 创建15*15的单位矩阵

fun = @(block_struct)min(min(block_struct.data))*d;

dark = blockproc(a, [15 15], fun); 将图片分成15*15的小块并将每一块变成其中的最小值

dark = dark(1:m, 1:n);

我也是新手啊兄弟只能帮你到这儿了

为什么c语言是高级程序

Microsoft公司的Visual C++是个信号,C++语言开始取代C语言,这可能已成必然趋势。在此之前,高级语言的编译软件开发公司例如Microsoft和Borland所开发出来的MS C/C++7.0,BC/C++ 3.0、4.0等都同时包含两个编译器,C编译器和作为语言扩集的C++语言编译器,两种编译器经过一个此消波长的竞争过程,最后是C++占了上风,越来越多的用户选择了C++语言,这可能将成为最重要的、最受欢迎的软件开发语言。 C语言是一个成功的语言 如果C++语言真能取代C,首先应归功于它是作为C语言的扩展而出现,这一点使得C的设计者和大批以C为主要开发工具的程序员能够接受C++。换句话说,C++的成功是在C的成功基础上实现的。 尽管大多数程序设计方法学和程序设计语言专家对C语言一直持保留态度(他们对C语言的批评是有根据的),但C语言在过去的十几年中成功地在软件开发领域占据主导地位却是个事实。C语言的成功并非偶然。 C语言与Pascal大致产生于同一时期,它接受了结构程序设计的思想,有比较现代的数据结构和控制结构,这一点使得它不但相对于低级语言,而且相对于某些同样有强大生命力的高级语言,如Fortran、Basic等也具有一定的优势。目前在国内外,采用Basic或Fortran语言编程的确实大有人在,不过使用这类语言的多数都是具有计算机专业以外的其它专业背景的编程人员,他们所编的程序一般规模较小,主要是难度较低的应用软件开发。 C语言的”类汇编语言”特征,例如它的位操作和直接访问内存地址以及CPU寄存器的能力,使得人们称它为”中级语言”,不过这一点却奠定了它在系统软件开发中不可替代的优势地位。虽然Pascal语言也可以胜任编译系统的编程,但从编程手段来看显然弱于C。另一方面,C语言的出现,大大降低了汇编语言在系统软件开发领域的重要性,用C语言编程比汇编语言效率高得多,而目标代码质量也完全可以接受。 C语言程序简洁,目前已形成了一种独特的C程序员引以自豪的风格。造成C程序简短、高效、巧妙、精致(当然有时也很难读)的原因是C的一些独有的语法特征,例如: C语言不像Pascal语言那样设独立的布尔类型,使布尔表达式的逻辑值与整型、浮点型和字符型的数值相混淆; C语言虽然分别设置了整数类型和字符类型,但在实际运行中这两种类型的数据却几乎完全通用; C语言的重复控制结构,特别是for语句具有极大的灵活性,有时令人眼花缭乱; C语言提供了大量的运算符,特别是那些包括多种操作含意的综合运算符(例如,运算符”++”就包含着三种操作含义); C语言提供了多种指针(如变量指针、文件指针、函数指针等)及指针丰富的运算能力; C语言为程序员提供了可直接干予内存分配等系统功能的手段,等等。 这些特征一方面使得人们感到C语言难于掌握,但也使得那些深谙其中奥妙的C程序员感到用任何其它语言都难于写出C语言程序的那种风格和”味道”。 C语言的设计极为重视易于编译实现。一般编译系统的质量主要由三项指标来衡量,即编译时间、执行文件长度和执行速度。 这三项指标中第一项是编译的代价,第二、三项则代表目标代码的质量,二者是矛盾的对立面。不过相对于其它高级语言的实现来说,C编译器在三个方面都是令人满意的。大多数坚持采用C语言的软件开发公司的主要理由是:C程序的目标代码质量接近于汇编结果。 在C语言的成功过程中,除了技术因素之外还有一种心理因素在起作用。C和Pascal虽然产生于同一时期,然而其产生背景却不相同,Pascal可以说是以Digkstra、Hoare、Wirth等人为代表的”结构程序设计”思想的 充分体现,其重要的观点之一是宁可牺牲一部分效率,也要保证程序的正确和可靠性,无疑这种思路是正确的,然而,明智的程序设计语言的设计者与聪明的程序设计者的想法是不一致的。前者必须假定使用语言的程序员只有一般的能力,通过规范化的语言规则保证程序统一的结构,因为这样有利于易读、可靠、不易出错和便于连接。然而对于水平较高的程序员来说,这样的程序好象是八股文味的公文,冗长、乏味,无法显示自己的才华,无法利用自己关于系统的知识,C语言是程序员自己设计的语言,虽然它不很”高级”,不很”结构”,但它反映了能力强的程序员的心态和要求,采用C语言编程反而成了编程水平高的某种象征。 高级语言的升级换代 高级程序设计语言已经经历了几代的发展过程,随着软件开发的规模越来越大,功能越来越复杂,语言本身也在不断地改进和完善,以适应飞速发展的计算机科学与计算机产业的需要。 笔者认为,高级程序设计语言的改变可以分为三个阶段,即初期阶段、结构程序设计阶段和面向对象程序设计(OOP)阶段。目前则正处于后两个阶段的过渡时期。 高级语言的初级阶段实际上是从低级语言(机器语言和汇编语言)向高级语言的过渡,其代表是第一个高级语言Fortran语言,初期高级语言中的问题是表达式处理,这一点从Fortran名称的含义(FORmula TRANsformation language)可以看出,Fortran、Basic语言引入了变量、表达式、语句等概念,由于当时计算机应用的重点是数值计算,所以它与低级语言的主要区别也体现在表达式计算的自动处理上,而且把表达式的计算进一步引入到重复语句的控制和数组下标,更体现出”高级”编程的特征。早期的高级语言已经有子程序的概念,但应该说它们还只是”萌芽”状态的函数和过程,到结构程序设计阶段,语言中的函数和过程是最重要的设施。 第二阶段我们称之为结构程序设计阶段,结构程序设计语言的主要特征就是两点,一个是清清楚楚的数据类型说明和检查,另一个是以过程和函数为主要形式的层次编程方法。它强调的是程序自身的结构。其代表语言首先当推Pascal语言。 有了高级语言,才有了大量比较大规模程序编制的需要,其中高级语言的编译系统本身也是一种大规模程序。面对大程序的设计,初级阶段的高级语言及其编程方法不适应了,于是,60年代末的”软件危机”出现了,由Digkstra发起的”Goto语句有害”的讨论导致了Pascal、C等语言和软件工程思想及结构程序设计方法。当代的大多数程序员都是在这样的理论指导下培养出来,并创造了当今软件产业如此辉煌发展的局面。也可以说结构程序设计语言及其设计方法学,是初期阶段高级语言产生后发展的必然的、合乎逻辑的结果。 在这一时期,可以说从开始就已经孕育着一些向下一阶段发展的原始思想。例如,在C和Pascal语言中,允许把函数或过程像数据那样作为函数或过程的参数来处理。而ALGOL68、Simula67、Modula-2等语言也设置了类(class)或类似的语法成分。在数据和函数(过程)组成的模块之间由”移入表”、”移出表”来规定相互间的调用关系。在Kanth、Aho、Hopcroft、Ullman等人的数据结构与算法文献中,明确指出抽象数据类型的概念,这些都是OOP的原始思想。 以面向对象程序设计(OOP)为主要特征的第三阶段,可以认为是程序设计方法学发展的成熟期,公认的第一个面向对象语言是Smalltalk。以类(class)和对象(object)为主要语法成分,从抽象数据类型的思想出发,把数据和代码作为一体封装,如同客观事物的物质存在和它的行为功能形成的一个统一体,这样的对象之间的继承关系及行为描述的多态性,构成了OOP的基本特征。 目前,面向对象设计技术已从方法学的研究领域进入软件产业界的实际开发环境,它已不仅是一种玄妙的理论,而成为程序员必须掌握的技术。 虽然,Smalltalk最早为人们所接受,有些报导认为这种语言已为许多用户掌握和使用,然而实际的情况是,能够取代C语言,并可以成为主要软件开发语言的只能是C++。 以改良的方式实现语言的升级换代早已不是新鲜事。加强了数据类型概念和过程函数功能的Fortran、Basic的一些新版本;带有类和对象的Pascal语言(如Turbo Pascal 5.5,6.0版本)等都是按照这种方式开发出的新成果。但与C++语言相比,都不能算是成功。 C++为什么会成为主流语言 面向对象程序设计技术的完美,意味着软件开发技术的成熟,另一方面,软件技术发展到今天,OOP对于它已经不是可有可无的、用来绵上添花的改进措施,而是没有其它选择的唯一出路。 与六、七十年代相比,当今的软件产业可以说已不可同日而语,这种差别,不仅体现在软件产品的数量、品种、规模和功能结构的复杂性上,而且也体现在软件产品本身的内在特征上,程序设计的观念逐渐发生了本质的变化,这种变化使得面向过程的结构化设计方法已经不再适用。 例如,大多数软件产品(包括系统软件和应用软件)都是事件驱动的,程序设计者无法控制事件发生的顺序,换句话说,程序员编程序的概念已经发生变化。现在的编程目标已经不能简单地理解为告诉机器先做什么,然后再做什么,一项软件开发工作,实际上是对于程序员所选择的或自己设计的若干功能模块的组装。所谓组装,主要是规定模块间消息的传送关系,所谓模块的功能,就是程序模块接收、处理和发送消息的特征。显然OOP方法可以说是唯一适用的技术。 另一方面,现代软件由于面对问题的复杂性和对用户界面的方便性要求,具有许多新特征,如窗口、对话框、滚动条等图形用户界面,自动内存管理、模块动态联接、动态数据交换等等都不得不以一种可重用模块的方式为程序员利用,传统的库标准函数的形式已不能解决问题,因为窗口、对话框之类的对象已不可能以标准(带参数)函数的形式来描述,类和对象则是唯一适当的形式,过去C语言丰富而功能强大的库函数是其受到程序开发者欢迎的重要原因,现在,C++语言则以其标准类库(如Borland公司的WOL和Microsoft公司的MFC库)作为击败其它面向对象语言的手段之一。 应该说是现代软件程序的结构组织形式以及程序的保存和重用形式,决定了C语言必然要被面向对象语言所取代。哪一种面向对象语言能够取代C语言在开发领域的地位,这并不是某一个人或一些人可以决定的事情,单从支持OOP方法这一点来衡量,第一个OOP语言Smalltalk当然是有力的竞争者,在软件界有重大影响的Ada语言、Pascal语言(它们的一些新版本如Turbo Pascal 5.5、6.0)同样可以担当重任。然而,以越来越明朗的形势看,C++语言已处于最有利的地位,这并非偶然。下面几方面将是其成功的原因: ·C++语言的前身称为C with class,但不能把C++理解为C语言与OOP的简单嫁接,C++语言有其自己的发展和完善的历史。自1980年至今,经不断修订已形成完备的有机整体。这一点和”带过程的Basic”和”带类的Pascal”等情况是不同的。 ·C++的效率,主要指目标代码的效率和编译的效率。显然,语法规则的复杂性必然导致效率的下降,把C语言作为自己子集的C++语言自然效率低于C语言,但在这点上它又明显高于其它候选者。而且到目前为止,最新版本的C++编译系统(如Visual C++的新版本)的目标码质量已能为开发者所接受。而且由于有条件投入人力、物力,C++编译器的水平还可进一步提高。 ·C++语言的编程环境与工具,主要是市场因素的影响,越来越方便和丰富的环境与工具,特别是标准类库的完备化,使C++语言的优势更为明显。 ·C++语言的一个成功策略是把C语言作为自己的子集,这就把大多数中高级程序员争取到自己的阵营中来,继承C语言的一切优秀特征,逐渐消化掉它的某些不足,可能是它成功的关键。 C++语言的发展前景 C++语言是强有力的软件开发语言,但它绝对不是完美的,或者说是相当不完美的,无论大家期待的C++语言的国际标准内容如何,都必然不断地被改进。 随着C++语言在软件开发领域的地位越来越重要,与其有关的研究、开发工作必须获得越来越多的人力和资金。它的改进是必然的。 从C语言继承下来的语法规则,将逐渐从庞杂走向精减,而且日益清晰。 作为语言实现的编译系统水平和效率将不断提高。 与其相关的编程环境将越来越方便、简化。与此同时,C++语言本身将会变得更强有力。

如何高效的学好C 语言啊?

美河提供.C.精髓.软件工程方法.pdf,免费下载

链接:

提取码:ikzw

C++是一种大型而复杂的语言,其设计目标是作为一种通用的工程语言。 本书分4个部分共19章,不仅详细介绍了C++语言的基本语法,而且讲解了 C++的高级应用(如虚函数、模板、异常等),并通过大量详尽的代码表达了有关软件工程及维护的观点。

何凯明的去雾算法暗通道部分的程序解释,新手有点懵逼

你这个程序可能只是一段,不是完整的。如有完整程序,我可以为你注释下。

c语言程序实践报告怎么写

有一个表格去写,一些内容就是

a) 需求分析:在该部分中叙述每个模块的功能要求

b) 概要设计:在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构说明(如果指定存储结构请写出该存储结构的定义)

c) 详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写,要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

d) 调试分析:测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

1、 课设总结:(保存在word文档中)总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对C语言这门课程的思考、在课程设计过程中对《C语言》课程的认识等内容。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 10:40:51
下一篇 2024年3月26日 10:49:02

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7200
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6300
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4800
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信