嵌入式开发第三天(输入字符类型的判断、控制流、常量与变量、运算符)
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 ) 变量命名跟实际意义相符合 intadd_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进制
相关文章推荐
- redis之事务
- [iOS 发布] in-house 发布
- Qt学习之路(33): 国际化(上)
- sphinx 增量索引 实现实时更新
- 基于SpringBoot + Mybatis实现SpringMVC Web项目
- Filter简介
- Java模拟Http post、get请求
- 用java语言实现事件委托模式
- LeetCode 121. Best Time to Buy and Sell Stock
- Android不同App中Activity的相互启动
- OTL,OCL,BTL电路的性能特点和差别
- 体验一把做黑客的感觉-IPC$入侵之远程控制
- 安卓获取当前最顶部Task应用名称
- 【Sicily 1937】导游
- bootstrap学习
- 每天一个设计模式(1):策略模式
- ios 监听app从后台恢复到前台
- 富兰克林的13条人生准则
- 【Python学习笔记】第三方模块
- Android控件ToggleButton的使用与修改