华清远见杭州day04 20240704

一、笔记梳理 

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

#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);//全局变量
}

tip:引用其他函数时,该函数在执行时会使用全局变量而非局部变量

1. 输入输出

1.1按字符输入输出

tip:在linux环境下可通过终端使用man命令查看函数手册,了解函数相关信息及其使用方法。

1.1.1getchar()函数

C标准库<stdio.h>
声      明int getchar(void)
功      能向终端输入一个字符
参      数NA
返 回 值该函数以无符号 char 强制转换为 int 的形式返回读取的字符,即返回向终端输入的字符的ASCII值

1.1.2putchar()函数

C标准库<stdio.h>
声      明int puttchar(int c)
功      能从终端输出一个字符
参      数将输出字符的ASCII值传递
返 回 值返回字符的ASCII值

 ps:putchar()无法在函数内部通过"\n"换行

1.2按格式输入输出

1.2.1printf()函数
C标准库<stdio.h>
声      明int printf(const char *format, ...)
功      能
按指定的格式向终端输出值
参      数多个字符串(数、数组)
返 回 值正确输出的字符个数
格式
%dint
%cchar
%ffloat
%lfdouble        
%s字符串        
%p指针
%o八进制%#o
%x十六进制%#x
1.2.2scanf()函数
C标准库<stdio.h>
声      明
int scanf(const char *format, ...)
功      能
按指定的格式向终端输入值(以回车键结束输入)
参      数多个字符串(数、数组)
返 回 值

正确输出的字符个数,若第一个字符输入错误,则直接返回0

格式
%dint
%cchar
%ffloat
%lfdouble        
%s字符串        
%p指针
%o八进制%#o
%x十六进制%#x

ps:scanf格式必须和终端输入格式一一对应,不能加'\n' ,变量名前边加&(取地址符),表示取变量的地址

例:

 printf("请输入一个日期:年 月 日\n");
    scanf("%d-%d-%d",&y, &m, &d);

代码中各字符以'-'号隔开,在终端输入时也须用'-'隔开

2.垃圾字符回收

2.1通过空格回收

只需要在使用scanf()函数时,控制格式的%c等字符前加上空格,即可实现垃圾字符的回收

该方法可回收一个或多个空格、Tab、回车

2.2通过%*c回收

只需要在使用scanf()函数时,控制格式的%c等字符前加上%*c,即可实现垃圾字符的回收

该方法可回收任意一个字符

2.3通过getchar()函数回收

因为scanf()函数在输入结束时,会在终端输入'\n',在scanf()函数后使用getchar()函数可消除

'\n'对程序造成的影响:

#include<stdio.h>
int main(int argc, char const *argv[])
{
    char en = 0;
    printf("请输入一个字母:\n");
    scanf("%c",&en);
    getchar();
    while ((en < 'A' || en > 'Z') && (en < 'a' || en > 'z'))
    {
        printf("字母输入错误,请重新输入:\n");
        scanf("%c",&en);
        getchar();
    }
    if(en >= 'A' && en <= 'Z')
    {
        printf("这是一个大写字母,他的小写字母是:%c\n",(en+32));
    }
    else if(en >= 'a' && en <= 'z')
    {
        printf("这是一个小写字母,他的大写字母是:%c\n",(en-32));
    }
    return 0;
}

3.分支语句

3.1if分支语句

基本结构:

if(常量值或表达式)
{
	//代码块;
}
=====================
if(常量值或表达式)
{
	//代码块1;
}
else
{
	//代码块2;
}
=====================
if(常量值或表达式)
{
	//代码块1;
}
else if
{
	//代码块2;
}
else
{
	//代码块3;
}

代码示例

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int num = 0;
    printf("请输入您的成绩:\n");
    scanf("%d",&num);
    if(num >= 0 && num <= 100)
    {
        if(num >= 90 && num <= 100)
        {
            printf("您的成绩等级为:A\n");
        }
        else if(num >= 80 && num <= 89)
        {
            printf("您的成绩等级为:B\n");
        }
        else if(num >= 70 && num <= 79)
        {
            printf("您的成绩等级为:C\n");
        }  
        else
        {
            printf("你需要补考!\n");
        }
    }
    else 
    {
        printf("成绩输入错误!");
    }
    return 0;
}

3.2switch分支语句 

基本结构:

switch(常量值或表达式)
{
	case 常量值1:
		代码块1;
		break;
	case 常量值2:
		代码块2;
		break;
	default:
		代码块n;
		break;
}

代码示例:

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int num = 0;
    printf("请输入您的成绩:\n");
    scanf("%d",&num);
    if(num > 100 || num < 0) 
        printf("成绩输入错误!\n");
    else
    {
        switch (num / 10)
        {
            case 10:
            case 9:
                printf("您的成绩等级为:A\n");
                break;
            case 8:
                printf("您的成绩等级为:B\n");
                break;
            case 7:
                printf("您的成绩等级为:C\n");
                break;
            default:
                printf("你需要补考!:\n");
                break;
        }
    }
    return 0;
}

 ps:

  1. case后边的常量值是整型或字符型,不能是浮点型或字符串
  2. case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束

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

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int y=0, m=0, d=0, d2=0;
    printf("请输入一个日期:年 月 日\n");
    scanf("%d %d %d",&y, &m, &d);
    if(m>2)
    {
    if(y%400==0||(y%4==0&&y%100!=0)) d2+=29;
    else d2+=28;
    }
    while (m--)
    {
        if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) d2+=31;
        else if(m==4||m==6||m==9||m==11) d2+=30;
    }
    printf("这个日期是今年的第%d天\n",d2+d);
    return 0;
}

运行效果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值