C(判断 计算)

程序框架

#include <stdio.h>

int main()

{

return 0;

}

输出

printf("Hello Word!\n);

""里面的内容叫做“字符串”,printf会把其中的内容原封不动的输出

\n表示要在输出的结果后面换一行

做计算

printf("23+43=%d\n",23+43);

如何在程序运行中输入数字23,然后计算输出结果?

change.c

int price=0;

printf("请输入金额(元):");

scanf("%d",&price);

int change=100-price;

printf("找您%d元。\n",change);

如何输入

  • 输入也在终端窗口中
  • 输入以行为单位进行的,行的结束标志就是你按下了回车键。在你按下回车键之前,你的程序不会读到任何东西。

 

 

输入的数字放哪里,放在变量里

变量

  • int price=0;
  • 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
  • 变量是一个保存数据的地方,当我们需要在程序里保存数据时,比如上面的例子中要记录用户输入的价格,就需要一个变量保存它。用一个变量保存了数据,它才能参加到后面的计算中,比如计算找零。

变量定义

  • 变量定义的一般形式就是:<类型名称> <变量名称>;
  • int price;
  • int amount;
  • int price,amount;    同时定义两个变量方法

名称变量——变量的名字

  • 变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个的不同名字的名字。
  • 标识符有标识符的构造规则。基本的原则是:标识符只能是字母、数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字,不可以用做标识符。

赋值和初始化

int price=0 是一个式子,这里的“=”号是一个赋值运算符,表示将“=”右边的值赋给左边的变量。

赋值

和数学不同,a=b在数学中表示关系,即a和b的值一样。而在程序设计中,a=b表示要求计算机做一个动作:将b的值赋给a。关系是静态的,而动作是动态的。在数学中,a=b和b=a是等价的,而在程序设计中,两者的意思完全相反。

初始化

当赋值发生在定义变量的时候,就是变量的初始化。虽然C语言并没有强制要求所有的变量都在定义的地方做初始化,但是所有的变量在第一次被使用(出现在赋值运算符的右边)之前被应该赋值一次。

变量初始化

  • <类型名称><变量名称>=<初始值>
  • int price=0;
  • int amount=100;
  • 组合变量定义的时候,也可以在这个定义中单独给单个变量赋初值,如:int price=0,amount=100;

表达式

“=”是赋值运算符,有运算符的式子就叫做表达式。

price=0;

change=100-price;

变量类型

C是一种有类型的语言,所有的变量在使用之前必须定义和声明,所有的变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。

读整数

scanf("%d",&price);

  • 要求scanf这个函数读入写一个整数,读到的结果赋值给变量price
  • 小心price前面的&

常量

  • int change=100-price
  • 固定不变的数,是常数。直接写在程序里,我们称作直接量(literal)。
  • 更好的方式,是定义一个常量: const int AMOUNT=100;

const

const是一个修饰符,加在int的前面,用来给这个变量加上一个const(不变的)的属性。这个const的属性表示这个变量的值一旦初始化,就不能再修改呢。

int change=AMOUNT-price   (大写AMOUNT原因,因为它是const的)

如果你试图对常量进行修改,把它放在赋值运算符的左边,就会被编译器发现,指出为一个错误。 

scanf同时读取两个整数

int a;

int b;

printf(“请输入两个整数:”);

scanf("%d %d,&a,&b");              注:两个%d之前用空格

printf("%d+%d=%d\n",a,b,a+b);

整数运算

printf("%d",10/3);       结果3       说明直接扔掉了小数部分

  • 因为两个整数的运算结果只能是整数
  • 10/3*3                         结果为9
  • 10和10.0在C中是完全不同的数
  • 10.0是浮点数

printf("%f",10.0/3);     结果3.333333   当浮点数和整数放一起运算时,C会将整数转化成浮点数,然后进行浮点数的运算。相应的%d改为%f

浮点数

带小数点的数值。浮点数这个词的本意就是指这个小数点是浮动的,是计算机内部表达非整数(包含分数和无理数)的一种方式。另一种方式叫做定点数,不过在C语言中你不会遇到定点数。人们借用浮点数这个词来表达所有带小数点的数

例:#include <stdio.h>
int main()
{    
    printf("请分别输入身高的英尺和英寸,如输入\"5  7\"表示5英寸7英尺:");
    int foot;
    int inch;
    scanf("%d %d",&foot,&inch); 
    printf("身高是%f米",(foot+inch/12.0)*0.3048);
    return 0;
}

double

  • inch是定义为int类型的变量,如果把int换成double,就把inch 改为double类型的浮点数变量了。
  • double意思是“双”,它本来是“双精度浮点数”的第一个单词,人们用来表示浮点数类型。除了double,还有float(意思就是浮点),表示单精度浮点数。

double foot;
double inch;
scanf("%lf %lf",&foot,&inch);     当变量是double类型时,输入时用%lf
printf("身高是%f米",(foot+inch/12.0)*0.3048);        当变量是double类型时,输出时用%f

数据类型

  • 整数
  • int  
  • printf("%d",...)
  • scanf("%d,...)
  • 带小数点的数
  • double
  • printf("%f",...)
  • scanf("%lf,...)

表达式

一个表达式是一系列运算符和算子的组合,用来计算一个值。

运算符是指进行运算的的动作,如加减

算子是指参与运算的值,这个值可能是常数,也可能是变量,还可能是一个方法的返回值。

a=b+5   =和+都是运算符,a b 5都是算子

四则运算

加+

减-

乘*

除/

取余%      取相除之后的余数

例:计算时间差           1.整数相除只能是整数,余数扔掉。2.取余

#include <stdio.h>
int main()
{
    int hour1,minutes1;
    int hour2,minutes2;
    scanf("%d %d",&hour1,&minutes1);
    scanf("%d %d",&hour2,&minutes2);
    int t1=hour1*60+minutes1;
    int t2=hour2*60+minutes2;
    int t=t2-t1;
    printf("时间差为%d小时%d分钟",t/60,t%60);
     
    return 0;
}

运算符优先级

优先级运算符运算结合关系举例
1+单目不变自右向左a*+b
1-单目取负自右向左a*-b
2*自左向右a*b
2/自左向右a/b
2%取余自左向右a%b
3+自左向右a+b
3-自左向右a-b
4=赋值自右向左a=b

 

运算符如a+b(a加b),运算符+有两个算子,叫双目,单目指运算符只有一个算子。如:a是一个变量,已经有一个值呢,但想取a变量的负值,写-a就可以呢。

 

 

 

 

 

 

 

赋值运算符

  • 赋值也是运算,也有结果
  • a=6的结果是a被赋予的值,也就是6
  • a=b=6   a=(b+6)

例:计算复利

#include <stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    double amount=x*(1+0.033)*(1+0.033)*(1+0.033) ;                  %在C里是运算符,所以3.3%写为0.033,C没幂次方运算,所以连乘三次
    printf("您的本息合计为%f",amount);
    return 0;
}

交换两个变量               注:像交换两杯水,需要第三个杯子

例:

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

复合赋值

  • 5个算数运算符,+-*/%可以和赋值运算符=结合起来,形成复合赋值运算符:+=   -=    *=   /=和%=      注:两个运算符中间不要有空格

如;total+=5;

即total=total+5;

total*=sum+12;

即total=total*(sum+12);    复合赋值运算实际上是把右边整体算完,在=左边的做计算

递增递减运算符

  • ++和--是两个很特殊的运算符,他们是单目运算符(只有一个算子),这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用就是给这个变量+1或-1,

count++;

即count+=1;

即count=count+1;

前缀和后缀

  • ++和--可以放在变量的前面,叫做前缀形式,也可以放在变量的后面,叫做后缀形式。

a++的值是a+1以前的那个值,而++a的值是a+1以后的值,无论那个,a自己的值都加了1呢。

表达式运算表达式的值
count++给count+1count原来的值
++count给count+1count+1以后的值
count--给count-1count原来的值
--count给count-1count-1以后的值

 

 

 

 

 

 

例:

#include <stdio.h>
int main()
{
    int a=5;
    printf("a++=%d\n",a++);       表达式的值
    printf("a=%d",a);                   运算
    return 0;
    
 } 

结果 a++=5   a=6      

做判断

如果

if(条件成立){

...

}                        注:如果条件成立,做大括号了里计算。如条件不成立,直接跳过大括号内容,进行下一步。

例:#include <stdio.h>
int main()
{
int hour1,minutes1;
int hour2,minutes2;
scanf("%d %d",&hour1,&minutes1);
scanf("%d %d",&hour2,&minutes2);
int ih=hour2-hour1;
int im=minutes2-minutes1;
if(im<0){
    im=im+60;
    ih--;

    printf("时间差为%d小时%d分钟",ih,im);
    return 0;
    
 } 

条件

  • 计算两个值之间的关系,所以叫做关系运算
运算符意义
==相等
!=不相等
>大于
>=大于等于
<小于
<=小于等于

注:既然是运算符,就会有结果

注:一个=号是赋值运算

注:!在C中往往表示“不是”“非”“NOT”

习惯上把下面4个关系运算符叫比较运算符

 

 

 

 

  • 关系运算的结果

当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0。

#include <stdio.h>
int main()
{
    printf("%d\n",5==3);
    printf("%d\n",5>=3);

    return 0;
    
 } 

  • 优先级

所有关系运算符的优先级比算数运算的低,但是比赋值运算的高

7>=3+4;

int r=a>0;

判断是否相等的=和!=的优先级比其他低(包括>  <),而连续的关系运算是从左到右进行的

5>3==6>4;

6>5>4;

a==b=6;

注释

1.以两个双斜杠“//"开头的语句           单行注释

2./**/                                                   多行注释,*和*之间填写注释内容

if   else

例:找零

#include <stdio.h>
int main()
{
    int price;
    int bill;
    printf("总计"); 
    scanf("%d",&price);
    printf("请输入面票") ; 
    scanf("%d",&bill); 
    if(bill>=price){
        printf("应该找您%d",bill-price);
    }else{
        printf("余额不足"); 
    } 

    return 0;
    
 } 

例:比较两个数

#include <stdio.h>
int main()
{
int a;
int b;
int MAX;
printf("请输入两个整数");
scanf("%d %d",&a,&b);
if(a>=b){
    printf("MAX=%d",a);
}else{
    printf("MAX=%d",b);
    
}

 
    return 0;
    
 } 

例;比较两个数   方法2

#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入两个整数");
scanf("%d %d",&a,&b);
int MAX=b;
if(a>=b){
    MAX=a;
    
}
printf("MAX=%d",MAX);
    return 0;
}

if 语句

  • 一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号{}之间的若干条语句。如果表示条件的逻辑表达式的结果不是0,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句。
  • if语句另一种表示方法:

if(total>amount)

total+=amount+10;

if语句在这一行结束的时候并没有表示语句结束的;,而后面的赋值语句写在if的下一行,并且缩进了,在这一行结束的时候有一个表示语句结束的;。这表明这条赋值语句是if语句的一部分,if语句拥有和控制这条赋值语句的,决定它是否要被执行。

例:判断成绩

#include <stdio.h>
int main()
{
    const int PASS=60;
    int score;
    printf("请输入您的成绩");
    scanf("%d",&score);
    printf("您输入的成绩为%d\n",score);           注:常用方法,读入用户输入,紧接着输出用户输入。可以有效检验刚才输入是否输入进去呢,输入进去的是否是对的。
    if(score>=PASS)
    printf("及格\n");
    else
    printf("不及格\n"); 

    printf("再见!"); 
    return 0;
    
 } 

例:找三个数中的最大值     

#include <stdio.h>
int main()
{
int a,b,c;
printf("请输入三个整数");
scanf("%d %d %d",&a,&b,&c);
int MAX;
if(a>=b){
    if(a>=c){
        MAX=a;
    }
    else{
        MAX=c;
    }
}else{
    if(b>=c){
        MAX=b;
    }else{
        MAX=c;
    }
}

printf("MAX=%d",MAX); 
    return 0;
    
 }  

嵌套的判断

  • 当if的条件满足或不满足的时候,要执行的语句也可以是一条if或if else语句,这就是嵌套的if语句。
  • else的匹配总是和最近的if匹配(无大括号的if else语句中,加大括号的if else不适用

嵌套的if

if(a==b)

if(c==2)

printf("正确”);

else{

printf("不正确");                 注:这样写,else是和开头第二个if匹配的

 

if(a==b){                            注:加大括号,else才是和开头第一个if匹配的

if(c==2)

printf("正确”);

}

else{

printf("不正确");   

 

 

tips

  • 在if或else后面总是用{}
  • 即使只有一条语句的时候

级连的if-else if

例:分段函数

x<0,f=-1

x=0,f=1

x>0,f=2x

流程图:

#include <stdio.h>
int main()
{
int x;
printf("请输入X的值");
scanf("%d",&x);
int f;
if(x<0){
    f=-1;
} else{
    if(x==0){
        f=0;
    }else{
        f=2*x;
    }
}

printf("f为%d",f);
    return 0;
 } 

另一种编排if else的方式:让所有的else对齐。

#include <stdio.h>
int main()
{
int x;
printf("请输入X的值");
scanf("%d",&x);
int f;
if(x<0){
    f=-1;
}else if(x==0){                                注:并将else和if相连,取消了else和if之间的一对大括号。
        f=0;
}else{
        f=2*x;
    }
printf("f为%d",f);
    return 0;
}

级联的if-else if

if(exp 1)

stl;

else if(exp 2)

st2;

else

st3;

两种写法代码对比:

  • 第一种       注:推荐第一种写法,好处:单一出口(我只是把f算出来,f在后面可以做别的计算,是灵活的。但第二种只是输出给别人看,写死呢)

int f;

if(x<0){
    f=-1;
}else if(x==0){
        f=0;
}else{
        f=2*x;
    }
printf("f为%d",f);

  • 第二种

int f;

if(x<0){
   printf("f为%d",-1);
}else if(x==0){
        printf("f为%d",0);
}else{
       printf("f为%d",2x);
    }
printf("f为%d",f);

if语句常见的错误

  • 忘记大括号
  • if后面的分号
  • 错误使用==和=                 if只要求括号里的值是0或非0

if(a=0){

printf("%d",a)}                       当If判断圆括号里的条件为0时,大括号的内容不会被执行

  • 使人困惑的else

风格       风格是三观

  • 在if和else之后必须加上大括号形成语句块;
  • 大括号内的语句缩进一个tab的位置;

风格一

if(x<0){
    f=-1;
}else if(x==0){
     f=0;
}else{
     f=2*x;
}

风格二

if(x<0)

{
    f=-1;
}else if(x==0)

{
     f=0;
}else

{
     f=2*x;

 }

风格三

if(x<0)

{
    f=-1;
}

else if(x==0)

{
    f=0;
}

else

{
     f=2*x;
 }

多路分支

switch-case

switch(控制表达式){                   注:控制表达式只能是整数型的结果

case 常量:                                  注:常量可以是常数,也可以是常数计算的表达式

语句

...

case 常量:

语句

...

case 常量:

语句

...

}

例:成绩转换

#include <stdio.h>
int main()
{
    printf("请输入您的成绩");
    int grade ;
    scanf("%d",&grade);
    grade/=10;
    switch(grade){
        case 10:
        case 9:
            printf("A");
        break;
        case 8:
            printf("B");
        break;
        case 7:
            printf("C");
        break;
        case 6:
            printf("D");
        break;
        default:
            printf("F");
        break;    
    }    
    return 0;
    
 } 

  • switch可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处,分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值