linux学习day4

局部变量和全局变量扩展

局部变量和全局变量可以重名;作用域遵循就近原则
例子:
#include<stdio.h>

int a=10;

void fun();

int main(int argc, char const *argv[])

{

int a=8;

fun();

printf("%d\n",a);//8

return 0;

}

void fun()

{

printf("a:%d\n",a);

}

最后在main函数中,输出8

在void函数中,输出10

输入与输出

1.1 getchar()

功能:向终端输入一个字符

参数

返回值终端输入字符ASCII值(返回数值,所以可以用int返回)

int res=getchar();

1.2 putchar

功能:终端输出一个字符

参数字符ASCII

返回值字符ASCII

putchar没有换行效果需要额外添加

int res=getchar();

putchar(res);

int num=putchar('\n');//putchar(10);

// printf("%d\n",num);

 1.3 printf

#include <stdio.h>

int printf(const char *format, ...);

功能指定格式终端输出

参数多个

返回值正确输出字符个数

格式:%d int

           %c char

           %f float

           %lf double

           %s 字符串

           %p 指针

           %o 八进制    %#o

           %x 十六进制 %#x

例子

int a=0x123;

print("%#x",a);  //输出123

 1.4 scanf

#include <stdio.h>

int scanf(const char *format, ...);

功能指定格式终端 (输入完毕时以回车结束)

参数多个

返回值正确输入字符个数

第一个字符输入格式错误,直接返回0

scanf格式必须和终端输入格式一一对应,不能加'\n'

变量名前边加&(取地址符),表示取变量的地址

例子:
int a=0;

scanf("%d",&a);

printf("a:%d\n",a);

=====================

int a=0,b=0;

scanf("%d %d",&a,&b);

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

 垃圾字符回收

当我们想要同时收集两个参数时,在终端输入q w时只能读取到‘q’ ‘空格’,所以要采取垃圾字符回收

#include<stdio.h>
int main(){
    char c=0,d=0;
    scanf("%c%c",&c,&d);
    printf("c:%c--d:%d\n",c,d);

}

2.1通过空格回收

通过在%c%c中间怎加一个空格可以回收一个多个空格 tab 回车

#include<stdio.h>
int main(){
    char c=0,d=0;
    scanf("%c %c",&c,&d);
    printf("c:%c--d:%d\n",c,d);

}

2.2 通过 *抑制符(%*c) 回收 

通过在%c%c中间怎加一个%*c可以回收任意一个字符

#include<stdio.h>
int main(){
    char c=0,d=0;
    scanf("%c%*c%c",&c,&d);
    printf("c:%c--d:%d\n",c,d);

}

2.3 通过 getchar() 回收

目的:scanf输入结束会在终端输入'\n';解决'\n'程序造成的影响

通过增加一个getchar(),可以回收\n

#include<stdio.h>
int main(){
    while(1){

         char a;

         scanf("%c",&a);

         printf("%c\n",a);

         getchar();

    }

}

分支语句:

3.1 顺序结构

if选择语句:

基本结构:

if(条件){

     表达式;

}

if(条件){

     表达式1;

}else{

     表达式2;

}

if(条件1){

     表达式1;

}else if(条件2){

     表达式2;

}

注意:
  1. if后边可以没有else, else前边必须有if
  2. 分支语句代码块只有一句可以省略{ }

例题1:

普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)

终端输入一个年份判断平年闰年

#include<stdio.h>
int main(){
    int a=0;
    scanf("%d",&a);
    if(a%4==0){
        if(a%100!=0){
            printf("普通闰年\n");
        }
        else{
            printf("世纪闰年\n");
        }
    }
    else{
        printf("平年\n");

    }
    return 0;
}

例题2:

终端输入大写 小写

终端输入小写出大写

输入其他打印"error"

#include<stdio.h>
int main(){
    printf("shuruzimu\n");
    char a;
    scanf("%c",&a);
    if(a>='A' && a<='Z'){
        printf("%c\n",a+32);
    }else if(a>='a' && a<='z'){
        printf("%c\n",a-32);
    }else{
        printf("error\n");
    }
}

switch 选择语句:

基本结构:

switch(常量或者表达式){

     case 常量值1:

     表达式1;

     break;

     case 常量值2:

     表达式2;

     break;

     .

     .

     .

     case 常量值n:

     表达式n;

     break;

}

例题:

10 0 - 9 0 : A

89-80: B

79-70: C

<70: 补考

#include<stdio.h>
int main(){
    int a=0;
    scanf("%d",&a);
    if(a>=0 && a<=100){
        switch(a/10){
            case 10:
                printf("a\n");
                break;
            case 9:
                printf("a\n");
                break;
            case 8:
                printf("b\n");
                break;
            case 7:
                printf("c\n");
                break;
            default:
                printf("补考\n");
                break; 
        }
    }else{
        printf("输入错误\n");
    }
    return 0;
}

注意:

1.case后边的常量值是整型或字符型,不能是浮点型或字符串

2.case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束

作业:终端输入一个日期,判断是这一年的第几天

           scanf("%d-%d-%d",&y,&m,&d);

#include<stdio.h>
int main(){
    int year=0,month=0,day=0,sum=0;
    scanf("%d %d %d",&year,&month,&day);
    if(year%4==0 && month>3){
        sum++;
    }
    switch(month){
        case 12: sum=sum+30;
        case 11: sum=sum+31;
        case 10: sum=sum+30;
        case 9: sum=sum+31;
        case 8: sum=sum+31;
        case 7: sum=sum+30;
        case 6: sum=sum+31;
        case 5: sum=sum+30;
        case 4: sum=sum+31;
        case 3: sum=sum+28;
        case 2: sum=sum+31;
        case 1: sum=sum+day;
    }
    printf("%d\n",sum);
    return 0;
}

采用switch语句,取消break,代码会依次执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值