局部变量和全局变量可以重名;作用域遵循就近原则
#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);
}
[1]输入输出
1.1按字符输入输出
getchar
man手册查看getchar:
#include <stdio.h>
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:终端输入的字符的ASCII码值
int res=getchar();
printf("%d\n",res);
putchar
#include <stdio.h>
int putchar(int c);
功能:终端输出一个字符
参数:字符的ASCII码值
返回值:字符的ASCII码值
putchar没有换行的效果,需要额外添加
int res=getchar();
putchar(res);
int num=putchar('\n');//putchar(10);
// printf("%d\n",num);
1.2按格式输入输出
printf
#include <stdio.h>
int printf(const char *format, ...);
功能:按指定的格式向终端输出
参数:多个
返回值:正确输出字符个数
格式:
%d int
%c char
%f float
%lf double
%s 字符串
%p 指针
%o 八进制 %#o
%x 十六进制 %#x
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);
[2]垃圾字符回收
2.1 通过空格回收
可以回收一个或多个空格 tab 回车
2.2 %*c *抑制符 (了解)
可以回收任意一个字符
2.3 getchar
scanf输入结束时,会在终端输入'\n';
解决'\n'对程序造成的影响:
[3]分支语句
顺序结构:
分支结构:
循环结构:
if
基本结构:
if(常量值或表达式)
{
//代码块;
}
=====================
int age=10;
if(age>18)
{
printf("work\n");
}
========================
if(常量值或表达式)
{
//代码块1;
}
else
{
//代码块2;
}
===========================
int age=10;
if(age>18)
{
printf("work\n");
}
else
{
printf("study\n");
}
多层分支
if(表达式1)
{
代码段1;
}
else if(表达式2)
{
}
else
{
}
===========================
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)
终端输入一个年份,判断平年或闰年:
终端输入大写,输出小写
终端输入小写,输出大写
输入其他,打印"error"
代码:
#include<stdio.h>
int main()
{
while(1){
int a=0;
scanf("%d",&a);
if(a%4==0&&a%100!=0)
{
printf("是普通闰年\n");
}
else if (a%400==0)
{
printf("是世纪闰年\n");
}
else
{
printf("是平年\n");
}
}
return 0;
}
嵌套结构
if(表达式1)
{
if(表达式2)
{
}
}
================
if(s>=0&&s<=100)
{
// if() ABC...
}
else
{
printf("error\n");
}
注意:
- if后边可以没有else, else前边必须有if
- 分支语句代码块只有一句时,可以省略{ }
switch
switch(常量值或表达式)
{
case 常量值1:
代码块1;
break;
case 常量值2:
代码块2;
break;
default:
代码块n;
break;
}
============================
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 a = 0;
while (1)
{
scanf("%d", &a);
if (a <= 100 && a >= 0)
{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;
}
注意:
- case后边的常量值是整型或字符型,不能是浮点型或字符串
- case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束
作业:
- 梳理笔记(原创)
- 终端输入一个日期,判断是这一年的第几天
scanf("%d-%d-%d",&y,&m,&d);
闰年2月29天,平年2月28天
代码:
//闰年2月29天,平年2月28天
//月份 1 2 3 4 5 6 7 8 9 10 11 12
//天数 31 29/28 31 30 31 30 31 31 30 31 30 31
#include <stdio.h>
int main()
{
int a, b, c = 0;
while (1)
{
printf("请输入年月日并以空格分割:\n");
scanf("%d %d %d", &a, &b, &c);
if (a % 4 == 0 && a % 100 != 0) //闰年
{
switch (b / 1)
{
case 1:
printf("这是这一年的第%d天\n", c);
break;
case 2:
printf("这是这一年的第%d天\n", 31 + c);
break;
case 3:
printf("这是这一年的第%d天\n", 31 + 29 + c);
break;
case 4:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + c);
break;
case 5:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + c);
break;
case 6:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + c);
break;
case 7:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + c);
break;
case 8:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + 30 + c);
break;
case 9:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + 30 + 31 + c);
break;
case 10:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + c);
break;
case 11:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + c);
break;
case 12:
printf("这是这一年的第%d天\n", 31 + 29 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 30 + c);
break;
default:
printf("请认真输入年月日\n");
break;
}
}
else //平年
{
switch (b / 1)
{
case 1:
printf("这是这一年的第%d天\n", c);
break;
case 2:
printf("这是这一年的第%d天\n", 31 + c);
break;
case 3:
printf("这是这一年的第%d天\n", 31 + 28 + c);
break;
case 4:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + c);
break;
case 5:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + c);
break;
case 6:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + c);
break;
case 7:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + c);
break;
case 8:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + 30 + c);
break;
case 9:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + 30 + 31 + c);
break;
case 10:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + c);
break;
case 11:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + c);
break;
case 12:
printf("这是这一年的第%d天\n", 31 + 28 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 30 + c);
break;
default:
printf("请认真输入年月日\n");
break;
}
}
}return 0;
}