笔记
局部变量和全局变量可以重名;作用域遵循就近原则
#include<stdio.h>
int a = 10;
int main()
{
int a =8;
printf("%d\n",a);
return 0;
}
//8
#include<stdio.h>
int a = 10;
void fun();
int main()
{
int a =8;
fun();
printf("%d\n",a);
return 0;
}
void fun()
{
printf("a:%d\n",a);
}
//a:10
//8
#include<stdio.h>
int a = 10;
void fun(int b);
int main()
{
int a =8;
fun(a);
printf("%d\n",a);
return 0;
}
void fun(int a)
{
printf("a:%d\n",a);
}
//a:8
//8
1.输入输出
1.1按字符输入输出
getchar()
使用man getchar查看getchar函数定义
#include <stdio.h>
int getchar(void);
功能:在终端获取一个字符
参数:无
返回值:获取字符的ASCII码值
#include<stdio.h>
int main()
{
int a = getchar(); //A
printf("%d\n",a);//65
return 0;
}
putchar()
使用man getchar查看getchar函数定义
#include <stdio.h>
int putchar(int c);
功能:在终端输出一个字符
参数:字符的ASCII码值
返回值:字符的ASCII码值
#include<stdio.h>
int main()
{
int a = getchar(); //A
putchar(a); //A
putchar(10); //换行
return 0;
}
1.2按格式输入输出
printf
#include <stdio.h>
int printf(const char *format, ...);
功能:按指定的格式向终端输出
参数:多个
返回值:正确输出字符个数
格式:
%d int
%ld long
%c char
%f float
%lf double
%s 字符串
%p 指针
%o 八进制 %#o
%x 十六进制 %#x
#include<stdio.h>
int main()
{
int a = 0x15;
printf("%x\n",a); //15
}
#include<stdio.h>
int main()
{
int a = 0x15;
printf("%#x\n",a); //0x15
}
#include<stdio.h>
int main()
{
int a = 0x15,b=3;
printf("%#x %d\n",a,b); //0x15 3
}
scanf
#include <stdio.h>
int scanf(const char *format, ...);
功能:按指定的格式向终端输入
参数:多个
返回值:正确输入的字符个数
第一个字符输入格式错误,直接返回0
#include<stdio.h>
int main()
{
int a = 0,b = 0;
scanf("%d,%d",&a,&b);//2,3
printf("%d,%d\n",a,b);//2,3
}
2.垃圾字符回收
2.1 通过空格回收
可以回收一个或多个空格,包括tap和回车
2.2通过抑制符回收
%*c可以回收任意字符
2.3getchar
scanf需要使用回车表示输入完成,但是回车'\n'会被记录,再次使用printf会把回车提取出来导致输出回车,所以需要在scanf后使用getchar把回车提取出去。
3.分支语句
顺序结构
分支结构
循环结构
if
基本结构
if(常量值或表达式)
{
代码块
}
分支结构
if(表达式1)
{
代码块
}
else if(表达式2)
{
代码块
}
else if(表达式n)
{
代码块
}
else
{
代码块
}
判断平年闰年
#include<stdio.h>
int main()
{
int a = 0;
while (1)
{
printf("输入需要查询的年份\n");
scanf("%d",&a);
if (a % 4 == 0 && a % 100 != 0)
{
printf("普通闰年\n");
}
else if (a%400==0)
{
printf("世纪闰年\n");
}
else
{
printf("平年\n");
}
}
return 0;
}
终端输入大写,输出小写
终端输入小写,输出大写
输入其他,打印"error"
#include<stdio.h>
int main()
{
char a=0;
while (1)
{
printf("输入字母\n");
scanf("%c",&a);
if (a>=65&&a<=90)
{
printf("%c\n",a+32);
}
else if (a>=92&&a<=122)
{
printf("%c\n",a-32);
}
else
{
printf("ERROR\n");
}
getchar();
}
return 0;
}
嵌套结构
if(表达式1)
{
if(表达式2)
{
}
}
100-90: A
89-80: B
79-70: C
<70: 补考
#include<stdio.h>
int main()
{
int a=0;
while (1)
{
printf("输入成绩\n");
scanf("%d",&a);
if (a>=0&&a<=100)
{
if (a>=90&&a<=100)
{
printf("A\n");
}
else if (a>=89&&a<=80)
{
printf("B\n");
}
else if (a>=79&&a<=70)
{
printf("C\n");
}
else
{
printf("补考\n");
}
getchar();
}
else
{
printf("error\n");
}
}
return 0;
}
注:if后面可以没有else,但是else前面必须要有if
分支语句代码块只有一句时,可以省略{}
switch
switch(常量值或表达式)
{
case 常量值1:
代码块
break;
case 常量值2:
代码块
break;
default:
代码块
break;
}
100-90: A
89-80: B
79-70: C
<70: 补考
#include<stdio.h>
int main()
{
int a=0;
while (1)
{
printf("输入成绩\n");
scanf("%d",&a);
if (a>=0&&a<=100)
{
switch (a/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;
}
}
else
{
printf("error\n");
}
getchar();
}
return 0;
}
注:case后边的常量值是整型或字符型,不能是浮点型或字符串
case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束
作业
终端输入一个日期,判断是这一年的第几天
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,sum=0;
scanf("%d-%d-%d",&y,&m,&d);
switch (m)
{
case 1:
sum = d;
printf("第%d天\n",sum);
break;
case 2:
sum = 31 + d;
printf("第%d天\n",sum);
break;
case 3:
sum = 31+29 + d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 4:
sum = 31+29+31 + d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 5:
sum = 31+29+31+30 + d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 6:
sum = 31+29+31+30+31+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 7:
sum = 31+29+31+30+31+30+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 8:
sum = 31+29+31+30+31+30+31+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 9:
sum = 31+29+31+30+31+30+31+31+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 10:
sum = 31+29+31+30+31+30+31+31+30+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 11:
sum = 31+29+31+30+31+30+31+31+30+31+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
case 12:
sum = 31+29+31+30+31+30+31+31+30+31+30+d;
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
printf("第%d天\n",sum);
else
printf("第%d天\n",sum-1);
break;
default:
break;
}
return 0;
}