学习程序设计的目的是什么呢?
不一定要做出一个软件或系统出来,更重要的是理解计算机是如何工作的以及它的长处和短处。
计算机本身是无意识的,因此我们要求它为我们做事时:应该将步骤细化、"直"化(规律化);其实计算机什么也不会,我们必须手把手地教他一步一步的做。而计算机的某个优点也正是如此------听话,你叫它往东它绝不往西。然后我们还得教计算机哪些步骤串成一个功能,而此种联系、规范就是程序!而我们通过编程语言来交流、认识计算机。
cpp
int u = 32;
int v = 26;
while(v != 0){
int temp = u%v;
u = v;
v = temp;
}
printf("%d", u);
("程序画"一览)
- 计算机做的所有事情都叫 计算(万物皆数)
- 计算的步骤就是算法
计算机的思维方式:重复
人类最讨厌做重复的事情了,而计算机恰恰相反------它最喜欢做重复的事情。在计算机的世界里当你造出第一个轮子时,那么距离造出成千上万的轮子就不远了。
编程语言单以执行方式分类:
- 解释:同声传译
- 编译:翻译出书
C 语言
C 是一种比较基础的编程语言,其后的语言几乎都是"C-like"语言。(语言的能力/适用领域主要由其函数库决定的)
变量(缓冲数据)
将一个数据用变量缓冲下来,这就能确保它能参与到后面的计算中。格式如下:
<类型名称> <变量名称>;
C 的保留字一览:
auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,ifint,long,registerreturn,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while,inline.restrict
所谓赋值和初始化
"="可用作赋值,即把右边的值赋值给左边:<------
初始化:在定义的同时就已经赋值了
注意!C 是一种有类型的语言,所有变量在使用前必须定义或声明(即所有变量都应有确定的数据类型)。数据类型表明在变量可以存储什么样的数据(是一种指定规范)
读值
cpp
scanf("%d", &price);
其中"&"是取地址符,自己可以 try 一 try!
常量(固定不变的数)
在运算过程中值不变的数就是常量(直接量 literal),以下是定义示例:
cpp
const int AMOUNT = 100;
运行逻辑
if...else
cpp
1.
if(逻辑表达式) {
}
2.
if(逻辑表达式) {
}else {
}
3.
if(逻辑表达式) {
}else if(逻辑表达式){...}...
|-----|-------|
| 运算符 | 意义 |
| = | 相等 |
| != | 不相等 |
| > | 大于 |
| >= | 大于或等于 |
| < | 小于 |
| <= | 小于或等于 |
[逻辑表达式(条件)]
循环*
- while:不确定循环次数多用此
- do...while:至少执行一次的循环
- for:已确定循环次数多用此
(数据类型就不全说了,上网查吧!)
数组
数据可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据,我们可以用数组来保存这些数据,而不是用很多个独立的变量。数组是长度固定的数据结构,用来存放指定的类型的数据。一个数组里可以有很多个数据,所有的数据的类型都是相同的。(引用一手)
cpp
const int number = 10;
int x;
int count[number];
int i;
for(i=0; i<number; i++) {
count[i] = 0;
}
scanf("%d", &x);
while(x!=-1) {
if(x>=0 && x<=9) {
count[x]++;
}
scanf("%d", &x);
}
for(i=0; i<number; i++) {
printf("%d:%d\n", i, count[i]);
}
函数(一块代码)y=f(x)
main() 函数是 C 语言程序的正式入口!
函数的好处:提高了代码复用性和可读性及更方便的调用调试。
函数接收0/若干个参数,做个事情并返回0/若干个值
函数原型:就是提前写出函数头而未有函数体,目的是先告诉编辑器这个函数的基本信息(参数列表定义等等)
每个函数都有自己的变量空间,其参数也位于这个独立的空间中,与其它函数无关(一般叫函数参数表中的参数为"形式参数",而实际调用函数时给的值称作"实际参数")
扩展:
- 变量的生存期和作用域
- 二维数组 如 int a[3][5];(通常理解为一个3行5列的矩阵)
注意!C 语言不允许函数嵌套定义
井字棋(第一个 C语言程序)
cpp
#include <stdio.h>
int main() {
int board[3][3] = {{0,0,0},{0,0,0},{0,0,0}};
int i = 0,x,y;
int result = 0; //0:没人赢,1:X赢,2:O赢
int round = 0; //回合数
while (i < 50)
{
printf("\n第%d回合开始:\n\n", ++round);
show(board);
printf("\nX方请选择您的横纵坐标:(中间用空格隔开)");
scanf("%d %d", &x, &y);
board[y][x] = 1;
printf("O方请选择您的横纵坐标:(中间用空格隔开)");
scanf("%d %d", &x, &y);
board[y][x] = 2;
if (judge(board) == 0)
{
continue;
}else if (judge(board) == 1)
{
show(board);
printf("恭喜X方胜利!");
break;
}else if (judge(board) == 2)
{
show(board);
printf("恭喜O方胜利!");
break;
}
i++;
}
return 0;
}
int show(int board[3][3]) {
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i][j] == 1)
{
printf("X ");
continue;
}else if (board[i][j] == 2)
{
printf("O ");
continue;
}else {
printf("_ ");
continue;
}
}
printf("\n\n");
}
return 0;
}
int judge(int board[3][3]){
int row_numOfX = 0;
int row_numOfO = 0;
int col_numOfX = 0;
int col_numOfO = 0;
int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (board[i][j] == 1)
{
row_numOfX ++;
}else if (board[i][j] == 2)
{
row_numOfO ++;
}
}
if (board[j][i] == 1)
{
col_numOfX ++;
}else if (board[j][i] == 2)
{
col_numOfO ++;
}
if (row_numOfX == 3 || col_numOfX == 3)
{
return 1;
}else if (row_numOfO == 3 || col_numOfO == 3)
{
return 2;
}
}
return 0;
}