c语言程序设计前六张理解与感悟
学习C程序这门课几个月了,这是我们学的第一门专业课。在大学里,C语言不但是我们计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。所以作为我这个计算机专业的学生来说当然十分重要老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。
课程目标:学会自学,习惯用程序解决实际问题。
学习方法:了解知识框架,在实践中理解细节,要学以致用。
第一章:c语言概述信息
// 我的第一个程序(C++)
#include <iostream.h>
using namespace std;
int main() {
cout << “Hello World!”;
return 0;
}
上面显示了我们的第一个程序的源代码,代码文件名称为hellowworld.cpp。以上程序是我们学会写的第一个程序,它的运行结果是在屏幕上打出”Hello World!”这句话。 虽然它可能是C++可写出的最简单的程序之一,但其中已经包含了每一个C++程序的基本组成结构。
// 我的第一个程序( C++)
这是注释行。所有以两个斜线符号(//)开始的程序行都被认为是注释行,这些注释行是我们写在程序源代码内,用来对程序作简单解释或描述的, 对程序本身的运行不会产生影响。
#include
以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子# include < iostream.h > 告诉编译器的预处理器将输入输出流的标准头文件(iostream.h)包括在本程序中。这个头文件包括了C++中定义的基本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用到它的功能。
using namespace std;
C++标准函数库的所有元素都被声明在一个名空间中,这就是std名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。这条语句在使用标准函数库的C++程序中频繁出现,本教程中大部分代码例子中也将用到它。
int main()
这一行为主函数(main function)的起始声明。main function是所有C++程序的运行的起始点。 不管它是在代码的开头,结尾还是中间 – 此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有C++程序都必须有一个main function。
main 后面跟了一对圆括号(),表示它是一个函数。C++中所有函数都跟有一对圆括号 (),括号中可以有一些输入参数。如例题中显示,主函数(main function)的内容紧跟在它的声明之后,由花括号 ({})括起来。
cout << “Hellow World!”;
这个语句在本程序中最重要。 cout 是C++中的标准输出流(就是屏幕),这句话把一串字符串(”Hello World”)插入输出流中。cout 在的声明在头文件iostream.h中,所以要想使用cout 必须将该头文件包括在程序开始处。
注意这个句子以分号(;)结尾 。分号标示了一个语句的结束,C++的每一个语句都必须以分号结尾。忘加分号就是错误的。
return 0;
返回语句(return) 引起主函数 main()执行结束,并将该语句后面所跟代码(在本例中为0) 返回。这是在程序执行没有出现任何错误的情况下最常见的程序结束方式、
第二章:c数据类型
C语言的数据类型总的来说可以按如下来分类:
数据类型分为基本数据类型和复合数据类型。基本数据类型又分为空类型(void)、字符型(char)和数值型(numeric),复合数据类型又分为数组、结构、联合、枚举和指针。基本数据类型中数值型又可以分为实型和整型,实型分为单精度(float)和双精度(double),整型分为短整型(short)、整型(int)、长整型(long),无符号只需在前面加上unsighed即可。
二、常量和变量
1.常量:常量是指在程序运行中不能被改变的量。
1)常量分为直接常量和符号常量,直接常量分为整型、实型、字符型和字符串。
2)字符型常量常用单引号‘’括起来,通常是一个字母或者转义字符,例如‘a’,‘\n’。字符串常量常用双引号括起来,例如“How are you”。
3)符号常量是用标识符来表示一个数据,在程序中不能给他赋值。通常的格式为#define 标识符 常量数据,例如#define PI 3.14,表示的是定义了PI 的数值为3.14。
2.变量
1)变量以字母或下划线开头,由数字、字母和下划线组成,如int a,但不能采用系统关键字,如printf,int等。
2)每个变量都需要初始化,给变量赋初值的过程成为初始化。
3)变量分为整型、实型和字符型变量。
变量或数据类型所占空间大小:
1MB=1024KB=1024B*1024=1048576B;
8bit=1Byte;
1024KB=1MB;
1024MB=1GB;
1024GB=1TB;、
可以使用sizeof来计算所占空间,sizeof是c语言的关键字并非函数,即:sizeof(变量名)
第三章:简单算术运算和表达式
运算符与表达式
基本运算符和表达式分为6种:算数运算符和表达式、赋值运算符和表达式、关系运算符和表达式、逻辑运算符和表达式、条件 运算符和表达式、逗号运算符和表达式。
算数运算符和表达式
①算数运算符有+、-、*、/、%(取余),优先级为先乘除后加减,%和乘除优先级相同。
②算数表达式由算术运算符和操作数组成,遵循从左到右的运算法则,在参与运算的过程中如果数据类型不一致需要先转成相同类型的数据类型然后再进行计算。在数据转换时有一个隐性规则char,short→int→float→double,但并不是说一定要转成double型,而是根据算式中最高级来决定的。
算术运算符:
除法运算和取余运算
1)”/”号两端都是整数时,结果也为整数且向0取整
2)“%”两侧均应为整型数据,
算术表达式:
算术表达式是由算术运算符和操作数组成的表达式。表达式的值是一个数值,表达式的类型具体由运算符和操作数确定。
例如: 5+3*(6-2) 表达式的类型为int 型。
3+4.0-3/2.0 表达式的类型为double型。
通常参与运算的数据类型不完全一致,操作时应先将其转换成相同的数据类型,然后操作。
自增自减运算符:
自增运算符“++”与自减运算符“–”都是单目运算符的一种。根据它们所处操作数的位置可以分为前缀和后缀形式,这两种形式在某些情况下产生的效果是一毛一样的。但我们更关心是它们的不同之处,下来就看看它们不同之处的本质区别在哪!
前缀形式的++操作符出现在操作数的前面。
例如: ++a;
说明: 操作数的值被相加,而表达式的值就是操作数增加后的值。
举例: int a, b = 1;
a = ++b; //b增加至2,a得到的值为2
后缀形式的++操作符出现在操作数的后面。
例如: a++;
说明: 操作数的值仍被相加,而表达式的值是操作数增加前的值。
举例: int a, b = 1;
a = b++; //b增加至2,a得到的值为1
const常量:
任何不会修改数据成员的函数都应该声明为const类型const是C++中的一个关键字,为什么会有const呢?主要是为了弥补因宏define产生的一些语法的错误。define就是传统的宏定义,将某些常量赋值给一个变量,但由于宏定义在编译过程中只是单纯的进行赋值替换,并不会对赋值语句进行检查,因此会存在很多潜在的威胁,一旦定义出错,整个调用过程也讲出错。所以为了避免这种错误才提出了用const来代替。
调用形式:const 类型 变量名 = 常量;
每个const常量都必须进行初始化。例子:const int a = 10;a就是一个整型常量;
常用标准数学函数:
sqrt(x) 计算x的平方根,x应该大于0 exp(x) 计算e的x次方的值
fabs(x) 计算x的绝对值
log(x) 计算lnx的值,x应该大于0
pow(x,y) 计算x的y次方的值
第四章:键盘输入和频幕输出
输入:
scanf() 是最灵活、最复杂、最常用的输入函数,但它不能完全取代其他函数,大家都要有所了解。
scanf()函数:
scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入。我们先来看一个例子:
#include <stdio.h>
int main()
{
int a, b, c, d;
scanf("%d", &a);
scanf("%d", &b);
printf(“a+b=%d\n”, a+b);
scanf("%d %d", &c, &d);
printf("cd=%d\n", cd);
return 0;
}
输入单个字符
scanf 用于接收用户输入的各种数据,如果仅仅是输入单个字符,也可以使用 getchar()、getche() 或 getch()。
getchar() 使用示例:
#include <stdio.h>
int main()
{
char c;
c=getchar();
printf(“c=’%c’\n”, c);
return 0;
}
输出:
从文件内容输出可以使用fprintf
如: printf(fp, “%d”, num); //将num变量的值输出到文件fp
第五章:选择控制结构
用于单分支控制的条件语句:
格式: if(表达式P) 语句A
#include<stdio.h>
main()
{
int a,b,max;
printf(“Input a,b:”);
if(a>b) max = a;
if(a<=b) max = b;
printf(“max = %d\n”,max);
}
可以只有if,但是不能只有else
用于双分支控制的条件语句
格式:if(表达式P) 语句1
else 语句2
#include <stdio.h>
main ()
{
int a,b,max;
printf(“Input a,b:”);
scanf("%d,%d",&a,&b);
if(a.b) max = a;
else max = b;
printf(“max = %d\n”,max);
}
用于多分支控制的条件语句
if (表达式) 语句1
else if(表达式2) 语句2
.
.
.
else if (表达式m) 语句m
else 语句+1
所有的else if语句同时判断,如果某一个else if 语句达到要求就不会运行其他的判断语句
调用函数exit()需要在程序开头包含头文件stdlib.h
函数exit()的作用是终止整个程序的执行,强制返回操作系统
用于多路选择的switch语句
switch (表达式)
{
case 常量1:
可执行语句序列1
case 常量2:
可执行语句序列2
.
.
.
case 常量2:
可执行语句序列n
default:
可执行语句序列n+1
}
switch 语句相当于一系列的if-else语句,被测试的表达式写在关键字switch后面的圆括号中,表达式只能是char型或int型,这在一定程度上限制了switch语句的应用
注意,常量与case中间至少有一个空格,常量后面是冒号,常量的类型与switch后括号内表达式的类型一致
例:简单计算机
#include <stdio.h>
main ()
{
int data1,data2;
char op;
scanf("&d&c&d",&datal1,&op,&datal2);
switch(op)
{
case’+’:
printf("%d+%d =%d\n",datail1,datal2,datal1+datal2);
break;
case’-’:
printf("%d-%d =%d\n",datail1,datal2,datal1-datal2);
break;
case’’:
printf("%d%d =%d\n",datail1,datal2,datal1*datal2);
break;
case’/’:
if(0==datal2)
printf(“Division by zero!\n”);
else
printf("%d/%d =%d\n",datail1,datal2,datal1/datal2);
break;
default:
printf(“Invalid operator!\n”);
}
}
第六章:循环控制结构
for循环体语句
表达式
第一个表达式进行初始化,它在for循环开始时执行一次,用于在循环开始前为循环变量赋初值。
第二个表达式是判断条件,在每次执行循环前都要对它进行求值。当表达式为假是,循环结束。
第三个表达示进行改变或称为更新,它在每次循环结束时进行计算。
循环控制语句是在循环控制条件成立的情况下被反复执行的语句。
但是在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行。
for循环语句是c语言种功能最为强大的语句,甚至在一定程度上可以代替其他的循环语句。
while循环:
while(表达式)
{
语句;
}
先判断表达式的真假,当表达式为真则继续循环,为假则结束循环。
do while循环:
do{
语句;
}while(表达式);
先执行语言,再判断表达式的真假。为真继续循环,为假结束循环。
do while 里面的语句至少执行一次。
以上就是我经过几个月的学习对c语言程序设计这门可的理解与感悟。