目录
1.第一个C语言程序
#include<stdio.h>
int main()
{
printf("hello,world");
return 0;
}
结果如下:
下面是对这个程序的详解:
#include<stdio.h>//stdio.h是一个头文件,意为标准输入输出,#include意为引用该头文件
int main()//main()是一个主函数,有且仅有一个
{//{}花括号里面称为函数体
printf("hello,world");//printf()是输出函数,功能是把想要打印的信息打印出来
return 0;//因为main函数是int型,所以返回值需要是整数
}
上面的代码中有注释,格式为 //xxxx 对程序没有影响,程序会在编译的时候自动删除注释。下面我们来对这个程序做出更深层次的详解。
stdio.h是编译器自带的一个头文件,里面包含了输入输出函数,分别是printf()和scanf(),上面的代码我们只用到了输出函数printf(),printf(“打印的内容”),函数体内每个语句写完后都要有;表示该语句结束。使用输出输入函数一定要包含stdio.h这个头文件。
int表示整形,int main说明main函数的类型是整形,如果函数的类型不是void就需要返回它对应类型的一个值,int型需要返回一个整数,所以一般是返回0,以return 0的形式结束main函数,这个程序也就结束了。
2.数据类型
刚才在介绍int main有提到过 int 表示整形,也就是整数的意思,那么小数呢,字符呢?
答案是有的,下面是常见的类型:
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
因为小数中的小数点可以在数字中来回移动,类似于“浮动”,所以小数也叫浮点数。
char代表的是字符类型,字符是电子计算机或无线电通信中字母、数字和各种符号的统称。
那么short int long long 都是表示整形,那有什么区别呢?
这里就需要用到一个操作符sizeof(),虽然看起来挺像main()函数的,但它并不是函数,而是操作符,它的功能是把你输入的类型在内存中占几个字节以整数的形式返回给你。
我们来看看这些类型占几个字节,代码如下:
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
补充说明,%d表示打印10进制的整形,因为sizeof操作符是返回一个整数而我们想把sizeof输出的数字打印出来,所以用%d,\n表示换行。
结果如下
我们可以看到不同类型所占的字节大小不同,这里可以这么理解,除了char(字符)类型,字节越大,其范围越大,能表示的数也就越大。同理,float(单精度浮点数)所表示的浮点数精度没有double(双精度浮点数)高。
但是其所占的内存也会越大,所以对于比较小的数字我们一般使用int(4字节)或者是short(2字节),当数字比较大时就会使用long long(8字节),这样能节省内存。这里 long 相比 int 为什么相同,因为在定义上 long 类型字节大小只需大于等于 int 就行了, double 和 long double 也是同理。
3.变量,常量
在C语言中,不变的值,用常量的概念来表示,变得值用变量来表示。
下面是演示如何创建一个变量:
#include<stdio.h>
int main()
{
int a;//创建了一个int类型(整形)的变量a,变量名为a
char b;//创建了一个char类型(字符类型)的变量b,变量名为b
float c;//创建了一个float类型(单精度浮点数)的变量c,变量名为c
double d;//创建了一个double类型(双精度浮点数)的变量d,变量名为d
return 0;
}
创建出来的变量里面其实是随机值,这里可以初始化变量 ,这是一种好的编程习惯,创建变量的时候对其赋值就是初始化。(char类型可以不赋值)
#include<stdio.h>
int main()
{
int a = 0;//创建了一个int类型(整形)的变量a,变量名为a
char b = 0;//创建了一个char类型(字符类型)的变量b,变量名为b
float c = 0.0f;//创建了一个float类型(单精度浮点数)的变量c,变量名为c
double d = 0.0;//创建了一个double类型(双精度浮点数)的变量d,变量名为d
return 0;
}
取变量名的注意事项:
只能由字母(包括大写和小写)、数字和下划线( _ )组成。不能以数字开头。长度不能超过 63 个字符。变量名中区分大小写的。变量名不能使用关键字。
可以注意到 float c = 0.0f 的0.0后面有个f,这是转变类型为float,因为编译器默认认为小数是double类型。
这里是加f和不加f编译器所认为的0.0的类型。
变量可以改变里面的值,所以我们可以这样:
#include<stdio.h>
int main()
{
int a = 0;
char b = 0;
float c = 0.0;
double d = 0.0;
a = 1;//改变a的值
b = 'A';//改变b的字符
c = 1.5;//改变c的值
d = 2.5;//改变d的值
printf("%d\n%c\n%f\n%f\n", a, b, c, d);//%d是整数格式,%c是字符格式,%f是浮点数格式,\n是换行
return 0;
}
我们初始化的时候都是0,但随后我们改变了他们其中的值,输出a,b,c,d,结果如下:
可以看到初始值都被改变了。
4.全局变量和局部变量
全局变量:在{}外部定义的变量。
局部变量:在{}内部定义的变量。
#include<stdio.h>
int a = 0;//全局变量,在整个程序中都能使用
int main()
{
a = 10;//改变全局变量的值
int b = 1;//局部变量,只能在定义变量的{}内部使用
printf("%d\n,%d\n", a,b);
return 0;
}
5.scanf的使用
scanf是输入函数,需要包含stdio.h头文件,#include<stdio.h>
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);//""里面是输入的类型所对应的格式,这里是int,后面是&变量名,最后分号结束
printf("%d\n", a);
return 0;
}
输入10给a,再输出a:
需注意float输入的格式是%f,而double是%lf。它们的输出格式均为%f.