苏嵌实训——day2(下)

简介: 苏嵌实训——day2(下)

5.3 字符常量


字符:将一个单一的非数值型数据用单引号引起来,就将其称之为一个字符。

例如:‘a’ ‘y’ ‘9’


#include <stdio.h>
int main(int argc, const char *argv[])
{
  char a = 'w';
  printf("a = %d %c\n",a,a);
  char b = 97;
  printf("b = %d %c\n",b,b);
  char c = 'w';
  printf("c = %c\n",c);
  c = c-32;
  printf("c = %c\n",c);
  return 0;
}


5.4 字符串常量


将一个或者多个字符通过双引号引起爱,将其称之为一个字符串,每一个字符串的结尾都会自动加一个’\0’

例如:“Helloworld” “a” “abc” “1234”;

注意:


a 是一个变量

‘a’:是一个字符常量,占一个字节

“a”:是一个字符串常量,占两个字节


#include <stdio.h>
int main(int argc, const char *argv[])
{
  //定义一个字符数组保存字符串
    char str[32] = "hello world";
  //使用%s来输出一个字符串
  printf("str = %s\n",str);
  //遇到\0表示字符串结束
  char str1[32] = "hello wo\0rld";
  printf("str1 = %s\n",str1);
  return 0;
}


5.5 标识常量 ----宏定义


将一个常量或者常量表达式标识成另一个标识符,使用这个标识符就相当于使用这个常量或者常量表达式,也将其称之为宏定义,这个标识符一般使用大写字母表示,并且要满足标识符的命名规则。


格式:

#define 标识符 常量或者常量表达式
例如:
#define N 32


#include <stdio.h>
#define M 128
#define N 32
#define SUM M+N
#define SUM1 (M+N)
#define SUB(a,b) (a-b)
int main(int argc, const char *argv[])
{
  int i = M + 5;
  printf("i = %d\n",i);
  int a = N +M;
  printf("a = %d\n",a);
  int b = SUM + 100;
  printf("b = %d\n",b);
  //128 + 32 * 10 
  int c = SUM*10;
  printf("c = %d\n",c);
  //(128 + 32) *10
  int d = SUM1 *10;
  printf("d = %d\n",d);
  int e = SUB(10,5) + 100;
  printf("e = %d\n",e);
  return 0;
}


六、变量


6.1 概念


变量,就是我们自己定义的变量名,变量就是可以改变其值的量,变量就是一个标识符,所以需要满足标识符的命令规则。

在程序的运过程中,变量占据一定的内存空间,其大小由变量数据类型来决定的

例如:

int a;//变量a在内存中占四个字节
char b;//在内存中就分配一个字节
#include <stdio.h>
int main(int argc, const char *argv[])
{
  //定义一个变量
  int i;
  //变量的初始化,在定义变量的同时赋值
  int a = 100;
  int b;
  //变量赋值,这个变量已经定义好之后再赋值
  b = 200;
  //注意:在同一个{}内,同一个变量名不能定义两次
  //long b = 88;
  a = 888;
  b = 999;
  //变量和变量之间可以赋值
  //等号左边叫做左值,等号右边叫做右值,是将右值赋值给左值
  //右值不会发生改变
  i = a;
  return 0;
}


6.2 变量定义格式


格式:
    存储类型 数据类型 变量;
    存储类型:有四种
    auto:默认不写就是这个类型
    register
    static
    extern
数据类型:就是我们之前学习的char,int等
变量名:就是起名字,是一个标识符


6.3 类型转换


原本的变量在使用的额过程中需要改变他的类型,转换之后这个变量的类型以及存储空间都会发生改变。

类型转换的方法:

隐式类型转换:是操作系统或者编译器自动进行转换的

显示类型转换:又称之为强制类型转换,是我们人为直接转换的

显示的数据类型转换一般形式为:


(数据类型名称)<表达式>


#include <stdio.h>
int main(int argc, const char *argv[])
{
  //隐式类型转换:当float类型赋值给int类型的时候,就会将a临时转换成int再赋值给b
  //隐式类型转换默认一从低精度往高精度转
  float a = 3.14;
  int b = a;
  printf("b = %d\n",b);
  int i= -20;
  unsigned int j = 6;
  if(i + j > 0)
  {
  printf("i + j > 0,%u\n",i+j);
  }
  else
  {
  printf("i + j <= 0");
  }
  int m = 10,n = 4;
  //printf("%d\n",m/n);
  printf("%f\n",(float)m/n);
  printf("%f\n",(float)m/(float)n);
  return 0;
}


强制类型转换注意事项:

强致类型转换后面的表达式如果存在复杂运算,一定


七、运算符


7.1 算术运算符


双目运算符:运算符的两边各有一个变量

± * / %

单目运算符:运算符边上只有一个变量

++ –

%:取余,只能用在整数,浮点数据不能取余

++:自增,每次自增1

–:自减,每次自减1


7.2 关系运算符


< >= <= == !=


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int a = 10,b = 20,c;
  //使用关系运算符的表达式的结果是一个bool类型
  //表达式为真,则结果为1,表达式为假,结果为0
  c = a > b;
  printf("c =%d\n",c);
  c = a < b;
  printf("c =%d\n",c);
  if(a > b)
  {
  printf("hello world!\n");
  }
  else
  {
  printf("hello nanjing\n");
  }
  return 0;
}


7.3 逻辑运算符


逻辑运算符主要是用于连接多个有关系运算符连接的表达式,判断整体表达式为真为假

!:逻辑反,原本表达式为真变为假,为假则变为真

!(A > B) ====> A <= B

&&:逻辑与,两个表达式都为真才为真,只要有一个为假则整体为假

||:逻辑或,有一个为真则整体为真,除非都为假才为假


判断一个变量a的值是否在10-20的范围内:

数学:10 <=a <=20;

c语言:a >=10 && a <= 20

判断一个变量a的值是否不在10到20的范围内:

数学:a < 10 或 a > 20

c语言:a < 10 || a > 20


#include <stdio.h>
int f1()
{
  printf("this is f1\n");
  return 0;
}
int f2()
{
  printf("this is f2\n");
  return 1;
}
int main(int argc, const char *argv[])
{
  /*
  int a = 100,b;
  //b = 10 <=a <=20;
  b = a >=10 && a <= 20;
  printf("b = %d\n",b);
  */
  int a = 1,b = 0;
  if(f1() && f2())  //短路原则:如果条件1不成立,则不会判断条件2
  {
  printf("hello world!\n");
  }
  if(a && b)   //两个表达式都要成立
  {
  printf("hello tianjing!\n");
  }
  if(a ||b)  //逻辑或,有一个表达式成立就行
  {
  printf("a || b成立!\n");
  }
  return 0;
}


7.4 位运算


但凡涉及到位操作,一定先将这个数转化为二进制数,然后再操作

位逻辑反

& 位逻辑与,同为1则为1,否则为假, 1&1 = 1 ,1&0 = 0 ,0 &0 = 0

| 位逻辑或,只要有一个为1则为1

^ 位逻辑异或,相同为0,不同为1 1^0 = 1 ,0^0 = 0 ,1^1 = 0

<< 左移
>> 右移


#include <stdio.h>
int main(int argc, const char *argv[])
{
  unsigned char m = 0xa7,n = 0x3b;
  unsigned char k;
  //逻辑反
  k = ~m;
  //m:1010 0111
  //~m:0101 1000 = 0x58
  printf("k = %#x\n",k);
  k = m & n;
  //m:   1010 0111
  //n:   0011 1011
  //m&n: 0010 0011 = 0x23
  printf("k = %#x\n",k);
  //左移
  k = m << 3;
  //m:1010 0111
  //m:0011 1000->0x38
  printf("k = %#x\n",k);
  //右移
  k = n >> 3;
  //n:     0011 1011
  //n >>3:0000 0111-->0x07
  printf("k = %#x\n",k);
  return 0;
}


7.5 赋值运算符和赋值符合运算符


赋值运算符:=

左值 = 右值

注意:左值必须是变量,右值可以是变量也可以是常量

注意事项:

=:表示赋值

==:表示判断是否相等

赋值复合运算符:

a = a+b------>a+=b;

a^=b

a>>=b—>a = a >> b


7.6 条件运算符—三目运算符


语法格式:

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

运行顺序:

先执行表达式1,如果表达式1为真则执行表达式2,如果表达式1为假,则执行表达式3

条件运算符其实就是一个简单的if…else语句


if(表达式1)
    表达式2
else
{
    表达式3
}


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int a = 100,b = 20,c;
  c = a > b ? ++a : b++;
  printf("a = %d,b = %d,c = %d\n",a,b,c);
  return 0;
}


7.7 逗号运算符


语法格式:

a = (表达式1,表达式2,表达式3,表达式4);

执行顺序:

括号里面的表达式从左往右依次执行,最终整个表达式的结果是最后一个表达式的结果

注意:

逗号运算符必须使用括号


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int a = 100,b = 40,c;
  //c = (++a,++b,a = a+b,a++);
  printf("a = %d,b = %d,c = %d\n",a,b,c);
  c = a+++b;
  //c = a+++(++b);
  printf("a = %d,b = %d,c = %d\n",a,b,c);
  return 0;
}


7.8 sizeof运算符


sizeof是一个关键字,也是一个运算符,主要用于获取一个数据类型或者变量所占内存的大小

语法格式:

n = sizeof(数据类型或者变量名)

n:用于保存这个数据类型或者变量名所在内存的字节数

例如:n = sizeof(int) —>n = 4;


#include <stdio.h>
int main(int argc, const char *argv[])
{
  _Bool a;
  char b;
  short c;
  int d;
  long e;
  float f;
  double g;
  long long h;
  printf("sizeof(_Bool) = %ld %ld\n",sizeof(_Bool),sizeof(a));
  printf("sizeof(char) = %ld %ld\n",sizeof(char),sizeof(b));
  printf("sizeof(short) = %ld %ld\n",sizeof(short),sizeof(c));
  printf("sizeof(int) = %ld %ld\n",sizeof(int),sizeof(d));
  printf("sizeof(long) = %ld %ld\n",sizeof(long),sizeof(e));
  printf("sizeof(float) = %ld %ld\n",sizeof(float),sizeof(f));
  printf("sizeof(double) = %ld %ld\n",sizeof(double),sizeof(g));
  printf("sizeof(long long) = %ld %ld\n",sizeof(long long),sizeof(h));
  return 0;
}


编程练习


题目1:一个水分子的质量约为3.0*10^-23g,1L水大约950g,编写一个程序,要求输入水的升数,然后显示这么多升水中包含多少个水分子。


#include <stdio.h>
#define MOL_MASS  3.0e-23
#define QT_MASS 950
int main(int argc, const char *argv[])
{
  float water,quarts,molecules;
  printf("MOL_MASS = %e\n", MOL_MASS);
  printf("Please enter number of the quart of water: ");
  scanf("%f",&quarts);
  water = quarts * QT_MASS;    //计算水的质量
  molecules = quarts * QT_MASS / MOL_MASS;   //计算水分子的数量
  printf("quarts = %f quart\n",quarts);
  printf("water = %f g\n",water);
  printf("molecules = %e(%f)\n",molecules,molecules);
  putchar('\n');
  return 0;
}


练习2:输入一个三位数,求个位,十位,百位的和


789—> 7 + 8 + 9
789 /100 = 7
789 %10 = 9
789 %100 /10 = 8
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
  int num;
  printf("请输入一个三位数:\n");
  scanf("%d",&num);
  if(num > 999 || num < 100)
  {
  exit(0);
  }
  int ge,shi,bai,sum;
  ge = num % 10;
  shi = num % 100 /10;
  bai = num / 100;
  sum = ge + shi + bai;
  printf("sum = %d\n",sum);
  return 0;
}


练习3:输入两个数,实现这两个数的交换


int m,n;
scanf("%d %d",&m,&n);
m = 100,n = 50;
m = 50,n = 100;
#include <stdio.h>
int main(int argc, const char *argv[])
{
  printf("请输入两个数:\n");
  int m,n;
  scanf("%d %d",&m,&n);
  printf("交换前:m = %d,n = %d\n",m,n);
#if 1
  int tmp;
  tmp = m;
  m = n;
  n = tmp;
#else
  m = m+n;
  n = m-n;
  m = m-n;
#endif
  printf("交换后:m = %d,n = %d\n",m,n);
  return 0;
}
相关文章
|
7月前
|
Java 关系型数据库 MySQL
|
7月前
|
SQL 前端开发 数据库
|
7月前
|
算法 前端开发 Java
思途实训-day03-04
思途实训-day03-04
|
网络协议 数据安全/隐私保护 网络架构
苏嵌实训——day17(上)
苏嵌实训——day17(上)
苏嵌实训——day17(上)
|
消息中间件 存储 Linux
苏嵌实训——day16(上)
苏嵌实训——day16(上)
苏嵌实训——day16(上)
|
存储 程序员 Linux
苏嵌实训——day14(上)
苏嵌实训——day14(上)
苏嵌实训——day14(上)
|
搜索推荐 API 索引
苏嵌实训——day13(下)
苏嵌实训——day13(下)
111 0
苏嵌实训——day13(下)
|
存储
苏嵌实训——day11(下)
苏嵌实训——day11(下)
106 0
苏嵌实训——day11(下)
|
存储 Ubuntu 固态存储
苏嵌实训——day1
苏嵌实训——day1
146 0
苏嵌实训——day1