天天看点

c语言实战开发 2019-11-15 Day3c语言实战开发第三课课上内容讲解一.为何要用变量(回顾与拓展)二.scanf格式化输入三.判断语句四.运算符 比如+ - *五.问号表达式六.逗号表达式小项目1:计算工资小项目2:年龄中阿拉伯语转英语总结:

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