局部变量和全局变量可以重名,作用域遵循就近原则
#include <stdio.h>
int a = 10; //全局变量a
void fun()
{
printf("1.%d\n", a);
int a = 1;
//a = 1;
printf("2.%d\n", a);
}
int main()
{
int a = 8; //局部变量
//a = 8; //改全局变量的值
fun();
printf("3.%d\n", a);
return 0;
}
输入输出
1.1按字符输入输出
getchar
函数:
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:终端输入的字符的ASCII码值
int res=getchar();
printf("%d\n",res);
putchar
函数:
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
printf("hello\n");
int a=0x123;
printf("%#x\n",a);
int b=456;
printf("a:%d b:%d\n",a,b);
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.1 通过空格回收
可以回收一个或多个空格 tab 回车
2.2 %*c 抑制符
char c=0,d=0;
scanf("%c%*c%c",&c,&d);
printf("c:%c d:%c\n",c,d);
2.3 getchar
scanf输入结束时,会在终端输入'\n';
解决'\n'对程序造成的影响:
示例程序
#include <stdio.h>
int main()
{
// int res = getchar();//取第一个字母
// putchar(res);
// putchar('\n');
// printf("ascii=%d\n", res);
// int num = putchar('\n');//( \n = 10 )putchar(10);
// printf("%d\n",num);
char a, b;
printf("输入两个字母\n");
scanf("%c %c", &a, &b);
//scanf("%d%*c%d", &a, &b);
//scanf("%c", &a);
//scanf("%c", &b);
getchar();
printf("a:%c b:%c\n", a, b);
printf("输入两个字母\n");
scanf("%c %c", &a, &b);
getchar();
printf("a:%c b:%c\n", a, b);
return 0;
}
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
{
}
例题:
终端输入一个年份,判断平年或闰年:
#include <stdio.h>
int main()
{
int year = -1;
while (1)
{
printf("输入年份,-1退出\n");
scanf("%d", &year);
getchar();
if (year < 0)
break;
else if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
{
printf("%d 是闰年\n", year);
}
else
{
printf("%d 不是闰年\n", year);
}
}
}
终端输入大写,输出小写;输入小写,输出大写
输入其他报错
#include <stdio.h>
int main()
{
char c;
while (1)
{
printf("输入一个字母判断其大小写\n");
scanf("%c", &c);
getchar();
printf("%c ", c);
if (c >= 'A' && c <= 'Z')
{
printf("是大写字母\n%c\n", c + 32);
}
else if (c >= 'a' && c <= 'z')
{
printf("是小写字母\n%c\n", c - 32);
}
else
{
printf("输入错误\n");
break;
}
}
return 0;
}
注意:
- if后边可以没有else, else前边必须有if
- 分支语句代码块只有一句时,可以省略{ }
switch
switch(常量值或表达式)
{
case 常量值1:
代码块1;
break;
case 常量值2:
代码块2;
break;
default:
代码块n;
break;
}
例题:
输入成绩输出等级100-90: A
89-80: B
79-70: C
<70: 补考
#include <stdio.h>
int main()
{
int grade = -1;
while (1)
{
printf("输入成绩\n");
scanf("%d", &grade);
getchar();
if (grade < 0 || grade > 100)
break;
switch (grade / 10)
{
case (10):
case (9):
printf("A");
break;
case (8):
printf("B");
break;
case (7):
printf("C");
break;
default:
printf("你无敌了");
break;
}
printf("\n");
}
return 0;
}
注意:
- case后边的常量值是整型或字符型,不能是浮点型或字符串
- case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束
练习题:
终端输入一个日期,判断是这一年的第几天闰年2月29天,平年2月28天
使用case无脑方法:
#include <stdio.h>
int main()
{
int year, month, day;
int runnian;
printf("输入年 月 日\n");
scanf("%d %d %d", &year, &month, &day);
getchar();
if (month > 12 || day > 31)
{
printf("输入错误\n");
return 0;
}
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
runnian = 1;
else
runnian = 0;
switch (month)
{
case (1):
printf("是一年的第 %d 天\n", day);
break;
case (2):
printf("是一年的第 %d 天\n", day + 31);
break;
case (3):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian);
break;
case (4):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31);
break;
case (5):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30);
break;
case (6):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31);
break;
case (7):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30);
break;
case (8):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31);
break;
case (9):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31);
break;
case (10):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30);
break;
case (11):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31);
break;
case (12):
printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30);
break;
default:
printf("输入错误");
break;
}
return 0;
}
标签:case,30,int,31,Linux,break,系列学习,printf,第四集
From: https://blog.csdn.net/sjrhsk_hahaha/article/details/140187855