目录
一、声明
首先,这里是初步认识一下c语言的代码,相关知识后续会详细讲解
使用的软件是vs2010
二、编写hello代码
#include<stdio.h>
//std表示标准,i是输入,o是输出
//.h是头文件后缀,所以这个文件是标准输入输出头文件
//在编译阶段,程序会自动将<stdio.h>中的内容加载到程序的前面
int main(int args,char *argv[]){
//int表示函数的返回值类型
//main是主函数,是程序的入口,有且只有一个
//()里面是形参,是函数外部将数据传递到函数内部的桥梁
//后面的参数可以不加,但是最好加上
printf("hello\n");
/*使用东西之前这个东西必须先存在,printf来自系统库文件,
也就是上面的<stdio.h>*/
//printf将""中的字符串输出到终端上,所以在前面的输入输出头文件里
//\n表示换行
//;是c语言语句结束标志
getchar();
//阻塞。防止程序一闪而过看不到结果
return 0;
//表示返回,前面函数返回值是int类型,0就是int类型的
}
//函数的功能都在{}中实现
// //是行注释,/* */是块注释,不能嵌套使用
可能出现的问题:在运行的过程中可能出现程序一闪而过,根本看不到结果,是因为我们只是让计算机打印了一个hello就返回了(return 0),如果想要看到,可以添加阻塞类代码比如while(1)说白了就是死循环,或者可以写上getchar();在return 0的前面,也可以暂时先不return 0
运行结果:
三、圆的面积
分析问题:
1.计算圆的面积需要知道半径r->思考怎么获取->可以直接赋值或者键盘输入)
2.圆的面积公式:area=Π*r*r(注意c中没有r^2这种写法)->面积和半径都是一个需要声明的变量
编辑代码:
#include<stdio.h>
int main(int argc,char *argv[]){
float r = 0.0f;//声明r变量
float area = 0.0f;//声明area变量
scanf_s("%f",&r);//从键盘获取r的值
//"%f"表示把你取到的值弄成什么类型的,&r表示取r的地址
//这句话的意思就是从键盘上获取float类型的 数据存到r里
//scanf_s这个其实就是scanf,vs规定这么写不具有跨平台性,其他工具不这么写
//scanf这个下一篇更个解决方法
area = 3.14 * r * r;
printf("area = %f",area);//这里的%f就是一个占位符,将,后面的放到这个位置
//while(1);
getchar();
getchar();
return 0;
}
运行结果:(输入10)
优化代码:
首先在从键盘输入r之前,可以提示一下用户是输入圆的半径
可以将3.14定义一个宏,也就是常量,当在多处使用到这个值想要更改,只需要改宏定义的值即可
可以把运行结果小数点后那一串0不要那么多
#include<stdio.h>
#define PI 3.14;//定义宏(最好大写与变量区分)
int main(int argc,char *argv[]){
float r = 0.0f;//声明r变量
float area = 0.0f;//声明area变量
printf("请输入圆的半径:");
scanf_s("%f",&r);//从键盘获取r的值,scanf是一个带阻塞的
//"%f"表示把你取到的值弄成什么类型的,&r表示取r的地址
//这句话的意思就是从键盘上获取float类型的 数据存到r里
//scanf_s这个其实就是scanf,vs规定这么写不具有跨平台性,其他工具不这么写
//scanf这个下一篇更个解决方法
area = 3.14 * r * r;
printf("area = %.2f",area);
//这里的%f就是一个占位符将逗号后面的放到这个位置
//%.2f表示小数点后保留两位
//while(1);
getchar();
getchar();
return 0;
}
运行结果:
可能出现的错误:
1.
这里area报错是因为我们的声明必须在程序的前面(并不是所有的工具都有这个问题vs,vc都有这个问题),只需要把float area = 0.0f;这句话移到前面即可
2.当然这里也会出现一闪而过的问题
但是会发现只有while(1)能阻塞住,而getchar()阻塞不住
是因为我们从键盘上输入r的值的时候最后一定会敲回车这个值才能进入缓冲区(可以理解为这样程序才获取到这个值),相当于这个值后面多了一个\n
但是我们scanf在读取的时候并不会读取这个\n(你总没看到我们的r值是10\n对吧),那么我们的\n就被留在缓冲区了
getchar()就是从缓冲区读一个字符,咱们之前说的阻塞也就是缓冲区里啥也没有,它根本读不到,它就一直读,但是这回有一个\n它给读到了,那它就心满意足的走了,自然阻塞不住,想阻塞,那就再来一个getchar()就跟我们之前的原理一样了
(这个问题还是需要注意一下,之后的编程过程中可能就会因为这个导致程序执行结果和你预想的不同)