开发者社区> Cool架构> 正文

C语言笔记(翁恺版本)(二)

简介: C语言笔记(翁恺版本)(二)
+关注继续查看
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅1698元/3年,点击这里立即抢购>>>

(福利推荐:你还在高价请网络公司做企业网站?现在阿里云建站来啦,仅需500元/年快速搭建企业官网,点击这里立即抢购>>>

求平均值


写一个程序,输入两个整数,输出他们的平均值

int a,b;
scanf("%d %d",&a &b);
double c = (a + b)/2.0;
printf("%d和%d的平均数是:%f",a,b,c);


运算符优先级


image


单目运算符


只有一个算子的运算符:+,-


例如-a,-b,+a,+b


表达式可以使用a*-b类似的形式


赋值运算符


1.赋值也是运算,也有结果


2.a=6的结果是a被赋予的值,也就是6


3.a=b=6 ? 在计算机中形成原理 ?a = (b=6)


嵌入式赋值


提示:尽量避免"嵌入式赋值",不利于阅读也容易产生错误


例如:

result = a = b = 3 + c;
result = 2;
result = (result = result * 2) * 6 * (result = 3 + result);


计算复利


在银行存定期的时候,可以选择到期后自动转存,并将到期的利息计入本金合并转存。如果1年期的定期利率是3.3%,那么连续自动转存3年后,最初存入的x元定期会得到多少本息金额?


本息合计:x(1 + 3.3%)三次方

int x;
scanf("%d",&x);
double amount = x * (1 + 0.033) * (1 + 0.033) * (1 + 0.033);
printf("%f",amount);

要计算任意年以后的本息金额,就需要做(1+0.033)的n次方计算


交换两个变量


如果已经有:int a=6,b = 5 ? 如何交换a,b两个变量值


答:需要有第三个变量来进行缓冲,如下:


int t = a ,a= b ,b = t ?;


复合赋值


5个算术运算符,加 减 乘 除 取余可以和赋值运算符“=”结合起来,形成复合赋值运算符:“+=”“-=”“*=”“/=”“%=”


total += 5;


total = total + 5;


注意两个运算符中间不要有空格


递增递减运算符


1."++""--"是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用就是给这个变量+1或者-1


2.以下都是同一个意思:


count++ ? count +=1 ? count = count ?+ 1


3.递增递减可以放在前面(前缀)马上生效,也可以放在后面(后缀)延迟生效


4.可以单独使用,但不要组合进表达式


第三周:3.1判断


计算时间差


输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间之间的差,也以几小时几分表示


问题:如果直接分别减,会出现分钟借位的情况:1点40分和2点10分的差?


如果


1.用分别减的方案,然后判断有没有出现借位行不行?


2.借位的表现是,分钟减的结果小于0,找小时借一位,如下:im代指分钟,ih代指小时

if(im < 0){
    im = 60 + im;
    ih--;
}


if(条件成立){


....


}


判断的条件


计算两个值之间的关系,所以叫做关系运算

运算符

意义

==

相等

!=

不相等

>

大于

>=

大于或等于

<

小于

<=

小于或等于


关系运算的结果


  1. 当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0
  2. printf("%d\n",5==3);
  3. printf("%d\n",5>3);
  4. printf("%d\n",5<=3);


优先级


  1. 所有的关系运算符的优先级比算数运算的低,但是比赋值运算的高
  2. 7>=3+4 ?在这里面3+4先运算然后等于7,所以式子是可以运行的
  3. int r = a > 0; ?在这里a>0先运算,式子成立,答案为1,所以r = 1


找零计算器


1.找零计算器需要用户做两个操作:输入购买的金额,输入支付吧票面,而找零计算器则根据用户的输入做出相应的动作:计算并打印找零,或告知用户余额不足以购买。


2.从计算机程序的角度看,这就是意味着程序需要读用户的两个输入,然后进行一些计算和判断,最后输出结果

//初始化
int price = 0;
int bill = 0;
//读入金额和票面
printf("请输入金额:");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
//计算找零
printf("应该找您:%d\n",bill - price);


双斜杠//注释


双斜杠//是注释(comment)的意思:插入在程序代码中,用来向读者提供解释信息。它们对于程序的功能没有影响,但是往往能使得程序更容易被人类读者理解


/ /注释


1.延续多行数行的注释,要用多行注释的格式来写。多行注释由一对字符序列“/”开始,而以“/”结束


2.也可以用于一行内的注释


3.int ak = 47/36/,y = 9;


当票面不够的情况


1.当票面不够的情况怎么办?这个时候就需要进行判断用户读入的金额是否超过了票面


2.对计算找零这个步骤进行优化:

if( bill >= price){
   printf("需要找您:%d\n元",bill - price);
}

这个是当票面够的情况才会显示出需要找多少钱,如果钱不够的话则就不会显示出需要找钱了


3.如果当钱不够的情况需要提示用户"你的钱不够"怎么做?


错误示范:

if( bill >= price){
   printf("需要找您:%d/n元",bill - price);
}
printf("你的钱不够\n");


这种情况不管钱够不够都会输出 你的钱不够


else


else = 否则的话


正确的做法是:

if( bill >= price){
   printf("需要找您:%d/n元",bill - price);
}else{
   printf("你的钱不够\n");
}

比较数的大小


比较数的大小的各种方法

int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b); 

int max = 0;
if(a>b){
    max = a;
} 

printf("大的那个是%d\n", max);


这个代码里面没有解决b>a的问题,当a>b的条件不成立时,程序就结束了,max没有得到值


方案有很多,列举3个

int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b); 

int max = 0;
if(a>b){
    max = a;
}
if(b>a){
    max = b;
}
printf("大的那个是%d\n", max);
int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b); 

int max = 0;
if(a>b){
    max = a;
}else{
    max = b;
}   

printf("大的那个是%d\n", max);
int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b); 

int max = b;
if(a>b){
    max = a;
}

printf("大的那个是%d\n", max);

if语句


在上面中我们已经充分了解到了if语句的用法跟含义


但其实if也可以不带中括号去执行(不建议),只能执行if接下来的一句内容


例如:

const double RATE = 8.25;
const double STANDARD = 40;
double pay = 0.0;
int hours;

printf("请输入工作的小时数:");
scanf("%d",&hours);
printf("\n");
if(hours > STANDARD)
    pay = STANDARD * RATE + (hours - STANDARD) * (RATE * 1.5);
else
    pay = hours * RATE;
printf("应付工资:%f\n",pay);
#include <stdio.h>

int main()
{

    const int MINOR = 35;

    int age = 0;

    printf("请输入你的年龄: ");
    scanf("%d", &age);

    printf("你的年龄是%d岁。\n", age);

    if (age < MINOR) {
        printf("年轻是美好的,");
    }

    printf("年龄决定了你的精神世界,好好珍惜吧。\n");

    return 0;
}

3.2分支


嵌套的判断


当if的条件满足或者不满足的时候要执行的语句也可以是一条if或者if-else语句,这就是嵌套的if语句


else的匹配


else总是和最近的那个if匹配


缩进


缩进格式不能暗示else的匹配

if( code ==READY )
    if( count < 20 )
        printf("一切正常\n");
else
        printf("继续等待\n");

tips


1.在if或者else后面总是用{}


2.即使只有一条语句的时候


分段函数

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


if语句常见的错误


1.忘了大括号(永远在if和else后面加上大括号,即使当时后面只有一条语句)


2.if后面忘了分号


3.错误使用==和=


4.使人困惑的else


switch-case


1.控制表达式只能是整数型的结果


2.常量可以是常数,也可以是常数计算的表达式


3.根据表达式的结果,寻找匹配的case,并执行case后面的语句,一直到break为止


4.如果所有的case都不匹配,那么就执行default后面的语句;如果没有default,那么就什么都不做

switch(控制表达式){
case常量:
        语句
        ...
case常量:
        语句
        ...
default:
        语句
        ...
}

break


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
71 0
C语言之回调函数(非常重要)附带回调函数版本实现整型的加减乘除四则运算
C语言之回调函数(非常重要)附带回调函数版本实现整型的加减乘除四则运算
26 0
写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算
写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算
41 0
【数据结构】C语言版本的带哨兵位双向循环链表的快速实现方法
我们在之前学双向带头循环链表时,结尾部分简单讲解了快速实现的方法。本篇博客将详细讲解如何迅速实现,通过思路草图的方法轻松写出带头双向循环链表,甚至都可以直接用注释画草图。本篇博客是对 "从零开始逐步实现带哨兵位循环双向链表" 的补充,之前在写那篇博客的时候不小心忘记实现销毁接口了,这里正好能进行一个补充。
38 0
C语言笔记(翁恺版本)(七)
C语言笔记(翁恺版本)(七)
55 0
C语言笔记(翁恺版本)(六)
C语言笔记(翁恺版本)(六)
32 0
C语言笔记(翁恺版本)(五)
C语言笔记(翁恺版本)(五)
61 0
C语言笔记(翁恺版本)(三)
C语言笔记(翁恺版本)(三)
22 0
C语言笔记(翁恺版本)(四)
C语言笔记(翁恺版本)(四)
37 0
+关注
Cool架构
大三在读,两次国奖,竞赛生。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA开发手册1.5.0
立即下载
Java开发手册1.4.0
立即下载
Java开发手册1.3.0
立即下载


http://www.vxiaotou.com