C语言编程学习:判断语句与更多的运算符

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

前面有新手问,为什么45/6=7?不是应该等于7.5吗,这里要说明一个问题,计算机世界里的运算和运算结果,都是根据类型来进行的,先确定类型,再进行相关的运算,整数运算的结果就只能是整数,小数部分会被直接舍弃掉。有人肯定要问怎样才能得到正确结果呢?要使结果正确,必须修改这个语句,以浮点数的方式计算表达式。要把数据从一种类型转换为另一种类型,应该把目标类型放在数据前面的括号中。因此正确的计算结果的表达式应该是:(float)45/6,这就是我们需要的表达式:在正确的地方使用正确类型的数据。一种类型显式转换为另一种类型的过程称为“强制类型转换”,这在C语言里是经常会用到的,尤其是以后学指针后可能经常会看到各种类型的指针互相转换。还有另外一种类型转换叫自动类型转换(也叫隐式类型转换),在二元(就是有两个操作数)操作运算中使用不同类型的操作数,编译器就会把其中一个值域(就是取值范围)较小的操作数类型转换为另一个操作数的类型,这就是隐式类型转换。比如一个操作数类型是double,另一个是float,那么float类型的数据就会被自动转换为double类型;两个操作数类型分别为float和int,那么int类型就会被自动转换为float类型。下面以一个程序来表现这种转换。

第三章 判断语句与更多的运算符

本章我们会在编写的程序种类和程序灵活性上迈出一大步,我们要学习判断语句,在程序中作出判断,就是选择执行一组程序语句,而不执行另一组程序语句。在现实生活中,我们总要做判断。我们每天睡醒后,都要决定是否去工作(学生党决定是否去上学)。我们要回答如下问题:

今天是周末吗?

如果答案是肯定的,就躺在床上不动。否则,就去工作。

这是一个很简单的判断。吃完早餐后,我们要看看天气。又要决定:

如果今天下雨,就带雨伞;如果雨还下的很多,就打的去上班,否则,就坐公交吧。

这是一个比较复杂的判断过程。C中的比较涉及一些新运算符,比较两个值有6个关系运算符

这些运算只会得到两种值。如果比较结果为真,每个操作的结果都是1(true),否则如果比较结果为假,则每个操作的结果都是0(false)。这些表达式称为逻辑表达式或布尔表达式,因为每个表达式都只会得到两个结果之一:true或false。需要注意的是等于运算符是两个连续的等号,使用一个等号(赋值)是不对的。有了用于比较的关系运算符后,就需要使用一个语句来做判断了,最简单的语句就是if语句。if语句的一般形式或语法如下:

if(表达式)

语句1;

语句2;

注意,在第一行的末尾没有分号,这是因为if关键字所在的一行代码和其后的一行代码组合在一起,构成了一个语句,一条语句的末尾才会加分号。之前有个吧友在使用循环语句的时候也犯了这种错误,他在while(判断语句){}的后面就加了一个分号while(判断语句);{循环执行语句},如果是这样,那表示while语句和后面的一条空语句单独组成了一条语句,后面的循环执行语句就不属于循环里的了。

下面我们来看一个程序,这个程序让用户输入一个1~10之间的数字,来确定该数字是多大。

这段代码声明一个整数变量number,并初始化为0,接着提示用户输入一个1~10之间的数字,使用scanf函数读取这个数值,并存储在变量number中。

下一条语句是一条判断输入值的if语句:

if(number > 5)

printf("You entered %d which is greater than 5 ",number);

比较number的值和5,如果number大于5,就执行打印。如果number不大于5,就跳过printf;接着是另一条if语句:

if(number < 6)

printf("You entered %d which is less than 6 ",number);

这条语句比较number的值和6,如果number小于6,就执行打印,否则,跳过这个printf,最后,使用return语句结束程序,将控制权返回给操作系统。

我们可以扩展if语句,提供更多的灵活性。这时就需要使用if-else语句了,它的语法如下:

if(判断语句1)

语句1;

...

else if(判断语句2)

语句2;

...

else

语句3;

语句4;

这是一个多重选择,中间的else if可以有0个或多个,如果个数为0(就是省略else if),

if(判断语句1)

语句1;

else

语句3;

语句4;

那这就是一个双重选择,如果判断语句1为真,就执行语句1,之后程序继续执行语句4,;如果判断语句为假,就执行语句3,之后程序继续执行语句4.

下面我们看一个三重选择的程序:

逻辑运算符:

有时执行一个测试不足以作出判断,而需要合并两个或多个检查,如果这些条件都为true,才执行某个操作

1.逻辑与运算符&&

逻辑与运算符&&是一个二元运算符,只有当它的两个操作数都为true时,表达式的结果才为true,比如下面的例子,

if(age > 12 && age < 20)

printf("You are officially a teenager.");

只有age的值在13~19之间时,才执行printf语句。当然也可以使用&&来连接更多的表达式,比如像下面这种:

if(age > 12 && age < 20 && savings > 5000)

printf("You are a rich teenager.");

上面三个条件都必须为true,printf才会执行。

2.逻辑或运算符,只要它连接的操作数中有一个是true,其结果就是true。比如下面的例子:

if(a < 10 || b > c || c > 50)

printf(At least one of the conditions is true.");

三个条件a<10、b>c和c>50中至少有一个是true,就执行printf,例如,当a、b、c的值都是9时,如果三个都为假,这时候才会跳过printf语句去执行下一行语句。

3.逻辑非运算符!

最后一个是逻辑非运算符,用“!”表示,!运算符是一元运算符,因为它只有一个操作数,逻辑非运算符很简单,它会翻转逻辑表达式的值,使true变为false,false变成true。假定有两个变量a和b,其值分别是5和2,则表达式a>b是true。如果使用逻辑非运算符,表达式!(a>b)就是false。

下面我们使用逻辑运算符&&来将我们输入的某个大写字符转换成小写字符:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

代码中的这句letter += 'a' - 'A';是关键,这里用到了我们前面说的ascii码表的知识,我们知道'a'和'A'在ascii码表中表示的数值不同,我们通过'a' - 'A'就得到了两者的差值,在加上原来的letter就能将其转换为小写字符了。注意其中的+=这是个缩写形式,对于加减乘除取模运算,都支持这种缩写形式,这里就等同于letter = letter + 'a' - 'A';再比如result *= val;其实就是result = result * val;

条件运算符

条件运算符根据一个逻辑表达式等于true还是false,执行两个表达式中的一个。由于涉及三个操作数---一个逻辑表达式和另外两个表达式---因此这个运算符也成为三元运算符,它也是C语言里唯一一个三元运算符(?:)。使用条件运算符的表达式的一般形式如下:

逻辑表达式?表达式1:表达式2

一定要注意运算符和操作数的相对位置。?字符跟在逻辑表达式condition的后面,?的右边是表示选项的两个操作数表达式1和表达式2.如果逻辑表达式等于true,该操作的结果就是表达式1的值,如果逻辑表达式等于false,该操作的结果就是表达式2的值。注意只计算表达式1和表达式2中的一个。比如在一条语句中使用条件运算符,如下:

x = y > 7 ? 25 : 50;

执行这条语句,如果y大于7,x就赋值为25,否则,x就设置为50,其实条件表达式就是判断语句的快捷方式,我们如果用判断语句那就是这样:

if(y > 7)

x = 25;

else

x = 50;

条件运算符可以简明地表达某些理念。比如使用它可以非常简单地编写出计算两个变量中较小值或较大值的表达式,我们以整型变量a和b为例,a > b ? a : b,这样就可以很简单得出a、b中的较大者,得出较小值也很简单a < b ? a : b.

下面我们来看使用条件运算符的实际例子:

注意其中const修饰符表示不变的意思,就是const double就是定义一个双精度变量,但是变量不允许被改变。程序假定产品的单价为$3.50,提供了三个级别的折扣:购买数量超过50,折扣为15%;数量超过20,折扣为10%;数量超过10,折扣为5%,否则不打折。

判断语句和循环语句有许多类似的地方,都可以使用语句块(加大括号{}),都可以使用嵌套,当然判断语句和循环语句也可以混合使用,这样也可以增加程序的多样性。我们同样使用例子来说明这点:

#include

#include

#include

int main(void)

{

int chosen = 0;

int guess = 0;

int count = 3;

int limit = 20;

srand(time(NULL));

chosen = 1 + rand() % limit;

printf(" This is a guessing game.");

printf(" I have chosen a number between 1 and 20"

" whice you must guess. ");

for(;count > 0;--count)

{

printf(" You have %d tr%s left.",count,count == 1 ? "y" : "ies");

printf(" Enter a guess:");

scanf("%d",&guess);

//如果猜对了数字

if(guess == chosen)

{

printf(" Congratulations.You guessed it! ");

if(3 == count)

printf(" Brats, you are so lucky! ");

else if(2 == count)

printf(" Not bad ");

else

printf(" You almost fail! ");

return 0;

}

//如果输入的是无效数字

else if(guess < 1 || guess > 20)

printf("I said the number is between 1 and 20. ");

//如果猜错了

else

printf("Sorry,%d is wrong.My number is %s than that. ",

guess,chosen > guess ? "greater" : "less");

}

printf(" You have had three tries and failed.The number was %ld ",

chosen);

return 0;

}

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

其中可能有两句大家之前没有见过,srand(time(NULL));rand();rand函数就是用来产生随机数的,但是它产生的整数只能是伪随机数,因为真正的随机数只能在自然的过程中产生,而不能通过运算法则产生,它产生随机数之前,会被给一个种子,如果使用相同的种子,那它产生的随机数永远是相同的,不信的话大家可以printf打印连续两次调用rand()产生的结果,正是因为如此,所以我们每次都要为它赋不同的种子,赋种子的操作就是srand函数,我们这里会先调用time函数,此函数会把自1970年1月1日起至今的总秒数返回为一个整数,因为时间一直在变化,所以每次执行程序时,都会得到不同的值,我们会把time的返回值作为srand函数的参数,这样就可以生成不同的种子了。这个程序大家好好理解下,当然也要自己敲代码运行出来,不要光用眼睛看不动手。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

今天就讲到这里,欲知后事如何且听下回分解(手动滑稽)~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容