顺序程序设计
三种基本结构
- 顺序结构:代码从前往后依次按顺序运行
- 选择结构:根据条件选择运行某部分代码
- 循环结构:反复执行某部分代码
数据形式
常量和变量
数据有两种表现形式:常量和变量
-
常量(在程序运行过程中,值不能被改变的量称为常量)
-
整型常量:例:123,-23,0
示例:
/*整型常量*/ #include "stdio.h" void main() { int a, b, c; a = 1024; b = 512; c = a + b; printf("c = %d\n", c); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 c = 1536 [Done] exited with code=9 in 0.15 seconds
-
实型常量:十进制小数形式:3.1232;0.342;0.0;12.0;指数形式:例如:12.34e3 (12.34 * 10的3次方);0.13E-7 (0.13 * 10的-7次方)“注:e或E之前必须有数字,且e或E后面必须为整数;错误示范e4;3e1.3”
示例:
/*实型常量——>十进制小数*/ #include "stdio.h" void main() { double a = 3.14, b = 2.718, c; c = a + b; printf("c=%f\n", c); }
/*实型常量——>指数形式*/ #include "stdio.h" void main() { double a = 3.14e4, b = 2.718e4, c; c = a + b; printf("c=%f\n", c); }
结果:
/*实型常量——>十进制小数*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 c=5.858000 [Done] exited with code=11 in 0.148 seconds
/*实型常量——>指数形式*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 c=58580.000000 [Done] exited with code=15 in 0.152 seconds
-
字符常量:普通字符:用单引号括起来的一个字符;例如:‘a’ ‘Z’ ‘3’;转义字符:以字符\开头的字符序列
示例:
/*字符常量——>普通字符*/ #include "stdio.h" void main() { char i = 'A'; //字符常量只能有一个字符,不能有多个 printf("%c\n", i); }
/*字符常量——>转义字符*/ #include "stdio.h" void main() { char a = '\''; printf("hello world\nhello world\n%c", a); }
结果:
/*字符常量——>普通字符*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 A [Done] exited with code=2 in 0.145 seconds
/*字符常量——>转义字符*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 hello world hello world ' [Done] exited with code=25 in 0.149 seconds
-
字符串常量:用双引号把若干个字符括起来,例如:“egg” “3.13”
注:单引号内只能包含一个字符,双引号内可以包含一个字符串
示例:
/*字符串常量*/ #include "stdio.h" void main() { char a[15] = "hello world"; //'hello world' printf("%s\n", a); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 hello world [Done] exited with code=0 in 0.146 seconds
符号常量:用一个符号代表一个常量 例如: # define PI 3.1415926
优点:①含义清楚 ②在需要改变程序中多处用到的同一个常量时,能做到改一处则全文改的效果
示例:
/*符号常量*/ #include "stdio.h" #define PI 3.1415926 //注意行末尾没有分号 void main() { printf("%f\n", PI); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 常量.c -o 常量 && "c:\Users\Administrator\Desktop\vscode\"常量 3.141593 [Done] exited with code=9 in 0.143 seconds
-
转义字符
转义字符 | 字符值 | 输出结果 |
---|---|---|
\n | 换行 | 将光标当前位置移到下一行的开头 |
\’ | 一个单引号( ‘ ) | 输出单个 单引号字符 |
\” | 一个双引号( “) | 输出 单个双引号字符 |
\t | 水平制表符 | 将光标当前位置移到下一个Tab未知 |
\ | 一个反斜杠() | 输出反斜杠字符 \ |
\a | 警告(alert) | 产生声音或视觉信号 |
\b | 退格(backspace) | 将光标当前未知后退一个字符 |
\f | 换页(form feed) | 将光标当前位置移到下一页的开头 |
\r | 回车 | 将光标当前位置移动到本行的开头 |
\v | 垂直制表符 | 将光标当前位置移到下一个垂直制表对齐点 |
\o , \oo 或 \ooo (其中o表示一个八进制数字) | 与该八进制码对应的ASCII字符 | 与该八进制码对应的字符 |
\xh[h…] (其中h代表一个十六进制数字) | 与该十六进制码对应的ASCII字符 | 与该十六进制码对应的字符 |
? | 一个问号 | 输出问好字符 |
-
变量
变量代表一个有名字、具有特定属性的一个存储单元。用来用来存放数据,也就是存放变量的值
在程序运行期间,变量的值是可以改变的
注:变量必须先定义,后使用
示例:
/*变量*/ #include "stdio.h" void main() { double a = 3.14, b = 2.718; a = a + b; printf("a= %f\n", a); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 变量.c -o 变量 && "c:\Users\Administrator\Desktop\vscode\"变量 a= 5.858000 [Done] exited with code=12 in 0.143 seconds
-
常变量
const 不允许改变变量对应的值(例如:const int a = 3;)
常变量与符号变量有区别?
在程序中都可以使用,但是性质有不同;在预编译后,符号常量就不存在,直接置换成对应的值,对符号常量的名字是不分配存储单元的
示例:
/*常变量——>常变量*/ #include "stdio.h" void main() { const int a = 1; // int a = 1; a != a + 1; // a = a+1; printf("a=%d\n", a); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 变量.c -o 变量 && "c:\Users\Administrator\Desktop\vscode\"变量 a=1 [Done] exited with code=4 in 0.143 seconds
-
标识符
变量名、符号常量名、函数名、数组名、类型名等的统称
标识符的命名规则:
- 只能由字母、数字、下划线3种字符组合
- 且第一个字符必须为字母或下划线
例如:正确示范:a、_t、a_1、PI _total;错误示范:1_a、*pi、a#b、3D2Y
注:大小字母和小写字母是两个不同的字符。因此例如: A_1变量和a_1是两个不同的变量
数据类型
C语言要求在定义所有的变量时都要指定变量的类型
为什么要指定数据类型?
计算机存储空间是有限的,不能无限存储数据。例如1/3 = 0.3333333…
对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式
C语言数据类型
-
基本类型:
-
整型类型:基本整型(int)、短整型(short int)、长整型(long int)、双长整型(long long int)、字符型(char)、布尔型(bool)
示例:
/*例如1/3*/ #include "stdio.h" void main() { double a; a = 1 / 3.0; printf("a=%f\n", a); }
/*基本整型(int)*/ #include "stdio.h" void main() { int a; a = 2147483647; // a的取值范围是 -2147483648 ~ 2147483647 printf("a=%d\n", a); }
/*短整型(short int或short)*/ #include "stdio.h" void main() { short int a; a = 32767; // a的取值范围是 -32768 ~ 32767 printf("a=%d\n", a); }
/*整数变量的无符号属性*/ #include "stdio.h" void main() { unsigned int a; a = 1024; printf("a=%d\n", a); }
/*字符型数据(char)*/ #include "stdio.h" void main() { char a; a = 65; printf("a=%c\n", a); }
结果:
/*例如1/3*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=0.333333 [Done] exited with code=11 in 0.141 seconds
/*基本整型(int)*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=2147483647 [Done] exited with code=13 in 0.143 seconds
/*短整型(short int或short)*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=32767 [Done] exited with code=8 in 0.145 seconds
/*整数变量的无符号属性*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=1024 [Done] exited with code=7 in 0.142 seconds
/*字符型数据(char)*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=A [Done] exited with code=4 in 0.146 seconds
-
浮点类型:单精度浮点型(float_complex)、双精度浮点型(double_complex)、复数浮点型(float_complex,double_complex,long long_complex)
示例:
/*浮点型数据(float)*/ #include "stdio.h" void main() { float a; a = 3.14E10; //出现警告的话在10后面添加一个 f printf("a=%f\n", a); }
/*浮点型数据(double)*/ #include "stdio.h" void main() { double a; a = 2.718e10; printf("a=%f\n", a); }
结果:
/*浮点型数据(float)*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=31399999488.000000 [Done] exited with code=21 in 0.144 seconds
/*浮点型数据(double)*/ [Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 整型数据.c -o 整型数据 && "c:\Users\Administrator\Desktop\vscode\"整型数据 a=27180000000.000000 [Done] exited with code=21 in 0.146 seconds
-
-
枚举类型(enum)
-
空类型(void)
-
派生类型:指针类型(*)、数组类型([ ])、结构体类型(struct)、共用体类型(union)、函数类型
整型数据
基本整型(int)
编译系统分配给int型数据2个字节或4个字节,visual c++分配4个字节
- 位(b):每一位存储一个0 或 1,最小存储单元(补充:存储单位还有:KB,MB,GB,TB,PB,EB,ZB,YB)
- 字节(B)
- int空间
如何来表示负数呢?开头的一个数,如果为0,表示正数,为1表示负数
容纳的数值范围是多少?-2147483648 ~ 2147483647
短整型(short int或short)
分配2个字节,值范围是 -32768 ~ 32767
长整型(long int或long)
分配4个字节,值范围是 -2147483648 ~ 2147483647
双长整型(long long int或long long)
分配8个字节,值范围是 -9223372036854775808 ~ 9223372036854775807
整数变量的无符号属性(unsigned)
有些数据只有正数值(例如 学号、数量等),为了充分利用整型数据值的范围,可以将变量定义为“无符号”类型
例如short :正数最大表示32767
unsigned short:正数最大表示65535
无符号型数据的存储空间及取值范围
类型 | 字节数 | 取值范围 |
---|---|---|
unsigned int | 4 | 0~4294967295 |
unsigned short | 2 | 0~65535 |
unsigned long | 4 | 0~4294967295 |
unsigned long long | 8 | 0~18446744073709551615 |
字符数据
由于字符是按其代码(整数)形式存储的。因此字符型数据作为整数类型的一种。但是,字符型数据在使用上有自己的特点
使用char定义字符变量,占1个字节(对应ASCII码范围: 0~127)
字符类型也属于整型,也可以用unsigned修饰符
unsigned char:占用1个字节,取值范围是0~255
浮点型数据
浮点型数据是用来表示具有小数点的实数的(例如:10是整型常量,10.0是浮点型常量)
为什么叫做 浮点数?
数据是以指数形式存放在存储单元中。如:3.14159可以表示为3.14159 * 10的0次方, 0.314159 * 10的1次方, 31.4159 * 10的-1次方 ,小数点可以在314159几个数字之间、之前或之后浮动
浮点型数据
- float型(单精度浮点型):分配4个字节,6位有效数字,数值范围:-3.4 * 10的-38次方 ~ 3.4*10的38次方
- double型(双精度浮点型):分配8个字节,15位有效数字,数值范围:-1.7 * 10的-308次方 ~ 1.7 * 10的308次方
- long double型(长双精度型):分配8个字节,15位有效数字, 数值范围:-1.7 * 10的-308次方 ~ 1.7 * 10的308次方
运算符和表达式
C语言提供的运算符
- 算术运算符 (+ - * / % ++ -- )
- 赋值运算符 ( = 及其扩展赋值运算符)
- 关系运算符 ( > < == >= <= !=)
- 逻辑运算符 (! && ||)
- 位运算符 (<< >> ~ | ^ &)
- 条件运算符 (?:)
- 逗号运算符 ( , )
- 指针运算符 ( * &)
- 求字节数运算符 (sizeof)
- 强制类型转换运算符 ( (类型) )
- 成员运算符 (.->)
- 下标运算符 ( [ ] )
- 其他 ( 如函数调用运算符( ) )
算术运算符
/ :除法
注意:两个实数相除的结果是双精度实数,两个整数相除的结果为整数,例如5/3= 1;舍去了小数部分。但是如果除数或被除数中有一个为负数,则舍入的方向不固定。例如-5/3,有的系统中得到的结果为-1,有的系统为-2。多数编译器(如visual C++)采取向零靠拢,即结果为-1
示例:
/*除法运算符(/)*/
#include "stdio.h"
void main()
{
int a, b, c; // float a, b, c;
a = 5;
b = 3;
c = a / b;
printf("运算结果为:%d\n", c); // printf("运算结果为:%f\n", c);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术运算符.c -o 算术运算符 && "c:\Users\Administrator\Desktop\vscode\"算术运算符
运算结果为:1
[Done] exited with code=20 in 0.146 seconds
% :求余运算符
示例:
/*求余运算符(%)*/
#include "stdio.h"
void main()
{
int a, b, c;
a = 5;
b = 3;
c = a % b;
printf("运算结果为:%d\n", c);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术运算符.c -o 算术运算符 && "c:\Users\Administrator\Desktop\vscode\"算术运算符
运算结果为:2
[Done] exited with code=20 in 0.148 seconds
自增(++)、自减(--)运算符
自增(++)、自减(--)运算符的作用是使变量的值加1或减1;
例如: ++i 在使用i之前,先使i的值加1 等效于: i = i + 1;--i 在使用i之前,先使i的值减1 等效于: i = i - 1;i++ 在使用i之后,使i的值加1;i-- 在使用i之后,使i的值减1
示例:
/*自加、自减(++、--)*/
#include "stdio.h"
void main()
{
int a;
a = 3;
printf("a的结果为:%d\n", ++a); //--a、a++、a--
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术运算符.c -o 算术运算符 && "c:\Users\Administrator\Desktop\vscode\"算术运算符
a的结果为:4
[Done] exited with code=18 in 0.15 seconds
算术表达式和运算符的优先级和结合性
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | |
1 | () | 圆括号 | (表达式) 函数名(形参表) | 左到右 | |
1 | . | 成员选择(对象) | 对象.成员名 | 左到右 | |
1 | -> | 成员选择(指针) | 对象指针->成员名 | 左到右 | |
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
2 | (类型) | 强制类型转换 | (数据类型)表达式 | 右到左 | |
2 | ++ | 自增运算符 | ++变量名 变量名++ | 右到左 | 单目运算符 |
2 | -- | 自减运算符 | --变量名 变量名-- | 右到左 | 单目运算符 |
2 | * | 取值运算符 | *指针变量 | 右到左 | 单目运算符 |
2 | & | 取地址运算符 | &变量名 | 右到左 | 单目运算符 |
2 | ! | 逻辑非运算符 | !表达式 | 右到左 | 单目运算符 |
2 | ~ | 按位取反运算符 | ~表达式 | 右到左 | 单目运算符 |
2 | sizeof | 长度运算符 | sizeof(表达式) | 右到左 | |
3 | / | 除 | 表达式 / 表达式 | 左到右 | 双目运算符 |
3 | * | 乘 | 表达式 * 表达式 | 左到右 | 双目运算符 |
3 | % | 余数(取模) | 整型表达式%整型表达式 | 左到右 | 双目运算符 |
4 | + | 加 | 表达式 + 表达式 | 左到右 | 双目运算符 |
4 | - | 减 | 表达式 - 表达式 | 左到右 | 双目运算符 |
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
5 | >> | 右移 | 变量>>表达式 | 左到右 | 双目运算符 |
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
6 | >= | 大于等于 | 表达式>=表达式 | 左到右 | 双目运算符 |
6 | < | 小于 | 表达式<表达式 | 左到右 | 双目运算符 |
6 | <= | 小于等于 | 表达式<=表达式 | 左到右 | 双目运算符 |
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
7 | != | 不等于 | 表达式!= 表达式 | 左到右 | 双目运算符 |
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
14 | /= | 除后赋值 | 变量/=表达式 | 右到左 | |
14 | *= | 乘后赋值 | 变量*=表达式 | 右到左 | |
14 | %= | 取模后赋值 | 变量%=表达式 | 右到左 | |
14 | += | 加后赋值 | 变量+=表达式 | 右到左 | |
14 | -= | 减后赋值 | 变量-=表达式 | 右到左 | |
14 | <<= | 左移后赋值 | 变量<<=表达式 | 右到左 | |
14 | >>= | 右移后赋值 | 变量>>=表达式 | 右到左 | |
14 | &= | 按位与后赋值 | 变量&=表达式 | 右到左 | |
14 | ^= | 按位异或后赋值 | 变量^=表达式 | 右到左 | |
14 | |= | 按位或后赋值 | 变量|=表达式 | 右到左 | |
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 |
示例:
/*运算符优先级;单目运算符、双目运算符、三目运算符的由来*/
#include "stdio.h"
void main()
{
int a = 2, b;
b = 3 + 4 * (-2) % (++a);
printf("b的运算结果为:%d\n", b);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术表达式与运算符的优先级及结合性.c -o 算术表达式与运算符的优先级及结合性 && "c:\Users\Administrator\Desktop\vscode\"算术表达式与运算符的优先级及结合性
b的运算结果为:1
[Done] exited with code=24 in 0.147 seconds
不同类型数据间的混合运算
举例:3 * 2.7 一个整型与一个浮点型数据之间的运算
规律:
- +、-、*、/运算的两个数中有一个数为浮点型,将数值转换为double型,结果为double型
- 字符char型数据与整型数据进行运算,是把字符的ASCII代码与整型数据进行运算。如果与浮点数进行运算,将对应字符的ASCII码转换为double型数据,再进行运算
示例:
/*不同类型数据间的混合运算*/
#include "stdio.h"
void main()
{
int a = 1;
char b = 'y';
float c = 3.14f;
printf("结果为:%f\n", b - c);
printf("结果为:%f\n", a + c);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术表达式与运算符的优先级及结合性.c -o 算术表达式与运算符的优先级及结合性 && "c:\Users\Administrator\Desktop\vscode\"算术表达式与运算符的优先级及结合性
结果为:117.860001
结果为:4.140000
[Done] exited with code=21 in 0.152 seconds
其他示例:
/*给定一个大写字母,输出对应的小写字母*/
#include "stdio.h"
void main()
{
char a = 'X';
printf("%c\n", a + 32);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术表达式与运算符的优先级及结合性.c -o 算术表达式与运算符的优先级及结合性 && "c:\Users\Administrator\Desktop\vscode\"算术表达式与运算符的优先级及结合性
x
[Done] exited with code=2 in 0.139 seconds
强制类型转换运算符
利用强制类型转换运算符将一个表达式转换成所需类型
例如:
-
(double)b:将b的值强制转换为double型
-
(int)(a+b):将a+b的结果强制转换为int型
-
(float)(5%3):将5%3的结果强制转换为float型
示例:
/*强制转换*/ #include "stdio.h" void main() { float a = 3.14f; printf("结果为:%d\n", (int)a % 2);//自动类型转换无法实现时使用强制类型转换 }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 算术表达式与运算符的优先级及结合性.c -o 算术表达式与运算符的优先级及结合性 && "c:\Users\Administrator\Desktop\vscode\"算术表达式与运算符的优先级及结合性 结果为:1 [Done] exited with code=14 in 0.149 seconds
赋值语句
赋值运算符( = ):将一个数据赋给一个变量
复合赋值运算符:在=之前加上其他运算符,可以构成复合的运算符;例如:a + = 3 等价于a = a+3、a = 3 等价于a = a3、a %= 3 等价于a = a%3
示例:
/*复合赋值运算符*/
#include "stdio.h"
void main()
{
int a = 3;
a += 3; // a+=3 ——> a=a+3;-=、/=、*=、%=
printf("结果为:%d\n", a);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 总.c -o 总 && "c:\Users\Administrator\Desktop\vscode\"总
结果为:6
[Done] exited with code=14 in 0.15 seconds
赋值表达式:规则:赋值运算符按照“自右而左”的结合顺序;例如:a = (b = 5) 等效于b = 5 , a = b、a = 5 +(c =6) c的值为6,a的值为11、a = (b =4) + (c =6) c为6 ,b为4,a的值为10、a = (b = 10)/(c =2) c为2,b为10, a的值为5
示例:
/*赋值表达式*/
#include "stdio.h"
void main()
{
int a, b;
a = b = 3;
printf("结果为:%d\t%d\n", a, b);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 总.c -o 总 && "c:\Users\Administrator\Desktop\vscode\"总
结果为:3 3
[Done] exited with code=16 in 0.15 seconds
赋值过程中的类型转换:
- 如果赋值运算符两侧的类型一致,则直接进行赋值(例如: i = 123,直接将整数123存储到i对应的存储空间中)
- 如果赋值运算符两侧的类型不一致,则在赋值时需要进行类型转换;转换规则为:
- 浮点数赋值给整型变量时,先对浮点数取整(舍弃小数部分),再赋值给变量
- 整型数据赋值给浮点数时,数值不变,但以浮点数形式存储到变量中
- 将一个double型数据赋给float变量时,先将双精度数转换为单精度,再进行存储
- 字符型数据赋给整型变量时,将字符的ASCII码赋给整型变量
- 将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将低字节原封不动的送到被赋值的变量(发生截断)
变量赋初值:例如:int a=3,b=2,c=1
示例:
/*变量赋初值*/
#include "stdio.h"
void main()
{
int a = 1, b = 2, c = 3;
printf("结果为:%d\t%d\t%d\n%", a, b, c);
}
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 总.c -o 总 && "c:\Users\Administrator\Desktop\vscode\"总
结果为:1 2 3
[Done] exited with code=18 in 0.142 seconds
数据的输入输出
从计算机向输出设备(显示器、打印机等)输出数据称为输出;从输入设备(键盘、鼠标、扫描仪等)向计算机输入数据称为输入
在C程序中用来实现输入和输出的函数主要是:printf和scanf
printf 函数输出数据
printf函数格式
printf( 格式控制 , 输出表列 )
-
格式控制:用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串
包含两部分:
-
格式声明:格式声明由“%”和格式字符组成,例如:%d、%f等。它的作用是将输出的数据转换为指定的格式后输出
-
普通字符:需要在输出时原样输出的字符
-
-
输出表列:程序需要输出的一些数据,可以是常量、变量或表达式
示例:
#include "stdio.h" void main() { int a; double b; a = 3 * 5 - 4; b = 3.14 * 3; printf("a=%d\tb=%.2f\n", a, b); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 a=11 b=9.42 [Done] exited with code=12 in 0.164 seconds
格式字符
常见格式字符
-
d格式符:用来输出一个有符号的十进制整数(%ld 长整型
%lld 双长整形 c99标准才有该功能,vc 6.0是c90标准)
示例:
/*d格式符*/ #include "stdio.h" void main() { printf("a=%d\tb=%ld\n", 34, -258147); //%10d 其中10是指的域宽、%ld 表示长整型、%lld 表示双长整型 }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 a=34 b=-258147 [Done] exited with code=15 in 0.169 seconds
-
c格式符:用来输出一个字符
示例:
/*c格式符*/ #include "stdio.h" void main() { char a = 's'; printf("a=%c\n", a); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 a=s [Done] exited with code=4 in 0.141 seconds
-
s格式符:用来输出字符串
示例:
/*s格式符*/ #include "stdio.h" void main() { printf("%s\n", "时间"); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 时间 [Done] exited with code=0 in 0.147 seconds
-
f格式符:用来输出实数(包括单、双精度、长双精度)
示例:
/*f格式符*/ /*实数中的整数部分全部输出,小数部分默认输出6位 指定数据宽度和小数位数,用%m.nf;输出的数据向左对齐,用%-m.nf 对最后一位数据进行四舍五入*/ #include "stdio.h" void main() { float a = 10.0, b = 3; printf("%f\n", a / b); printf("%10.5f\n", a / b); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 3.333333 3.33333 [Done] exited with code=11 in 0.145 seconds
-
e格式符:以指数形式输出
示例:
/*e格式符*/ /*默认小数部分的小数位为6位,指数部分占5位*/ #include "stdio.h" void main() { printf("%e\n", 27.18); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 2.718000e+001 [Done] exited with code=13 in 0.144 seconds
-
其他格式符
格式字符 说明 d,i 以带符号的十进制形式输出整数(正数不输出符号) o 以八进制无符号形式输出整数 x,X 以十六进制无符号形式输出整数,用x则输出十六进制数的a~f时,以小写形式输出,用X时,则以大写字母输出 u 以无符号十进制形式输出整数 c 以字符形式输出,只输出一个字符 s 输出字符串 f 以小数形式输出单、双精度数,隐含输出6位小数 e、E 以指数形式输出实数,用e时指数以‘e’表示,用E时指数以‘E’表示 g,G 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示 示例:
/*其他格式符*/ #include "stdio.h" void main() { printf("%i\n", 1024); printf("%o\n", 1024); printf("%x\n", 15); printf("%X\n", 15); double a = 27.18; printf("%f\t%e\t%g\n", a, a, a); }
结果:
[Running] cd "c:\Users\Administrator\Desktop\vscode\" && gcc 数据的输入输出.c -o 数据的输入输出 && "c:\Users\Administrator\Desktop\vscode\"数据的输入输出 1024 2000 f F 27.180000 2.718000e+001 27.18 [Done] exited with code=30 in 0.16 seconds
printf函数中用到的格式附加字符
字符 说明 l 长整型整数,可以加在格式符d、o、x、u前面 m 数据最小宽度 n 对实数,表示输出n位小数;对字符串,表示截取的字符个数 - 输出的数字或字符在域内向左靠
scanf 函数输入数据
scanf函数格式
scanf( 格式控制 , 地址表列 )
-
格式控制(同printf):
用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串
包含两部分:
-
格式声明:格式声明由“%”和格式字符组成,例如:%d、%f等。它的作用是将输入的数据转换为指定的格式后输入
-
普通字符:需要在输入时原样输入的字符
-
-
地址表列:是由若干个地址组成的表列,可以是变量的地址或字符串的首地址
格式字符
-
scanf函数中用到的格式字符
格式字符 说明 d,i 输入有符号的十进制整数 o 输入无符号的八进制整数 x,X 输入无符号的十六进制整数(大小写作用相同) u 输入无符号的十进制整数 c 输入单个字符 s 输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志 ‘\0’作为其最后一个字符。 f 输入实数,可以用小写形式或指数形式输入 e、E,g、G 与f作用相同,e与f、g可以互相替换(大小写作用相同) 示例:
#include "stdio.h" void main() { int a; scanf("%d", &a); printf("输入的数字为:%d", a); }
结果:
20 //此数字由自己输入 输入的数字为:20 Press any key to continue
-
scanf函数中用到的格式附加字符
格式字符 说明 l 输入长整型数据(可用%ld,%lo,%lx,%lu)以及对double型数据(用%lf或%le) h 输入短整型数据(可用%hd,%ho,%hx) 域宽 指定输入数据所占宽度(列表),域宽应为正整数 * 本输入项在读入后不赋给相应的变量
使用scanf注意问题
- scanf函数中的格式控制后面应当是变量地址,而不是变量名
- 如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符
- 在用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入
- 在输入数值数据时,如果输入空格、回车、Tab键或遇到非法字符(不属于数字的字符),认为该数据结束
字符输入输出函数
putchar
用putchar函数输出一个字符
put character 的缩写,很容易记忆。大部分函数名都有根据英文缩写
putchar函数的一般形式:putchar(c)
示例:
#include "stdio.h"
void main()
{
char a = 'B', b = 'O', c = 'Y'; //int a=66,b=79,c=89
putchar(a);
putchar(b);
putchar(c);
putchar('\n'); //也可以输出屏幕控制字符
}
结果:
[Running] cd "d:\vscode(C语言)\" && gcc 2.c -o 2 && "d:\vscode(C语言)\"2
BOY
[Done] exited with code=10 in 0.185 seconds
getchar
用getchar函数输入一个字符
get character 的缩写
getchar函数的一般形式: getchar()
注:也可以获取控制字符,例如输入B回车输入O回车也可以赋给一个变量,也可以直接作为表达式的一部分
示例:
#include "stdio.h"
void main()
{
char a, b, c;
a = getchar();
b = getchar();
c = getchar();
printf("获取的内容为:%c %d %c\n", a, b, c); //也可以使用putchar输出
//printf("获取的内容为:%c %d %c\n", a, b, getchar()); //注:运行这条代码时,将'c'有关的部分注释掉或者删掉
}
结果:
xyz
获取的内容为:x 121 z
Press any key to continue
在用键盘输入信息时,并不是在键盘敲一个字符,对应的字符就立即送到计算机中去了,这些字符先暂存在键盘的缓冲器,只有按了Enter键才把这些字符一起输入到计算机中。然后按先后顺序分别赋给相应的变量
标签:Administrator,Users,vscode,Desktop,运算符,顺序程序,&&,设计 From: https://www.cnblogs.com/ruoxianshi/p/16978245.html