我突然意识到编程里更重要的是算法,而不是语法,所以这篇文章加急要讲一下常用的语法,后面再更新的就是实操与算法了。
格式输出函数
printf(格式控制字符串,输出项)
格式控制字符串,不规范讲就是包含常量与变量。常量是输入什么就完整输出什么;变量需要用转换控制符再配合后文的输出项(变量名)对应输出。
转换控制符,决定了输出项(变量)输出时的格式。
int | %d | 带符号的十进制整数 |
unsigned int | %u | 无符号的十进制整数 |
int | %o | 八进制整数 |
int | %x | 十六进制整数 |
float | %f | 十进制小数 |
float | %e | 科学计数法 |
float | %g | 不带无效0的小数 |
char | %c | 单个字符 |
char[] | %s | 以'\0'结尾的字符串数组 |
因为C语言的变量里没有字符串格式,所以通常用数组变量来表示“字符串变量”。
上面👆🏻提到的格式控制字符只是最基本的格式,它还能设置各种属性来控制输出的效果,下面直接看例子。
#include<stdio.h>
int main()
{
int x=61;
double y=9.8760000;
printf("1 [%d]\n",x);\\[61]
printf("2 [%o]\n",x);\\[75]
printf("3 [%x]\n",x);\\[3d]
printf("4 [%f]\n",y);\\[9.876000]
printf("5 [%7.2f]\n",y);\\[ 9.88]这里设置了格式,%7.2f代表%f格式的变量,保留2位小数(四舍五入),整个数据占7个字符(保留2位小数,小数点占1位,所以整数应该占7-2-1=4位,未占满的在前面补空格。
printf("6 [%07.2f]\n",y);\\[0009.88]前面0表示未占满的前面补0,效果基本与上一条代码一样。
printf("7 [%e]\n",y);\\[9.876000e+000]科学计数法的格式,乘上了10的0次方
printf("8 [%g]\n",y);\\[9.876]无效0被删去
printf("9 [%s]\n","CHINA");\\[CHINA]
printf("10 [%10S]\n","CHINA");\\[ CHINA]五个空格
printf("11 [%-10s]\n","CHINA");\\[CHINA ]五个空格,负号表示左对齐
printf("12 %1d",x);\\[61]只有当数据的长度小于或等于转换控制符的设置时才决定宽度,否则(这里设置1小于实际2)按实际宽度输出
}
格式输入函数
scanf("格式说明符",地址);
格式说明符表示用户需要输入的字符,依旧不规范讲分为常量和变量。常量就需要完全一模一样地输入,变量依旧以%引出数据类型,并与地址相对应,用户在“变量”的位置才能在同数据类型中自由输入内容。
地址格式为&变量名
从现实的角度出发,声明一个变量后,计算机就自动开辟一个空间供其储存。变量的值可以抑制改变,但是位置是固定的,相当于它的家。
输入的字符同样可以设置格式,下面直接给例子自行体会
#include<stdio.h>
int main()
{
int a;
float b,c;
scanf("%2d%*4f%4f",&a,&b,&c);
printf("a=%d,b=%f,c=%f\n",a,b,c);//最后输出结果a=12,b=9789.000000,中间的%f被虚读,直接忽略相应的宽度不赋给任何变量。最后c因为没被赋值,会显示为任意一个数(严格讲也不是任意,但这涉及到计算机硬件的相关理论,我暂时没学)
}
字符输入函数getchar()
字符输出函数putchar()
括号内只能填单个字符或一个字符变量。
if-else语句
if(条件){条件成立时执行的命令;}
if(条件){条件成立时执行的语句}else{条件不成立时执行的语句;}
switch-case语句
switch(表达式)
{
case 表达式可能的值:命令;break;
default:命令;
}
这其实不算“如果……就”,这是匹配到相应的值,然后直接跳过中间步骤到对应那行代码,再按顺序运行,哪怕下一行代码的值不是表达式的值也会执行。因此通常会在每个case末尾加上break表示跳出整个switch语句,不论下文有多少代码通通不执行。
while语句
while(条件){条件成立时执行的命令;}
命令执行结束后会重新判断条件是否成立,若成立则继续执行命令。为避免程序无休止运行,通常条件是某个变量与某个值比大小;而执行的最后一条命令是改变条件中变量的值(加减乘除余等都可)。
do-while语句
do 命令 while(条件);
for语句
for(初始值;条件;无论条件成立与否都执行的命令通常用来改变循环变量的值){条件成立时执行的命令;}
break;语句
结束循环,不再循环。
continue;语句
结束本次循环,下次循环正常进行。换句话说就是本次循环不进行任何处理。
goto语句
goto 标签名;
标签的设置直接在代码最前面任意取一个名字加冒号即可
讲到这里了,后面关于数组、指针、枚举、结构体、文件等内容简单讲跟前面的数据类型基本一样,关键是如何应用。但应用的问题不是一时半会讲得清楚的,因此计划是后期讲案例和我学算法的时候,用到什么就讲什么吧。
这种比较难的东西,还是在应用实践中比较任意掌握好。