学习嵌入式 Day 03

输入输出

按字符输入输出

' ' 包裹的单个字符

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);

垃圾字符回收

  1. 通过一个空格回收一个或多个空格、tab

问题:

(%c%c之间不存在空格,在终端输入中q w之间存在空格,以至于返回时将空格给返回了(用%d查看,为32))

解决:

%c与%c之间加空格。

  1. %*c *抑制符 回收任意一个字符(了解)

  1. 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++;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值