虚拟机day4课堂笔记及作业

day04

局部变量和全局变量示例:

局部变量和全局变量可以重名;作用域遵循就近原则

#include <stdio.h>
int a=10;
void fun();
int main(int argc, char const  * argv[])
{
    int a=8;
    fun();  //10
    printf("%d\n",a);    //8
    return 0;
}
void fun(){
        printf("a:%d\n",a);    //10
}

[1]输入输出

1.1按字符输入输出

getchar

手册查看命令:man getchar      //q退出

#include <stdio.h>

  int getchar(void);

功能终端输入一个字符

参数

返回值终端输入字符ASCII

示例:

#include <stdio.h>
int main(int argc,const char *argv[])
{
    int res=getchar();    //输入一个字符
    printf("%d\n",res);    //输出对应的ASCII码值
    return 0;
}

putchar

手册查看命令:man putchar      //q退出

#include <stdio.h>

  int putchar(int c);

功能终端输出一个字符

参数字符ASCII

返回值字符ASCII

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

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int res=getchar();
    putchar(res);
    int num=putchar(10);   //或printf('\n');
    printf("%d",num);
    return 0;
}

1.2按格式输入输出

printf

#include <stdio.h>

int printf(const char *format, ...);   //...代表可以添加多个

功能指定格式终端输出

参数多个

返回值正确输出字符个数

8种输出格式:

     %d            int

     %c            char

     %f             float

     %lf           double

     %s          字符串

     %p           指针

     %o          八进制          %#o

     %x         十六进制        %#x

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    printf("hello\n");
    int a=0x123;
    printf("%#x\n",a);
    int b=456;
    printf("a:%d  b:%d\n",a,b);
    return 0;
}

scanf

#include <stdio.h>

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

功能指定格式终端

参数多个

返回值:正确输入的字符个数

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

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

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

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=0;
    scanf("%d",&a);     //输入99
    printf("%d\n",a);   //输出99
    return 0;
}

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=0,b=0;
    scanf("%d %d",&a,&b);     //输入 12 3
    printf("a:%d  b:%d\n",a,b);   //输出 a:12  b:3
    return 0;
}

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    char c=0,d=0;
    scanf("%c%c",&c,&d);     //输入 q w 或 qw
    printf("c:%c  d:%c\n",c,d);   //输出 c:q  d:' ' 或  c:q  d:w
    return 0;
}

[2]垃圾字符回收

2.1 通过空格回收

可以回收一个多个空格   tab   回车

 #include <stdio.h>
int main(int argc, char const  * argv[])
{
    char c=0,d=0;
    scanf("%c %c",&c,&d);     //输入 q w 或 qw
    printf("c:%c  d:%c\n",c,d);   //输出 c:q  d:w
    return 0;
}

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    char c=0,d=0;
    scanf("%c   %c",&c,&d);     //输入 q w 或 q       w
    printf("c:%c  d:%c\n",c,d);   //输出  c:q  d:w
    return 0;
}

2.2  %*c  *抑制符 (了解)

可以回收任意一个字符

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    char c=0,d=0;
    scanf("%c%*c%c",&c,&d);     //输入 w q或 qwe
    printf("c:%c  d:%c\n",c,d);   //输出  c:w  d:q 或 c:q  d:e
}

2.3 getchar

scanf输入结束会在终端输入'\n';

解决'\n'程序造成的影响

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    while(1){
            char a;
            scanf("%c",&a);
            printf("%c\n",a);
            getchar();
    }
}

[3]分支语句

顺序结构

分支结构

循环结构

if

 单分支基本结构: 

if(常量值或表达式)

{

//代码块

}

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int age=20;
    if(age>18)
    {
        printf("work\n");
    }

}

双分支基本结构:

if(常量值或表达式)

{

//代码块1;

}

else

{

//代码块2;

}

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int age=10;
    if(age>18)
    {
        printf("work\n");
    }
    else
    {
        printf("study\n");
    }
}

多层分支基本结构:

if(表达式1)

{

代码段1

}

else if(表达式2)

{

}

else

{

}

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int age=70;
    if(age>18 && age<60)
    {
        printf("工作\n");
    }
    else if(age>60)
    {
        printf("退休\n");
    }
    else
    {
        printf("学习\n");
    }
}

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

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

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

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=0;
    scanf("%d",&a);
    if(a%4==0 && a%100 !=0 || a%400==0)
    {
        printf("%d年是闰年\n",a);
    }
    else
    {
        printf("%d年是平年\n",a);
    }
}

终端输入大写小写

终端输入小写出大写

输入其他打印"error"

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    char a=0;
    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");
    }
    return 0;
}

输入输出结果:

嵌套结构:

if(表达式1)
{
    if(表达式2)
    {
    }
}

示例:

100-90: A

89-80: B

79-70: C

<70: 补考

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int  s=0;
    scanf("%d",&s);
    if(s>=0&&s<=100)
    {
        if(s>=90){
            printf("A\n");
        } 
        else if(s>=80){
            printf("B\n");
        }
        else if(s>=70){
            printf("C\n");
        }
        else{
            printf("补考\n");
        }
    }
    else
    {
        printf("error\n");
    }
}

输入输出结果:

注意

1.  if后边可以没有else, else前边必须有if

2.  分支语句代码块只有一句可以省略{ }

switch

switch基本结构:

switch(常量值或表达式)

{

case 常量值1

代码块1

break;

case 常量值2:

代码块2;

break;

default:

代码块n;

break;

}

示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=4;
    switch (a)
    {
    case 1:
        printf("aaaa\n");
        break;
    case 4:
        printf("bbb\n");
        break;
    case 5:
        printf("ccc\n");
        break;
    default:
        break;
    }
}

运行结果:

100-90: A

89-80: B

79-70: C

<70: 补考

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=0,b=0;
    scanf("%d",&a);
    if(a>100 || a<0){
        printf("error\n");
        return 0;
    }
    b=a/10;
    switch(b)
    {
        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;
    }
    return 0;  
}

注意

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

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

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    int a=4;
    switch (a)
    {
    case 1:
        printf("aaaa\n");
    case 4:
        printf("bbb\n");
    case 5:
        printf("ccc\n");
    default:
        break;
    }
}

运行结果:

作业

1.  梳理笔记(原创)

2.  终端输入一个日期判断这一年的第几天

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

闰年229平年228

#include <stdio.h>
int djt(int y, int m, int d);
int main() {
    int y, m, d;
    printf("请输入日期:");
   scanf("%d-%d-%d",&y,&m,&d);
    // 计算并输出结果
    printf("%d年%d月%d日是这一年的第%d天。\n", y, m, d, djt(y, m, d));
    return 0;
}
// 计算一年中的第几天
int djt(int y, int m, int d) {
    int ytsh[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int i, djt = 0;
    // 如果是闰年,2月有29天
    if ( (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
        ytsh[2] = 29;
    }
    // 累加到目标月份之前的所有月份的天数
    for (i = 1; i < m; i++) {
        djt += ytsh[i];
    }
    // 加上目标日期的天数
    djt += d;
    return djt;
}

运行结果:

设置——控制拆行方式 off 改为 on

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值