c语言之父 丹尼斯-里奇 贝尔实验室
C语言优点:运算符丰富;数据结构类型丰富;结构化的控制语句;语法限制相对自由;允许访问物理内存,可对硬件操作;执行效率高;移植性好。
缺点:代码数量多时,不可控性增加,难度较大。
一、c基本变量及语法
1、C引入
编译:gcc hello.c -o hello //生成目标文件,必须加上hello
程序: 解析:
#include<stdio.h> //#;预处理命令
// include :头文件包含
// < >:把括号里的内容引入到源文件中
// stdio.h:头文件,是计算机在带的库,可以直接使用
int main (int argc,char *argcv[]) //main:函数名,main()是主函数,c程序源文件有且只能有一个main()函数,即主函数!!C程序的入口,即所有的C程序都是从main开始执行
// int argc :参数个数
// char *argv[]:记录参数
{
printf("hello,world!"); //printf():库函数,包含在<stdio.h>中,按一定的格式输出。
return 0; //return 0;返回值,函数结束。
}
ps:此程序基本决定了,C程序的框架!
2、C的数据类型
(1)基本数据类型:
整数型:
int, 基本整型
short int,短整型
long int,长整型
unsigned,无符号
singed,有符号
字符型:char
字符:由' '引起来的单个字母,数字,或者其他符号,e,1,!等
getchar():获取单个字符
putchar():输出的单个字符
实型,浮点型:
float:单精度 有效位7位左右
double :双精度 有效位15位左右
numf e/E n //n为整数,科学计数法
float num=1.23E4;//num为1.23*10^4
枚举类型:enum
构造数据类型:
数组类型,结构体类型(struct),联合体类型(union)
指针类型:
空类型:void
#include<stdio.h>
//数据类型的实例
int main(int argc,char *argv[])
{
//定义整型变量,并初始化
int a=2;
//定义整型变量
int b,c,d;
//给整型变量赋值
b=12;
c=13;
d=15;
//定义多个整型并初始化
int e=11,f=10,g=9;
//无符号数据类型
unsigned h=-123;
printf("%d\n",a);
printf("%d\n",h);
printf("%d\n",d);
return 0;
}
(2)变量的定义:
<1>DataType Name1,Name2,Name3,...,Namen
可以定义多个变量,中间用“,”隔开,结尾用“;”结束。
<2>
DataType Name1;
DataType Name2;
DataType Name3;
<3>建议一行定义一个变量,并初始化!!!
DataType Name1 = value;
3.标识符:
包括变量名,函数名,及其他标号等
<1>标识符的组成
字母(A~Z,a~z),下划线(_),数字,且规定第一个字符,不能为数字
<1>命名规则
可读性要高,做到“见名知意”
驼峰命名法:单词首字母大写
杜绝使用汉语拼音!!!
4.格式输入/输出:printf()/scanf()
<1>printf()----按一定的格式输出:printf(“占位符”,参数表);
一一对应
----printf(“打印输出的内容”)
----%m.nf:(右对齐)
m:总位数
n:小数部分的保留位数,若n+1大于m,则输出n代表原来数值。
----%-m.nf按照左对齐。
<2>scanf()
按一定格式输入:scanf(“占位符”,&参数表);
一一对应
#include<stdio.h>
int main ()
{
//定义变量并初始化
float numf=1.234;
//按格式输出numf的值
printf("numf =%f\n",numf);
//输入numf的值,&numf为地址,将输入的数据保存到numf对应的空间中!
scanf("%f",&numf);
printf("numf =%5.3f\n",numf);
return 0;
}
&:取地址符号
占位符:
print() scanf()
int %d %d
char %c %c
long %ld %ld
float %f %f
double %lf %lf
字符串 %s
5.常量
数字常量:123 1 -323
字符常量:‘s’ ‘$’
实型常量:1.23 -1.234
字符串常量:有“ ”括起来的字符序列,由一个或者多个字符组成。
注意:字符串和字符的区别
‘a’:占用一个字节
“a”:占用两个字节
‘\0’:字符串的结束标志,一般不显示
6.变量和常量的区别
变量:
其值可以更改,先定义后使用。
常量:
其值不可以更改,随时可以使用,无需定义或声明。
变量的初始化:
变量名=常量;//注:类型一定要一致!!!
二、运算符
1、sizeof()
计算大小,得出对应变量或数据类型所占内存空间的大小
(1)单位:字节(byte)
1字节=8位(bit)
sizeof DataType: //64位机下
sizeof(cahr)=1
sizeof(int)=4
sizeof(short)=2
sizeof(long)=8
sizeof(float)=4
sizeof(double=8
sizeof DataType:
//
32位机下
sizeof(cahr)=1
sizeof(int)=4
sizeof(short)=2
sizeof(long)=4 //只有long 不同
sizeof(float)=4
sizeof(double=8
(2)对应变量内存打大小
sizeof(ch)=1
sizeof(short_size)=2
sizeof(int_size)=4
sizeof(long_size)=8
sizeof(float_size)=4
sizeof(double_size)=8
注意:(1)(2)的结果,对比数据类型所占大小,和其定义变量所占的内存大小
#include<stdio.h> //sizeof实例
int main()
{
printf("sizeof DataType:\n");
printf("sizeof(cahr)=%ld\n",sizeof(char));
printf("sizeof(int)=%ld\n",sizeof(int));
printf("sizeof(short)=%ld\n",sizeof(short));
printf("sizeof(long)=%ld\n",sizeof(long));
printf("sizeof(float)=%ld\n",sizeof(float));
printf("sizeof(double=%ld\n",sizeof(double));
char ch;
short short_size;
int int_size;
long long_size;
float float_size;
double double_size;
printf("sizeof(ch)=%ld\n",sizeof(ch));
printf("sizeof(short_size)=%ld\n",sizeof(short_size));
printf("sizeof(int_size)=%ld\n",sizeof(int_size));
printf("sizeof(long_size)=%ld\n",sizeof(long_size));
printf("sizeof(float_size)=%ld\n",sizeof(float_size));
printf("sizeof(double_size)=%ld\n",sizeof(double_size));
return 0;
}
2、算数运算符(七个)
加+、减-、乘×、除/、取余%
自增:++
++i //先自增后取值,
num=++i;
即:i=i+1;
num=i+1
i++ //先取值后自增
num=i++
即num=i;
i=i+1;
#include<stdio.h>
//自加运算实例
int main()
{
int num=5;
int sum=++num + num++;
printf("sum=%d\n",sum);
int i=5;
int j=i++ + i++;
printf("j=%d,i=%d\n",j,i);
return 0;
}
#include<stdio.h>//基本算数运算
int main()
{
int a=12;
int b=3;
int sum=a+b;
printf("%d,%d,%d\n",a,b,sum);
int min=a-b;
printf("%d,%d,%d\n",a,b,sum);
int mul=a*b;
printf("%d,%d,%d\n",a,b,mul);
int del=a/b;
printf("%d,%d,%d\n",a,b,del);
int rem=a%b;
printf("%d,%d,%d\n",a,b,rem);
return 0;
}
自减:--
--i:先自减,后运算
i--:先取值,后自减
3、关系运算符
大于:>
a>b:成立,返回1;不成立返回0;
小于:<
a<b:成立,返回1;不成立返回0;
等于:==
a==b:成立,返回1;不成立返回0;
大于等于:>= //a大于b,或者a=b;
a>=b:
成立,返回1;不成立返回0;
小于等于:<=
a<=b: //a小于b,或者a=b;成立,返回1;不成立返回0;
不等于:!=
a!=b:成立,返回1;不成立返回0;
4.逗号运算符(,)
表达式1,表达式2,表达式3,...
//其中每一个表达式又可以是一个逗号表达式!
//依次计算表达式1,表达式2,表达式3,.....
//表达式的值取决于最后一个表达式的值
#include<stdio.h> //关系运算符实例
int main()
{
int a=3;
int b=4;
printf("input a,b:");
scanf("%d,%d",&a,&b);
int res = a>b;
printf("%d>%d的结果为:%d\n",a,b,res);
res = a <= b;
printf("%d<=%d的结果为:%d\n",a,b,res);
/* printf("a>b :%d\n",a>b);
printf("a<b :%d\n",a<b);
printf("a==b:%d\n",a==b);
printf("a<=b:%d\n",a<=b);
printf("a>=b:%d\n",a>=b);
printf("a!=b:%d\n",a!=b);
*/
return 0;
}
5、使用scanf
注意事项
(1)一定要严格按照scanf()中的格式输入变量的值!!!
(2)使用scanf()时,参数列表中的参数地址,scanf()是将输入的值保存到变量对应的地址中!
(3)缓存区问题-----重点
scanf()函数中不能使用换行符:’\n’