局部变量和全局变量可以重名,作用域遵循就近原则
#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;
}
注意:
- case后边的常量值是整型或字符型,不能是浮点型或字符串
- case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束
<4> 作业:
闰年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;
}