Computer Programming 简明教程

Computer Programming - Quick Guide

Computer Programming - Overview

Introduction to Computer Program

在开始计算机编程之前,让我们首先了解一下计算机程序以及它们做什么。

计算机程序是一系列使用计算机编程语言编写的说明,以便计算机执行指定的任务。

我们在上述定义中使用的两个重要术语是 −

  1. Sequence of instructions

  2. Computer Programming Language

为了理解这些术语,假设有人问您如何去附近的肯德基。您将如何向他说明前往肯德基的路?

您将使用人类语言来表示前往肯德基的路,类似如下:

在此,您使用英语给出前往肯德基的几个步骤。如果按照以下顺序执行,您将到达肯德基 −

1.	Go straight
2.	Drive half kilometer
3.	Take left
4.	Drive around one kilometer
5.	Search for KFC at your right side

现在,尝试将此情况与计算机程序对应起来。上述说明序列实际上是一个 Human Program ,以 English Language 编写,说明如何从给定的起点到达肯德基。同样一个序列可以用 Spanish、印地语、阿拉伯语或任何其他人类语言给出,前提是求助者知道其中任何一种语言。

现在,让我们回顾并尝试理解计算机程序,这是一个以计算机语言编写的说明序列,以便计算机执行指定的任务。以下是用 Python 编程语言编写的简单程序 −

print "Hello, World!"

上述计算机程序指示计算机在电脑屏幕上打印 "您好,世界!"。

  1. 计算机程序也称为 computer software ,范围从两行到数百万行指令不等。

  2. 计算机程序指令也称为程序源代码,而 computer programming 也称为 program coding

  3. 没有计算机程序的计算机只是一个废品箱;让计算机活跃起来的是程序。

当我们开发出如此多的语言来进行相互交流时,计算机科学家已开发出多种计算机编程语言来为计算机提供指令(即编写计算机程序)。我们将在后续章节中看到多种计算机编程语言。

Introduction to Computer Programming

如果您理解 computer program 是什么,那么可以说:编写计算机程序的过程称为计算机编程。

如前所述,有数百种编程语言可用于编写计算机程序,其中一些如下 −

  1. Java

  2. C

  3. C++

  4. Python

  5. PHP

  6. Perl

  7. Ruby

Uses of Computer Programs

当今,计算机程序几乎应用于各个领域,包括家庭、农业、医疗、娱乐、国防、通信等。以下是计算机程序的一些应用 −

  1. MS Word、MS Excel、Adobe Photoshop、Internet Explorer、Chrome 等是计算机程序的示例。

  2. 计算机程序被用于电影制作中的图像和特效开发。

  3. 计算机程序用于执行超声波、X 光和其他医学检查。

  4. 计算机程序用于我们的手机,以进行短信、聊天和语音通信。

Computer Programmer

能够编写计算机程序,或者换句话说,能够编写计算机程序的人被称为计算机程序员。

根据计算机编程语言专业知识,我们可以将计算机程序员命名如下:

  1. C Programmer

  2. C++ Programmer

  3. Java Programmer

  4. Python Programmer

  5. PHP Programmer

  6. Perl Programmer

  7. Ruby Programmer

Algorithm

从编程的角度来看, algorithm 是解决任何问题的逐步过程。算法是一种有效的方法,表示为一组有限的明确指令。

因此,计算机程序员在编写实际代码之前列出了解决问题的所需所有步骤。以下是根据给定数字列表找出最大数字的算法的一个简单示例:

1. Get a list of numbers L1, L2, L3....LN
2. Assume L1 is the largest, Largest = L1
3. Take next number Li from the list and do the following
4. If Largest is less than Li
5. Largest = Li
6. If Li is last number from the list then
7. Print value stored in Largest and come out
8. Else repeat same process starting from step 3

以上算法以粗略的方式编写,以帮助初学者理解这个概念。当您进入计算机编程的高级阶段时,您会遇到更多标准化的计算机算法编写方式。

Computer Programming - Basics

我们假设您很了解英语,英语是一种众所周知的 Human Interface Language 。英语有预定义的语法,需要遵循此语法才能正确地书写英语陈述。同样,大多数人机交互语言(印地语、英语、西班牙语、法语等)由多个元素组成,例如动词、名词、形容词、副词、介词、连词等。

类似于人机交互语言,计算机编程语言也由多个元素组成。我们将引导您了解这些元素的基础知识,让您在各种编程语言中 راحت地使用它们。这些基本元素包括:

  1. Programming Environment

  2. Basic Syntax

  3. Data Types

  4. Variables

  5. Keywords

  6. Basic Operators

  7. Decision Making

  8. Loops

  9. Numbers

  10. Characters

  11. Arrays

  12. Strings

  13. Functions

  14. File I/O

我们将在后续章节中使用不同编程语言的示例来解释所有这些元素。首先,我们将尝试理解所有这些术语的含义,然后我们将看到如何在不同编程语言中使用这些术语。

本教程旨在让您了解以下最流行的编程语言:

  1. C Programming

  2. Java Programming

  3. Python Programming

本教程的主要部分已通过将 C 作为编程语言进行了解释,然后我们展示了 Java 和 Python 中相似概念的工作方式。因此,在本教程完成后,您将非常熟悉这些流行的编程语言。

Computer Programming - Environment

尽管环境设置不是任何编程语言的元素,但在开始编写程序之前,它是必须遵循的第一步。

当我们说环境设置时,它仅仅表示一个基础,我们可以在其基础上进行编程。因此,我们需要具备所需的软件设置,即在我们的电脑上安装将用于编写计算机程序、编译和执行它们的软件。例如,如果您需要浏览互联网,那么您需要在您的机器上进行下列设置:

  1. 正在工作的互联网连接以连接到互联网

  2. 诸如 Internet Explorer、Chrome、Safari 等网络浏览器

如果您是 PC 用户,那么您会识别出以下屏幕截图,这是我们在浏览 tutorialspoint.com 时从 Internet Explorer 中获取的。

internet explorer

同样,您还需要以下设置才能开始使用任何编程语言进行编程。

  1. 一个用于创建计算机程序的文本编辑器。

  2. 一个用于将程序编译成二进制格式的编译器。

  3. 一个用于直接执行程序的解释器。

如果您没有足够的计算机知识,您将无法设置上述任何软件。因此,我们建议您向周围的任何技术人员寻求帮助,以在您的机器上设置编程环境,您可以从该环境开始。但对于您来说,了解这些项目是什么非常重要。

Text Editor

文本编辑器是用于编写计算机程序的软件。您的 Windows 电脑必须拥有一个记事本,该记事本可用于编写程序。您可以按以下步骤启动它:

Start Icon → All Programs → Accessories → Notepad → Mouse Click on Notepad

它将启动记事本,并显示以下窗口:

notepad

您可以使用此软件键入您的计算机程序并将其保存到任何位置的文件中。您可以下载并安装其他优秀的编辑器,如免费提供的 Notepad++

如果您是 Mac 用户,那么您将拥有 TextEdit ,或者可以安装其他商业编辑器,例如 BBEdit 来开始。

Compiler?

使用您最喜欢的编程语言编写计算机程序,并将其保存在一个名为程序文件文本文件中。

现在,让我们尝试更详细地了解计算机如何理解您使用编程语言编写的程序。事实上,计算机无法直接理解您以文本格式给定的程序,所以我们需要将这个程序转换成计算机可以理解的二进制格式。

从文本程序到二进制文件的转换是由另一个称为编译器的软件完成的,而这种从文本格式程序到二进制格式文件的转换过程称为程序编译。最后,您可以执行二进制文件以执行已编程的任务。

我们不会深入了解编译器的详细信息和编译的不同阶段。

以下流程图给出了该过程说明——

compiler

因此,如果您打算使用任何需要编译的语言编写程序,例如 C、C++、Java 和 Pascal 等,那么在开始编程之前,您需要安装它们的编译器。

Interpreter

我们刚刚讨论了编译器和编译过程。如果您打算以编程语言编写程序,那么需要编译器将其编译成二进制格式,然后再执行。

还有其他编程语言,例如 Python、PHP 和 Perl,它们不需要编译成二进制格式,而解释器可以用来逐行读取此类程序,并在无需进一步转换的情况下直接执行它们。

interpreter

因此,如果您打算用 PHP、Python、Perl、Ruby 等编写程序,那么在开始编程之前,您需要安装它们的解释器。

Online Compilation

如果您无法在计算机上设置任何编辑器、编译器或解释器,那么 tutorialspoint.com 提供了一个功能,只需单击一下即可轻松编译和运行几乎所有程序。

所以不要担心,让我们继续进行,按照简单易行的步骤,体验成为一名计算机程序员的激动人心的旅程。

Computer Programming - Basic Syntax

让我们从一些编码开始,这将真正让你成为一名计算机程序员。我们要编写一个单行计算机程序,在屏幕上写 Hello, World! 。让我们看看如何使用不同的编程语言编写它。

Hello World Program in C

使用 www.compileonline.com 中提供的我们的在线编译器选项尝试以下示例。

对于本教程中给出的大多数示例,您将在我们网站代码部分的右上角找到一个 Try it 选项,它将带您到在线编译器。

尝试更改 printf() 内部的内容,即在 Hello World! 的位置键入任何内容,然后查看其结果。它只是打印双引号内保留的任何内容。

#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!" );
}

产生以下结果 −

Hello, World!

这个小小的 Hello World 程序将帮助我们理解与 C 编程相关的各种基本概念。

Program Entry Point

现在,先不要管 #include <stdio.h> 语句,但请记住你必须将此语句放在 C 程序的顶部。

每个 C 程序都以 main() 开头,称为 main 函数,然后是左花括号。其余程序指令写在其中,最后用右花括号结束程序。

这两个花括号内的编码部分称为程序主体。左花括号可以与 main() { 在同一行,也可以在下一行,就像它在上述程序中提到的那样。

Functions

函数是程序的小单元,用于执行特定任务。例如,上述程序使用了两个函数: main()printf() 。这里,main() 函数为程序执行提供入口点,而另一个函数 printf() 用于在计算机屏幕上打印信息。

你可以编写我们将在单独章节中看到的自己的函数,但 C 编程本身提供了各种内置函数,如 main()、printf() 等,我们可以根据需要在程序中使用它们。

一些编程语言使用 sub-routine 一词而不是函数,但其功能或多或少相同。

Comments

一个 C 程序可以拥有 / …​.. / 内部的语句。此类语句称为注释,这些注释用于使程序对用户友好且易于理解。注释的好处是编译器和解释器完全忽略它们。因此,你可以使用任何语言来编写注释。

Whitespaces

当我们使用任何编程语言编写程序时,我们会使用各种可打印字符来准备编程语句。这些可打印字符是 a, b, c,…​…​z, A, B, C,…​..Z, 1, 2, 3,…​…​ 0, !, @, #, $, %, ^, &, *, (, ), -, _, +, =, \, |, {, }, [, ], :, ;, <, >, ?, /, \, ~. `. ", ' 。希望我没有遗漏键盘上的任何可打印字符。

除了这些字符之外,还有一些我们经常使用的字符,但它们在程序中是不可见的,这些字符是空格、制表符(\t)、换行符(\n)。这些字符称为 whitespaces

这三个重要的空白字符在所有编程语言中都普遍存在,但它们在文本文档中是不可见的,

Whitespace

Explanation

Representation

New Line

要创建新行

\n

Tab

To create a tab.

\t

Space

To create a space.

empty space

只包含空白字符的一行,可能加上注释,称为空行,而 C 编译器会完全忽略它。空白是 C 中用于描述空格、制表符、换行符和注释的术语。因此,您可以按照下面所示编写 printf("Hello, World!" ); 。此处,“Hello, World!”周围创建的所有空格都是无用的,编译器会在编译时忽略它们。

#include <stdio.h>

int main() {

   /* printf() function to write Hello, World! */

   printf(    "Hello, World!"      );

}

产生以下结果 −

Hello, World!

如果我们让所有这些空白字符可见,那么上面的程序看起来会像这样,您将无法编译它:

#include <stdio.h>\n
\n
int main()\n
{
   \n
   \t/* printf() function to write Hello, World! */
   \n
   \tprintf(\t"Hello, World!"\t);\n
   \n
}\n

Semicolons

C 程序中的每个单独语句都必须以分号 ( ; ) 结尾,例如,如果您想写两次“Hello, World!”,那么它将被写为以下形式:

#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!\n" );
   printf( "Hello, World!" );
}

此程序将产生以下结果:

Hello, World!
Hello, World!

这里,我们在第一个 printf() 函数中使用了一个新行字符 \n 来创建一个新行。让我们看看如果不使用这个新行字符会发生什么:

#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!" );
   printf( "Hello, World!" );
}

此程序将产生以下结果:

Hello, World! Hello, World!

我们将在接下来的几章中学习标识符和关键字。

Program Explanation

让我们了解一下上面 C 程序的工作原理。首先,上面的程序使用 C 编译器转换为二进制格式。所以,让我们将此代码放入 test.c 文件中并按照如下方式编译它:

$gcc test.c -o demo

如果有任何语法错误(在计算机术语中是语法错误),那么我们在将其转换为二进制格式之前会修复它。如果一切正常,那么它会生成一个名为 demo 的二进制文件。最后,我们按照如下方式执行生成的二进制 demo:

$./demo

产生以下结果 −

Hello, World!

这里,当我们执行二进制文件 a.out 时,计算机从 main() 开始进入程序内部并遇到 printf() 语句。请注意 / …​. / 内的这一行是一条注释,并且会在编译时进行筛选。因此,printf() 函数指示计算机在计算机屏幕上打印给定的行。最后,它会遇到一个右大括号,表示 main() 函数结束并退出程序。

Syntax Error

如果不遵循编程语言定义的规则,那么在编译时,您会收到语法错误,程序将不会被编译。从语法角度来看,即使单个句点、逗号或分号都很重要,您也应该注意这些小语法。在下面的示例中,我们跳过了一个分号,让我们尝试编译程序:

#include <stdio.h>

main() {
   printf("Hello, World!")
}

此程序将产生以下结果:

main.c: In function 'main':
main.c:7:1: error: expected ';' before '}' token
 }
 ^

所以,底线是,如果您在程序中没有遵循编程语言定义的适当语法,那么您会收到语法错误。在尝试另一个编译之前,您需要修复它们,然后继续。

Hello World Program in Java

以下是使用 Java 编写的等效程序。此程序也将生成相同的结果 Hello, World!

public class HelloWorld {
   public static void main(String []args) {
      /* println() function to write Hello, World! */
      System.out.println("Hello, World!");
   }
}

产生以下结果 −

Hello, World!

Hello World Program in Python

以下是使用 Python 编写的等效程序。此程序也将生成相同的结果 Hello, World!

#  print function to write Hello, World! */
print "Hello, World!"

产生以下结果 −

Hello, World!

希望您注意到,对于 C 和 Java 示例,我们首先编译程序,然后执行生成的二进制文件,但在 Python 程序中,我们直接执行它。正如我们在前面的章节中解释的那样,Python 是解释性语言,不需要称为编译的中间步骤。

Python 不需要分号 (;) 来终止语句,而是新的一行总是表示语句的终止。

Computer Programming - Data Types

让我们讨论一下几乎所有编程语言中都有的一个非常简单但非常重要的概念,称为 data types 。顾名思义,数据类型表示您可以使用计算机程序处理的数据类型。它可以是数字、字母数字、十进制等。

让我们暂时搁置计算机编程,以 10 和 20 这两个整数的加法为例,该计算可以简单地执行如下:

10 + 20

让我们再举一个问题,我们要加两个小数 10.50 和 20.50,其书写如下:

10.50 + 20.50

这两个示例很简单。现在,让我们再来看另一个示例,其中我们要在笔记本中记录学生信息。这里我们希望记录以下信息 -

Name:
Class:
Section:
Age:
Sex:

现在,让我们根据给定的要求放入一个学生记录 -

Name: Zara Ali
Class: 6th
Section: J
Age: 13
Sex: F

第一个示例处理整数,第二个示例增加了两个小数,而第三个示例处理不同数据的混合。我们以如下方式表示 -

  1. 学生姓名“Zara Ali”是一系列字符,也称为字符串。

  2. 学生班级“第 6 班”由整数和两个字符的字符串混合表示。这种组合称为字母数字。

  3. 学生部分由单个字符“J”表示。

  4. 学生年龄由整数 13 表示。

  5. 学生性别由单个字符“F”表示。

通过这种方式,我们意识到在我们的日常生活中,我们会处理不同类型的数据,例如字符串、字符、整数和十进制数(浮点数)。

同样,当我们编写计算机程序来处理不同类型的数据时,我们需要明确指定其类型;否则,计算机无法理解如何对该给定数据执行不同的操作。不同的编程语言使用不同的关键字来指定不同的数据类型。例如,C 和 Java 编程语言使用 int 来指定整数数据,而 char 指定字符数据类型。

后续章节将向您展示如何在不同情况下使用不同的数据类型。现在,让我们检查 C、Java 和 Python 中可用重要的数据类型以及我们将用于指定这些数据类型的关键字。

C and Java Data Types

C 和 Java 支持几乎相同的数据类型集,尽管 Java 支持额外的数据类型。现在,我们正在采用这两种编程语言支持的几种常见数据类型 -

Type

Keyword

该数据类型可以表示的值范围

Character

char

-128 到 127 或 0 到 255

Number

int

-32768 到 32767 或 -2147483648 到 2147483647

Small Number

short

-32,768 to 32,767

Long Number

long

-2,147,483,648 to 2,147,483,647

Decimal Number

float

1.2E-38 到 3.4E+38,最多 6 位小数

这些数据类型称为原始数据类型,您可以使用这些数据类型构建更复杂的数据类型,称为用户定义数据类型,例如字符串将是一系列字符。

Python Data Types

Python 有五种标准数据类型,但这种编程语言不会使用任何关键字来指定特定数据类型,而 Python 足够智能,可以自动识别给定的数据类型。

  1. Numbers

  2. String

  3. List

  4. Tuple

  5. Dictionary

在这里,Number 指定所有类型的数字,包括十进制数,string 表示长度为 1 个或多个字符的字符序列。现在,让我们继续这两种数据类型,并跳过 List、Tuple 和 Dictionary,它们是 Python 中的高级数据类型。

Computer Programming - Variables

变量是您赋予计算机内存位置的名称,这些内存位置用于在计算机程序中存储值。

例如,假设您想在您的程序中存储两个值 10 和 20,并且在稍后的阶段,您希望使用这两个值。让我们看看您将如何做到这一点。以下是以下三个简单步骤 -

  1. 使用适当的名称创建变量。

  2. 将值存储在该两个变量中。

  3. 从变量中检索并使用存储的值。

Creating variables

在 C 编程中,创建变量也称为 declaring variables 。不同的编程语言有不同的方式在程序内创建变量。例如,C 编程有以下简单的方法来创建变量:

#include <stdio.h>

int main() {
   int a;
   int b;
}

上面的程序创建了两个变量,以保留两个内存位置,名称为 ab 。我们使用 int 关键字创建了这些变量,以指定变量 data type ,这意味着我们要在这些两个变量中存储整数。同样,你可以创建变量来存储 longfloatchar 或任何其他数据类型。例如:

/* variable to store long value */
long a;

/* variable to store float value */
float b;

你可以通过将变量放在单行中,但用逗号分隔来创建类似类型的变量,如下所示:

#include <stdio.h>

int main() {
   int a, b;
}

下面列出的是你需要记住的有关变量的关键要点:

  1. 变量名称可以包含单一类型的值。例如,如果变量 a 已定义 int 类型,则其只能存储整数。

  2. C 编程语言在程序中使用变量之前,需要创建变量,即声明变量。你不能在未创建变量的情况下在程序中使用一个变量名称,尽管诸如 Python 之类的编程语言允许你在未创建变量的情况下使用变量名称。

  3. 你只能在程序中一次使用一个变量名称。例如,如果已将变量 a 定义为存储整数,则不能再次定义 a 以存储任何其他类型的值。

  4. 有诸如 Python、PHP、Perl 等编程语言,这些编程语言不要求你在创建变量时指定数据类型。因此,你可以在未指定其数据类型的情况下存储整数、浮点或 long。

  5. 你可以使用任何名称作为变量名,如 age , sex , salary , year1990 或其他你喜欢的名称,但大多数编程语言只允许在变量名中使用有限的字符。目前,建议在变量名中只使用 a&#8230;&#8203;.z, A&#8230;&#8203;.Z, 0&#8230;&#8203;.9 ,并且将字母用作变量开头的字符,而不是数字。

  6. 几乎没有哪种编程语言允许以数字开头变量名,因此 1990year 不是有效的变量名,而 year1990ye1990ar 是有效的变量名。

每种编程语言都提供了更多有关变量的规则,在你详细了解编程语言后,你会了解它们。

Store Values in Variables

你在上一节中了解了如何创建变量。现在,我们将在这些变量中存储一些值 −

#include <stdio.h>

int main() {
   int a;
   int b;

   a = 10;
   b = 20;
}

上面的程序有两个额外的语句,我们在语句中将 10 存储到变量 a 中,将 20 存储到变量 b 中。几乎所有编程语言都有类似于在变量中存储值的存储方式,我们将在等号 = 的左侧保留变量名,无论我们想在变量中存储什么值,我们都将该值保存在右侧。

现在,我们已经完成了两个步骤,首先创建两个变量,然后在这些变量中存储所需的值。现在,变量 a 的值为 10,变量 b 的值为 20。换句话说,当执行上述程序时,名为 a 的内存位置将持有 10,名为 b 的内存位置将持有 20。

Access stored values in variables

如果我们在变量中不使用存储的值,那么创建变量和在其中存储值就没有意义。我们知道上面的程序有两个变量 ab ,它们分别存储值 10 和 20。因此,我们尝试打印存储在两个变量中的值。以下是一个 C 程序,它打印存储在变量中的值 −

#include <stdio.h>

int main() {
   int a;
   int b;

   a = 10;
   b = 20;

   printf( "Value of a = %d\n", a );
   printf( "Value of b = %d\n", b );
}

当执行上述程序时,它将生成以下结果 −

Value of a = 10
Value of b = 20

你一定在上一章中看到了 printf() 函数,我们曾用它来打印“Hello, World!”。这一次,我们使用它来打印变量的值。我们正在使用 %d ,它将在 printf() 语句中被变量的值替换。我们可以使用以下方式使用单个 printf() 语句打印两个值 −

#include <stdio.h>

int main() {
   int a;
   int b;

   a = 10;
   b = 20;

   printf( "Value of a = %d and value of b = %d\n", a, b );
}

当执行上述程序时,它将生成以下结果 −

Value of a = 10 and value of b = 20

如果你想在 C 编程中使用 float 变量,你需要使用 %f 来替代 %d ,如果你想打印一个字符值,则需要使用 %c 。类似地,可以使用不同的 % 和字符来打印不同的数据类型。

Variables in Java

以下是用 Java 编程语言编写的等效程序。该程序将使用类似于 C 编程的创建一个变量 ab ,并分别赋予它们值 10 和 20,最后以两种方式打印这两个变量的值 -

public class DemoJava {
   public static void main(String []args) {
      int a;
      int b;

      a = 10;
      b = 20;

      System.out.println("Value of a = " + a);
      System.out.println("Value of b = " + b);
      System.out.println("Value of a = " + a + " and value of b = " + b);
   }
}

当执行上述程序时,它将生成以下结果 −

Value of a = 10
Value of b = 20
Value of a = 10 and value of b = 20

Variables in Python

以下是使用 Python 编写的等效程序。该程序将创建一个变量 ab ,并同时赋予它们值 10 和 20。

Python 不需要你在创建变量时指定数据类型,也不需要提前创建变量。

a = 10
b = 20

print "Value of a = ", a
print "Value of b = ", b
print "Value of a = ", a, " and value of b = ", b

当执行上述程序时,它将生成以下结果 −

Value of a =  10
Value of b =  20
Value of a =  10  and value of b =  20

你可以在 C 和 Java 编程中使用以下语法在声明变量的同时赋值 -

#include <stdio.h>

int main() {
   int a = 10;
   int b = 20;

   printf( "Value of a = %d and value of b = %d\n", a, b );
}

当执行上述程序时,它将生成以下结果 −

Value of a = 10 and value of b = 20

Computer Programming - Keywords

到目前为止,我们已经介绍了两个重要的概念,即变量及其数据类型。我们讨论了如何使用 intlongfloat 来指定不同的数据类型。我们还学习了如何命名变量以存储不同的值。

尽管不需要单独设置这一章节,因为保留关键字是基本编程语法的组成部分,但是为了方便理解,我们将其设置为数据类型和变量之后的单独部分进行说明。

与 int、long 和 float 一样,C 编程语言还支持许多其他关键字,我们将它们用于不同的目的。不同的编程语言提供不同的保留关键字集,但所有编程语言中有一条重要且共同的规则,即我们不能使用保留关键字来命名我们的变量,这意味着我们不能将变量命名为 intfloat ,而只能使用这些关键字来指定变量数据类型。

例如,如果您尝试将任何保留关键字用作变量名称,那么您将收到语法错误。

#include <stdio.h>

int main() {
   int float;
   float = 10;

   printf( "Value of float = %d\n", float);
}

当您编译上面的程序时,将产生以下错误:

main.c: In function 'main':
main.c:5:8: error: two or more data types in declaration specifiers
   int float;
......

现在让我们为我们的整数变量赋予一个合适的名称,那么上面的程序应该能够顺利编译和执行:

#include <stdio.h>

int main() {
   int count;
   count = 10;

   printf( "Value of count = %d\n", count);
}

C Programming Reserved Keywords

这是一个包含 C 编程语言支持的几乎所有关键字的表格 −

auto

else

long

switch

break

enum

register

typedef

case

extern

return

union

char

float

short

unsigned

const

for

signed

void

continue

goto

sizeof

volatile

default

if

static

while

do

int

struct

_Packed

double

Java Programming Reserved Keywords

这是一个包含 Java 编程语言支持的几乎所有关键字的表格 −

abstract

assert

boolean

break

byte

case

catch

char

class

const

continue

default

do

double

else

enum

extends

final

finally

float

for

goto

if

implements

import

instanceof

int

interface

long

native

new

package

private

protected

public

return

short

static

strictfp

super

switch

synchronized

this

throw

throws

transient

try

void

volatile

while

Python Programming Reserved Keywords

这是一个包含 Python 编程语言支持的几乎所有关键字的表格 −

and

exec

not

assert

finally

or

break

for

pass

class

from

print

continue

global

raise

def

if

return

del

import

try

elif

in

while

else

is

with

except

lambda

yield

我们知道你无法记住所有这些关键字,但我们已将其列出供你参考并解释 reserved keywords 的概念。因此,在给变量命名时请务必小心,不应使用该编程语言的任何保留关键字。

Computer Programming - Operators

编程语言中的运算符是告诉编译器或解释器执行特定的数学、关系或逻辑运算并生成最终结果的符号。本章将解释 operators 的概念,并将带您了解 C、Java 和 Python 中可用的重要算术和关系运算符。

Arithmetic Operators

计算机程序被广泛用于数学计算。我们可以编写一个计算机程序,它可以进行简单的计算,例如对两个数字求和 (2 + 3),我们还可以编写一个程序,它可以解复杂的方程,如 P(x) = x^4 + 7x^3 - 5x + 9。如果您曾经是一个成绩差的学生,那么您一定知道在第一个表达式中 2 和 3 是操作数,而 + 是操作符。类似的概念存在于计算机编程中。

观察以下两个示例 −

2 + 3

P(x) = x4 + 7x3 - 5x + 9.

这两个语句在编程语言中称为算术表达式,并且在这些表达式中使用的 plusminus 称为算术运算符,而这些表达式中使用的值(如 2、3 和 x 等)称为操作数。在其最简单的形式中,此类表达式会产生数值结果。

类似地,编程语言提供了各种算术运算符。下表列出了 C 编程语言中可用的一些重要算术运算符。假设变量 A 持有 10,变量 B 持有 20,那么 −

Operator

Description

Example

+

Adds two operands

A + B 会给出 30

-

从第一个操作数中减去第二个操作数

A - B 会给出 -10

*

Multiplies both operands

A * B 会给出 200

/

Divides numerator by de-numerator

B / A 会给出 2

%

这会给出整数除法的余数

B % A 会给出 0

下面是一个简单的 C 编程示例,用于了解上述数学运算符 −

#include <stdio.h>

int main() {
   int a, b, c;

   a = 10;
   b = 20;

   c = a + b;
   printf( "Value of c = %d\n", c);

   c = a - b;
   printf( "Value of c = %d\n", c);

   c = a * b;
   printf( "Value of c = %d\n", c);

   c = b / a;
   printf( "Value of c = %d\n", c);

   c = b % a;
   printf( "Value of c = %d\n", c);
}

当执行上述程序时,它将生成以下结果 −

Value of c = 30
Value of c = -10
Value of c = 200
Value of c = 2
Value of c = 0

Relational Operators

考虑一种情况,我们在其中创建两个变量并将一些值分配给它们,如下所示 −

A = 20
B = 10

在此,很明显,变量 A 的值大于 B。因此,我们需要一些符号来编写此类表达式,这些符号称为关系表达式。如果我们使用 C 编程语言,那么将按如下方式编写 −

(A > B)

在此,我们使用了符号 >,它称为关系运算符,并且在其最简单的形式中,它们产生布尔结果,这意味着结果将是 true 或 false。类似地,编程语言提供了各种关系运算符。下表列出了 C 编程语言中可用的一些重要关系运算符。假设变量 A 持有 10,变量 B 持有 20,那么 −

Operator

Description

Example

==

检查两个操作数的值是否相等,如果相等,则条件变为真。

(A == B) 不为真。

!=

检查两个操作数的值是否相等,如果值不相等,则条件变为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果大于,则条件变为真。

(A > B) 不为真。

<

检查左操作数的值是否小于右操作数的值,如果小于,则条件变为真。

(A < B) 为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果大于或等于,则条件变为真。

(A >= B) 不为真。

检查左操作数的值是否小于或等于右操作数的值,如果小于或等于,则条件变为真。

(A ⇐ B) 为真。

在这里,我们将向您展示一个使用 if conditional statement 的 C 编程示例。尽管将在单独的章节中讨论此语句,但简而言之,我们使用 if statement 来检查条件,如果条件为 true,那么将执行 if statement 的主体,否则将跳过 if statement 的主体。

#include <stdio.h>

int main() {
   int a, b;

   a = 10;
   b = 20;

   /* Here we check whether a is equal to 10 or not */
   if( a == 10 ) {

      /* if a is equal to 10 then this body will be executed */
      printf( "a is equal to 10\n");
   }

   /* Here we check whether b is equal to 10 or not */
   if( b == 10 ) {

      /* if b is equal to 10 then this body will be executed */
      printf( "b is equal to 10\n");
   }

   /* Here we check if a is less b than or not */
   if( a < b ) {

      /* if a is less than b then this body will be executed */
      printf( "a is less than b\n");
   }

   /* Here we check whether a and b are not equal */
   if( a != b ) {

      /* if a is not equal to b then this body will be executed */
      printf( "a is not equal to b\n");
   }
}

当执行上述程序时,它将生成以下结果 −

a is equal to 10
a is less than b
a is not equal to b

Logical Operators

逻辑运算符在任何编程语言中都非常重要,它们帮助我们根据某些条件做出决策。假设我们要合并两个条件的结果,那么逻辑 AND 和 OR 逻辑运算符有助于我们产生最终结果。

下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 持有 1,变量 B 持有 0,那么 −

Operator

Description

Example

&&

称为逻辑 AND 运算符。如果两个运算数都非零,条件变为真。

(A && B) 为假。

称为逻辑 OR 运算符。如果任何一个运算数非零,条件变为真。

(A

B) is true.

!

称为逻辑 NOT 运算符。用于反转操作数的逻辑状态。如果条件为 true,则逻辑 NOT 运算符会将其变为 false。

尝试以下示例以了解 C 编程语言中可用的所有逻辑运算符 −

#include <stdio.h>

int main() {
   int a = 1;
   int b = 0;

   if ( a && b ) {

      printf("This will never print because condition is false\n" );
   }
   if ( a || b ) {

      printf("This will be printed print because condition is true\n" );
   }
   if ( !(a && b) ) {

      printf("This will be printed print because condition is true\n" );
   }
}

当您编译和执行上述程序时,它将生成以下结果 −

This will be printed print because condition is true
This will be printed print because condition is true

Operators in Java

以下是用 Java 编写的等效程序。C 编程和 Java 提供了几乎相同的运算符和条件语句组。此程序将创建两个变量 ab ,非常类似于 C 编程,然后我们在这些变量中分配 10 和 20,最后,我们将使用不同的算术和关系运算符 −

您可以尝试执行以下程序以查看输出,其必须与上述示例生成的结果相同。

public class DemoJava {
   public static void main(String []args) {
      int a, b, c;

      a = 10;
      b = 20;

      c = a + b;
      System.out.println("Value of c = " + c );

      c = a - b;
      System.out.println("Value of c = " + c );

      c = a * b;
      System.out.println("Value of c = " + c );

      c = b / a;
      System.out.println("Value of c = " + c );

      c = b % a;
      System.out.println("Value of c = " + c );

      if( a == 10 ) {

         System.out.println("a is equal to 10" );
      }
   }
}

当执行上述程序时,它将生成以下结果 −

Value of c = 30
Value of c = -10
Value of c = 200
Value of c = 2
Value of c = 0
a is equal to 10

Operators in Python

以下是用 Python 编写的等效程序。此程序将创建两个变量 ab ,同时在这些变量中分配 10 和 20。幸运的是,C 编程和 Python 编程语言提供了几乎相同的运算符组。此程序将创建两个变量 ab ,非常类似于 C 编程,然后我们在这些变量中分配 10 和 20,最后,我们将使用不同的算术和关系运算符。

您可以尝试执行以下程序以查看输出,其必须与上述示例生成的结果相同。

a = 10
b = 20

c = a + b
print "Value of c = ", c

c = a - b
print "Value of c = ", c

c = a * b
print "Value of c = ", c

c = a / b
print "Value of c = ", c

c = a % b
print "Value of c = ", c

if( a == 10 ):
   print "a is equal to 10"

当执行上述程序时,它将生成以下结果 −

Value of c =  30
Value of c =  -10
Value of c =  200
Value of c =  0
Value of c =  10
a is equal to 10

Decision Statements

决策对计算机编程至关重要。在许多情况下,你将获得两个或更多选项,你将必须根据给定条件选择一个选项。例如,我们想根据学生的获得的分数对学生进行评语。以下是情况 −

Assume given marks are x for a student:

If given marks are more than 95, then
Student is brilliant

If given marks are less than 30, then
Student is poor

If given marks are less than 95 and more than 30, then
Student is average

现在,问题是如何编写编程代码来处理此类情况。几乎所有编程语言都提供基于以下流程图工作的条件语句 −

decision making

让我们借助 if conditional statements 编写一个 C 程序,将上述情况转换为编程代码 −

#include <stdio.h>

int main() {
   int x = 45;

   if( x > 95) {

      printf( "Student is brilliant\n");
   }
   if( x < 30) {

      printf( "Student is poor\n");
   }
   if( x < 95 && x > 30 ) {

      printf( "Student is average\n");
   }
}

当执行上述程序时,它将生成以下结果 −

Student is average

上述程序使用 if conditional statements 。此处,第一个 if statement 检查给定条件,即变量 x 大于或等于 95,并且如果条件为真,则进入条件主体以执行给定语句。此处,我们只有一个 printf() 语句来对学生进行评语。

第二个 if statement 函数类似地工作。最后,执行第三个 if statement ,此处,我们有两个条件 −

  1. 第一个条件是 x &gt; 95

  2. 第二个条件是 x &lt; 30

计算机评估给定的两个条件,然后使用二进制运算符 && 将总体结果合并。如果最终结果为真,则将执行条件语句,否则不执行任何语句。

本教程将带你了解 if statements 的各种形式以及 C 编程语言中提供的 switch 语句。不同的编程语言提供不同类型的决策语句,但基本概念与本教程中解释的内容相同。

if…​else statement

一个 if 语句后面可以跟随可选的 else 语句,当布尔表达式为假时执行该语句。C 编程语言中 if…​else 语句的语法是 −

if(boolean_expression) {

   /* Statement(s) will execute if the boolean expression is true */
} else {

  /* Statement(s) will execute if the boolean expression is false */
}

上述语法可以表示为流程图形式,如下所示 −

if else statement

当我们必须在两个选项中做出决策时, if…​else 语句非常有用。例如,如果一个学生获得的分数超过 95 分,那么该学生就是优秀的,否则无法对这种情况进行编码,如下所示 −

#include <stdio.h>

int main() {
   int x = 45;

   if( x > 95) {

      printf( "Student is brilliant\n");
   } else {
      printf( "Student is not brilliant\n");
   }
}

当执行上述程序时,它将生成以下结果 −

Student is not brilliant

if…​elseif…​else statement

一个 if 语句后面可以跟随一个可选的 else if…​else 语句,这对于测试各种条件非常有用。

在使用 if, else if, else 语句时,需要记住以下几点:

  1. if 可以有零个或一个 else&#8217;s ,并且必须位于 else if 之后。

  2. if 可以有零个到多个 else…if&#8217;s ,并且它们必须位于 else 之前。

  3. 完成一次 else…if 后,不会测试剩余的 else…if&#8217;selse&#8217;s

C 编程语言中 if…​else if…​else 语句的语法为:

if(boolean_expression 1) {

   /* Executes when the boolean expression 1 is true */
}
else if( boolean_expression 2) {

   /* Executes when the boolean expression 2 is true */
}
else if( boolean_expression 3) {

   /* Executes when the boolean expression 3 is true */
} else {

   /* Executes when the none of the above condition is true */
}

现在,借助 if…​elseif…​else 语句,第一个程序可以编码为:

#include <stdio.h>

int main() {
   int x = 45;

   if( x > 95) {
      printf( "Student is brilliant\n");
   }
   else if( x < 30) {
      printf( "Student is poor\n");
   }
   else if( x < 95 && x > 30 ) {
      printf( "Student is average\n");
   }
}

当执行上述程序时,它将生成以下结果 −

Student is average

The Switch Statement

switch 语句是 if statements 的替代语句,它允许测试变量是否等于值列表。每个值称为 case ,并且要切换的变量针对每个 switch case 进行检查。其语法如下:

switch(expression){
   case ONE :
      statement(s);
      break;
   case TWO:
      statement(s);
      break;
   ......

   default :
      statement(s);
}

switch 语句中使用的 expression 必须提供整数,使其将针对给出的不同 case 进行相等性比较。当表达式值与 case 值匹配时,将执行该 case 的主体,最后,将使用 break 语句终止 switch。如果没有提供 break 语句,则计算机继续执行匹配的 case 下方提供的其他语句。如果没有 case 匹配,则执行 default case 主体。

上述语法可以表示为流程图形式,如下所示 −

switch statement

现在,让我们考虑另一个示例,我们希望为给定数字编写等效的英语单词。然后,可以对其进行如下编码:

#include <stdio.h>

int main() {
   int x = 2;

   switch( x ){
      case 1 :
         printf( "One\n");
         break;
      case 2 :
         printf( "Two\n");
         break;
      case 3 :
         printf( "Three\n");
         break;
      case 4 :
         printf( "Four\n");
         break;
      default :
         printf( "None of the above...\n");
   }
}

当执行上述程序时,它将生成以下结果 −

Two

Decisions in Java

以下是使用 Java 编写的等效程序,它也支持 ifif…​elseif…​elseif…​elseswitch 语句。

您可以尝试执行以下程序以查看输出,其必须与上述 C 示例生成的输出相同。

public class DemoJava {
   public static void main(String []args) {
      int x = 45;

      if( x > 95) {
         System.out.println( "Student is brilliant");
      }
      else if( x < 30) {
         System.out.println( "Student is poor");
      }
      else if( x < 95 && x > 30 ) {
         System.out.println( "Student is average");
      }
   }
}

当执行上述程序时,它将生成以下结果 −

Student is average

Decisions in Python

以下是使用 Python 编写的等效程序。Python 提供 ifif…​elseif…​elif…​elseswitch 语句。此处,您必须注意,Python 不使用花括号作为条件主体,而是使用语句的缩进识别块的主体。

您可以尝试执行以下程序以查看输出:

x = 45

if x > 95:
   print "Student is brilliant"
elif x < 30:
   print "Student is poor"
elif x < 95 and x > 30:
   print "Student is average"

print "The end"

当执行上述程序时,它将生成以下结果 −

Student is average
The end

Computer Programming - Loops

我们考虑一下一个你想打印 Hello, World! 五次的情况。这里有一个简单的 C 程序来实现 -

#include <stdio.h>

int main() {
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
}

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

这很简单,但再考虑一下你想写 Hello, World! 一千次的情况。我们肯定无法写一千次 printf() 语句。几乎所有编程语言都提供了一个称为 loop 的概念,它有助于执行一条或多条语句直至达到所需次数。所有高级编程语言都提供各种形式的循环,可用于重复执行一条或多条语句。

让我们借助一个 while loop 来编写上述 C 程序,稍后我们将讨论这个循环如何工作

#include <stdio.h>

int main() {
   int i = 0;

   while ( i < 5 ) {
      printf( "Hello, World!\n");
      i = i + 1;
   }
}

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

上述程序使用了一个 while loop ,该 while loop 用于执行用 {…​.} 括起来的一组编程语句。在这里,计算机首先检查给定的条件(即,变量 “a” 是否小于 5),如果发现条件为真,则进入循环体来执行给定的语句。这里,我们在循环体中使用以下两个语句 -

  1. 第一条语句是 printf() 函数,它打印 Hello World!

  2. 第二条语句是 i = i + 1,它用于增加变量 i 的值

在执行了循环体中给出的所有语句之后,计算机会返回 while( i < 5) ,并再次检查给定的条件 (i < 5),如果该条件为真,则再次执行循环。此过程一直重复,直到给定的条件仍然为真,这意味着变量 “a” 的值小于 5。

总之,循环语句允许我们多次执行一条或多条语句。下面给出的是大多数编程语言中循环语句的一般形式 -

loop architecture

本教程旨在向非程序员介绍编程的基本概念,因此,让我们讨论 C 编程语言中可用的两个最重要的循环。一旦你清楚了这两个循环,那么你可以选用 C 编程教程或参考书,并查看 C 中可用的其他循环以及它们的工作方式。

The while Loop

C 编程语言中可用的 while loop 具有以下语法 -

while ( condition ) {
   /*....while loop body ....*/
}

上面的代码可以用流程图的形式表示,如下所示 -

cpp while loop

关于 while 循环需要了解以下重点 -

  1. while 循环以关键字 while 开头,后面跟着用 ( ) 括起来的一个 condition

  2. 在 while() 语句之后,你将用大括号 {&#8230;&#8203;} 括出循环体。

  3. while 循环体中可以包含一行或多行要重复执行的源代码。

  4. 如果 while 循环体只有一行,则可以使用花括号 {&#8230;&#8203;} 也是可选的。

  5. while 循环会一直执行该主体,直到给定的 condition 成立。只要条件变为 false,while 循环就会结束,并从紧跟 while 循环体后的紧接语句继续执行。

  6. 一个条件通常是一个关系语句,其结果为 true 或 false。值为零被视为 false,对于任何非零值都像 true。

The do…​while Loop

while 循环在执行主体部分的任何语句之前都会检查给定的条件。C 编程提供另一种称为 do…​while 的循环形式,它允许在检查给定条件之前先执行一次循环体。其语法如下:

do {
   /*....do...while loop body ....*/
}
while ( condition );

上面的代码可以用流程图的形式表示,如下所示 -

cpp do while loop

如果使用 do…​while 循环编写上述示例,则 Hello, World 将生成相同的结果:

#include <stdio.h>

int main() {
   int i = 0;

   do {
      printf( "Hello, World!\n");
      i = i + 1;
   }
   while ( i < 5 );
}

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

The break statement

当在循环内部遇到 break 语句时,循环将立即终止,程序控制将从紧接循环后的下一条语句恢复。C 中 break 语句的语法如下:

break;

break 语句可以用流程图的形式表示,如下所示:

cpp break statement

以下是上述程序的一个变体,但它只打印三次 Hello World!就会退出:

#include <stdio.h>

int main() {
   int i = 0;
   do {
      printf( "Hello, World!\n");
      i = i + 1;

      if( i == 3 ) {
         break;
      }
   }
   while ( i < 5 );
}

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!

The continue statement

C 编程语言中的 continue 语句在某种程度上类似于 break 语句。 continue 不是强制终止,而是强制执行循环的下一次迭代,跳过其间的任何代码。C 中 continue 语句的语法如下:

continue;

continue 语句可以用流程图的形式表示,如下所示:

cpp continue statement

以下是上述程序的一个变体,但当变量的值等于 3 时,它会跳过打印:

#include <stdio.h>

int main() {
   int i = 0;
   do {
      if( i == 3 ) {
         i = i + 1;
         continue;
      }
      printf( "Hello, World!\n");
      i = i + 1;
   }
   while ( i < 5 );
}

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!
Hello, World!

Loops in Java

以下是用 Java 编写的等效程序,它也支持 whiledo…​while 循环。以下程序像我们在 C 编程中的情况一样打印 Hello, World! 五次:

您可以尝试执行以下程序以查看输出,其必须与上述示例生成的结果相同。

public class DemoJava {
   public static void main(String []args) {
      int i = 0;

      while ( i < 5 ) {
         System.out.println("Hello, World!");
         i = i + 1;
      }
   }
}

Java 编程中的 breakcontinue 语句的工作方式与它们在 C 编程中的工作方式完全相同。

Loops in Python

以下是用 Python 编写的等效程序。Python 也支持 whiledo…​while 循环。以下程序像我们在 C 编程中的情况一样打印 Hello, World! 五次。这里必须注意,Python 不使用花括号作为循环体,而是简单地使用语句缩进识别循环体。

你可以尝试执行以下程序查看输出。为了显示差异,我们使用了一条额外的 print 语句,当循环结束时它将被执行。

i = 0

while (i < 5):
   print "Hello, World!"
   i = i + 1
print "Loop ends"

当执行上述程序时,它将生成以下结果 −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Loop ends

Python 中的 breakcontinue 语句的工作方式与它们在 C 编程中的工作方式完全相同。

Computer Programming - Numbers

每种编程语言都支持操作不同类型的数字,例如简单的整数和小数。C、Java 和 Python 根据数字的性质将这些数字分类为几个类别。

我们回到数据类型章节检查一下,我们在其中列出了与数字相关的核心数据类型:

Type

Keyword

该数据类型可以表示的值范围

Number

int

-32768 到 32767 或 -2147483648 到 2147483647

Small Number

short

-32,768 to 32,767

Long Number

long

-2,147,483,648 to 2,147,483,647

Decimal Number

float

1.2E-38 到 3.4E+38,最多 6 位小数

这些数据类型被称为原始数据类型,你可以使用这些数据类型生成更多数据类型,即用户定义的数据类型。

我们已经看到在关于运算符的讨论期间,进行的各式各样的数学和逻辑操作。因此我们知道如何添加数字、减去数字、除以数字等等。

首先让我们看看如何打印 C 编程语言中可用的不同类型数字−

#include <stdio.h>

int main() {
   short  s;
   int    i;
   long   l;
   float  f;
   double d;

   s = 10;
   i = 1000;
   l = 1000000;
   f = 230.47;
   d = 30949.374;

   printf( "s: %d\n", s);
   printf( "i: %d\n", i);
   printf( "l: %ld\n", l);
   printf( "f: %.3f\n", f);
   printf( "d: %.3f\n", d);
}

其余代码显而易见,但我们使用 %.3f 打印浮点数和双精度数,它表示要打印的小数点后面位数。当执行以上程序时,它产生以下结果−

s: 10
i: 1000
l: 1000000
f: 230.470
d: 30949.374

Math Operations on Numbers

以下表格列出 C 编程语言中可用的各种有用的内置数学 functions ,可用于各种重要的数学计算。

例如,如果你想计算某数的平方根,比如 2304,那么你有一个可用于计算平方根的内置函数。

Sr.No.

Function & Purpose

1

double cos(double); 此函数采用一个角度(作为 double 类型)并返回余弦值。

2

double sin(double); 此函数接受一个角度(作为双精度浮点数),并返回正弦值。

3

**double tan(double); 这个函数取一个角度(作为双精度数)并返回正切。

4

double log(double); 此函数接受一个数字,并返回该数字的自然对数。

5

double pow(double, double); 第一个是你想求幂的数字,第二个是你希望将其求幂的次数。

6

double hypot(double, double); 如果你将直角三角形的两条边的长度传递给这个函数,它将返回斜边的长度。

7

double sqrt(double); 你将这个函数传递给一个数字,它返回它的平方根。

8

int abs(int); 此函数返回传递给它的整数的绝对值。

9

double fabs(double); 此函数返回传递给它的任意小数的绝对值。

10

double floor(double); 找出小于或等于传递给它的参数的整数。

以下是一个简单的例子,演示了一些数学运算。要利用这些函数,你需要在你的程序中包含 math 头文件 <math.h> ,和你包含 stdio.h 的方式相同。

#include <stdio.h>
#include <math.h>

int main() {
   short  s;
   int    i;
   long   l;
   float  f;
   double d;

   printf( "sin(s): %f\n", sin(10));
   printf( "abs(i): %f\n", abs(1000));
   printf( "floor(f): %f\n", floor(230.47));
   printf( "sqrt(l): %f\n", sqrt(1000000));
   printf( "pow(d, 2): %f\n", pow(2.374, 2));
}

当执行上述程序时,它将生成以下结果 −

sin(s): -0.544021
abs(i): -0.544021
floor(f): 230.000000
sqrt(l): 1000.000000
pow(d, 2): 5.635876

除了上述用法外,你还将在循环计数、标志表示、C 编程中的真或假值中使用数字。

Numbers in Java

以下是用 Java 编写的等效程序。Java 提供了 C 编程中几乎所有可用的数字数据类型。

你可以尝试执行以下程序,查看输出,它与上述 C 示例生成的输出相同。

public class DemoJava {
   public static void main(String []args) {
      short  s;
      int    i;
      long   l;
      float  f;
      double d;

      s = 10;
      i = 1000;
      l = 1000000L;
      f = 230.47f;
      d = 30949.374;

      System.out.format( "s: %d\n", s);
      System.out.format( "i: %d\n", i);
      System.out.format( "l: %d\n", l);
      System.out.format( "f: %f\n", f);
      System.out.format( "d: %f\n", d);
   }
}

当执行上述程序时,它将生成以下结果 −

s: 10
i: 1000
l: 1000000
f: 230.470001
d: 30949.374000

Java 还为数学计算提供了一整套内置函数,你可以像在 C 编程中一样使用它们。

Numbers in Python

Python 与 C 和 Java 有点不同。它将数字分为 intlongfloatcomplex 。以下是 Python 中数字的一些示例−

int

long

float

complex

10

51924361L

0.0

3.14j

100

-0x19323L

15.20

45.j

-786

0122L

-21.9

9.322e-36j

080

0xDEFABCECBDAECBFBAEl

32.3+e18

.876j

-0490

535633629843L

-90.

-.6545+0J

-0x260

-052318172735L

-32.54e100

3e+26J

0x69

-4721885298529L

70.2-E12

4.53e-7j

以下是使用 Python 编写的等效程序−

s = 10
i = 1000
l = 1000000
f = 230.47
d = 30949.374

print "s: ", s
print "i: ", i
print "l: ", l
print "f: ", f
print "d: ", d

当执行上述程序时,它将生成以下结果 −

s:  10
i:  1000
l:  1000000
f:  230.47
d:  30949.374

Python 还提供了一整套用于数学计算的内置函数,你可以像在 C 编程中一样使用它们。

Computer Programming - Characters

如果在计算机编程中处理数字很简单,那么处理字符将会更简单。字符就像 a、b、c、d……、A、B、C、D……,但有一个例外。在计算机编程中,任何个位数数字,如 0、1、2……和特殊字符,如 $、%、+、- ……等,也都视为字符,要将它们分配给字符类型变量,你只需将其放入 single quotes 中。例如,以下语句定义了一个字符类型变量 ch ,我们给它分配一个值 'a'−

char ch = 'a';

在此, ch 是字符类型变量,可以容纳一个实现字符集中的字符,而 'a' 称为 character literal 或字符常量。不仅仅是 a、b、c……,当像 1、2、3……这样的任何数字,或像 !、@、、$……这样的任何特殊字符保存在单引号内时,它们将被视为字符字面量,可以分配给字符类型的变量,因此以下是一个有效的语句 −

char ch = '1';

字符数据类型消耗 8 位内存,这意味着您可以将 ASCII 值介于 -127 至 127 之间的内容存储在字符中,因此它可以容纳 256 个不同值中的任何一个。字符数据类型可以存储键盘上的任何字符,包括特殊字符,如 !、@、、$、%、^、&、*、(、)、_、+、{、} 等。

请注意,您只能在单引号内保留一个字母或一个数字,且不允许在单引号内有多个字母或数字。因此,以下语句在 C 编程中无效 −

char ch1 = 'ab';
char ch2 = '10';

下面是一个简单的示例,展示如何在 C 编程语言中定义、分配和打印字符 −

#include <stdio.h>

int main() {
   char  ch1;
   char  ch2;
   char  ch3;
   char  ch4;

   ch1 = 'a';
   ch2 = '1';
   ch3 = '$';
   ch4 = '+';

   printf( "ch1: %c\n", ch1);
   printf( "ch2: %c\n", ch2);
   printf( "ch3: %c\n", ch3);
   printf( "ch4: %c\n", ch4);
}

在此,我们使用 %c 来打印字符数据类型。当执行上述程序时,它将产生以下结果 −

ch1: a
ch2: 1
ch3: $
ch4: +

Escape Sequences

许多编程语言支持一个称为 Escape Sequence 的概念。当一个字符前带有反斜杠 (\),它称为转义序列,并且它对编译器具有特殊含义。例如,以下语句中的 \n 是一个有效字符,并且称为换行符 −

char ch = '\n';

在此,字符 n 前面带有一个反斜杠 (\),它具有特殊含义,即换行符,但请记住反斜杠 (\) 仅对几个字符具有特殊含义。以下语句在 C 编程中没有任何意义,并且将被认为是一个无效的语句 −

char ch = '\1';

下表列出了 C 编程语言中可用的转义序列 −

Escape Sequence

Description

\t

在此处在文本中插入制表符。

\b

在此处在文本中插入退格符。

\n

在此处在文本中插入换行符。

\r

在此处在文本中插入回车符。

\f

在此处在文本中插入换页符。

\'

在此处在文本中插入一个单引号字符。

\"

在此处在文本中插入一个双引号字符。

以下示例演示了编译器如何在 print 语句中解释转义序列 −

#include <stdio.h>

int main() {
   char  ch1;
   char  ch2;
   char  ch3;
   char  ch4;

   ch1 = '\t';
   ch2 = '\n';

   printf( "Test for tabspace %c and a newline %c will start here", ch1, ch2);
}

当执行上述程序时,它将生成以下结果 −

Test for tabspace     and a newline
will start here

Characters in Java

以下是用 Java 编写的等效程序。Java 处理字符数据类型的方式与我们在 C 编程中看到的很相似。但是,Java 为字符处理提供了额外的支持。

您可以尝试执行以下程序以查看输出,其必须与上述 C 示例生成的输出相同。

public class DemoJava {
   public static void main(String []args) {
      char  ch1;
      char  ch2;
      char  ch3;
      char  ch4;

      ch1 = 'a';
      ch2 = '1';
      ch3 = '$';
      ch4 = '+';

      System.out.format( "ch1: %c\n", ch1);
      System.out.format( "ch2: %c\n", ch2);
      System.out.format( "ch3: %c\n", ch3);
      System.out.format( "ch4: %c\n", ch4);
   }
}

当执行上述程序时,它将生成以下结果 −

ch1:  a
ch2:  1
ch3:  $
ch4:  +

Java 也以你在 C 编程中使用它们的方式支持转义序列。

Characters in Python

Python 不支持任何字符数据类型,但所有字符都被视为字符串,它是字符序列。我们将在单独的章节中学习字符串。在 Python 中使用单个字符时,您不需要做出任何特殊安排。

以下是使用 Python 编写的等效程序−

ch1 = 'a';
ch2 = '1';
ch3 = '$';
ch4 = '+';

print "ch1: ", ch1
print "ch2: ", ch2
print "ch3: ", ch3
print "ch4: ", ch4

当执行上述程序时,它将生成以下结果 −

ch1:  a
ch2:  1
ch3:  $
ch4:  +

Python 以你在 C 编程中使用它们的方式支持转义序列。

Computer Programming - Arrays

考虑一种情况,我们需要存储五个整数。如果我们使用编程的简单变量和数据类型概念,那么我们需要五个 int 数据类型的变量,且程序如下 −

#include <stdio.h>

int main() {
   int number1;
   int number2;
   int number3;
   int number4;
   int number5;

   number1 = 10;
   number2 = 20;
   number3 = 30;
   number4 = 40;
   number5 = 50;

   printf( "number1: %d\n", number1);
   printf( "number2: %d\n", number2);
   printf( "number3: %d\n", number3);
   printf( "number4: %d\n", number4);
   printf( "number5: %d\n", number5);
}

很简单,因为我们只需要存储五个整数。现在让我们假设我们必须存储 5000 个整数。我们是否将使用 5000 个变量?

为了处理这种情况,几乎所有编程语言都提供了一个称为 array 的概念。数组是一种数据结构,可以存储相同数据类型的固定大小元素集合。数组用于存储数据集合,但通常将数组视为相同类型变量的集合更为有用。

您无需像 number1、number2、……、number99 那样声明单个变量,只需声明一个 number 的整数类型数组变量,并使用 number1[0]、number1[1] 和……number1[99] 来表示单个变量。在这里,0、1、2、……99 是与 var 变量关联的 index ,并且它们用于表示数组中可用的单个元素。

所有阵列都包含连续的内存位置。最低地址对应于第一个元素,而最高地址对应于最后一个元素。

arrays

Create Arrays

要在 C 中创建数组变量,程序员应指定元素类型和存储在该数组中的元素数量。以下是创建 C 编程中数组的简单语法 −

type arrayName [ arraySize ];

这称为单维数组。 arraySize 必须是大于零的整数常量,而 type 可以是任何有效的 C 数据类型。例如,现在声明一个名为 number 的 10 元素数组,类型为 int ,使用此语句 −

int number[10];

此处,number 是一个变量数组,它足以容纳多达 10 个整数。

Initializing Arrays

你可以在 C 中逐个初始化一个数组或使用以下语句:

int number[5] = {10, 20, 30, 40, 50};

大括号 {} 之间的值的数量不能大于我们为方括号 [] 之间的数组声明的元素数量。

如果你省略数组的大小,就会创建一个仅足够容纳初始化大小的数组。因此,如果写入:

int number[] = {10, 20, 30, 40, 50};

您要创建的数组与上一个示例中完全相同。下面是一个分配数组的单个元素的示例:

number[4] = 50;

以上语句将数组中的第 5 个元素分配给值 50。所有数组都将 0 作为其第一个元素的索引,该索引也被称为基索引,数组的最后一个索引将是数组总大小减 1。以下图像显示了我们上面讨论的数组的图片表示:

array presentation

Accessing Array Elements

通过给数组名称编制索引来访问元素。这是通过在数组名称后面方括号内放置元素的索引来完成的。例如:

int var = number[9];

以上语句将从数组中获取第 10 个元素,并将该值分配给 var 变量。以下示例使用了上面提到的所有三个概念,即创建、分配和访问数组:

#include <stdio.h>

int main () {
   int number[10]; /* number is an array of 10 integers */
   int i = 0;

   /* Initialize elements of array n to 0 */
   while( i < 10 ) {

      /* Set element at location i to i + 100 */
      number[ i ] = i + 100;
      i = i + 1;
   }

   /* Output each array element's value */
   i = 0;
   while( i < 10 ) {

      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }

   return 0;
}

编译并执行上述代码后,将产生以下结果 −

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

Arrays in Java

以下是用 Java 编写的等效程序。Java 支持数组,但它们使用 new 运算符在 Java 中创建的方式略有不同。

您可以尝试执行以下程序以查看输出,其必须与上述 C 示例生成的输出相同。

public class DemoJava {
   public static void main(String []args) {
      int[] number = new int[10];
      int i = 0;

      while( i < 10 ) {

         number[ i ] = i + 100;
         i = i + 1;
      }

      i = 0;
      while( i < 10 ) {
         System.out.format( "number[%d] = %d\n", i, number[i] );
         i = i + 1;
      }
   }
}

当执行上述程序时,它将生成以下结果 −

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

Arrays (Lists) in Python

Python 没有数组的概念,而是提供了另一种称为 list 的数据结构,它提供类似于任何其他语言中数组的功能。

以下是使用 Python 编写的等效程序−

# Following defines an empty list.
number = []
i = 0

while i < 10:
   # Appending elements in the list
   number.append(i + 100)
   i = i + 1

i = 0
while i < 10:
   # Accessing elements from the list
   print "number[", i,  "] = ", number[ i ]
   i = i + 1

当执行上述程序时,它将生成以下结果 −

number[ 0 ] =  100
number[ 1 ] =  101
number[ 2 ] =  102
number[ 3 ] =  103
number[ 4 ] =  104
number[ 5 ] =  105
number[ 6 ] =  106
number[ 7 ] =  107
number[ 8 ] =  108
number[ 9 ] =  109

Computer Programming - Strings

在我们关于 characters 的讨论中,我们了解到字符数据类型处理单个字符,您可以将键盘上的任何字符分配给字符类型变量。

现在,让我们稍微超前一点,并考虑一种情况,我们需要将多个字符存储在一个变量中。我们已经看到,C 编程不允许在一个字符类型变量中存储多个字符。因此,以下语句在 C 编程中无效并产生语法错误 −

char ch1 = 'ab';
char ch2 = '10';

我们还已经看到如何使用 arrays 的概念在变量中存储多个类似数据类型的值。以下是存储和打印数组中五个 int 类型数字的语法 −

#include <stdio.h>

main() {
   int number[5] = {10, 20, 30, 40, 50};
   int i = 0;

   while( i < 5 ) {
      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }
}

编译并执行上述代码后,将产生以下结果 −

number[0] = 10
number[1] = 20
number[2] = 30
number[3] = 40
number[4] = 50

现在,让我们像数字一样定义一个包含五个字符的数组,并尝试打印它们 −

#include <stdio.h>

main() {
   char ch[5] = {'H', 'e', 'l', 'l', 'o'};
   int i = 0;

   while( i < 5 ) {
      printf("ch[%d] = %c\n", i, ch[i] );
      i = i + 1;
   }
}

此处,我们使用 %c 来打印字符值。当上述代码被编译和执行后,将产生以下结果 −

ch[0] = H
ch[1] = e
ch[2] = l
ch[3] = l
ch[4] = o

如果你已经完成了上述示例,我想你已经理解了字符串在 C 编程中的工作原理,因为 strings in C are represented as arrays of characters 。C 编程简化了字符串的分配和打印。让我们用简化的语法再检查同样的示例一次 −

#include <stdio.h>

main() {
   char ch[5] = "Hello";
   int i = 0;

   /* Print as a complete string */
   printf("String = %s\n", ch);

   /* Print character by character */
   while( i < 5 ) {
      printf("ch[%d] = %c\n", i, ch[i] );
      i = i + 1;
   }
}

此处,我们使用 %s 使用数组名称 ch 打印完整的字符串值,实际上,它是保存 ch 变量的内存地址的开头,如下所示 −

string representation

虽然从上述示例中看不到,但在 C 程序中将 '\0' 空字符内部分配为每个字符串的最后一个字符。它指示字符串的末尾,意味着如果你想在数组中存储一个 5 个字符的字符串,那么你必须定义一个 6 的数组大小作为良好实践,尽管 C 不会对此提出抱怨。

如果上述代码被编译和执行,将产生以下结果 −

String = Hello
ch[0] = H
ch[1] = e
ch[2] = l
ch[3] = l
ch[4] = o

Basic String Concepts

基于上述讨论,我们可以总结 C 编程语言中有关字符串的以下重要要点 −

  1. C 中的字符串表示为字符数组。

  2. 我们可以通过将字符逐个分配给字符数组来构成 C 编程中的一个字符串。

  3. 我们可以通过分配用双引号引起来的一个完整字符串来构成 C 编程中的一个字符串。

  4. 我们可以通过使用数组下标逐个字符打印一个字符串或不带下标使用数组名称打印一个完整的字符串。

  5. 每个字符串的最后一个字符是一个空字符,即 ‘\0’

  6. 大多数编程语言提供内置函数来操作字符串,即你可以连接字符串、从字符串中搜索、从字符串中提取子字符串等。要进一步了解,你可以查看我们有关 C 编程或任何其他编程语言的详细教程。

Strings in Java

尽管你可以使用字符数组来存储字符串,但 Java 是一个高级编程语言,其设计人员尝试提供附加功能。Java 提供字符串作为内置数据类型,如同任何其他类型一样。这意味着你可以直接定义字符串,而不是将它们定义为字符数组。

以下是用 Java 编写的等价程序。Java 使用 new 运算符来创建字符串变量,如下面的程序所示。

您可以尝试执行以下程序以查看输出:

public class DemoJava {
   public static void main(String []args) {
      String str = new String("Hello");
      System.out.println( "String = " + str );
   }
}

当执行上述程序时,它将生成以下结果 −

String = Hello

Strings in Python

在 Python 中创建字符串就像使用单引号或双引号将字符串分配给 Python 变量一样简单。

下面是一个简单的程序,用于创建两个字符串并使用 print() 函数打印它们 −

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1 = ", var1
print "var2 = ", var2

当执行上述程序时,它将生成以下结果 −

var1 =  Hello World!
var2 =  Python Programming

Python 不支持字符类型;这些被当作长度为一的字符串处理,故而也被视作子字符串。

要访问子字符串,请使用方括号进行切片,同时使用索引获得你的子字符串。看一看以下代码片段 −

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

执行上述代码后,将生成以下结果 −

var1[0]:  H
var2[1:5]:  ytho

Computer Programming - Functions

函数是一个有组织的、可重复使用的代码块,用于执行单个相关操作。函数为应用程序提供更好的模块化和高度的代码重复使用。你已经看到了各种函数,如 printf()main() 。这些是由语言本身提供的内置函数,但我们也可以编写自己的函数,本教程将教你如何用 C 语言编写和使用这些函数。

函数的一个好处是它们以不同的名称而出名。不同的编程语言对它们的命名也不同,例如,函数、方法、子例程、过程等。如果你遇到任何这样的术语,那么请想象一下同样的概念,这是我们将在本教程中讨论的。

让我们从一个程序开始,在其中定义两个数字数组,然后从每个数组中找出最大的数字。以下是从给定数字集中找出最大数字的步骤:

1. Get a list of numbers L1, L2, L3....LN
2. Assume L1 is the largest, Set max = L1
3. Take next number Li from the list and do the following
4.    If max is less than Li
5.       Set max = Li
6.    If Li is last number from the list then
7.       Print value stored in max and come out
8. Else prepeat same process starting from step 3

让我们将以上程序翻译成 C 语言:

#include <stdio.h>

int main() {
   int set1[5] = {10, 20, 30, 40, 50};
   int set2[5] = {101, 201, 301, 401, 501};
   int i, max;

   /* Process first set of numbers available in set1[] */
   max = set1[0];
   i = 1;
   while( i < 5 ) {
      if( max <  set1[i] ) {
         max = set1[i];
      }
      i = i + 1;
   }

   printf("Max in first set = %d\n", max );

   /* Now process second set of numbers available in set2[] */
   max = set2[0];
   i = 1;
   while( i < 5 ) {
      if( max <  set2[i] ) {
         max = set2[i];
      }
      i = i + 1;
   }
   printf("Max in second set = %d\n", max );
}

编译并执行上述代码后,将产生以下结果 −

Max in first set = 50
Max in second set = 501

如果你对上面的示例很清楚,那么就很容易理解为什么我们需要一个函数。在上面的示例中,只有两个数字集,set1 和 set2,但考虑一种情况,我们有 10 个或更多类似的数字集,要从每个集中找出最大的数字。在这种情况下,我们将不得不重复处理 10 次或更多次,最终,该程序将因重复的代码而变得过大。为了处理这种情况,我们编写自己的函数,在其中尝试保留将在我们的编程中反复使用的源代码。

现在,让我们看看如何在 C 编程语言中定义一个函数,然后在后续部分中,我们将解释如何使用它们。

Defining a Function

C 编程语言中函数定义的常规形式如下 -

return_type function_name( parameter list ) {
   body of the function

   return [expression];
}

C 编程中的函数定义包括函数头和函数体。以下是函数的所有部分 -

  1. Return Type − 一个函数可能会返回一个值。 return_type 是函数返回的值的数据类型。某些函数在不返回任何值的情况下执行所需的操作。在这种情况下,返回类型是关键词 void

  2. Function Name − 这是函数的实际名称。函数名称和参数列表一起构成函数签名。

  3. Parameter List - 参数就像占位符。当调用函数时,你可以将值作为参数传递。此值称为实际参数或实参。参数列表是指函数的参数的类型、顺序和数量。参数是可选的;也就是说,一个函数可能不包含任何参数。

  4. Function Body − 函数主体包含一系列的陈述,定义了函数所做的事情。

Calling a Function

在创建 C 函数时,你给出了该函数要做什么的定义。要使用函数,你必须调用该函数来执行定义的任务。

现在,让我们在函数的帮助下编写上述示例:

#include <stdio.h>

int getMax( int set[] ) {
   int i, max;

   max = set[0];
   i = 1;
   while( i < 5 ) {
      if( max <  set[i] ) {
         max = set[i];
      }
      i = i + 1;
   }
   return max;
}
main() {
   int set1[5] = {10, 20, 30, 40, 50};
   int set2[5] = {101, 201, 301, 401, 501};
   int max;

   /* Process first set of numbers available in set1[] */
   max = getMax(set1);
   printf("Max in first set = %d\n", max );

   /* Now process second set of numbers available in set2[] */
   max = getMax(set2);
   printf("Max in second set = %d\n", max );
}

编译并执行上述代码后,将产生以下结果 −

Max in first set = 50
Max in second set = 501

Functions in Java

如果你对 C 编程中的函数很清楚,那么在 Java 中也容易理解它们。Java 编程语言将它们命名为 methods ,但其余概念仍然或多或少相同。

以下是用 Java 编写的等效程序。你可以尝试执行它以查看输出:

public class DemoJava {
   public static void main(String []args) {
      int[] set1 = {10, 20, 30, 40, 50};
      int[] set2 = {101, 201, 301, 401, 501};
      int max;

      /* Process first set of numbers available in set1[] */
      max = getMax(set1);
      System.out.format("Max in first set = %d\n", max );

      /* Now process second set of numbers available in set2[] */
      max = getMax(set2);
      System.out.format("Max in second set = %d\n", max );
   }
   public static int getMax( int set[] ) {
      int i, max;
      max = set[0];
      i = 1;

      while( i < 5 ) {
         if( max <  set[i] ) {
            max = set[i];
         }
         i = i + 1;
      }
      return max;
   }
}

当执行上述程序时,它将生成以下结果 −

Max in first set = 50
Max in second set = 501

Functions in Python

再一次,如果你知道 C 和 Java 编程中的函数概念,那么 Python 也没有什么不同。以下是 Python 中定义函数的基本语法:

def function_name( parameter list ):
   body of the function

   return [expression]

使用 Python 中的此函数语法,上面的示例可以这样编写 −

def getMax( set ):
   max = set[0]
   i = 1

   while( i < 5 ):
      if( max <  set[i] ):
         max = set[i]

      i = i + 1
   return max

set1 = [10, 20, 30, 40, 50]
set2 = [101, 201, 301, 401, 501]

# Process first set of numbers available in set1[]
max = getMax(set1)
print "Max in first set = ", max

# Now process second set of numbers available in set2[]
max = getMax(set2)
print "Max in second set = ", max

执行上述代码后,将生成以下结果 −

Max in first set =  50
Max in second set =  501

Computer Programming - File I/O

Computer Files

计算机文件用于以纯文本、图像数据或任何其他内容之类的数字格式存储数据。可以将计算机文件组织在不同的目录中。文件用于保存数字数据,而目录用于保存文件。

计算机文件可以被视为纸质文件的数字对应物。在编程时,在带有不同扩展名的文本文件中保存源代码,例如,C 编程文件以 .c 扩展名结尾,Java 编程文件以 .java 结尾,Python 文件以 .py 结尾。

File Input/Output

通常,使用文本编辑器(如记事本、MS Word、MS Excel 或 MS Powerpoint 等)创建文件。但是,许多时候,我们也需要使用计算机程序创建文件。我们可以使用计算机程序修改现有文件。

文件输入表示写入文件的数据,文件输出表示从文件中读取的数据。实际上,输入和输出项更与屏幕输入和输出相关。当我们在屏幕上显示结果时,称为输出。同样,如果我们从命令提示符向程序提供一些输入,则称为输入。

现在,记住这一点就足够了:写入文件是文件输入,从文件中读取内容是文件输出。

File Operation Modes

在我们开始使用计算机程序处理任何文件之前,我们需要创建一个新文件(如果它不存在)或打开一个已存在的文件。在这两种情况下,我们都可以在以下模式下打开文件 −

  1. Read-Only Mode − 如果要仅仅读取现有文件且不希望在文件中写入任何进一步内容,那么将以只读模式打开该文件。几乎所有编程语言都提供以只读模式打开文件的语法。

  2. Write-Only Mode − 如果要写入现有文件或新创建的文件,但不想从中读取任何已写入内容,那么将以只写模式打开该文件。所有编程语言都提供以只写模式打开文件的语法。

  3. Read &amp; Write Mode − 如果要读取和写入同一文件,那么将在读写模式下打开文件。

  4. Append Mode − 为写入目的打开文件时,它允许你从文件的开头开始写入;但是,它将覆盖现有内容(如果有)。假设我们不想覆盖任何现有内容,那么我们将在追加模式下打开该文件。追加模式最终是一种写入模式,它允许将内容附加到文件的末尾。几乎所有编程语言都提供以追加模式打开文件的语法。

在随后的章节中,我们将了解如何打开一个新文件、如何写入该文件以及如何在同一文件中读取和追加更多内容。

Opening Files

你可以使用 fopen() 函数创建新文件或打开现有文件。此调用将初始化一个 FILE 类型的对象,该对象包含控制流所需的所有信息。以下是该函数调用的原型,即签名 −

FILE *fopen( const char * filename, const char * mode );

在此, filename 是字符串字面量,将使用它来命名文件和访问 mode 可以具有以下值之一 −

Sr.No

Mode & Description

1

r 打开一个现有的文本文件以供读取。

2

w 以可写格式打开文本文件。如果它不存在,则创建一个新文件。在此,你的程序将从文件的开头开始写入内容。

3

a 以追加模式打开文本文件进行写入。如果它不存在,则创建一个新文件。在此,你的程序将开始在现有文件内容中追加内容。

4

r+ 为读取和写入打开一个文本文件。

5

w+ 以读写格式打开文本文件。如果存在,则首先将其截断为零长度;否则,如果不存在,则创建文件。

6

a+ 以读写格式打开文本文件。如果它不存在,则创建一个文件。读取将从开头开始,但只能追加写入。

Closing a File

要关闭文件,请使用 fclose( ) 函数。此函数的原型为 −

 int fclose( FILE *fp );

fclose( ) 函数在成功时返回零,或在关闭文件时出错时返回 EOF 特殊字符。此函数实际上会将缓冲区中仍处于未决状态的任何数据写入至文件,关闭文件并释放用于该文件的所有内存。EOF 是在头文件 stdio.h 中定义的常数。

C 标准库提供了用于逐个字符或以固定长度字符串形式读写文件的各种函数。我们将在下一节中了解其中的一些函数。

Writing a File

下面列出用于将单个字符写入流的最简单的函数 −

int fputc( int c, FILE *fp );

函数 fputc() 将参数 c 的字符值写入由 fp 引用的输出流。它会在成功时返回已写入的字符,否则如果出错,则返回 EOF 。您可以使用以下函数将以 null 结尾的字符串写入流 −

int fputs( const char *s, FILE *fp );

函数 fputs() 将字符串 s 写入由 fp 引用的文件中。它在成功时返回一个非负值,否则在出现任何错误的情况下返回 EOF 。您还可以使用函数 int fprintf(FILE *fp,const char *format, …​) 将字符串写入文件中。请尝试以下示例 −

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

编译并执行以上代码时,它将在 /tmp 目录中创建一个新文件 test.txt ,并使用两个不同的函数写入两行。让我们在下一节中读取此文件。

Reading a File

下面列出用于逐个字符读取文本文件的最简单的函数 −

int fgetc( FILE * fp );

fgetc() 函数从由 fp 引用的输入文件中读取字符。返回值是所读取的字符;或在出现任何错误的情况下,它会返回 EOF 。以下函数允许您从流中读取字符串 −

char *fgets( char *buf, int n, FILE *fp );

函数 fgets() 从由 fp 引用的输入流中最多读取 n - 1 个字符。它将读取的字符串复制到缓冲区 buf 中,并追加一个 null 字符来终止该字符串。

如果此函数在读取到最大字符数量之前遇到换行符 '\n' 或 EOF,那么它只会返回已读取到的字符(包括换行符)。您还可以使用 int fscanf(FILE *fp, const char *format, …​) 从文件中读取字符串,但它会在遇到第一个空格字符后停止读取。

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

编译并执行以上代码时,它将读取上一节中创建的文件,并生成以下结果 −

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

让我们分析一下这里发生了什么。首先, fscanf() 方法读取 This ,因为之后它遇到了一个空格。第二个调用是 fgets() ,它读取到遇到行尾为止的剩余行。最后,最后一个调用 fgets() 完全读到了第二行。

File I/O in Java

Java 提供了更丰富的函数集来处理文件 I/O。有关此主题的更多信息,我们建议您查看我们的 Java 教程。

在这里,我们将看到一个简单的 Java 程序,它等同于上面介绍的 C 程序。此程序将打开一个文本文件,向其中写入几行文本,并关闭该文件。最后,打开相同的文件,然后从已创建的文件中读取。您可以尝试执行以下程序以查看输出 −

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");

      // Create a File
      file.createNewFile();

      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file);

      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");

      // Flush the memory and close the file
      writer.flush();
      writer.close();

      // Creates a FileReader Object
      FileReader reader = new FileReader(file);
      char [] a = new char[100];

      // Read file content in the array
      reader.read(a);
      System.out.println( a );

      // Close the file
      reader.close();
   }
}

当执行上述程序时,它将生成以下结果 −

This is testing for Java write...
This is second line...

File I/O in Python

以下程序展示了相同的打开新文件、向其中写入一些内容的功能,最后,读取相同的文件 −

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

执行上述代码后,将生成以下结果 −

This is testing for Python write...
This is second line...

Computer Programming - Summary

感谢您耐心阅读本教程。我们已经尽量简明扼要,但由于本主题包含多个主题,我们已经详细展示了一些示例。

如果您没有理解任何概念,那么我们建议您再仔细阅读一遍本教程,一旦您理解了本教程中介绍的概念,就可以继续学习了。

还有许多与计算机编程相关的其他主题,我们故意没有介绍,以避免造成混乱,但我们确信只要您理解本教程中介绍的概念,那么理解这些概念对您来说并不困难。

在 tutorialspoint,我们付出了很多努力来准备有关 C、Java 和 Python 编程语言的综合教程,我们强烈建议您在完成本教程后开始学习其中任何一种语言。

[role="bare"]../cprogramming/index.html

[role="bare"]../java/index.html

[role="bare"]../python/index.html

如果需要对教程提出建议,请在主题栏中提到教程名称,然后将你的想法分享给我们,邮箱地址为 * webmaster@tutorialspoint.com* 。如果您对改进本教程有任何建议,欢迎随时向我们提出。