02. C语言基础知识
一、注释
注释 就是对代码进行解释说明的文字,注释的内容不会参与编译和运行,仅仅是对代码的解释说明。在 C语言 中注释主要分为以下两类:
- 单行注释:
//
,注释内容从 // 始到本行和结尾 - 多行注释:
/* */
,注释内容以 /* 开头,以 */ 结尾,可以注释多行
/**
* 导入一个头文件 stdio.h
* std是一个标准输入输出标准库,i指的是input,o指的是output,.h是指头文件的意思
* <>表示导入系统的文件,""表示导入自定义文件
*/
#include <stdio.h>
/**
* int 数据类型 整型,如果出现再函数中表示函数的返回值
* main 程序的主函数,程序有且只有一个主函数
* () 里面表示函数的参数,函数的参数可以有多个,中间用,分隔
* {} 里面的代码是函数体
*/
int main()
{
// printf()是stdio.h中系统提供的函数,表示在标准输出设备上打印字符串
// ; 表示一条语句的结束
// \n 是一个转义字符,表示换行
printf("hello world!\n"); // 在控制台中打印hello world
// return如果出现在其它函数中,表示程序结束,
// 如果出现在main函数中,表示程序结束
// 函数返回的数据0要和函数返回值类型对应
return 0;
}
在 C语言 中,多行注释不能嵌套使用;
注释的内容不会参与编译和运行,仅仅是对代码的解释说明;
二、关键字
关键字 就是被 C语言 赋予了特定含义的英文单词,在 C语言 中所有关键字都是全部小写的;
【1】、数据类型关键字
关键字 | 含义 |
---|---|
char | 声明字符型变量或者函数,属于整型数据的一种 |
short | 修饰 int,声明短整型变量或函数,可省略被修饰的int |
int | 声明整型变量或者函数,通常为编译器指定的机器字长 |
long | 修饰 int,声明长整型变量或者函数,可省略被修饰的int |
float | 声明单精度浮点型变量或函数 |
double | 声明双精度浮点型变量或函数 |
unsigned | 修饰整型数据,声明无符号类型变量或函数 |
signed | 修饰整型变量,声明有符号类型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共用体数据类型 |
enum | 声明枚举类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
【2】、控制语句关键字
关键字 | 含义 |
---|---|
if | 条件语句 |
else | 条件语句否定分支(与 if 连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
default | 开关语句中的 “默认”分支,可选结构 |
for | for 循环语句 |
do | do...while 循环结构的循环体 |
while | do...while 或 while 循环结构的循环条件 |
break | 跳出当前循环或 switch 分支结构 |
continue | 结束当前循环,开始下一轮循环 |
goto | 无条件跳转语句 |
return | 子程序/函数体返回语句(可以带参数,也可以不带参数) |
【3】、存储类关键字
关键字 | 含义 |
---|---|
auto | 声明自动变量,有编译器自动分配和释放(通常在栈上分配) |
extern | 指定变量为外部变量,即在其它文件中声明 |
register | 声明寄存器变量,建议编译器将变量存储到寄存器中 |
static | 声明静态变量,分配在静态变量区,修饰函数时用于限定作用域 |
const | 声明只读变量 |
【4】、其它关键字
关键字 | 含义 |
---|---|
sizeof | 计算数据类型长度 |
typeof | 用以给数据类型取别名 |
volatile | 说明变量在程序执行中可被隐含地改变 |
三、变量
3.1、变量的概念
变量就是在程序的执行过程中,其值可能发生改变的量(数据);变量是内存中的一个存储区域(不同的数据类型,占用的空间大小也不一样),该区域的数据可以在同一类型范围内不断的改变,变量是程序中最基本的存储单元,包含 变量类型、变量名 和 存储的值。
3.2、变量的作用
变量的作用就是在内存中保存数据;我们可以使用变量名来访问这块区域的数据;
3.3、变量的定义
变量的定义:
数据类型 变量名;
int a;
3.4、变量的赋值
变量的赋值:
变量名 = 变量值;
a = 10;
变量可以在声明的同时赋值:
数据类型 变量名 = 变量值;
int a = 10;
- 数据类型:为空间中存储的数据,加入类型(限制)
- 变量名:为空间起的名字
- 数据值:存在空间里面的数值
#include <stdio.h>
int main()
{
// 定义变量
// 数据类型 变量名 = 数据值;
int a = 10,b = 20;
// 格式化输出,%d输出整型数据
printf("a = %d,b = %d\n",a,b);
return 0;
}
在 C语言 中每个变量必须 先声明,再初始化,后使用;
在同一个作用域中,变量名不能重复声明,但变量可以重新赋值;
一行上可以同时声明多个变量,使用“,”隔开;
3.5、变量的作用域和生命周期
所谓的变量的作用域就是变量的有效范围;变量的作用域为其定义所在的一对{}内,即出了大括号就不认识了;变量的生命周期指的是变量的创建到变量销毁之间的一个时间段。
局部变量的作用域:是变量所在的局部范围;
全局变量的作用域:是整个工程;
局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束;
全局变量的生命周期:整个程序的生命周期;
3.6、变量的分类
3.6.1、按数据类型分类
3.6.2、按变量定义位置分类
在一个函数内部定义的变量,只在本函数范围内有效。在复合语句内定义的变量,只在本复合语句范围内有效;
函数的形参也属于局部变量,作用范围仅限于函数内部的所有语句块;
如果一个变量在所有函数外部定义,那么这个变量就是全局变量。全局变量是可以在程序中的任何位置进行访问的变量;
当局部变量和全局变量名字冲突的情况下,局部优先。
四、常量
常量 指的是在计算机程序运行时,不会被程序修改的量;在 C语言 中,常量主要分为以下几种类型:
- 字面常量
- 整型常量,可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀默认表示 十进制。整型常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数,L 表示长整数,后缀可以大写也可以小写,U 和 L 的顺序任意。例如:100,200,-100,0,037,0x5A
- 浮点型常量,由整数部分、小数点、小数部分 和 指数部分 组成,可以使用小数形式或者指数形式来表示浮点型常量。例如:3.14,0.125,-3.14,314159E-5
- 字符型常量,是括在单引号中的单个字符。字符常量可以是一个普通的字符,也可以是一个转义字符。例如:'a','A','\n'
- 字符串常量,是括在双引号中的字符序列。在字符串常量中,我们可以使用 '\' 实现换行。 例如:"hello","a","123"
const
修饰的常变量#define
定义的标识符常量- 枚举常量
#include <stdio.h>
int main()
{
// 整型字面量
int i1 = 100;
int i2 = -100;
int i3 = 037;
int i4 = 0x5A;
// 浮点型字面量
double d1 = 3.14;
double d2 = -3.14;
double d3 = 314159E-5;
float f1 = 3.14;
// 字符字面量
char c1 = 'a';
char c2 = 'A';
char c3 = '\n';
// 字符串字面量
char str1[] = "hello";
char str2[] = "a";
char str3[] = "123";
char str4[] = "hello world";
char str5[] = "hello \
world";
printf("%d\n",i1);
printf("%d\n",i2);
printf("%d\n",i3);
printf("%d\n",i4);
printf("\n");
printf("%lf\n",d1);
printf("%lf\n",d2);
printf("%lf\n",d3);
printf("%f\n",f1);
printf("\n");
printf("%c\n",c1);
printf("%c\n",c2);
printf("%c\n",c3);
printf("\n");
printf("%s\n",str1);
printf("%s\n",str2);
printf("%s\n",str3);
printf("%s\n",str4);
printf("%s\n",str5);
return 0;
}
#include <stdio.h>
// 宏定义常量
#define PI 3.14
int main()
{
// 使用const关键字定义常量
const double pi = 3.14;
// 常量赋值之后,不能更改
//pi = 3.1415926;
// 格式化输出,%lf输出双精度浮点型数据,默认保留6位小数
printf("pi = %lf\n",pi);
// .2f,保留两位小数
printf("pi = %.2lf\n",pi);
return 0;
}
const 和 define 定义常量的区别:
- const 定义的常量带类型,define 不带类型;
- const 是在编译、运行的时候起作用,而 define 是在编译的预处理阶段起作用的;
- define 只是简单的替换,没有类型检查;
- const 常量可以进行调试的,而 define 是不能进行调试的,主要是因为在预编译阶段 define 定义的常量就已经替换掉了,调试的时候没有了;
- const 不能重定义,不可以定义两个一样的,而 define 通过 undef 可以取消某个符号的定义,在重新定义;
- define 可以配合 #indef、#ifndef、#endif 来使用,可以让代码更加灵活;
#include <stdio.h>
#define A 1
#define B A+3
#define C A/B*3
int main()
{
// C其实是A/A+3*3
printf("%d\n",C);
return 0;
}
五、数据类型
C语言的数据类型分为 基本数据类型、构造数据类型、指针类型 和 空类型。
5.1、基本数据类型
在 C语言 中,一共有 7 种基本类型(primitive type),其中有 4 种整型,2 种浮点型 和 1 种字符型 char。在 C语言 中,没有字符串类型,而是使用字符数组来表示字符串。在不同的系统下,部分数据类型占用的字节大小也可能不同。
5.1.1、整型类型
整形用于表示没有小数部分的数值,允许是负数,C语言 中提供了以下几个类型:short、int、long、long long;C语言 的整型常量默认是 int 型,如果要显示地声明 long 型常量需后加 'l' 或 'L' ,声明 long long 型常量需后加 'll' 或 'LL'。
数据类型 | 占用空间 |
---|---|
[signed] short [int](有符号短整型) | 2 字节,取值范围:-32768~32767 |
unsigned short [int](无符号短整型) | 2字节,取值范围:0~65535 |
[signed] int(有符号整型) | 4 字节,取值范围:-2147483648~-2147483647 |
unsigned int(无符号整型) | 4 字节,取值范围:0~4294967295 |
[signed] long [int](长整型) | Window 为 4字节,Linux 为 4字节(32位),8字节(64位) |
unsigned long [int](无符号长整型) | Window 为 4字节,Linux 为 4字节(32位),8字节(64位) |
[signed] long long [int](长长整型) | 8 字节 |
unsigned long long [int](无符号长长整型) | 8 字节 |
#include <stdio.h>
int main()
{
short int s = 10; // int可以省略
int i = 10; // int可以省略
long int l = 10; // int可以省略
long long int ll = 10; // int可以省略
signed int a = -10; // 定义一个有符号整数,signed可以省略
unsigned int b = 10; // 定义一个无符号整数
printf("%hd\n",s); // 输出短整型数据
printf("%d\n",i); // 输出一个整型数据
printf("%ld\n",l); // 输出一个长整型数据
printf("%lld\n",ll); // 输出一个长长整型的数据
printf("%d\n",a); // 输出一个有符号的10进制整型
printf("%u\n",b); // 输出一个10进制的无符号数
return 0;
}
我们可以使用 sizeof 关键字来计算数据类型在内存中占用的字节(byte)大小,它的语法格式如下:sizeof(数据类型)
或 sizeof(变量名)
。
#include <stdio.h>
int main()
{
// sizeof计算数据类型在内存中占用的字节大小
// 语法格式:sizeof(数据类型) 或 sizeof(变量名)
// %u 输出一个无符号整型数据
printf("短整型:%u\n",sizeof(short));
printf("整型:%u\n",sizeof(int));
printf("长整型:%u\n",sizeof(long));
printf("长长整型:%u\n",sizeof(long long));
return 0;
}
整型的数据在内存中占的字节数与所选择的操作系统有关。虽然 C语言 标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型,short 类型整数的长度不能长于 int 类型,即
short <= int <= long < long long
。当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转换。但当一个大的数据类型赋值给一个小的数据类型,那么就可能丢失高位。
5.1.2、浮点类型
浮点类型用于表示小数部分的数值。C语言 中浮点类型常量默认是 double 类型,也可以在浮点数值后面添加后缀 'd' 或 'D' ;声明 float 类型的常量,需后加 'f' 或 'F'。double 型变量所表示的浮点数比 float 型变量更加精确。
浮点类型不能准确的表达一个浮点数,可能会有舍入误差。
数据类型 | 占用空间 |
---|---|
float(单精度类型) | 4 个字节,取值范围:1.2E-38 到 3.4E+38,6 位有效位 |
double(双精度类型) | 8 个字节,取值范围:2.3E-308 到 1.7E+308,15 位有效位 |
long double(长双精度类型) | 16 字节,取值范围:3.4E-4932 到 1.1E+4932,19 位有效位 |
#include <stdio.h>
int main()
{
float f = 3.14f;
double d = 3.14;
long double ld = 3.14;
printf("%f\n",f);
printf("%lf\n",d);
printf("%lf\n",ld);
printf("float:%u\n",sizeof(float));
printf("double:%u\n",sizeof(double));
printf("long double:%u\n",sizeof(ld));
return 0;
}
float 表示的数值的范围比 long 还大;
浮点型数据存储在内存中的格式分为三个部分:符号位、指数位、小数位;
5.1.3、字符类型
字符型变量用于存储一个单一字符,在 C语言 中用 char 表示,其中每个字符变量都会占用 1 个字节。char类型的字面量值要用一对单引号(' ')括起来,内部只能写一个字符。
字符型变量实际上并不是把该字符本身放到变量的存储单元中去,而是将 该字符对应的 ASCII 编码放到变量的存储单元中。char 的本质就是一个 1字节 大小的整型,取值范围为:-128~127;我们可以直接给 char 类型的变量赋值一个整数,在输出时,可以按照 ASCII码 输出。char 类型的变量还可以进行运算,相当于一个整数。
数据类型 | 占用空间 |
---|---|
[signed] char | 1 字节,取值范围:-128~127 |
unsigned char | 1 字节,取值范围:0~255 |
#include <stdio.h>
int main()
{
// 定义字符变量
char ch = 'a';
unsigned char uch = 97;
// 格式化输出,%c输出字符型数据
printf("字符:%c\n",ch);
// 打印字母对应的ASCII码
printf("ANSCII:%d\n",ch);
printf("%c\n",uch);
printf("%d\n",uch);
printf("字符型:%u\n",sizeof(ch));
return 0;
}
在 C语言 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,这种字符称为 转义字符。
转义字符 | 含义 | ASCII码值(十进制) |
---|---|---|
\a | 警报 | 007 |
\b | 退格,将当前位置移到前一列 | 008 |
\f | 换页,当当前位置移到下页开头 | 012 |
\n | 换行,将当前位置移到下一行开头 | 010 |
\r | 回车,将当前位置移到本行开头 | 013 |
\t | 水平制表符,跳到下一个 tab 位置 | 009 |
\v | 垂直制表符 | 011 |
\\ |
代表一个反斜线字符,\ | 092 |
\' | 代表一个单引号字符,' | 039 |
\" | 代表一个双引号字符," | 034 |
\? | 代表一个问号,? | 063 |
\0 | 数字 0 | 000 |
\ddd | ddd 表示 1~3 个八进制的数字 | 3位 8进制 |
\xdd | dd 表示 2 个十六进制数字 | 3位 16进制 |
#include <stdio.h>
int main()
{
printf("hello world!\n");
printf("\thello\n");
printf("鲁迅说:\"这句话我从未说过\"\n");
printf("子曰:\'学而时习之,不亦说乎!\'\n");
printf("御坂美琴 夏娜\r木之本樱\n");
printf("\\\n");
printf("%%\n");
return 0;
}
5.2、基本数据类型转换
无论是 自动类型转换 还是 强制类型转换,都只是为了本次运算的需要,而 对变量的数据的长度进行临时性转换,而不改变数据说明时对该变量定义的类型。
5.2.1、自动类型转换
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型(此时的容量大小指的是,表示数的范围的大和小)。
#include <stdio.h>
int main()
{
char ch = 'a';
short s = ch;
printf("%c\n",ch);
printf("%hd\n",s);
return 0;
}
有多种类型的数据混合运算时,系统首先会自动将所有数据转换成精度最大的那种数据类型,然后再进行计算;
若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符号,一种无符号,则转成成无符号类型;
在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换成左边量的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入;
5.2.2、强制类型转换
强制类型转换就是自动类型提升运算的逆运算;我们需要 使用强转符:() 来强制转换;它的格式如下:目标数据类型 变量名 = (目标数据类型) 被强转的数据;
#include <stdio.h>
int main()
{
int i1 = 200;
char ch = (char)i1;
float f = 3.14f;
double d = (int)f;
printf("%d\n",ch);
printf("%lf\n",d);
return 0;
}
强制类型转换可能会损失精度,导致数据错误;
强制类型转换操作不会改变操作数本身;
六、标识符
6.1、什么是标识符
标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用来给变量、常量、函数等命名,以建立起名字与使用之间的关系。标识符通常由字母和数字以及其它字符构成。
在编程语言中,标识符就是程序员自己规定的代表一定含义的单词,比如变量名、常量名、函数名等。
6.2、标识符的命名规则
- 标识符只能由数字、字母(26个英文字母大小写)、下划线(_)组成;
- 标识符不能以数字开头;
- 不可以使用关键字作为标识符,但可以包含关键字;
- 标识符严格区分大小写;
#include <stdio.h>
int main()
{
int useId = 1;
int age = 10;
int minNum = 3;
int max_num = 30;
return 0;
}
标识符的命名建议见名知意;
七、数据输入输出
在 C语言 中,所有的数据输入输出都是由库函数完成的。在 C语言 中,使用标准输入输出库函数需要使用“stdio.h” 头文件,因此在程序开头应该有 #include "stdio.h"
语句。
7.1、格式输出函数
在 C语言 中,可以使用 printf() 函数输出指定类型的数据,printf() 函数的作用是向终端(输出设备)输出若干任意类型的数据,其语法格式如下:
printf(格式控制,输出列表);
【1】、格式控制
格式控制 是用双引号括起来的字符串,也可以称为 转换控制字符串,其中包括 格式字符 和 普通字符 两种。
- 格式字符 用来进行格式说明,作用是将输出的数据转换为指定的格式输出。格式字符是以 "%" 字符开头的。
- 普通字符 是需要原样输出的字符,其中包括双引号内的逗号、空格和换行符。
【2】、输出列表
输出列表 中列出的是要进行输出的一些数据,可以是变量或表达式。
由于 printf() 是函数,”格式控制“ 和 ”输出列表“ 这两个位置都是函数的参数,因此 printf() 函数的一般形式也可以表示为:
printf(参数1,参数2,参数3);
函数中的每一个参数按照给定的格式和顺序依次输出。
printf() 函数的 格式字符:
打印格式 | 对应数据类型 | 含义 |
---|---|---|
%d | int | 有符号的十进制整数 |
%hd | short | 短整型 |
%hu | unsigned short | 无符号短整型 |
%o | unsigned int | 无符号 8进制 整数 |
%u | unsigned int | 无符号 10进制 整数 |
%x,%X | unsigned int | 无符号 16进制 整数,x是指字母以小写输出,X是指字母以大写输出 |
%f | float | 单精度浮点数 |
%lf | double | 双精度浮点数 |
%e,%E | double | 科学计数法表示的数,此处的”e“的大小写代表在输出时用的”e“的大小写 |
%c | char | 字符型,可以把输入的数字按照 ASCII码 转换为对应的字符 |
%s | char * | 字符串,输出字符串中的字符直至字符串中的空制符('\0') |
%p | void * | 以 16进制 形式输出指针 |
%% | % | 输出一个百分号 |
printf() 函数的 附加格式:
字符 | 含义 |
---|---|
l(字母l) | 附加在 d,u,x,o 前面,表示长整型 |
- | 左对齐 |
m(代表一个整数) | 数据最小宽度 |
0(数字0) | 将输出的前面补上 0 直到沾满指定列宽为止,不可以搭配使用 |
m.n(代表一个整数) | m 指 域宽,即对应的输出项在输出设备上所占的字符数; n 指 精度,用于说明输出的浮点数的小数位数; 对数值型的来说,未指定 n 时,隐含的精度为 n=6; |
#include <stdio.h>
int main()
{
signed int a = -10; // 定义一个有符号整数,signed可以省略
unsigned int b = 10; // 定义一个无符号整数
int c = 10; // 定义一个10进制数
int d = 012; // 定义一个8进制数,以0开头(0-7)
int e = 0xa; // 定义一个16进制数,以0x开头 (1-9,a-f)
printf("%d\n",a); // 输出一个有符号的10进制整型
printf("%u\n",b); // 输出一个10进制的无符号数
printf("%o\n",d); // 输出一个8进制的整型
printf("%x\n",c); // 输出一个16进制的整型,字母以小写输出
printf("%X\n",c); // 输出一个16进制的整型,字母以大写输出
return 0;
}
7.2、格式化输入
在 C语言 中,格式输入使用 scanf() 函数,scanf() 函数通过 % 转义的方式可以获取用户通过标准输入设备输入的数据。在函数的功能是指定固定的格式,并且按照指定的格式接收用户在键盘上输入的数据,最后将输出在指定变量中。scanf() 函数的一般格式如下:
scanf(格式控制,地址列表);
通过 scanf() 函数的一般格式可以看出,参数位置的格式控制与 printf() 函数相同。而在地址列表中,此处应该给出用来接收数据变量的地址。
在输入多个字符时,若格式控制串中没有非格式字符作为输入数据之间的间隔,则可以用 空格、TAB、回车 作为间隔。C编译器 遇到 空格、TAB、回车 或 非法数据时,即认为该数据结束;
#include <stdio.h>
int main()
{
int a,b;
printf("请输入两个数字,以空格分隔:");
// &运算符,表示取地址运算符,多个占位符默认是以空格分隔,
scanf("%d%d",&a,&b);
printf("你输入的两个数字是:%d %d\n",a,b);
printf("请在输入两个数字,以英文逗号分隔:");
scanf("%d,%d",&a,&b);
printf("你输入的两个数字是:%d %d\n",a,b);
printf("请输入一个3位整数:");
scanf("%3d",&a);
return 0;
}
7.3、字符数据输出
字符数据输出就是将字符显示出来。 在 C语言 中,使用 putchar() 函数输出字符数据,它的作用是向显示设备输出一个字符。putchar() 函数可以输出字符、字符变量、数字(0~127)、转义字符。其语法格式如下:
int pubchar(int ch);
其中的 参数 ch 是要进行输出的字符,可以是 字符型变量 或 整型变量,也可以是常量。
#include <stdio.h>
int main()
{
char ch = 'a';
putchar(a);
putchar('\t');
putchar('A');
putchar('\n');
putchar(97);
return 0;
}
7.4、字符数据输入
在 C语言 中,可以使用 getchar() 函数是从标准输入设备读取一个字符,它的语法格式如下:
int getchar();
#include <stdio.h>
int main()
{
char ch;
printf("请输入一个字符:");
ch = getchar();
printf("你输入的字符是:%c",ch);
return 0;
}
7.5、字符串输出函数
字符串输出就是将字符串输出到控制台上。在 C语言 中,字符串输入使用的是 puts() 函数,它的作用是输出字符串并显示在屏幕上。其语法格式如下:
int puts(char *str);
其中,形式参数 str 是字符指针类型,可以用来接收要输出的字符串。puts() 函数会在字符串中判断 '\0' 结束符。遇到结束符时,后面的字符不再输出,并且自动换行。
#include <stdio.h>
int main()
{
puts("hello world!");
return 0;
}
7.6、字符串输入函数
在 C语言 中,字符串输入使用的是 gets() 函数,它的作用是将读取的字符串保存在形式参数中,读取过程直到出现新的一行为止。其中新的一行的换行符将会自动转换为字符串中的空终止符 '\0'。它的语法格式如下:
char *gets(char *str);
其中 str 字符指针变量为形式参数,从终端读取到的字符串将会保存在这个变量中。
#include <stdio.h>
int main()
{
char str[20];
puts("请输入一个字符串:");
gets(str);
puts("你输入的字符串是:");
puts(str);
return 0;
}
putchar() 函数是字符输出函数,它只能从终端 输入一个字符;
puts() 函数是字符串输入函数,它向终端输出 字符串并换行;
printf() 函数是格式化输出函数,它向终端 按格式输出;
getchar() 函数是字符输入函数,它只能从终端 读入一个字符;
gets() 函数是字符串输入函数,作用是 将读取的字符串保存在形式参数变量中,读取过程直到出现新的一行为止;
scanf() 函数是格式输入函数,功能是指定固定的格式,并且 按照指定的格式接收用户在键盘上输入的数据,最后将数据存储在指定的变量中;
02. C语言基础知识的更多相关文章
- 02 java语言基础
常量:字面值常量(字符串,字符,整数,小数,布尔,null),自定义常量,''这个不是字符常量,""这个是字符串常量 进制: 02.01_Java语言基础(常量的概述和使用) A: ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- PHP语言基础知识
目录 前言 第一章 PHP语言学习介绍 1.1 PHP部署安装环境 1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍 2.2 PHP常量变量介绍 2.2.1 PHP变 ...
随机推荐
- elasticsearch实现简单的脚本排序(script sort)
目录 1.背景 2.分析 3.构建数据 3.1 mapping 3.2 插入数据 4.实现 4.1 根据省升序排序 4.1.1 dsl 4.1.2 运行结果 4.2 湖北省排第一 4.2.1 dsl ...
- 图文并茂解决Client does not support authentication protocol requested by server; consider upgrading MySQL
今天服务器部署node.js+mysql,调用接口报错ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protoc ...
- 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
1. 快速入门python,python基本语法 Python使用缩进(tab或者空格)来组织代码,而不是像其 他语言比如R.C++.Java和Perl那样用大括号.考虑使用for循 环来实现排序算法 ...
- 0源码基础学习Spring源码系列(一)——Bean注入流程
作者:京东科技 韩国凯 通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米! 由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正! 一. @Auto ...
- 真正“搞”懂HTTPS协议16之安全的实现
上一篇噢,我们搞明白了什么是安全的通信,这个很重要,特别重要,敲黑板!! 然后,我们还学了HTTPS到底是什么,以及HTTPS真正的核心SSL/TLS是什么.最后我们还聊了聊TLS的实现,也就是Ope ...
- 时间轮TimeWheel工作原理解析
时间轮工作原理解析 一.时间轮介绍 1.时间轮的简单介绍 时间轮(TimeWheel)作为一种高效率的计时器实现方案,在1987年发表的论文Hashed and Hierarchical Timing ...
- C++并发-同步并发
1.等待事件 std::mutex m; void wait() { std::unique_lock<std::mutex> lk(m); lk.unlock(); std::this_ ...
- LOJ 数列分块入门 6
\(\text{Solution}\) 涉及到插入,分块需要动态维护块内的元素及相对位置 于是妙用 \(\text{vector}\) 学到了 \(insert\) 操作,在某个迭代器前插入元素 这样 ...
- JZOJ 捕老鼠
题目 实际上经转换得: 给了 \(n(n \le 5 \times 10^5)\) 条线段,求覆盖 \([1..n]\) 需要的最少条数 分析 设 \(f_i\) 表示覆盖了 \([1..n]\) 时 ...
- windows server backup 无法使用或wbadmin.msc致命错误解决方法
因为黑群辉断电无法自动引导进系统,我也找不到很好的办法,所以决定使用windows server来做NAS服务器,虽然都解决了内网穿透的问题,但是数据安全还在找方案,目前已经解决: 1.购买了一张pc ...