您的位置:首页 > 其它

嵌入式开发第三天(输入字符类型的判断、控制流、常量与变量、运算符)

2016-07-11 13:17 513 查看

输入字符类型的判断



#include <stdio.h>

int main(int argc,char *argv[])

{

int a,b,c,yes;

printf("请输入两个数字(以空格空开)\n");

yes=scanf("%d %d",&a,&b);

if(yes!=2) //判断数据输入的正确性,输入错误进入下一步

{

while((yes=getchar())!='\n');     //一次一个的吧 yes里面的内容提出 (清空),不然 yes里面会一直有值

printf("格式错误,重新输入\n");

   
goto input;

}

 

c=a+b;

printf("%d+%d=%d\n",a,b,c);

return 0;

if-else练习

输入一个年份整数,判断是平年还是闰年,能够被4整除的年份是闰年,但其中能够被100整除的却不是闰年,除非它同时能够被400整除,其情况为平年   400

#include<stdio.h>

int main(void)

{
int year,flag;

printf("please input the year:\n");
while(1)
{
flag = scanf("%d",&year);
if(flag == 1 && getchar() == '\n' && year>0)
break;

printf("Sorry!Please try again!\n");
if(year<=0)
continue;
while(getchar() !='\n');  //清缓冲区
}

if(year%4||(year%100==0&&year%400==0))
{

printf("This year is leap year!\n");

}
else
printf("This is not leap year!\n");
return 0;

}

switch -- case  开关(选择语句)

switch(表达式)




{




case 常量表达式1:语句1;




....




case 常量表达式2:语句2;




default:语句;




}


表达式:字符变量,整形变量,枚举变量

运用switch-case 输入的月份及日,计算这为这一年的第几天

一月31天 二月28 29天(平年28 闰年29 )   三月31天 四月30天 5月31天 6月30天 七月31天 八月31天 九月30 十月31天 十一月30 十二月31天  
 #include <stdio.h>

int main(void)

{
int day,flag,year,month,a;

printf("please input the year month day:\n");

while(1)
{
flag = scanf("%d %d %d",&year,&month,&day);
if(flag == 3 && getchar() == '\n' )
break;

printf("Sorry!Please try again!\n");

while((flag=getchar() !='\n'));  //清缓冲区

}

if(year%4||(year%100==0&&year%400==0))
a=29;
else a=28;

switch(month-1)

{

case 11:day+=30;
case 10:day+=31;
case 9:day+=30;
case 8:day+=31;
case 7:day+=31;
case 6:day+=30;
case 5:day+=31;
case 4:day+=30;
case 3:day+=31;
case 2:day+=a;
case 1:day+=31;break;
case 0:day;

}

printf("%d\n",day);

return 0;

}

这道题的重点就是,了解 switch-case 的机制,case如果没有加break,他会进入下一条,直到遇到break;

goto 跳转语句

goto 标签;

标签:

不建议使用,容易破坏栈

如果goto里面有 初始化内存,那么每一次GOTO都会初始化一次,这样对内存的存储会产生破坏;while里面也一样;
通常用于跳转错误处理;

常量与变量

变量命名规则:由字母,数字,下划线,变量只能是字母及下划线开始 (变量不能是系统的关键字、return void printf main int char static ) 变量命名跟实际意义相符合  int
add_num; int photo_flag

常量

   十进制常量DEC  100;              0xc == 12

  八进制常量OCT  0132          0981(错误:超过了八) 
十六进制常量HEX 0x123  (0~f)   a  b   c   d   e   f 

                             10 11 12 13 14  15
 
浮点常量  1.0 3.15 1e-1 = 1X10^-1

字符:'x'

字符串"sdfdf" 'x' 'd' 'f' 'd' 'f' '\0'

运算符  

算术运算符  + - * 
/  取整(商)     5/2 = 2   (int形  取整) 
%  取余         5%2 = 1

++ 自加    i++  ++i  
- -  自减    i- -   - -i    
最近原则(i在最左边,则先赋值再运算,若+或者-则先运算再赋值)

关系运算 > < >= <=

==  等于   if(i%100=0)错误    if(1 == flag)正确
!=  不等于

逻辑运算
  非0即真  1,-1都是真   if(-1)

&&   if(表达式&&表达式1)  当表达式与表达式1都为真的情况,条件成立
if((5>2)&&(2>3))  假

||    if(表达式1||表达式2) 只要一个条件为真,则为真

!    if(!表达式)

练习:从键盘输入三个数,比较大小,输出最大的一个

A  B  C   A>B && A>C   ==>A

位运算
 &(位与) 两个为1为1,否则为0
  0x7 & 0x4 = 0x4   0100
    0111
&   0100 

------------------------------ 
    0100

|(位或)  有1则为1,否则为0
0x7 & 0x4 

0111
| 0100

----------------
0111   0x7-->7(DEC)

~r 位取反   0x7  0111 ==1000   

^ 位异或   相同为0,不同为1

>>右移      0xa4   右移4
     1010 0100
     0000 1010

---------------------------------
 0      a

   
<<左移

         0xb   0x7

  1 0 1 1
^ 0 1 1 1
-------------------------

  1 1 0 0
  ==> 0xc 

x^y^y = x :    
0xb   0x7
1 0 1 1
^ 0 1 1 1
-------------------------

  1 1 0 0  ==>
0xc

^y      0 1 1 1
---------------------
1 0 1 1   ===x

练习:输入两个值,交换两个值的并输出,不用第三个变量
x=0xb y=0x7 

x^y x     y        
0xb   0x7
1 0 1 1               
^ 0 1 1 1
-------------------------    

  1 1 0 0
  ==>   new->x
0 1 1 1
--------------------
1 0 1 1      y    = x 
1 1 0 0      new->x
1 0 1 1
------------------------------

0 1 1 1

x^=y;
y^=x;
x^=y;

其他
,分隔表达式
= 赋值  int i = 20;

三目运算符
条件?条件真运行:条件假运行

a>b?a:b
条件为真,返回a,否则为b

sizeof 是运算符  不是函数
int c;
sizeof(c);sizeof(int);
char s[10]={0};
sizeof(s);
char s[10] = "dsf";
sizeof(s);

练习:

  
1、当用户输入5的时候,使用嵌套循环产生下列图案(5行美元符号,第行递增一个字符)

$     

$$    

$$$    

$$$$    

$$$$$   

2、编写一个程序,要求用相应的控制语句往屏幕中输出26个小写字母

3、打印下面的图案

    |   *

    |  ***

    | *****

    |*******

    | *****

    |  ***

    |   *

4、编写一个程序,判断一个整数是否为素数

在gcc下用到数学函数,如sqrt。在gcc时要加上 -lm 参数,这样告诉编译器我要用到数学函数了 。

如:

gcc a.c -o a -lm

5、运用switch-case 输入的年份月份及日,计算这为这一年的第几天

一月31天 二月28 29天(平年28 闰年29 )   三月31天 四月30天 5月31天 6月30天 七月31天 八月31天 九月30 十月31天 十一月30 十二月31天  

char a = 0xa,b=0xb,c=0xc,d = 0xd;

int i=0xabcd; 

6、定义四个符号char类型,然后通过左移,拼接成一个无符号的int类型

7、通过位运算进行置1或者清零操作
1000 1101   置第四位为1,对第二位清零(要求操作过程不能修改其他位)

对x位置1   k = k | 1<<x

对X位清零 k = k & ~(1<<x) 

printf("0x%08x");   以八位的格式 显示16进制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: