计算机和编程语言初见

2023-09-20 22:10:32

学习程序设计的目的是什么呢?

不一定要做出一个软件或系统出来,更重要的是理解计算机是如何工作的以及它的长处和短处。

计算机本身是无意识的,因此我们要求它为我们做事时:应该将步骤细化、“直”化(规律化);其实计算机什么也不会,我们必须手把手地教他一步一步的做。而计算机的某个优点也正是如此——听话,你叫它往东它绝不往西。然后我们还得教计算机哪些步骤串成一个功能,而此种联系、规范就是程序!而我们通过编程语言来交流、认识计算机。

int u = 32;
int v = 26;
while(v != 0){
    int temp = u%v;
    u = v;
    v = temp;
}
printf("%d", u);

(“程序画”一览)

  • 计算机做的所有事情都叫 计算(万物皆数)
  • 计算的步骤就是算法

计算机的思维方式:重复

人类最讨厌做重复的事情了,而计算机恰恰相反——它最喜欢做重复的事情。在计算机的世界里当你造出第一个轮子时,那么距离造出成千上万的轮子就不远了。

编程语言单以执行方式分类:

  1. 解释:同声传译
  2. 编译:翻译出书

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 是一种有类型的语言,所有变量在使用前必须定义或声明(即所有变量都应有确定的数据类型)。数据类型表明在变量可以存储什么样的数据(是一种指定规范)

 读值

scanf("%d", &price);

其中“&”是取地址符,自己可以 try 一 try!

常量(固定不变的数)

在运算过程中值不变的数就是常量(直接量 literal),以下是定义示例:

const int AMOUNT = 100;

运行逻辑

if...else

1.
if(逻辑表达式) {

}

2.
if(逻辑表达式) {

}else {

}

3.
if(逻辑表达式) {

}else if(逻辑表达式){...}...
逻辑表达式(条件)
运算符意义
=相等
!=不相等
>大于
>=大于或等于
<小于
<=小于或等于

循环*

  • while:不确定循环次数多用此
  • do...while:至少执行一次的循环
  • for:已确定循环次数多用此

(数据类型就不全说了,上网查吧!)

数组

数据可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据,我们可以用数组来保存这些数据,而不是用很多个独立的变量。数组是长度固定的数据结构,用来存放指定的类型的数据。一个数组里可以有很多个数据,所有的数据的类型都是相同的。(引用一手)

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/若干个值

函数原型:就是提前写出函数头而未有函数体,目的是先告诉编辑器这个函数的基本信息(参数列表定义等等)

每个函数都有自己的变量空间,其参数也位于这个独立的空间中,与其它函数无关(一般叫函数参数表中的参数为“形式参数”,而实际调用函数时给的值称作“实际参数”)

扩展:

  1. 变量的生存期和作用域
  2. 二维数组 如 int a[3][5];(通常理解为一个3行5列的矩阵)

注意!C 语言不允许函数嵌套定义

井字棋(第一个 C语言程序)

#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;
}

更多推荐

SpringCache -- Redis --- 配置与缓存使用--配置过期时间

写在前面:学redis,还是得搭配SpringCache来玩一玩。前置内容win安装+redis基础springboot使用redis文章目录导入依赖配置cache使用@Cacheable@CachePut@CacheEvict配置过期时间依据cacheName设置在注解上截取过期时间导入依赖<!--redis依赖--

面试:经典问题解决思路

1.秒杀系统架构参考:秒杀系统架构优化思路2.如何防止订单重复提交重复提交原因:一种是由于用户在短时间内多次点击下单按钮,或浏览器刷新按钮导致。另一种则是由于Nginx或类似于SpringCloudGateway的网关层,进行超时重试造成的。方案描述优点缺点方案一提交订单按钮置灰简单易实现,常用于短信验证码场景只能解决

第二证券:个人开证券账户要开户费吗?

随着互联网和移动端东西的遍及,越来越多的人开端涉足股票投资,开立证券账户也成为一个热门话题。但是,许多初学者或许会有疑问,个人开证券账户是否需求支付开户费呢?这个问题的答案并不是那么简略,需求考虑多方面的要素。首先,需求明确的是,证券账户开立都是需求遵循中国证监会的相关规矩的。按照现在的规矩,证券公司不得向客户收取开户

qt功能自己创作

按钮按下三秒禁用voidMainWindow::on_pushButton_5_clicked(){//锁定界面setWidgetsEnabled(ui->centralwidget,false);//创建一个定时器,等待3秒后解锁界面QTimer::singleShot(3000,this,[=](){setWidg

【计算机网络】——数据链路层(应用:介质访问控制)

//仅做个人复习和技术交流,图片取自王道考研,侵删一、大纲1、介质访问控制信道划分介质访问控制随机访问介质访问控制2、局域网3、广域网4、数据链路层设备二、介质访问控制省流:把广播信道通过介质访问控制机制逻辑上转换为点对点的信道。介质访问控制:采取一定措施,使得两个节点之间的通信不会发生相互干扰的情况。用来决定广播信道

6. 装饰器

UML聚合(Aggregation)关系:大雁和雁群,上图中空心菱形+箭头表示聚合关系组合(Composition)关系:大雁和翅膀,实心菱形+箭头表示组合(Composition)关系测试代码#include<iostream>#include<stdio.h>#include<mutex>//锁头文件usingna

c++运算符重载

目录运算符重载的基本概念重载加号运算符(+)类内实现类外实现运算符重载碰上友元函数可重载和不可重载的运算符可重载的运算符不可重载的运算符重载自加自减运算符(a++++a)智能指针重载等号运算符(=)重载等于和不等运算符(==!=)运算符重载的基本概念概念:运算符重载与函数重载比较类似,相当于让一个运算符具有另外一种含义

PHP 做 Mysql 数据统计,通过时间戳 统计 每分钟多少条 每十分钟多少条?

如果mysql表中数据结构时间字段是按时间戳存的,PHP如何按每分钟有多少条来统计数据<?php//连接MySQL数据库$servername="localhost";$username="your_username";$password="your_password";$dbname="your_database";

利用NHANES数据库还能构建预测模型? 中国学者写了篇文章,AUC=0.842

Nhanes美国营养调查数据库的培训课程(直播回放)来了!“Nhanes数据挖掘”课程(直播回放)!欢迎报名,发表文章即退款2021年2月,广东省医学科学院、广东省人民医院、广东省心血管研究所心内科,广东省冠心病防治重点实验室的学者在《AnnalsofPalliativeMedicine》(四区)发表题为:Deriva

基于Python+Tkinter实现一个贪食蛇小游戏

你是否还记得那个时代,当我们的手机还没有触摸屏,游戏也只有像“贪食蛇”这样的经典款?当时,许多人都沉迷于控制一条小蛇吃食物的乐趣中。而今,让我们利用Python和Tkinter,一起重温那个时代,制作自己的贪食蛇小游戏!1.初始设定在开始之前,我们需要对游戏进行基本的设定。例如,我们的游戏界面是一个宽600像素、高40

【RocketMQ专题】快速实战及集群架构原理详解

目录课程内容一、MQ简介基本介绍*作用(解决什么问题)二、RocketMQ产品特点2.1RocketMQ介绍2.2RocketMQ特点2.3RocketMQ的运行架构2.4消息模型三、RocketMQ快速实战3.1快速搭建RocketMQ服务3.2快速实现消息收发3.3搭建Maven客户端项目3.4搭建RocketMQ

热文推荐