引言:C
语言是一种编译型的程序设计语言,采用编译的方式将源程序翻译成目标程序(机器代码)。运行一个C
程序,从输入源程序开始,要经过编辑源程序文件(*.c
或*.cpp
)、编译生成目标文件(*.obj)
、连接生成可执行文件(*.exe)
和执行4
步。
一.数据类型
1.简介
2.常量与变量
(放大缩小:Ctrl+滚轮放大缩小)(屏幕截图win+shift+s)
变量:命名规则:只能由字母数字下划线三种字符组成,且第一个字符必须为字母或下划线
且C语言区分大小写,变量名不能与关键字同名!
3.整型数据
- 符号常量:#define PI 3.14
- 整型常量的不同进制表示:计算机只能存储二进制数(0,1)
- %d以十进制的方式去输出某一个整型数
- 1位 1bit 存储0/1 ,1字节 1byte=8bit
4.浮点型数据
浮点型常量:
e表示10的幂次,幂次可正可负
float f=1.234;
printf("%f\n",f); //%f就是以浮点形式输出对应数据
注意:字母e或E之前必须有数字,且e后面的指数必须为整数
正确示例:1e3,1.8e-3,-123e-6,-.1e-3
错误示例:e3,2.1e3.5,.e3,e
浮点型变量:
通过float f来定义浮点变量,f占用4个字节的空间
5.字符型数据
字符型常量:用单引号括起来的一个字符是字符型常量,且只能包含一个字符!例如,‘a’,‘A’,‘1’,‘ ’是正确的字符型常量,而‘abc’,“a”," "是错误的字符型常量 转义字符:以“\”开头的特殊字符
字符型变量使用关键字char进行定义,一个字符型变量占用1字节大小的空间
char c='a'; //定义一个字符型变量,并赋值为‘a’
printf("%c\n",c); //以字符形式输出
#include <stdio.h>
int main(){
char c,d;
c=97;
d='a';
printf("c=%c,d=%c\n",c,d); //打印都是字母a
printf("c=%d,d=%d\n",c,d); //打印都是97
c=c-32; //小写字母转换为大写字母
printf("c=%c\n",c); //打印字母A
return 0;
}
对于字符型变量,无论是赋ASCII码值还是赋字符,使用%c打印输出时 得到的都是字符,使用%d打印输出时得到的都是ASCII码值,将小写字母转换为大写字母时,由ASCII码表发现小写字母与大写字母的差值为32,因此将c减去32就可以得到大写字母A
字符串型常量:一对双引号引起来的字符序列“How are you”
例如,如果先用char c定义字符型变量c,后令c="a"或c="CHINA",那么这样的赋值都是非法的,原因是不可以将字符串型常量赋值给字符型变量
结束标志:‘\0’
6.混合运算
强制类型转换:整型数进行除法运算时,如果运算结果为小数,那么存储浮点数时一定要进行强制类型转换,否则会出现如图结果
#include <stdio.h>
int main(){
int i=5;
float j=i/2; //j输出的是2
float k=(float)i/2; //k输出的是2.5
printf("j=%f,k=%f\n",j,k);
}
7.常用的数据输入/输出函数
标准输入函数scanf,getchar,打印到屏幕上的标准输出函数printf,putchar
scanf读取标准输入缓冲区的原理:
当scanf函数读取标准输入时,如果还没有输入任何内容时,那么scanf函数会被卡住(阻塞)
例如:
#include <stdio.h>
//缓冲区里所有的数据都是字符,scanf根据你的要求进行匹配
int main(){
int i;
char c;
scanf("%d",&i); //阻塞函数
printf("i=%d\n",i);
scanf("%c",&c); //这里不会阻塞
printf("c=%c\n",c); //好像没打印出来的样子
return 0;
}
执行时输入20,然后回车,显示结果如图所示,为什么第二个scanf函数不会被阻塞呢?因为第二个scanf函数读取了缓冲区中的‘\n’,即scanf("%c",&c)实现了读取,打印其实输出了换行,所以不会阻塞
作业题:判断某年是否为闰年
#include <stdio.h>
int main(){
int year;
scanf("%d",&year);
if(year%400==0||year%4==0&&year%100!=0) //逻辑与比逻辑或优先级高
{
printf("yes\n");
}
else{
printf("no\n");
}
}