day4笔记

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

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

 

<1> 输入输出

1.1 按字符输入输出

 (1) getchar

#include<stdio.h>

int getchar();

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

参数:无

返回值:终端输入的字符的ASCII值

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

 

(2) putchar

 #include<stdio.h>

int putchar( int c );

功能:终端输出一个字符

参数:字符ASCII

返回值:字符ASCII

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

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

 

        第一个a:由 getchar 引起,我自己输入的字符

        第二个a:由 putchar 输出的字符

        97:由 putchar 返回的a的ASCII值

1.2 按格式输入输出

(1) printf

#include <stdio.h>

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

功能指定格式终端输出

参数多个

返回值正确输出字符个数

格式:

        %d        int

        %c        char

        %f        float

        %lf        double

        %s        字符串

        %p        指针

        %o        8进制             %#o

        %x        十六进制        %#x

#include<stdio.h>
int main(int argc, char const *argv[])
{
    printf("hello\n");
    int a=0x123;    //十六进制
    int b=456;        //十进制
    printf("%#x\n",a);
    printf("%#o\n",b);      //456转换为八进制
    printf("a:%d  b:%d\n",a,b);     //0x123转换为十进制
    return 0;
}

 

(2)  scanf

#include<stdio.h>

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

功能:按指定的格式向终端输入  (输入完成后按回车健结束)

参数多个

返回值正确输入字符个数

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

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

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

<2> 垃圾字符回收

2.1 通过空格回收

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

 在 scanf ()里面的两个%c中间加上空格

2.2 *抑制符  %*c

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

 在 scanf ()里面的两个%c中间加上%*c

2.3 getchar

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

 

若没有使用 getchar,当我们输入 m,终端会打印出m,scanf输入结束会在终端输入'\n',造成上图所示情况,会打印两行空白

   while(1)
   {
       char a;
       scanf("%c",&a);
       printf("%c\n",a);
       getchar();
   }

使用了 getchar,就不会出现上述情况

<3> 分支语句

顺序结构:

分支结构:

循环结构;

3.1 if

基本结构;

if(常量值或表达式)

{

        //代码块

}

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

if(常量值或表达式)

{

        //代码块1;

}

else

{

        //代码块2;

}

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

多层分支

if(表达式1)

{

        代码段1

}

else if(表达式2)

{

        代码段2

}

else

{

        代码段3

}

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

练习1:

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

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

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

#include<stdio.h>
int main(int argc, char const *argv[])
{
   int year=0;
   printf("输入一个年份:");
   scanf("%d",&year);
   if(year%4==0&&year%100!=0)
   {
       printf("该年份是闰年\n");
   }
   else if(year%400==0)
   {
       printf("该年份是闰年\n");
   }
   else
   {
       printf("该年份是平年\n");
   }
   return 0;
}

练习2:

终端输入大写小写

终端输入小写出大写

输入其他打印"error"

#include<stdio.h>
int main(int argc, char const *argv[])
{
    char x;
    scanf("%c",&x);
    if(x>='a'&&x<='z')
    {
         printf("%c\n",x-32);
    }
    else if(x>='A'&&x<='Z')
    {
         printf("%c\n",x+32);
    }
    else
    {
        printf("error\n");
    }
    return 0;
}

3.2 switch

基本结构

switch(常量值或表达式)

{

        case 常量值1:

                代码块1;

                break;

        case 常量值2:

                代码块2;

                break;

        default:

                代码块n;

                break;

}

练习3:

100-90:         A

89-80:         B

79-70:         C

<70:         补考

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int x=0;
    scanf("%d",&x);
    if(x>=0&&x<=100)
    {
        switch (x/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语句执行完才结束

<4> 作业:

1.终端输入一个日期,判断是这一年的第几天
   scanf("%d-%d-%d",&y,&m,&d);

   闰年2月29天,平年2月28天

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int y=0,m=0,d=0;
    int pin=0,run=0;
    printf("输入年月日,中间用-隔开\n");
    scanf("%d-%d-%d",&y,&m,&d);
    switch(m)
    {
        case 1:
            pin=d;
            run=d;
            break;
        case 2:
            pin=31+d;
            run=pin;
            break;
        case 3:
            pin=59+d;
            run=pin+1;
            break;
        case 4:
            pin=90+d;
            run=pin+1;
            break;
        case 5:
            pin=120+d;
            run=pin+1;
            break;
        case 6:
            pin=151+d;
            run=pin+1;
            break;
        case 7:
            pin=181+d;
            run=pin+1;
            break;
        case 8:
            pin=212+d;
            run=pin+1;
            break;
        case 9:
            pin=243+d;
            run=pin+1;
            break;
        case 10:
            pin=273+d;
            run=pin+1;
            break;
        case 11:
            pin=304+d;
            run=pin+1;
            break;
        case 12:
            pin=334+d;
            run=pin+1;
            break;
    }
    if(y%4==0&&y%100!=0)
   {
       printf("该天是这一年的第%d天\n",run);
   }
   else if(y%400==0)
   {
       printf("该天是这一年的第%d天\n",run);
   }
   else
   {
       printf("该天是这一年的第%d天\n",pin);
   }
    return 0;
}

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值