企业网站排版规则,军人可以做网站吗,建设一个网站的过程,济南网站建设制作C语言基础知识 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include stdio.h
int main()
{/* 我的第一个 C 程序 */printf(Hello, World! \n);return 0;
}2.注释
单行… C语言基础知识 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include stdio.h
int main()
{/* 我的第一个 C 程序 */printf(Hello, World! \n);return 0;
}2.注释
单行注释 //第一种写法 /* 单行注释 */
多行注释/* 多行注释多行注释多行注释*/3.标识符 C 标识符是用来标识变量、函数或任何其他用户自定义项目的名称。 规定C语言的的标识符由数字字母下划线构成但不能以数字开头。 可以作为标识符的 mohd , zara , abc , move_name , a_123 myname50 , _temp , j , a23b9 , retVal
不可以作为标识符的 12mb , 23_m
4.关键字 具有特殊含义的标识符C语言已经使用的了用户自定义标识符时不能再使用。 后续的学习都会慢慢接触这些现在只需要眼熟即可。 5.数据类型 数据类型就像一个盒子一样盒子中存放数据不同的数据要用不同的盒子装。 为了限制变量中所存储的数据至少是可以兼容的。 为了限制变量所占空间 先学习基本数据类型其他的数据类型后续学习 char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数
C语言本身并没有字符串类型我们在C语言程序中使用的字符串实际上是字符数组即多个字符构成的就是字符串
整型 浮点型
为了得到某个类型或某个变量在特定平台上的准确大小可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。 #includestdio.hint main(){printf(int 存储大小 : %d \n, sizeof(int)) ;return 0;} 数据类型的转换 类型转换是将一个数据类型的值转换为另一种数据类型的值。 隐式类型转换隐式类型转换是在表达式中自动发生的无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型例如将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。 int i 10;float f 3.14;double d i f; // 隐式将int类型转换为double类型显式类型转换显式类型转换需要使用强制类型转换运算符type casting operator它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制但也可能会导致数据丢失或截断。 double d 3.14159;int i (int)d; // 显式将double类型转换为int类型6.变量 生活中有些值是可变的比如年龄体重薪资需要用变量来表示 数据类型决定了变量存储的大小和布局该范围内的值都可以存储在内存中 变量两部步骤定义初始化 1.定义 数据类型 variable_list; 数据类型可以是整型、浮点型、字符型、指针等也可以是用户自定义的对象。 variable_list 可以由一个或多个变量的名称组成多个变量之间用逗号,分隔 举例
int age; //age 被定义为一个整型变量。
float salary; //salary 被定义为一个浮点型变量。
char grade; //grade 被定义为一个字符型变量。
int *ptr; //ptr 被定义为一个整型指针变量。
int i, j, k; //声明并定义了变量 i、j 和 k2.初始化赋值 int x; // 整型变量x定义
x 20; // 变量x初始化为20
float pi; // 浮点型变量pi定义
pi 3.14159; // 变量pi初始化为3.14159
char ch; // 字符型变量ch定义
ch B; // 变量ch初始化为字符B为了简化可以定义的同时初始化 int x 10; // 整型变量 x 初始化为 10
float pi 3.14; // 浮点型变量 pi 初始化为 3.14
char ch A; // 字符型变量 ch 初始化为字符 A
extern int d 3, f 5; // d 和 f 的声明与初始化
int d 3, f 5; // 定义并初始化 d 和 f
byte z 22; // 定义并初始化 z如果变量不初始化
整型变量int、short、long等默认值为0。 浮点型变量float、double等默认值为0.0。 字符型变量char默认值为’\0’即空字符。 指针变量默认值为NULL表示指针不指向任何有效的内存地址。
7.常量 常量是固定值在程序执行期间不会改变。这些固定的值又叫做字面量。 整数常量 前缀整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数0x 或 0X 表示十六进制0 表示八进制不带前缀则默认表示十进制。 后缀后缀是 U 和 L 的组合U 表示无符号整数unsignedL 表示长整数long。后缀可以是大写也可以是小写U 和 L 的顺序任意。 212 /* 合法的 */
215u /* 合法的 */
0xFeeL /* 合法的 */ 十六进制数 FEE
078 /* 非法的8 不是八进制的数字 */
032UU /* 非法的不能重复后缀 */85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 */浮点常量 浮点常量由整数部分、小数点、小数部分和指数部分组成 当使用小数形式表示时必须包含小数点。 例如 0.123、.123、123.、0.0等都是合法的实型常量。 当使用指数形式表示时字母e或E之前必须要有数字且e或E后面的指数必须为整数 例如 1.2E51.5e-9-5.0e10等都是合法的实型常量。 不带 f、F、l 或 L 后缀的浮点常量类型为 double。 如果后缀是字母 f 或 F则常量的类型为 float。 如果后缀是字母 l 或 L则常量的类型为 long double。 10.0 /* Has type double */
10.0F /* Has type float */
10.0L /* Has type long double */整数常量 字符常量是括在单引号中例如‘x’ 可以存储在 char 类型的简单变量中 字符常量可以是一个普通的字符例如 x、一个转义序列例如 \t或一个通用的字符例如 \u02C0。 在 C 中有一些特定的字符当它们前面有反斜杠时它们就具有特殊的含义被用来表示如换行符\n或制表符\t等。下表列出了一些这样的转义序列码 字符常量的 ASCII 值可以通过强制类型转换转换为整数值。 char myChar a;
int myAsciiValue (int) myChar; // 将 myChar 转换为 ASCII 值 97常量的定义 在 C 中有两种简单的定义常量的方式 使用 #define 预处理器 #define 可以在程序中定义一个常量它在编译时会被替换为其对应的值。 使用 const 关键字const 关键字用于声明一个只读变量即该变量的值不能在程序运行时修改。
#define 预处理器 #define 常量名 常量值 #define PI 3.14159在程序中使用该常量时编译器会将所有的 PI 替换为 3.14159。
#include stdio.h#define LENGTH 10
#define WIDTH 5
#define NEWLINE \nint main()
{int area; area LENGTH * WIDTH;printf(value of area : %d, area);printf(%c, NEWLINE);return 0;
}const 关键字 const 数据类型 常量名 常量值; const int MAX_VALUE 100;在程序中使用该常量时其值将始终为100并且不能被修改。
#include stdio.hint main()
{const int LENGTH 10;const int WIDTH 5;const char NEWLINE \n;int area; area LENGTH * WIDTH;printf(value of area : %d, area);printf(%c, NEWLINE);return 0;
}#define 与 const 区别了解即可 #define 与 const 这两种方式都可以用来定义常量选择哪种方式取决于具体的需求和编程习惯。通常情况下建议使用 const 关键字来定义常量因为它具有类型检查和作用域的优势而 #define 仅进行简单的文本替换可能会导致一些意外的问题。
#define 预处理指令和 const 关键字在定义常量时有一些区别
替换机制#define 是进行简单的文本替换而 const 是声明一个具有类型的常量。#define 定义的常量在编译时会被直接替换为其对应的值而 const 定义的常量在程序运行时会分配内存并且具有类型信息。
类型检查#define 不进行类型检查因为它只是进行简单的文本替换。而 const 定义的常量具有类型信息编译器可以对其进行类型检查。这可以帮助捕获一些潜在的类型错误。
作用域#define 定义的常量没有作用域限制它在定义之后的整个代码中都有效。而 const 定义的常量具有块级作用域只在其定义所在的作用域内有效。
调试和符号表使用 #define 定义的常量在符号表中不会有相应的条目因为它只是进行文本替换。而使用 const 定义的常量会在符号表中有相应的条目有助于调试和可读性。
8.运算符 9.输入输出
输入
1.输入:scanf() 格式scanf(控制串,var1,var2,…); 其中控制串由三部分组成:
格式说明符前缀为%,用于告诉方法下次要读入何种数据类型的数据,并顺次放到方法后的变量中.空白符由空格( )、制表符(\t)和新行符(\n)表示,让方法在输入流中忽略一个或多个空白符只要存在一个就可以忽略多个。控制串中的空白符使 scanf() 在输入流中读但不保存结果直到发现非空白字符为止。非空白符除去格式说明符和空白符以外的其他字符如逗号分号于空白符相同scanf()在输入流中读但不保存结果。
如果格式符之间添加了空格那么按照规则会忽略掉全部的空白符直到遇到下一个不是空白符的字符
格式说明符意义%d输入有符号的十进制数%u输入无符号的十进制数%o输入无符号的八进制数%x/X输入无符号的十六进制数%i输入八进制,十进制,十六进制数 (更通用)%c输入单个字符%s输入字符串将字符串送到一个字符组中在输入时以非空白字符开始以第一个空白字符结束%f输入实数可以用小数形式或指数形式输入%e,E,g,G与f作用相同e与fg可以相互替换
附加格式符也称修饰符
字符说明h输入短整型数据可用到%hd,%ho,%hx)l输入长整型数据可用到%ld,%1o,%lx.%lu)以及double型数据%lf%le域宽指定输入数据所占的宽度列数域宽应为正整数*本输入项在读入后不赋给相应的变量
举例 读入整数
读入一个整数
int a;
scanf(%d,a);读入多个整数 输入12 1 3
int a,b,c;
scanf(%d %d %d,a,b,c);读入以逗号分隔的多个整数 输入1,2,3
int a,b,c;
scanf(%d,%d,%d,a,b,c);总之一句话按照格式输入进行读取整数读入其他类型的数字 参考读入整数其他类型的数字使用方式相同要注意的是 为了读取长整数可以将 l 放在格式说明符的前面如%ld,%lu 为了读取短整数可以将 h 放在格式说明符的前面如%hd 如果要强调。这些修饰符可以与 d、i、o、u 和 x 格式代码一起使用。
读入单个字符 在用%c格式声明输入字符时空格和“转义字符”中的字符都会作为有效字符输入所以如果要连续赋给变量
scanf”%c%c%c,a,b,c)此时应该连续输入abc而不是a b c。int i;
char k;
scanf(%d %c,i,k);
/**
* 这个时候输入1\na和1a的效果是一样的因为无论怎么换行都属于空白符会被忽略
*/
scanf(%d%c,i,k);
/**
* 这个时候输入1\na运行后k会接收到换行符而不是a因为空白符没有被忽略而%c对所有字符一视同仁。
*/读入字符串 始终要注意的是读入字符串是scanf()方法的功能而该方法是属于c的因此它不支持c新增的string类型
char str[80];
scanf(%s,str);//注意这里不需要因为str是数组传入的已经是指针了要注意%s虽然是读入字符串但它也会忽略空白符下面例子中的两行scanf()方法是等价的因为%s本身就有忽略空白符的功能。
char stra[80];
char strb[80];
scanf(%s %s,stra,strb);
scanf(%s%s,stra,strb);
以非空白字符开始以第一个空白字符结束为第一个字符串虽然会忽略空白符但是会主动的在最后一个字符后添加\0表示字符串结束也因此char数组不需要初始化就可以接受字符串一般情况下不影响操作因此在设置char数组长度时候最好要比理论中的最大长度多预留一个长度。
char str[5];//如果题目接受的最大字符串长度是4那么设置的数组长度最好大于等于5
scanf(%s,str);要注意的是方法对空白符的忽略不是抛弃了空白符如果没有继续读下去的话接受字符串后的空白符是会保留在缓冲区的这个时候使用%c接收是可以接收到这个可能困扰了很多人一定要注意。
char k;
char str[10];
scanf(%s%c,str,k);
/**
* 如果输入abcd那么会直接运行结束strabcd,k\n
*/2.输入:getchar() 字面意思接收单个字符使用方法
char a;
a getchar();实际上效果等同于char a;
scanf(%c,a);3.输入:gets() 字面意思读取多个字符实际上是读取一整行使用方法
char str[80];
gets(str);由于gets()不检查字符串string的大小必须遇到换行符或文件结尾才会结束输入因此容易造成缓存溢出的安全性问题导致程序崩溃可以使用fgets()代替。
区别 scanf() 读取字符串时以空格为分隔遇到空格就认为当前字符串结束了所以无法读取含有空格的字符串。 gets() 认为空格也是字符串的一部分只有遇到回车键时才认为字符串输入结束所以不管输入了多少个空格只要不按下回车键对 gets() 来说就是一个完整的字符串。 也就是说gets() 能读取含有空格的字符串而 scanf() 不能。
4.输入:fgets() 是对gets()方法的扩展gets()是从标准输入流中读取而fgets()是从文件输入流中读取但是文件输入流并不局限于普通的文件只要是流都可以用来输入使用方法
char str[80];
fgets(str,79,stdin);fgets()函数的作用可以这么解释从第三个参数指定的流中读取最多第二个参数大小的字符到第一个参数指定的容器地址中。在这个过程中在还没读取够第二个参数指定大小的字符前读取到换行符’\n’或者需要读取的流中已经没有数据了。则提前结束并把已经读取到的字符存储进第一个参数指定的容器地址中。 注意事项 1.fgets()函数的注意事项1 fgets()函数的最大读取大小是其“第二个参数减1”这是由于字符串是以’\0’为结束符的fgets()为了保证输入内容的字符串格式当输入的数据大小超过了第二个参数指定的大小的时候fgets()会仅仅读取前面的“第二个参数减1”个字符而预留1个字符的空间来存储字符串结束符’\0’。 2.fgets()函数的注意事项2 在fgets()函数的眼里换行符’\n’也是它要读取的一个普通字符而已。在读取键盘输入的时候会把最后输入的回车符也存进数组里面即会把’\n’也存进数组里面而又由于字符串本身会是以’\0’结尾的。所以在输入字符个数没有超过第二个参数指定大小之前你输入n个字符按下回车输入fgets()存储进第一个参数指定内存地址的是n2个字节。最后面会多出一个’\n’和一个’\0’而且’\n’是在’\0’的前面一个\n\0。 输出
1.输出:printf() printf函数一般格式printf格式控制输出列表 1格式控制格式声明由“%和格式字符组成如%d%f 1格式控制格式声明由“%和格式字符组成如%d%f 普通字符需要在输出时原样输出的字符。 2输出列表是程序需要输出的一些数据可以是常量变量或表达式。
格式字符 格式附加字符 *号的用法
*在printf里可以代表一个泛整数可以代表任何整数。它可以出现在位宽的位置也可以出现在小数位数的位置。但在printf的双引号外面必须要有*对应的数值。
比如我的位宽不确定想用整数a表示则可以写成
2.输出:putchar()