note 2
变量
存储数据的容器或盒子。
定义:数据类型 名字;
int num;
新定义的变量的默认值是不确定的,为了安全,一定要初始化。
使用:
1、赋值 num = 100;
2、参与运算 num*20-100;
变量的取名:
1、由数字、字母、下划线组成。
2、不能以数字开头
3、不能与关键字重名
4、长度不要超过30字符
5、见名知意
变量的输出printf函数:
C语言中以占位方式来告知数据的类型。
printf 类型 变量名
变量的输入scanf函数:
scanf 类型 地址=&变量名
练习1:定义各类型变量,使用scanf输入变量的值,使用printf显示变量的值。
#include <stdio.h>
int main()
{
char num_c=0;
short num_s=0;
int num_i=0;
long num_l=0;
long long num_ll=0;
scanf("%hhd""%hd""%d""%ld""%lld",&num_c,&num_s,&num_i,&num_l,&num_ll);
printf("%hhd ""%hd ""%d ""%ld ""%lld",num_c , num_s, num_i, num_l, num_ll);
}
练习2:已知sizeof可以计算类型的字节数,编程计算出各类型数据点的字节数。
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(long double));
}
常量:
在程序运算过程中不可以修改的数据。
字面值常量:
10 默认是int
3.14 double
3.14f float
“hello”
1 int
1u unsigned int
1lu unsigned long
被保护常量
const int num;
运算符
算术运算符:+ - * / %
/ % 除数不能为零,会出现:浮点数例外,(核心已转储)。
10/3 = 3
10%3 = 1
关系运算符:> < >= <= ==(变量尽量放在右边,为了让出错时有提醒。) !=
计算的结果是0或1,可以转变为逻辑真或假。
5 < n < 10;
在C语言中会先计算5和n的关系结果为0或1,然后0或1再与10比较永远为真,注意:C语言中的关系运算与数学中的运算顺序不同。
num = 100; 变成了赋值语句
100 = num; 会有错误提醒
自变运算符:++/–
对变量的值自动加1或减1,只有变量才能使用。
前自变:++num,对变量立即加1或减
后自变:num++,变量值下一行才会加1或减1
不建议过多使用,不同的编译处理的顺序不同。
逻辑运算符:&& || !
会先把要运算的对象转换逻辑值,0值转为假,非零值转为真。
A && B 左右两边都为真,结果才为真。
A || B 左右两边都为假,结果才为假。
!A 对A的值求反。
它们的运算结果可以当作if、for、while等语句判断条件。
注意:&&、||具有短路特性,但可以利用短路特性写出精简的分支结构。
if(num < 10)
{
num++;
}
num<10 && num++;
赋值运算符及扩展:= += -= *= /= %=
num += 10
num = num + 10;
num *= 10;
num = num * 10;
三目运算符:[1]?[2]:[3];
判断1的值为真计算2,为假则计算3,相当于简单的if/else语句。
在三目运算符中不能有流程控制语句,因为它始终是一个运算符,必须要有一个运算结果。
**字节数运算符:**sizeof
不是函数,是C语言的32个关键字之一,可以计算出数据类型所占的字节数。
sizeof不会计算表达,但会推算表达式的结果是什么类型,然后再计算类型的字节数。
位运算符:讲完进制转换、原反补之后再说。
类型转换:
由于各数据类型的存储格式不同,那么运算规则也就不同,只有相同类型的数据才能在一起进行运算。
自动类型:不同类型的数据必须要先转换成同一类型然后再运算(由计算机自动完成),转换规则(以不丢失数据为基础):
1、字节少向字节多的转。
2、整型向浮点型转。
3、有符号向无符号转。
强制类型转换:(类型)数据。有数据丢失的风险,慎重使用。
流程控制
默认情况下,代码从上到下顺序执行,流程控制语句则可以改变这种执行顺序。
分支:
if(条件表达式)
{
条件表达式为真时执行。
}
if(条件表达式)
{
条件表达式为真时执行。
}
else
{
条件表达式为假时执行。
}
if(条件表达式1)
{
条件表达式1为真时执行。
}
else if(条件表达式2)
{
条件表达式2为真时执行。
}
else
{
条件表达式1、2都为假时执行。
}
练习3:输入一个整数,判断是奇数还是偶数。
#include <stdio.h>
int main()
{
int num=0;
printf("请输入一个整数\n");
scanf("%d",&num);
if(num % 2 == 0)
{
printf("该数是偶数");
}
else
{
printf("该数是奇数");
}
}
练习4:输入一个3位整数,判断是否是水仙花数。
abc == aaa+bbb+ccc
#include <stdio.h>
int main()
{
printf("请输入一个三位数:\n");
int num = 0;
scanf("%d",&num);
int c = num % 10 ;
int b = (num/10) % 10 ;
int a = num / 100 ;
if(num == a*a*a+b*b*b+c*c*c)
{
printf("%d该数为水仙花数",num);
}
else
{
printf("%d该数不是水仙花数",num);
}
}
练习5:输入一个年份判断是否闰年。
#include <stdio.h>
int main()
{
printf("请输入一个年份:\n");
int year=0;
scanf("%d",&year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
printf("%d年是闰年",year);
}
else
{
printf("%d年不是闰年",year);
}
}
练习6:输入一个月份,计算该月有多少天(忽略闰年)。
#include <stdio.h>
int main()
{
int month=0;
printf("请输入一个月份\n");
scanf("%d",&month);
if(1>month || 12<month)
{
printf("输入年份有误\n");
}
else
{
if(2==month)
{
printf("28天\n");
}
else if(4 == month || 6 == month || 9 == month || 11 == month)
{
printf("30天\n");
}
else
{
printf("31天\n");
}
}
}