输入输出
按字符输入输出
用 ' ' 包裹的单个字符
getchar
终端输入:man getchar
int getchar (void) ;
功能:终端输入一个字符
参数:无(void :空);
返回值:输入字符的ASCII码值
int y = getchar();
printf("%d\n",y);
putchar
终端输入:man putchar
int putchar (int c) ;
功能:终端输出一个字符;
参数:字符的ASCII码值;
返回值:输出字符的ASCII码值;
int a= getchar();
putchar(a);
putchar(10); // 也可putchar('\n');( \n 的ASCII码值为10)
按格式输入输出
printf
int printf (const char *format, ...);
功 能:按格式终端输出;
参数:有多个
返回值:输出元素个数
格式:%d int
%c char
%f float %.nf:保留n位小数
%lf double
%s 字符串
%o %#o 八进制
%x %#x 十六进制
八进制%o 与 %#o :
int a=023;
printf("%o\n",a); //23
printf("%#o\n",a); //023
位宽:位宽设置值应>=实际位宽
int a=6,
b=66,
c=666;
printf("%3d\n",a); // 6
printf("%3d\n",b); // 66
printf("%3d\n",c); //666
int a=6,
b=66;
char c='e';
printf("a的值为:%d b:%d c:%c\n",a,b,c); //a的值为:6 b:66 c:e
scanf
int scanf (const char *format, ...);
功能:按照格式向终端输入;
参数:多个;
返回值:正确输入的个数
若第一个输入错误。则直接返回0;
多个参数:
int a = 0,b = 0;
scanf("%d %d",&a,&b);
printf("%d %d\n",a,b);
垃圾字符回收
- 通过一个空格回收一个或多个空格、tab
问题:
(%c%c之间不存在空格,在终端输入中q w之间存在空格,以至于返回时将空格给返回了(用%d查看,为32))
解决:
%c与%c之间加空格。
- %*c *抑制符 回收任意一个字符(了解)
- getchar
多个scanf给char赋值时,回收scanf的换行;一般对char类型使用,换行也是一个字符。
未使用getchar:
(输入a后回车,该情况下会将 回车 赋给b,此时b会输出空格)
使用getchar:
分支语句
if else
基本格式:
if(表达式)
{
语句块1;
}else{
语句块2;
}
运行顺序:先对括号内的表达式进行判断,若表达式成立,则先执行语句块1,若不成立,则执行语句块2.
注:else前必须要有if ,if后可以没有else。
当分支语句中,语句块只有一行时才能省略大括号。
分层结构
if(表达式1)
{
语句块1;
}else if(表达式2)
{
语句块2;
}else{
语句块 n;
}
————————————————————————————————————————
练习:100-90 A ; 89-80 B ; 79-70 C ; <70 补考;
int score = 0;
scanf("%d", &score);
if (score > 100 || score < 0)
{
printf("输入成绩无效\n");
}
else
{
if (score >= 90 && score <= 100)
{
printf("成绩为A\n");
}
else if (score >= 80 && score <= 89)
{
printf("成绩为B\n");
}
else if (score >= 70 && score <= 79)
{
printf("成绩为C\n");
}
else
{
printf("需要补考\n");
}
}
嵌套结构
if(表达式1)
{
if(){ }
}else{
语句块;
}
switch case
switch(表达式)
{
case 常量值1:
/* code */
break;
case 常量值2:
/* code */
break;
default:
/* code */
break;
}
}
case 后的常量值只能是数字或字符(不能是浮点型等类型)
用switch实现成绩等级划分:
100-90 A 89-80 B 79-70 C <70 补考
int score = 0;
scanf("%d", &score);
if (score > 100 || score < 0)
{
printf("请输入正确成绩:\n");
}
else
{
switch (score / 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;
}
}
break:switch语句中,若无break,会从符合条件的分支开始一直执行下去,直到遇到break为止,或直到switch运行结束。
练习:从终端输入一个日期,计算是这一年的第几天。
int year = 0,month = 0,day = 0,a=0;
int days = 0;
scanf("%d %d %d",&year,&month,&day);
if(year%4==0 && year%100 !=0 ||year%400==0)
{
a = 29;
}else{
a = 28;
}
switch(month){
case 12:
days=days+31;
case 11:
days=days+31;
case 10:
days=days+30;
case 9:
days=days+31;
case 8:
days=days+31;
case 7:
days=days+30;
case 6:
days=days+31;
case 5:
days=days+30;
case 4:
days=days+31;
case 3:
days=days+a;
case 2:
days=days+31;
break;
case 1:
days = day;
}
printf("%d\n",days+day);
return 0;
循环语句
for
for(表达式1;表达式2;表达式3)
{
语句块;
}
表达式1:循环变量赋初值
表达式2:终止条件
表达式3:增值或减值
————————————————————————————————————————
for (int i = 0; i < 5; i++)
{
printf("%d\n",i);
}
练习:用for实现计算3-7的和
思路:1. 先获取3-7 2. 求和
int sum = 0;
for(i=3;i<=7;i++)
{
sum+=i;
}printf("%d\n",sum); //25
int i;
for (i = 1; i < 5; i++)
{
printf("%d\n",i);
}
printf("%d\n",i); //5
变形写法:
int i =1;
for( ;i<5; )
{
printf("%d\n",i);
i++;
}
死循环 for( ; ;)
双层for
for(int i=1;i<6;i++)
{
for(int j=1;j<=4;j++)
{
printf("i:%d j:%d\n",i,j);
} }
_________________________________________________________________________
for(int i=1;i<10;i++)
{
for(int j=1;j<=i;j++)
{
// printf("%d*%d=%2d ",i,j,i*j);
printf("%d*%d=%d\t",i,j,i*j);
}
putchar(10); //换行
}
while
int i=1;
while(i<5)
{
printf("%d\n",i);
i++;
}