前言
本文介绍C语言中数据类型、运算符与表达式。
一、数据类型
1.基本类型
整型int、字符型char、实型(浮点型){单精度实型float、双精度实型double}
2.构造类型
数组型[]、结构类型struct、联合类型union、枚举类型enum、
3.指针类型*
4.空类型(无值类)void
二、常量
1.常量类型
整型:100、120、-140、0;
实型(占用4个字节):3.14、2.12、-10、0.12;
字符型:‘a’、‘b’、‘2’;
字符串:’‘a’’、’‘ab’’、’‘1c32’’、""(空串)。
2.常量定义
define PI 3;//定义常量
注意:常量不可以赋值
三、变量
1.变量命名规范
C语言规定标识符必须由字母、数字、下划线组成,且第一个字符不能为下划线;
C语言区别大小写;
变量先定义再使用。
四、整型数据
1.进制及其转换
2进制bin:0-1
8进制oct :0-7,前缀0
10进制:0-9
16进制hex:0-f,前缀0x
10到2:除2取余法
x86架构小端存储(英特尔/AMD),低位在前,高位在后
2.整型变量
int a;占用4个字节
五、浮点型数据
1.浮点型数据的输出
#include<stdio.h>;
int main()
{
float a =3.123;
printf("%f\n",a);//%f表示以浮点形式输出对应数据
}
2.浮点型
由小数点型(2.01)与指数型(1.014e-3)构成。
float a;占用4个字节
六、字符型数据
1.字符型常量
字母:‘a’
转义字符:’\n’(换行),’\b’(退格),’\’(反斜杠)
只能用单引号
2.字符型变量的使用
字符变量的定义与输出
#include<stdio.h>;
int main()
{
char a ='c';
printf("%c\n",a);//%c表示以字符形式输出对应数据
printf("%d\n",a);//%d表示以ASCILL形式输出对应数据
}
大小写字母的转化
#include <stdio.h>
int main()
{
char a = 'c';
a = a - 32;
printf("%c", a);
return 0;
}
七、字符串常量
"a"为字符串,‘a’为字符
字符串只有常量,没有变量,所以字符串不能赋值,如:a="adff"为非法定义,
字符串常量存储时,末尾加’\0’表示结束符,如"CHINA"占用6个字符存储,而不是5个。
八、混合运算
1.类型强制转换
#include <stdio.h>
int main()
{
int i =5;
float j = i / 2;
float k = (float)i;//强制类型转换运算符
float j1 = k / 2;
printf("%f\n", j);//输出值为2
printf("%f\n", j1);//输出值为2.5
return 0;
}
2.混合运算
#include <stdio.h>
int main()
{
int i =5;
float j = i / 2;//混合运算
float k = (float)i;//强制类型转换运算符
float j1 = k / 2;
printf("%f\n", j);//输出值为2
printf("%f\n", j1);//输出值为2.5
return 0;
}
九、数据输入\输出函数
1.scanf的用法与原理
常用数据读入有scanf、getchar
(1)scanf使用方法
int sanf(const char *format,…)
format为一个字符串
%d 十进制整数
%f 浮点数
%c 一个单一字符
%d,%f,%c可混合使用,次数不限
…为可变参数,数目与format中%的数目保持一致
(2)scanf原理:
- 行缓冲:输入的字符放在缓冲区,Scanf将匹配输入到控制台的字符串并转换为&x的相对应 型;
- 一般输入后敲击n’结束,‘\n’依然保存在缓冲区中,下次读取时会继续读入;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//缓冲区为空时,scanf才会阻塞(卡主)
int i;
scanf("%d", &i);
printf("%d\n", i);
char c;
scanf("%c", &c);//继续读入'\n'字符
printf("%c\n", c);
}
输出为:
- scanf在读取整型、浮点数、字符串时会自动忽略‘\n’、空格符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//缓冲区为空时,scanf才会阻塞(卡主)
int i;
scanf("%d", &i);
printf("%d\n", i);
int j;
scanf("%d", &j);//读入整数,'\n'被忽略
printf("%d\n", j);
}
输出为:
- 输入的字符放在缓冲区,Scanf将输入到控制台的字符串转换为&x的相对应 型,‘\n’依然保存在缓冲区中,下次读取时会继续读入;
2.scanf函数循环读取
发生错误时返回EOF
scanf出错的情况:行首输入ctrl z 、回车三次。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
while (scanf("%d", &i) != EOF)//while实现循环
{
printf("%d\n", i);
}
}
scanf疯狂打印原因:输入数据类型错误,scanf未匹配输入数据,i未被重新赋值,可通过rewind解决问题。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
while (rewind(stdin),scanf("%d", &i) != EOF)//while实现循环,rewind清空缓冲区非法字符
{
printf("%d\n", i);
}
}
字符串循环读取
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char c;
while (scanf("%c", &c) != EOF)//while实现循环
{
if(c != '\n'){
printf("%c",c-32);
}
else {
printf("\n");
}
}
}
3.scanf多类型混合读取
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
char c;
float f;
scanf("%i %c%f", &i, &c, &f);//混合输入时每次在%c之前加空格
printf("%i,%c,%f", i, c, f);
}
4.printf函数介绍
printf:输出到控制台(黑窗口),printf为标准输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("name=%s,age=%d,sex=%c,score=%4.1f\n","zhangsan",34,'m',98.5);//以6位输出98.5,小数点后保留1位
}
十、运算符与表达式
1.运算符分类及优先级
(1)运算符分类
算数运算符:+ - / * %
关系运算符:> < == >= <= !=
逻辑运算符:! && ||
位运算符:<< >> ~ | ^ &
赋值运算符:=
条件运算符:?
逗号运算符:,
指针运算符:&和 星号
求字节数运算符:sizeof
强制类型转换运算符:(类型)
分量运算符:. ->
下标运算符:[ ]
其他:如函数调用运算符()
(2)运算符优先级
2.算数运算符及算术表达式
取出输入数字各个位数的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
// 取出输入数字各个位数的值
{
int i;
printf("请输入一个正整数:");
scanf("%d",&i);
while (i!=0)
{
printf("%d\n", i % 10);
i = i / 10;
}
}
3.关系运算符与表达式
'> < == >= <= !=
关系运算符的值只有真假,对应的值为1和0;‘
判断两个浮点数相等的错误方式
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float f = 234.56;
if (f == 234.56) {
printf("f is equal to 234.56\n");
}
else {
printf("f is not equal to 234.56\n");
}
}
输出为:
判断两个浮点数相等的正确方式
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float f = 234.56;
if( (f<234.56+0.001)&& (f > 234.56 - 0.001)){
printf("f is equal to 234.56\n");
}
else {
printf("f is not equal to 234.56\n");
}
}
输出为:
4.逻辑运算符与逻辑表达式
! (非)、 &&(与)、 ||(或);
逻辑运算符组成的式子叫做逻辑表达式。
5.赋值运算符
6.条件运算符与逗号运算符
逗号运算符由左向右计算,计算结果与最后一个值相关,最后一个值为真,结果为真;最后一个值为假,结果为假;
7.自增、自减运算符及求字节运算符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i=-1;
int j;
int k;
j = i++ > -1;//拆成两步,j=i>-1;i++;
printf("j=%d\n",j);
k = ++i > -1;//拆成两步,i++;j=i>-1;
printf("k=%d\n",k);
printf("i的字节数=%d\n", sizeof(i));//获得变量的字节数
}
整型输入,字符输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
printf("%c\n",a);//整型数在0-128之间,可以用%c输出
}