Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37371
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-16 19:30
个人简介

嵌入式Linux编程 Android软件开发

文章分类

全部博文(16)

文章存档

2015年(16)

分类: C/C++

2015-04-29 21:08:53

一 输入和输出 

 

1.整数 [%d]

 

<1>输入整数

 

int data;

 

scanf("%d",data);//错误 

scanf("%d",地址值);

 

scanf("%d",&data);

 

注意:C源中获取变量的地址 : &变量名

 

int data1,data2;

 

scanf("%d",&data1);

scanf("%d",&data2);

 

或 

scanf("%d%d",&data1,&data2);

 

例如:

100200回车键   => 错误 

=======================================

100 200回车键  => 正确 

100回车 

200回车 

 

 

<2>输出整数 

 

printf("用户的内容%d\n",变量名);

 

printf("The data is %d\n",data); "\n:输出结束后,换行"

 

printf("The data is d% /n",data);//错误 

printf("The data is %d \n",&data);//错误 

 

printf("The data is %d %d\n",data1,data2);

 

练习:

int a,b,c;给三个变量输入值 100 200 300 

最后输出a,b,c的值,输出的格式=> a:100  b:200  c:300

 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a = 100,b = 200,c = 300;

  5.     printf("a = %d\n",a);
  6.     printf("b = %x\n",b);
  7.     printf("c = %o\n",c);

  8.     printf("-------------------------------\n");

  9.     printf("b = %#x\n",b);
  10.     printf("c = %#o\n",c);
  11.     return 0;
  12. }


2.浮点数 [%f] 

 

float a;

 

scanf("%f",&a);

printf("a = %f",a);

printf("a = %.1f",a);//精确到小数点后面1bit

printf("a = %.2f",a);//精确到小数点后面2bit

 

注意:输入的时候,空格或回车符作为分格符号 

 

练习:

float a,b,c;

 

输入的值:0.5  0.3  1.4

输出的格式:a = 0.5,b = 0.3,c = 1.4

 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float a,b,c;

  5.     scanf("%f%f%f",&a,&b,&c);
  6.     printf("a = %.1f,b = %.2f ,c = %.3f\n",a,b,c);

  7.     return 0;
  8. }


3.字符[8bit] [%c]

 

=================================================================================

C语言中的数据:整数 ,小数,字符,字符串

 

字符: '字母'  a(不是字符)   'a'(字符)

 

注意:

字符实际在内存中存储的时候,是以ASCII(整数

(对字符的编码[0-255]: 0-127  标准的ASCII碼  128-255:IBM公司扩展)的形式存储

 

Linux 通过man ascii 查看ASCII碼表

 

需要记住:

'\0'->0   'a'->97  'A'->65   '0':48 

 

'A'  + 32 ---> 'a'   'a'- 32-->'A'

 

'0' - ('0')[48] -->  0      '1' - '0'[48] ---> 1

================================================================================

 

<1>输入 

scanf("%c",&a);

scanf("%c%c",&a,&b);

 

注意:此时连续读入字符(空格和回车符不作为输入的分割符);

 

<2>输出 

 

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

 

练习:

char a,b,c,d;

 

输出的结果a=3  b=a  c=4  d=f

 

 

练习:

输入整数 200 250 300 给变量   a b c,然后输出 

输入字符 '3' '5' 'f' 给变量   d e f,然后输出 

输入小数 1.34 5.67 8.12 给变量h i j,然后输出 

 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a,b,c;
  5.     char d,e,f;
  6.     float h,i,j;

  7.     char x;

  8.     scanf("%d%d%d",&a,&b,&c);
  9.     
  10.     //读取'\n'
  11.     scanf("%c",&x);

  12.     scanf("%c%c%c",&d,&e,&f);
  13.     scanf("%f%f%f",&h,&i,&j);


  14.     printf("a = %d,b = %d,c = %d\n",a,b,c);
  15.     printf("d = %c,e = %c,f = %c\n",d,e,f);
  16.     printf("h = %.2f,i = %.2f,j = %.2f\n",h,i,j);

  17.     return 0;
  18. }


二 C语言运算符 

 

1.自增加[++] ,自减少[--];

 

int a = 100;

 

a --; //a = a - 1

a ++; //a = a + 1

 

 

注意:

如果自增加/减少 前置的时候,先操作,然后拿值

如果自增加/减少 后置的时候,先拿值,然后操作

 

b = a --;  // b = a, a = a -1

b = --a;  //  a = a - 1,b = a

 

练习:

给变量a,b,c输入值100,200,300 

然后让a自增加1,赋值给c ,让 的值赋值给c,然后自减1 ,最后输出a,b,c的值 

 

2.算术运算符 

 

加 + ,减 ,乘 ,除 / , 求余  %

 

注意:

<1> /”  如果计算的两个数是整数,则为整除  10 / 3 = 3 ,  3 / 10 = 0

<2> "%"  要求计算的两个数必须是整数        10 % 3 = 1 ,  3 % 10 = 3

 

练习:

输入两个数,将计算结果输出

 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int data;
  5.     int c = 20;
  6.     int b = 7;
  7.     
  8.     data = c + b;
  9.     printf("data = %d\n",data);
  10.     
  11.     data = c - b;
  12.     printf("data = %d\n",data);
  13.     
  14.     data = c * b;
  15.     printf("data = %d\n",data);
  16.     
  17.     data = c / b;
  18.     printf("data = %d\n",data);//2
  19.     
  20.     data = c % b;
  21.     printf("data = %d\n",data);//6

  22.     return 0;
  23. }


3.关系运算符 

 大于  >  , 小于 < ,大于等于 >= ,小于等于  <=  ,等于  == ,不等于  != 

 

 

注意:

<1>关系运算符运算的结果 : 0[关系不成立]   1[关系成立]

<2>C语言中非0即为真

 

4.逻辑运算符 

 

逻辑与 && (且的关系) ,逻辑或 || (或的关系) , 逻辑非 !(->真,真->)

 

注意:

<1>&& 它的两个表达式的值,只要有一个为假,则运算结果为假 (一假必假)

   特点[短路]:当第一个表达式计算结果为假的时候,第二个表达式将不会计算

 

<2>|| 它的两个表达式的值,只要有一个运算结果为真,则最终运算的结果为真(一真必真)

   特点[短路]:当第一个表达式计算结果为真的时候,第二个表达式将不会计算

 

 

练习:

int a = 'a', b = 'b';

 

ab的值做减法,结果赋值给a,

a = a - b;  //a = -1,b = 98 


value = a ++ && b --; 

printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 97

 

value = a || b ++;

printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98

 

value = (a > b) || (a <= b);

printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98

 

value = !a && !b;

printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 0,a = 0,b = 98

 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(int argc, const char *argv[])
  3. {
  4.     int value;
  5.     int a = 'c';
  6.     int b = 100;

  7.     value = a++;
  8.     printf("value = %d\n",value);//99
  9.     
  10.     value = ++b;    
  11.     printf("value = %d\n",value);//101

  12.     ////a = 100,b = 101

  13.     value = a > b;
  14.     printf("value = %d\n",value);//0
  15.     
  16.     value = a <= b;
  17.     printf("value = %d\n",value);//1

  18.     value = a != b;
  19.     printf("value = %d\n",value);//1

  20.     value = a == b;

  21.     printf("value = %d\n",value);//0
  22.     
  23.     return 0;
  24. }


5.位运算符

 

按位与 , 按位 |, 按位异或 ^,按位反 ~ , 左移  <<  , 右移 >>

 

 

   10101 

&  01010

--------------------- 0则为0

   00000 

 

 

   10101 

|  01010

-------------------- 1则为1

   11111 

 

 

   10101 

~

------------------- 01,10

   01010 

 

 

 

   10101 

^  00110

-------------------- 相同为0,不同为1

   10011 

 

<1>思考:如何判断两个数是否相等(不用关系运算符)?

    用 "^",如果两个数相等,异或的结果必定是0,否则不为1

 

  10101 

^ 10101 

--------------

  00000 

 

<2>思考:有个data值,我想将它的[0-3]bit变成1010,其它位不变?

        data = data & ~0xf 

data = data | 0xa 

 

例如:

data = 45;

 

    1   1  1   0  1 

         

~0xf

    1   0  0   0  0 

 

-----------------------------

    1  0   0   0  0

 

0xa 

0  1   0   1  0 

 

|

--------------------------------

    1  1   0   1  0

 

 

//1 1 1   1 1 1 1

练习:把这个data[0-6]位变成0100100,其它位不变

data = data &  ~0x7f;

data = data |  0x24

 

 

===============================================================

逻辑移位[无符号类型变量]:

左移的时候,右边补0

右移的时候,左边补0

 

算术移位[有符号类型变量]:

 

正数

左移的时候,右边补0

右移的时候,左边补0

 

负数

 

左移的时候,右边补0

右移的时候,左边补1

===============================================================

 

练习:

char c;

unsigned char a = 0xfd;

char b = 0xfd;

 

c = a << 3;

c = a >> 3;

c = b >> 3;

c = b << 3;

 

 

6.赋值运算符号

= , += , -= ,*= ,/= , %=

 

a += 3 ;// a = a + 3

a *= 3 ;// a = a * 3

 

7.三目运算符 

 

表达式1 ? 表达式2 : 表达式3;

 

结果:

如果表达式1的值为真,则计算结果为表达式2计算的结果,否则为表达式3计算的结果

 

练习:

1.输入一个数,将这个数[0-3]位变成0101 ,[5-6]变成 00,其它位不变 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int data;

  5.     printf("Input a data : ");
  6.     scanf("%d",&data);

  7.     data = data & ~0xf;
  8.     data = data | 0x5;
  9.     
  10.     //data = data & ~0x60

  11.     data = data & ~(0x3 << 5);

  12.     printf("data = %#x\n",data);

  13.     return 0;
  14. }


2.输入两个数,将这两个数的值交换 [思考:如何不引入第三个变量,完成交换]

a = 3

b = 4

 

3.输入三个数,将三个数,从小到大,排列,然后输出 [不允许使用if语句]

 

a = 3;

b = 2;

c = 5;

=>

a = 2;

b = 3;

c = 5;

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int x;
  5.     int t;
  6.     int a,b,c;
  7.     
  8.     //20 10 30
  9.     printf("Input data : ");
  10.     scanf("%d%d%d",&a,&b,&c);
  11.     
  12.     x = a < b ? a : (t = a, a = b, b = t);
  13.     printf("x = %d\n",x);

  14.     a < c ? a : (t = a, a = c, c = t);
  15.     b < c ? b : (t = b, b = c, c = t);
  16.     
  17.     printf("a = %d,b = %d,c = %d\n",a,b,c);

  18.     return 0;
  19. }


阅读(960) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~