c语言实战开发 2019-11-15 Day3

c语言实战开发第三课课上内容讲解

1:变量的回顾与拓展
2:scanf格式化输入
3:判断语句
4:运算符
5:问号表达式
6:逗号表达式
7:demo1:计算工资
8:demo2:年龄的阿拉伯数字转英文数字

一.为何要用变量(回顾与拓展)

保存数据:比如密码、金额等
基本数据类型:
int 4 %d 若想补全,则用0补齐 比如输出03 d=3 则printf(“%0d”,a);
long 4 %ld 当需要申请的位数特别大时,即超过了int类型的max时,才用long
float 4 %f float score = 。。。。;分数通常是浮点型 精度到了 0.000000 后面的数据 四舍五入 如果想保留后面两位 则 %.2f
double 8 %f 类似于float
char 1 %c char choose = 'c'; 不能打汉语:一个汉字占据两个字符,而char只能用一个字符,如果用%c打印,说字符。如果用%d打印,那就是字符对应的ASCII码值
bool 1 %d bool status = true;printf("%d\n",status);则打印出来1—非0即真 用之前导入一个 stdbool.h 的头文件 (status是状态)

#include<stdlib.h>
#include<stdbool.h>
int main(void){
    int count = 0; 
    count = 9;
    char choose = 'c';
    printf("I have %d dogs\n",count);
    float score = 95.5;
    printf("%.2f\n",score);
    printf("%c\n",choose);
    bool status = true;
    printf("%d\n",status);
    return 0;
} 

打印出如下图所示结果

I have 9 dogs
95.50
c
1

二.scanf格式化输入

1
缓冲区:存的是一个字符串123 456。
终端:123 456 输入之后到缓冲区,然后取值,取值情况如下
int a = 123;
char b = ' ';
int b =456;
2

scanf("%d\n",&pwd);
printf("pwd = %d\n",pwd) ;
9
9
pwd = 9

为何输入两次9才输出9:因为我%d后面加了换行,所以里面不要加换行。如果加了\n,它表示的不是换行,而是一个字符串。在输入的时候也要输入\n就可以。而且我经常忘了写取地址&。

三.判断语句

当某种条件成立,才做啥事
if(条件--true即非0/false即0){
成立要做的事情}

条件可能是:

四.运算符 比如+ - *

/ 既可以理解为除,也可以理解为取整 比如写

float r = 3/2;
    printf("%f",r);

会打印出1
%(取余)
x%51 +50 = 50.......100;(取50到100的随机数)尤其是别忘了+号。
&&(且)两个同时成立
||(或)只需要一个成立
++ 自增

int g = 20;
    if(g++ == 20){//是两个等号 不是一个 
        printf("a = 20\n");
        printf("%d",g);
        }else{
            printf("a != 20\n");
            printf("%d",g);
                }
a = 20
21

--
== if(a == 2)而不是 if(a = 2)
=
+= a+=2 == a = a+2
-= !=

五.问号表达式

char c;
                if(3 > 1){
                    c = 'y';
                }else{
                    c = 'n';
                }

等价于 c = 3>1? 'y':'n';

六.逗号表达式

表达式1,表达式2,表达式3,表达式4。。。把表达式的最后一个视为赋值结果
(用的很少)

int temp = 20;
if(temp--,temp--,temp--)
{
printf("temp = %d\n",temp);
}

就打印出来17

int temp = 20;
int t2 = (temp--,temp--,temp--);
if(t2){
printf("temp = %d\n",temp);
printf("t2 = %d\n",t2);}
temp = 17
t2 = 18

小项目1:计算工资

思路:思路很简单,但是想做完美不容易。注意点①:变量名最好取有实际意义的,不要取那些ab啊之类的。②:在开头最好打印诸如:请输入什么什么,然后在最后再打印出:感谢使用之类的话来。也就是要培养自己的用户思维③:scanf里面经常忘记加&。④:当在每个条件语句中都有相同的命令时,可以把命令移到外面,而不是每次都写,比如这里的打印最后工资就是这样。⑤:使用的时候注意某些变量要在开头位置定义,否则就可能是局部变量,使用时会报错。⑥:最好把运算放在外面,把最后结果放在里面,比如

 tax = (salary - 5000)*0.1;
 printf("到手工资:%d",salary - tax);

而不要把运算放在里面,否则不知道怎么样就出错了,代码也不好看,显得比较臃肿。

#include<stdio.h>
#include<stdlib.h>
int main (){
    /*int a;//注意 
    scanf("%d",&a);
    if(a <= 5000){
        printf("%d",a);
    }else if (a > 5000 && a <= 8000){
        
        printf("%d",a-(a-5000)*(0.1));//printf后面不能进行运算? 
    }else if(a > 8000 && a <= 10000){
        a = a-300-(a-8000)*(0.15);
        printf("%d",a);
    }
    else{
        a = a - 600 - (a-10000)*(0.2);
        printf("%d",a);}//else后面不能有括号 *///printf里面不要写过于复杂的运算符 
    printf("请输入工资:");//这个忘了写,也就是没有用户思维。 
    int salary = 0;//取名字的时候最好有实际意义,比如这里写的salary。 
    int pay = 0;//税后工资 
    scanf("%d",&salary);//我又忘了加&符号 
    printf("%d",salary);//确定一下自己输入的工资 
    if(salary < 5000){
        pay = salary;
    }else if(salary >= 5000 && salary < 8000){
        tax = (salary - 5000)*0.1;//先计算出税值
    }else if(salary >= 8000 && salary < 10000){
        tax = (300)+(salary - 8000)*0.15;
    }else{
        tax = (salary - 10000)*0.2+600;
    }
    printf("到手工资:%d",salary - tax);//写一次printf就可以,没必要每个判断都写printf 
    //需要在开头位置定义一下tax 否则tax是局部变量 
    
    return 0; 
    
    
    

}

小项目2:年龄中阿拉伯语转英语

**这个项目很有挑战性。但是做完之后才觉得这个思路其实不难,就是平时应用相关知识点太少。整个程序的关键就是能知道运用数组和取余,取整的知识点。

思路
①首先分析从1到99的英文数字,1-19都是没有规律的,所以要把它们逐个写出来,在20之后,就有一定的规律,也就是把十位数分别写出来。
②用数组保存1-19以及十位数。
③用判断语句分别对应这里面的1-9。
④用判断语句分别对应10-19,如何体现出差别?就是对10取余,10-19对10取余,结果各不相同。
⑤用判断语句分别对应19以上的数字,其中十位数用输入的数对10取整来确定,个位数用输入的数对10取余来确定。
⑥打印年龄。
注意点
①首先不知道 char后面加✳就是字符串的意思。
②注意对10取整与对10取余的应用。
③if括号后面不能加分号,最后一个else不能加括号
④我自己又重新写了一遍,发现里面有很多变量没必要定义,也就是说增大了代码的复杂性。详见写法2
⑤注意当年龄在20及以上时,应该单独为一个小的方块,也就是那个判断要单独写个return 0;

printf("请输入年龄:\n");
    int age = 0;//定义变量保存年龄
    scanf("%d",&age) ;
    //保存个位数 
    char* gewei[10] = {"","one","two","three","four","five","six","seven","eight","nine"};//char后面加*就是字符串 
    //保存10-19
    char* temp[10] = {"ten","eleven","twelve","thirteen","forteen","fifteen","sixteen","seventeen","eighteen","ninteen"};
    //保存十位 
    char* shiwei[8] = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    char* name ;
    if (age < 10){
        name = gewei[age];
    }else if (age >= 10 && age <= 19){//if后面我写了分号 
        int index = age%10;//注意这里是对10取余,利用这个余数代到数组里面 
        name = temp[index];
    }else {
        //取整,获取个位数和十位数
        int g = age%10;
        int s = age/10;
        //取出对应的单词
        char* sString = shiwei[s - 2];//这里写char*而不是int,char*是字符串的意思
        char* gString = gewei[g];
        printf("your age is %s-%s\n",sString,gString);
        return 0;
    }
    printf("your age is %s\n",name);

写法2

printf("请输入年龄:\n");
    int age = 0;//定义变量保存年龄
    scanf("%d",&age) ;
    //保存个位数 
    char* gewei[10] = {"","one","two","three","four","five","six","seven","eight","nine"};//char后面加*就是字符串 
    //保存10-19
    char* temp[10] = {"ten","eleven","twelve","thirteen","forteen","fifteen","sixteen","seventeen","eighteen","ninteen"};
    //保存十位 
    char* shiwei[8] = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    char* name ;
    if (age <= 9){
        name = gewei[age];
    }else if(age >= 10 && age <= 19){
        name = temp[age%10];
    }else{
        char* gString = gewei[age%10];
        char* sString = shiwei[age/10 - 2];
        printf("Your age is %s-%s",sString,gString);
        return 0;
    }

总结:

感觉今天学到的东西比之前都多,首先解决了很多误区与知识盲点,比如/是取余,问号表达式写法等等。再一个是通过两个小demo的书写让我对很多知识点更熟练,而且主要是会了一种思路,一种编程思路,还通过写程序学到了很多知识点。对自己写出来的程序也很有成就感。总之,今天过得贼充实。感谢东哥!
下周讲解 switch for循环 while循环 数组 Demo

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

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,340评论 0 2
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,440评论 3 44
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,744评论 0 10
  • 数据类型转换: 1.当赋值符号两边的数据类型不同的时候,数据类型转换是自动的,不需要程序员插手 当给 int 类型...
    Munin_阅读 812评论 0 2