大家可能都很熟悉c这个名词,那么C是什么?C是一门语言,就好比我们学习的英语一般,它有专门的语法和逻辑。打个比方说:我们之间可以用汉语谈话,那么我们和机器之间就可以用C交流。那么,我们为什么要用C呢?那就是C具有多种特性:控制特性、高效性、可移植性、灵活性等。
首先我们要明白编程的7个编写步骤:
1. 定义程序目标(对程序能做什么有一个清晰的想法,考虑到程序所需信息、计算操作等)
2. 设计程序(决定程序如何完成它应该完成的事,用户界面事什么样的,该如何组织,目标用户是谁,用多长时间来完成这个程序?)
3. 编写代码(进行程序源代码的编写,注意其代码的规范与注释的清晰。)
4. 编译(就是将源代码转换成可执行代码,可执行代码是计算机的本机语言或机器语言表示的代码。其实,编译的工作是由编译器完成的,而编译器则是一个程序:如我们用的一些开发工具等。)
5. 运行程序
6. 测试和调试程序
7. 维护和修改程序
这是我们编写程序的基本步骤,这些步骤将整个编程工作细化、分割,方便我们有条理的去进行复杂的编程工作。
编写程序当然需要编写工具,我用的是Microsoft Visual Stduio 6.0,建一个工程的步骤是:
1. 单击File菜单,New选项。默认是project选项卡。选择Win32 Console Application(因为我们是学习的是控制台应用程序)
2. 选好程序类型后,填好工程名和保存位置。继续根据提示,选An empty project。
3. 在点击File菜单New选项,选类型C++ Source File,表示要建一个源文件,填好文件名。
说了这么多,把C的语法格式介绍给大家:
预处理头文件
主函数
{
语句1;//注释
…
语句n;
返回值;
}
#include<stdio.h>
int main(void)/*一个简单的C程序*/
{
int num;/*定义一个名为num的变量*/
num=1;//为num赋一个值
printf("I am a simple computer./n");//输出“I am a simple computer.”并换行
printf("My favorite number is %d because it is first./n",num);
return 0;
}
这里的#include是C预处理指令的一个例子,通常C编译器在编译前要对源代码做一些准备工作:这称为预处理。stdio.h文件作为所有C编译包的一部分提供,它包含了有关输入和输出函数的信息以供编译器使用。最重要的是,头文件包括了建立最终的可执行程序时编译器需要用到的信息。(例如:可以定义常量,或说明函数名以及该函数名的用法)。
接下来的int main()时申明了一个main函数。一个C程序总是从main()函数开始执行的,而()这对符号则是说明main是一个函数,括号里面一般包含传递给函数的信息,例子中没有传递任何信息。要求大家记住的是,这个函数就C程序的基本模块,并且一个c源程序中只能有一个main函数。int则是指明了main()函数的返回类型是整数类型。
printf与scanf是标准输出输入函数。而运行中显示的“Press any key to continue”是由系统给出的。表示程序运行已经结束。{...}花括号是用来表示程序的开始结束的,它们是必不可少的。并且,花括号还可以将函数中的语句聚集到一个单元或代码块中。
由于我们使用的操作系统一般都是windows的,然而可能遇到一个问题:显示程序执行的窗口在终止时突然消失。如果遇到这种情况就可以在程序的“return;”语句之前键入getchar();语句让程序暂停,直到按下enter键为止。
我们编写的程序最好写注释,方便自己,也方便别人。这里分为两种方式
1. /*…*/ 用于占多行来写注释。
2. // 这种注释方式必须背限制在同一行内,否则就会产生错误!
心得:我在初识这些内容,也是充满疑惑。古语有云:“一口吃不成一个大胖子”。要分开来消化,才会融入自己的身体。但一定要保持那种饥饿感,那样才能使自己更加强壮。在学一种语言时,一定要记住它的语法格式,那样才能与电脑沟通。就像你与一个不会讲中国话的人讲中国的方言,结果不言而喻。
随着自己的深入,逐渐接触到一些数据类型。Eg:整数1、2、3等。小数1.2、2.3等。字母A、a等。然而了解这些数据十分重要,就像在沙漠中水的地位。
在选择数据类型时,应尽量满足使用的要求,也要有“节约资源”的好习惯,不同大小的数据对应其适合的类型。
因为一个变量所占的内存的空间和它的数据类型有关,接下来给大家介绍数据类型的相关定义与特点。
n 整型 :即整数。可用来表示学号、职工号等。整型无法表示小数,范围也不大,但运算却十分 精确,不会发生四舍五入的情况。
n 实型:即实数,分浮点型和双精度型。两者主要的区别表示范围不同和占用的存储空间不同。可用两种方式表示实数。
u 小数形式,如0.1,0.3等。
u 指数形式:即科学计数法。如0.25E5表示0.25×105.其中E表示10的多少次方,也可用小写。注意:在E之后的指数必须是整数。
n 字符型;如:char a,一个字符型变量可以存放一个半角字符或一个转义字符。转义字符仍作为一个字符处理。
在上面的那个例子,我定义一个变量,那是为什么?我们知道计算机有存储的功能,在设计程序的时候,我们要存储的数据放在一个叫变量的东西里,它好比一个箱子,而数据就是箱子里的物品,当然,在我们存储之前必须要创建这么一个“箱子”,及创建一个变量,这个创建变量的语句又称为变量的声明。
它的语法格式为:
Ø 变量数据类型 变量名1,变量名2,…,变量名n;
在上面那个例子中,声明变量后,下面的语句中才能调用num这个变量。
然而有变量就会有常量。常量分两种:一种是文字常量,比如整型1,3等,字符型char a;另外一种则是自己声明的常量,它的表达与变量有些类似。声明一个常量的语法格式为:
Ø const 数据类型 常量名=文字常量;
Eg:输入圆半径的值,求圆周长。
#include<stdio.h>
void main()
{
float l,r;//变量的声明
const float pi=3.14159265;//常量的声明
printf("输入数字");
scanf("%f",&r);
l=2*pi*r;
printf("%f",l);
return 0;
}
有数据的运算就会有数据类型的转化。转化分为两种(即隐式转化与显示转化)。一个int + double型,类型为隐式转化,最后结果为double型,这里看出隐式转化不会丢失数据。而double dAn=3.2344 转化为int iAn=3,小数部分被舍去。说明显示转化会丢失数据。
前面提到了常量与变量,然而它们的命名又是怎样的?就跟我们自己的名字一样,有着一定的规则,命名时应注意以下几点:
1. 第一个字符必须是字母或下划线。
2. 不能与保留字重名如:int,double等。
3. 对大小写敏感。
4. 只能由字母,数字,下划线组成。
这里有两种写法:
1) 驼峰标记法:numOfStudent、typeOfBook等。
2) 匈牙利标记法:表示学生的整型变量可以写成iNumOfStudent;表示结果为浮点型变量则可写成fResult;推荐使用匈牙利标记法,因为它是变量的类型开头的。一看就知道是什么类型。
常用的运算符
1. 算术运算符(+、-、*、/、%)
这里重点介绍“/”与“%”
a) “/”有两种含义:1.当除号两边均为整型数据时为整除,即商的小数部分被截去(不是四舍五入)。2.除号两边只要有一个为实型数据,那么就做除法,小数部分保留。
b) “%”称为取余操作符,eg:7%3结果为1.注意:在取余操作符两边都应该为整数,否则无法通过编译。
2. 赋值操作符( = )
“=”它是将右边的值赋给左边的变量或常量,注意它与= =有区别,“= =”是C的相等运算符,如:i==1它是判断i是否等于1。
3. 逻辑运算符
! 逻辑非运算符
&& 逻辑与运算符
|| 逻辑或运算符
4. 自增自减运算符(自增(++)、自减(--))
a++等价于a=a+1;a--等价于a=a-1;
注意:自增、自减符号既可位于变量的前面(称之为前缀),也可位于变量的后面(称之为后缀)。在单独作为一个表达式时“a++”与“++a”效果一样。都是变量自增。若作为一个复杂的表达式eg:(a++)+b与(++a)+b。前缀“++”表示先将变量自身的值加1,然后将增1后的变量参与表达式的运算,而后缀“++”表示变量先参与表达式运算,然后本身再增1。若a=1,b=2;则(a++)+b结果为3,而(++a)+b结果为4.自减运算符类似。并且,自增、自减的优先级只比圆括号的优先级低,与逻辑非运算等级。
条件语句
在我们生活中,对于可能发生的事,我们经常说如果…,那么…。在C++有这样的语句。格式为:
If(条件)
{
语句1;
… 语句块
语句n;;
}
注意:if语句的结束是没有分号的,分号只属于语句块中的各个语句。举个例子,当输入1~7这几个数时,电脑分别输出星期几。程序如下:
#include<stdio.h>
int main ()
{
int n;//声明一个变量
printf("输入一个数字");
scanf("%d",&n);//给这个变量输入一个值
if(n==1) printf("星期一");//判断变量值,然后给出显示
if(n==2) printf("星期二");
if(n==3) printf("星期三");
if(n==4) printf("星期四");
if(n==5) printf("星期五");
if(n==6) printf("星期六");
if(n==7) printf("星期天");
if(n<1||n>7) printf("输入错误");
return 0;
}
还有一种就是如果…,否则…。在C++中它的语法格式为:
If(条件)
语句1;
Else
语句2;
例如:比较两个数的大小,从大到小排列
#include<stdio.h>
int main ()
{
int a,b;//声明变量
printf("输入两个数字,数字之间用空格分开/n");
scanf("%d %d",&a,&b);//给变量分别输入一个值
if(a>=b)
{
printf("按大到小的顺序排列%d %d/n",a,b);
}
else
{
printf("按大到小的顺序排列%d %d/n",b,a);
}
return 0;
}
如果里的如果——if嵌套
下面来看一个例子来熟悉if嵌套
比较三个数的大小
#include<stdio.h>
int main()
{
int a,b,c;//声明三个变量
printf("输入三个不同的数,数字之间用空格隔开:");
scanf("%d %d %d",&a, &b, &c);
if(a>b)
{
if(b>c)
{
printf("%d > %d > %d/n",a,b,c);
}
else
{
if(a<c)
{
printf("%d > %d > %d/n",c,a,b);
}
else
{
printf("%d > %d > %d/n",a,c,b);
}
}
}
else
{
if(a>c)
{
printf("%d > %d > %d/n",b,a,c);
}
else
{
if(b>c)
{
printf("%d > %d > %d/n",b,c,a);
}
else
{
printf("%d > %d > %d/n",c,a,b);
}
}
}
return 0;
}
循环语句
循环控制语句提供重复处理能力,当某以特定条件为true时,循环语句就重复执行,并且每循环一次,就会测试下一次循环条件,如果为false,则循环结束,否则继续循环。这里介绍三种循环:while、do-while和for循环语句。三者可以完成类似的功能,不同的是它们控制的循环方式存在差异。
1. while 语句格式:
while (条件表达式)语句;
当“条件表达式”的运算结果为true时,则重复执行“语句”。每执行一次“语句”后,就会重新计算一次“条件表达式”,当该表达式的值为false时,while循环结束。
#include<stdio.h>
int main()
{
int num=0;
while(num<3)
{
printf("num is %d/n",num);
num++;
}
printf("That is all this program does/n");
return 0;
}
2. do-while语句
语法格式:
do
语句;
while(条件表达式);
do-while语句每一次循环执行一次“语句”,然后计算“条件表达式”是否为true,如果是则继续循环。不同点:do-while循环中的“语句”至少会执行一次,而while语句当条件第一次就不满足时,语句一次也不会执行。
在命令提示符中输入数据的时候一般只能输入一次,想再输入其他数据时,又要重新运行程序。讲到这里先给大家看一段程序:
#include<stdio.h>
int main()
{
const int num=13;
int nub;
do
{
printf("输入13退出程序");
scanf("%d",&nub);
}
while (nub!=num);
printf("程序结束");
return 0;
}
3. for循环
for循环的语法格式:for(条件1;条件2;条件3)
语句块;
eg:计算整数1~100的和
#include<stdio.h>
int main()
{
int sum=0;
int i;//声明变量
for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("%d/n",sum);//输出结果
return 0;
}
这里创建一个变量sum=0,遇到for语句,判断i是否小于等于100,满足(i=1<100),则继续执行sum=sum+i语句,即sum=0+1,第一次循环完毕。此时sum=1。i=i+1即i=2,继续判断i是否小于等于100,满足(i=2<100),于是继续执行sum=sum+i语句,即sum=1+2,第二次循环完毕,以下同理。循环100次后输出结果为5050。
这里用到了累加法,即i=i+1。即在自身的数值上加1。
有时我们经常遇到一些循环体,即循环里又套了一个循环,eg:用for循环实现下面的图形:
#include<stdio.h>
int main()
{
int i;
for(i=1;i<=5;i++)
{ int j;
for(j=5;j>=i;j--)
{
printf("*");
}
printf("/n");
}
return 0;
}
首先判断i是否小于等于5,满足(i=1<5),则继续判断j是否大于等于i,满足(j=5>i=1),则输出星号,内循环继续。此时运算“j--”即j=4,继续判断j是否大于等于i,满足(j=4>i=1)。输出星号。当j=1时,继续判断j是否大于等于i,满足(j=i)。输出星号。继续运算“j--”即j=0, 继续判断j是否大于等于i,不满足(j=0<i=1)。退出内循环。继续运算“i++”,即i=2,判断i是否小于等于5,满足(i=2<5),则继续判断j是否大于等于i,满足(j=5>i=2),输出星号,内循环继续。以下同理。
这个程序设计的理念:外循环控制循环的次数,而内循环控制输出星号的个数。关键点:内循环中的“j>=i;”。我们称为变量的互控。