笔记目录
第三章 顺序程序设计
数据的表现形式
常量和变量
常量
在程序运行过程中,值不能被改变的量,称为常量。
- 整形常量。eg:100;-100
- 实型常量。1.十进制表示eg:12.3;2.指数形式表示eg:13.4e3;13.4e-3。
字符常量
。eg:‘a’,’\n’,’\101’,’\x41’- 字符串常量。eg:“abc”
- 符号常量。eg:#define PI 3.1415,在C语言编译时,将程序中的PI替换成3.1415
- 在C99标准中,出现了常变量—>常量
- 符号常量和常变量的区别:在程序编译时,符号常量直接将常量值替换,不对符号常量进行内存分配,在定义常变量,要对常变量进行内存分配。
//常量
#include<stdio.h>
#define PI 3.1415
int main(){
//1.常数常量
int a=100;
printf("a=%d\n",a);
int b=-100;
printf("b=%d\n",b);
//2.实数常量
float c=12.3;
printf("c=%0.2f\n",c);
float d=13.4e3;//13.4*10^3
printf("d=%0.0f\n",d);
float e=13.4e-3;//13.4*10^-3
printf("e=%f\n",e);
//3.字符常量
char f='a';
printf("f=%c\n",f);
char g='\n';//转义字符,\表转义
printf("abc\tabc\n");//\t--->tab8个
char h='\101';//表示8进制数对应的字符
printf("h=%c\n");//每一个字符都对应一个ASCLL字符
char i='\110';//72
printf("i=%c\n",i);
char j='\x41';
printf("j=%c\n",j);
//4.字符串常量
char k[]="woshiliangpi";
printf("k=%s\n",k);
//5.符号常量
printf("%f\n",PI);
printf("%f\n",PI*3*3);
//6.常变量
const int aa=10;
printf("aa=%d",aa);
/*aa=100;
printf("aa=%d",aa);*/
return 0;
}
变量
使用方法:先定义,后使用。
//变量
#include<stdio.h>
int main(){
int a;//定义了一个变量,在内存中开辟空间
//DEV C++:4byte,turboC:2type 64位编译系统:8byte
//1bit 1byte=8bit
a=10;//给变量赋值 1010
//00000000 00000000 00000000 00001010
//1111--->15
printf("a=%d\n",a);
short b=2;//定义了一个变量为短整形,在内存中开辟2byte空间
printf("b=%d\n",b);
long c=10;//定义了一个变量为长整形,在内存中开辟4byte空间
printf("c=%ld\n",c);
long long d=100;//定义了一个变量为双长整形,在内存中开辟8byte空间
printf("d=%lld\n",d);
return 0;
}
无符号数
#include <stdio.h>
int main(){
unsigned int a=100;
printf("a=%d\n",a);
unsigned int b=-100;
printf("b=%d\n",b);
unsigned int c=-100;
printf("c=%u\n",c);
//int(0:+;1:-) eg:1001=-1
//00000000 00000000 00000000 00000000
//unsigned int(第一位不表示正负) eg:1001=9
return 0;
}
字符变量
char 在内存中开辟1Byte=8bit. ‘a’=97
是一个特殊的整形
#include <stdio.h>
int main(){
char a='a';
int b=a-32;//97-32=65
printf("b=%d\n",b);
printf("b=%c\n",b);
char c='s';
printf("c=%c\n",c);
printf("c=%d\n",c);
char d='W';
printf("d=%c\n",d+32);
printf("d=%d\n",d+32);
return 0;
}
浮点型数据
float double
//浮点型数
#include <stdio.h>
int main(){
float a=12.4f;//4Byte 单精度浮点型,数据有效范围6位,超过可能精度丢失
printf("a=%f\n",a);
printf("a=%.8f\n",a);
float b=12.4;//double类型
double c=12.4;//8Byte 双精度浮点型,数据有效范围15位
printf("c=%f\n",c);
//控制位数
printf("c=%.10f\n",c);
return 0;
}
基本类型(简单类型):int short long char float double.
标识符
类型的名称
命名规则:
- 只能由数字、字母、下划线构成;
- 第一个字符必须是下划线或者字母。
算术运算符
+(加号、正号)
-(减号、负号)
*
/
%
#include<stdio.h>
int main(){
//算术运算符
int a=10;
int b=3;
int c=a+b;//算术运算符 高于赋值(=)运算符
printf("c=%d\n",c);
c=a-b;
printf("c=%d\n",c);
c=a*b;
printf("c=%d\n",c);
c=a/b;//两个整数类型,做运算结果为整数,如果有小数,小数点后直接抹掉
printf("c=%d\n",c);
c=a%b;
printf("c=%d\n",c);
//注意:当求余数时,%两边的值,一定为整数。
return 0;
}
算术运算符:** 先乘除,后加减**
算术运算符的优先级高于赋值运算符
赋值运算符的执行顺序是,从右到左。
算术运算符的执行顺序是,从左到右。
++和–运算符
++:表示变量加1。eg:a++ 表示a=a+1;
–:表示变量减1。eg:a-- 表示a=a-1。
#include<stdio.h>
int main(){
int a=10;
a++;
printf("a=%d\n",a);
return 0;
}
a++和++a的区别:
a++含义是——先使用a的值,然后再将a的值+1;
++a含义是——先将a的值+1,然后再使用a的值。
#include<stdio.h>
int main(){
int a=10;
int b;
//b=a++;
//1.先将a的值赋值给b;2.再将a的值加1。
b=++a;
//1.先将a的值加1;2.再将a的值赋值给b。
printf("a=%d\n",a);
printf("b=%d\n",b);
return 0;
}
不同类型数据间的混合运算
- +、-、*、/运算的两个数中有一个数为float或double,结果为double类型;eg: 12.3f+23.0运算结果为double类型;12.3f+14.5f运算结果为double类型。
- 如果int类型与float或double类型数据进行运算,运算结果为double类型;eg: 12+12.5f结果为double类型。
- char类型数据与整数数据进行运算,为整数类型。字符类型(char)与实数类型进行运算,结果为double类型。eg: ‘a’+100运算结果为整形;‘a’+13.2结果为double类型。
#include<stdio.h>
int main(){
int i=3;
float f=2.5f;
double d=7.5;
double d2=10+'a'+i*f-d/3;//从左到右
//1.进行10+‘a’,结果:107,107+i*f-d/3;
//2.*乘号的优先级大于加号,i*f,结果:7.5(double),107+7.5-d/3;
//3.107+7.5=114.5(double),114.5-d/3;
//4./的优先级比减号大,b/3,结果:2.5(double),114.5-2.5
//5.结果:112.0
printf("d2=%f\n",d2);
return 0;
}
强制类型转换
#include<stdio.h>
int main(){
float a=12.34f;
int b;
b=(int)a;//强制类型转换,将浮点数的精度丢失,不进行四舍五入,直接抹掉小数点后的数字
printf("b=%d\n",b);
return 0;
}
赋值语句
=
结合顺序:从右向左
#include<stdio.h>
int main(){
//int a,b,c;
//a=b=c=10;//正确写法
//printf("a=%d,b=%d,c=%d",a,b,c);
int a,b,c=20;
printf("a=%d,b=%d,c=%d",a,b,c);//a和b是不确定的值
//错误赋值示例: int a=b=c=10;!!!!
return 0;
}
~~ 错误赋值示例: int a=b=c=10;!!! ~~
复合赋值运算符
#include<stdio.h>
int main(){
int a=10;
int b=4;
b+=4;
printf("b=%d\n",b);
a*=b+3;
printf("a=%d\n",a);
return 0;
}
赋值过程中的类型转换
// 2020/10/31
// C
#include <stdio.h>
int main() {
// 1.浮点数--->整数
float a = 14.6f;
int b;
b = a; //精度丢失
printf("b=%d\n", b);
// 2.整数--->浮点数
int c = 17;
double d;
printf("d=%f\n", d);
// 3.char--->int
char ch1 = 'a';
int num = ch1;
printf("num=%d\n", num);
// 4.int--->char
int i = 289;
char ch2;
ch2 = i;
printf("ch2=%d\n", ch2);
return 0;
}
标准输入和输出函数
printf()、scanf()
标准化指数:100.2345=1.002345e+3
// 2020/10/31
// C printf()的用法
#include <stdio.h>
int main() {
// 1.d格式---整数
printf("No1.%d\n", 100);
printf("No2.%5d\n",100);//输出的值占5列,右对齐
printf("No3.%-5d\n", 100);//输出的值占5列,左对齐
//3.c格式---字符
printf("No4.%c\n",'l');
//4.s格式---字符串
printf("No5.%s\n","Hello");
//5.f格式---浮点数
printf("No6.%f\n",12.345);
printf("No7.%20.15f\n",12.345);//右对齐
printf("No8.%-20.15f\n",12.345);//左对齐
//6.e格式---用指数形式表示浮点数
printf("No9.%e\n",12.345);
printf("No10.%e\n",0.000345);
//7.o格式---输出八进制数
printf("No11.%o\n",12);
//8.x格式---输出十六进制数
printf("No12.%x\n",12);
//9.u格式--输出无符号的数
printf("No13.%u\n",19);
return 0;
}
// 2020/10/31
// C scanf()的用法
#include <stdio.h>
int main() {
// int a;
// scanf("a:%d", &a);//用户在输入值时要严格按照输入格式输入
// printf("a=%d\n",a);
// printf("a(address)=%d\n",&a);
int i, j, z;
scanf("i=%d,j=%d,z=%d", &i, &j, &z);
printf("i=%d,j=%d,z=%d", i, j, z);
//连续输入,如:%d%d%d,方法1--空格间隔,方法2--回车间隔
return 0;
}
对于字符的输入:输入时要连续输入单个字符
注意:空格、回车、……,都会被当作有效字符。
字符输入输出函数
putchar()/getchar()
putchar()表示输出单个字符
// 2020/10/31
// C putchar()
int main() {
char a = 'B', b = 'O', c = 'Y';
printf("%c%c%c", a, b, c);
putchar(a);
putchar(b);
putchar(c);
return 0;
}
getchar()表示输入单个字符
// 2020/10/31
// C getchar()
int main() {
char d, e, f;
d = getchar();
e = getchar();
f = getchar();
putchar(d);
putchar(e);
putchar(f);
return 0;
}
注意:空格、回车、……,都会被当作有效字符。
例如:输入三角形的三条边a,b,c,求三角形的面积。
海伦公式:假设在平面内,有一个三角形,边长分别为a、b、c。
三角形的面积S可由以下公式求得:
S=sqrt(p*(p-a)(p-b)(p-c))
而公式里的p为半周长(周长的一半):
p=(a+b+c)/2
// 2020/10/31
// C 求三角形面积
#include <math.h>
#include <stdio.h>
int main() {
double a, b, c;
double area, p;
printf("请输入三角形的三边a,b,c:\n");
scanf("%lf%lf%lf", &a, &b, &c);
p = (a + b + c) / 2;
area = sqrt(p * (p - a) * (p - b) * (p - c)); // sqrt()开根号
printf("三角形的面积为:%.2f", area);
return 0;
}