当前位置: 首页 > news >正文

程序设计|C语言教学——C语言基础2:计算与控制语句

目录

一、变量

1.变量定义

2.赋值和初始化

3.关于scanf

4.常量与变量

5.总结

二、基本数据类型

三、运算符

1. 算术运算符

2. 关系运算符

3. 逻辑运算符

4. 赋值运算符

四、控制语句

1. 分支语句

2. 循环语句


一、变量

1.变量定义

        上一节我们知道了如何输出一个计算的结果,那么新问题是,如何才能在程序运行时输入一个数字,然后计算输出结果?

        那就需要有三件事情,第一我们需要有个地方存放我们输入的数字,第二,我们需要一个办法把数据输入进去。第三,我们要能够把存好的数据参与运算。

        如下所示就是一个找零程序:

int price = 0;printf("请输入金额:");
scanf("%d",&price);int change = 100 - price;
printf("找零%d元\n",change);

         我们可以在DEV-C++中编译运行看一下。

        然后我们随意输入一个值30并回车,即可得到结果70。

        也就是我们数字的输入和输出一样,都是在我们程序运行的终端窗口里面的。并且输入是以行为单位的,也就是在按下回车键之前,程序不会读到任何东西。

        在这个程序中,我们输入的数据放到哪去了呢?放到了一个叫变量的东西里面。其中的“int price=0;”这一行做的事就是定义了一个叫price的变量,int是它的类型,0是它的初始值。在程序中,当我们需要有地方保存一个数据的时候,就需要变量。比如这里我们要保存用户在程序运行中输入进来的数字,才能用它进行运算。

        变量定义的一般形式就是:数据类型名+变量名;

        比如:int price;int amount;

        也可以一次性定义两个同类型的变量,但是中间要用逗号隔开,如:int price,amount;

        所有的变量都需要一个名字,变量的名字是一种“标识符”,我们不能把它叫做1号2号3号,我们得要给他起一个名字,用来识别它不同的变量。标识符有它的构造规则,它的基本原则是:只能由字母、数字和下划线组成,数字不可以出现在第一个位置上。除此之外,有一些单词我们是不能用于标识符的,因为他们是C语言的关键字,也叫保留字。如:auto\break\case\char\const\int\for等等。这些关键字我们不需要背,随着学习的深入,这些关键字我们会一个一个地学习到运用到,用过了之后就知道哪些不能用,除此之外,我们的编译器也会自己报错告诉我们这个单词不能用。

2.赋值和初始化

        我们继续来研究这一行。这一行定义price这个int型变量时,用了一个等号,等号在这里做的事叫做赋值,赋值的意思是把等号右边的值交给了等号左边,也就是price得到了0这个值。因为是在定义变量的同时进行了赋值,所以这个过程我们也可以叫做初始化。对C语言来说,初始化和赋值的差异不是很大,但是以后在学习其他语言的时候,比如C++,那这里的差异就会比较大。

        对应程序来说,等号是一种动作,和数学不一样,数学中等号是一种关系,表示两个数的值相同,而程序设计中等号是让计算机做的一个赋值的动作,是动态的。数学中a=b和b=a没有区别,是等价的,而在程序设计中,他们的差别很大,含义完全相反。

        C语言并没有强制要求所有的变量都做初始化,但是所有变量在第一次被使用(指出现在等号右边)之前应该被赋值一次。如果没有变量没有被赋值或初始化,就直接放在等号右边去用,程序就会出错,我们可能会得到一个毫不相关的结果。

        组合变量定义的时候,不能一次性给多个变量赋值,要用等号隔开一个一个分别赋值,如:

        int price = 0,amount = 100;

        如果出现了赋值操作,即出现了等号,那么这种式子就叫做“表达式”,如price = 0;

·       C语言是一种有类型的语言,每一个变量都必须要有类型,在使用前必须要做一次定义,所有的变量一旦确定了一种类型之后就不能改变,而类型表示在变量中可以存放什么样的数据。

        再回到这个程序中来,再第四行出现了int change = 100 - price ;

        也就是在定义第二个变量change的同时,做了一个计算。这个写法是C99的写法,因为C99允许你在程序的任何地方做定义。而传统的ANSI C只能在代码的开头定义变量。一旦你开始其他动作了就不能再定义变量。

        而输入变量之后我们的程序怎么把它读进来呢?我们这里用到了另外一个函数scanf(),用于输入。函数中,一开始先要有一个字符串,这个我们叫做格式字符串,在这个字符串里我们可以用一个%d用于说明我们要读一个整数。然后接下来用逗号隔开,后面要加一个符号&和变量名。注意一定要加&,&是一个取地址符。

3.关于scanf

        scanf是这样的:出现在格式字符串“”里的所有东西都是它要读的东西,%d表明要读一个整数,%f表示浮点数,其他东西是要你输入的东西。我们输入的东西要严格按照字符串内的格式才能被读到。

        比如我们写了一个测试程序:

#include <stdio.h>int main()
{int a = 0;int b = 0;	scanf("%d,%d",&a,&b);printf("%d %d",a,b);	return 0;
}

        我们得到编译运行,输入1 2。

        这时我们发现,程序只读到了1,没有读到2。

        而如果我们输入1,2。就能成功读取。

        所以我们键入的值必须要严格按照printf双引号内部的形式。同理如果我们把程序改成:

        printf("%d,%d ",&a,&b),也就是%d后面加了一个空格,那么我们输入值之后也要加空格才能被读到。

        所以printf中的双引号内部的东西不是它要输出的,而是你一定要输入的,要特别小心这件事。

4.常量与变量

        还是在change.c的程序中,出现了change=100-price这个表达式,这里的100是一个固定不变的数字,在程序运行中,100是不会变化的,price是会变化的,你输入多少它就变成多少。而不会变化的书我们叫做常量,这种直接写在程序里的我们叫直接量,但更好的方式是我们直接定义一个常量,给这个100一个名字。

        给这种不变的量定义一个名字就变成了常量,写成:const int amount = 100;

const int AMOUNT = 100;
int price = 0;printf("请输入金额:");
scanf("%d",&price);int change = AMOUNT - price;
printf("找零%d元\n",change);

        这种常量的定义一般是在程序一开始的地方,放在变量定义之前。这样将来要去修改这个常量的数值的时候可以很容易找到。

        const是一个修饰符,用来修饰int,代表这个变量的值一旦被定义就不能被修改了。如果你const了这个变量后再给它赋值就会报错,因为这个时候它是只读的。

5.总结

        变量是用于存储数据的内存空间,使用前需要先声明,声明变量的格式为:数据类型 变量名;

        变量名的命名规则:只能由字母、数字和下划线组成,且不能以数字开头,不能使用 C 语言的关键字(如intfloat等)。

        初始化:在声明变量的同时给变量赋值,称为初始化。

二、基本数据类型

        C 语言的基本数据类型包括:

  • int:整数类型,用于存储整数,如123-45

  • float:单精度浮点类型,用于存储小数,精度较低,如3.14f

  • double:双精度浮点类型,用于存储小数,精度比float高,如3.1415926

  • char:字符类型,用于存储单个字符,如'a''1',在内存中以 ASCII 码形式存储。

#include <stdio.h>int main() {int age;  // 声明一个int类型的变量ageage = 20;  // 给变量age赋值float height = 1.75f;  // 声明并初始化一个float类型的变量heightchar gender = 'M';  // 声明并初始化一个char类型的变量genderprintf("年龄:%d\n", age);  // 使用%d格式化输出整数printf("身高:%f\n", height);  // 使用%f格式化输出浮点数printf("性别:%c\n", gender);  // 使用%c格式化输出字符return 0;
}

三、运算符

        C 语言的运算符种类繁多,包括算术运算符、关系运算符、逻辑运算符、赋值运算符等。

1. 算术运算符

  • +:加法
  • -:减法
  • *:乘法
  • /:除法,整数相除结果为整数,如5 / 2 = 2
  • %:取余,只能用于整数,如5 % 2 = 1

2. 关系运算符

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

关系运算符的结果为1(真)或0(假)。

3. 逻辑运算符

  • &&:逻辑与,两边都为真,结果才为真
  • ||:逻辑或,两边有一个为真,结果就为真
  • !:逻辑非,取反

4. 赋值运算符

  • =:赋值,将右边的值赋给左边的变量
  • +=:如a += b等价于a = a + b
  • -=:如a -= b等价于a = a - b
  • *=:如a *= b等价于a = a * b
  • /=:如a /= b等价于a = a / b
  • %=:如a %= b等价于a = a % b

四、控制语句

控制语句用于控制程序的执行流程,包括分支语句和循环语句。

1. 分支语句

  • if语句:根据条件执行不同的语句块。
#include <stdio.h>int main() {int score = 85;if (score >= 60) {printf("及格了\n");} else {printf("不及格\n");}return 0;
}
  • switch语句:用于多分支选择。
#include <stdio.h>int main() {int day = 3;switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;default:printf("其他星期\n");}return 0;
}

break语句用于跳出switch语句,default用于处理其他未列举的情况。

2. 循环语句

  • while循环:当条件为真时,重复执行循环体。
    #include <stdio.h>int main() {int i = 1;while (i <= 5) {printf("%d ", i);i++;}return 0;
    }

  • for循环:形式更简洁,适合已知循环次数的情况。
#include <stdio.h>int main() {for (int i = 1; i <= 5; i++) {printf("%d ", i);}return 0;
}
  • do-while循环:先执行一次循环体,再判断条件,至少执行一次循环体。
#include <stdio.h>int main() {int i = 1;do {printf("%d ", i);i++;} while (i <= 5);return 0;
}

http://www.dtcms.com/a/334644.html

相关文章:

  • 登录与登录校验:Web安全核心解析
  • 【AndroidStudio修改中文设置】
  • 宋红康 JVM 笔记 Day03|内存结构概述、类加载器与类的加载过程、类加载器分类
  • java基础(九)sql
  • 复合机器人食品分拣生产线:一体化控制系统引领高效柔性新食代
  • Android Jetpack | Lifecycle
  • vscode的使用
  • FPGA实现I2C通信方案
  • 爬机 验证服务器是否拒绝请求
  • 第五章 大数定律与极限定理
  • 概率论基础教程第3章条件概率与独立性(一)
  • 搜索 AI 搜索 概率论基础教程第3章条件概率与独立性(二)
  • Tomcat Server 组件原理
  • Java 学习笔记(基础篇3)
  • 从零打造大语言模型2--编码注意力机制
  • 【基础-判断】可以通过ohpm uninstall 指令下载指定的三方库
  • 中国教育信息化演进历程与发展趋势研究报告
  • Bash常用操作总结
  • 解决html-to-image在 ios 上dom里面的图片不显示出来
  • 《Python 单例模式(Singleton)深度解析:从实现技巧到争议与最佳实践》
  • 【自动化运维神器Ansible】Ansible逻辑运算符详解:构建复杂条件判断的核心工具
  • Manus AI与多语言手写识别的技术突破与行业变革
  • c#Blazor WebAssembly在网页中多线程计算1000万次求余
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • 基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
  • qsort实现数据排序
  • cuda编程笔记(15)--使用 CUB 和 atomicAdd 实现 histogram
  • PMP-项目管理-十大知识领域:进度管理-制定时间表、优化活动顺序、控制进度
  • 进程替换:从 “改头换面” 到程序加载的底层逻辑
  • 【深度学习计算性能】05:多GPU训练