今天开始学习常量,变量,基本数据类型,printf()函数和scanf()函数,算术运算符。
首先常量:是在程序中保持不变的量
变量:编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修改这个数据的值。通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需 要显示数据或执行数据操纵。
声明和使用变量
- 声明变量:
Datatype variablename;
数据类型加上变量名;
定义时初始化变量;
Datatype variablename = value;
数据类型加上变量名=数值
- 定义后初始化变量:
variablename = value;
示例
计算长方形的面积
//声明变量:数据类型 变量名;
int width;//长方形的宽
width=10;//为变量赋值
//声明并赋值
int length=50;//长方形的长
int s=width*length;// 面积
printf("长方形的长是%d,宽是%d,面积是:%d\n",length,width,s);
//%d:整形占位符
去掉注释以后练习时写的。
#include <stdio.h>
void main(){
int chang = 500;
int kuan = 200;
int gao = 100;
int ly = 22;
int he = chang * kuan*gao*ly;
printf("长方形的长是%d长方形的宽是%d长方形的总和是%d",chang,kuan,he);
}
变量命名(标识符)
1. 什么是标识符
标识符就是在程序中自定义的一些符号和名称。要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的
2. 标识符的作用
1) 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来
2) 其实,标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字
3) C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符
命名
命名规则(一定要遵守)
1. 只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成。
2. 严格区分大小写,比如test和Test是2个不同的标识符。
3. 不能以数字开头。
4. 不可以使用关键字作为标识符。
命名规范(也要遵守)
1. 尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果不懂英文,你可以下载一个翻译工具,如有道,养成好的习惯,(目前正在努力改正中..)不然会显得比较low...不要起像abcde、sfsdfsdf等这类看起来没有意义的名称,即low又不好记,自己也容易出错。
2. 如果标识符中含有多个单词,可以使用驼峰标识(除开第一个单词,后面每个单词的首字母都是大写):firstName、myFirstName,或者使用下划线_来连接:first_name、my_first_name
不可以使用关键字作为标识符,如果命名以后显示为蓝色或者其他鲜艳的颜色的就不要用来命名了,基本都是有别的用处的。
下面是常见的标识符命名错误
合法标识符 |
非法标识符 |
注释 |
fromNo12 |
from#12 |
标识符中不能使用#符号 |
my_Boolean |
my-Boolean |
标识符中不能使用“-”符号,应使用下划线“_”代替 |
Obj2 |
2ndObj |
标识符不能使用数字开头 |
myInt |
int |
“int”是内建关键字 |
jack_rose |
jack&rose |
符号“&”不能出现在标识符中 |
GUI |
G.U.I |
标识符内部需要出现“.”分隔符 |
基本数据类型
数值类型: 整型:(short,int,long), 非整型 (float,double)
//数值类型就是各种整数,short能容纳的数比较小,int比short大一点,long别另两个都大,大的多,平时int就够用。
//非整形就是各种小数,float能容纳的少点,称为单精度浮点数。double能容纳的多的多,称为双精度浮点数。
非数值型: char
//char是字符类型的,就是字母。
占位符:
每种类型的占位符都不同,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号,short的占位符是%s, int的占位符是%d, long的占位符是%ld
float的占位符是%f, double的占位符是%lf, char的占位符是%c。
转换字符串 |
说 明 |
%d |
将参数按整数形式转换输出,对应参数应是int 类型 |
%ld |
将参数按长整数形式转换输出,对应参数应是long 类型 |
%c |
输出一个字符,对应参数应该是一个字符 |
%s |
输出一个字符串,对应参数应该是一个字符串 |
%lf |
将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 6 位小数 |
示例
//计算圆的面积 float pi=3.14;//圆周率 int r=3;//半径 float s=pi*r*r; printf("圆的半径%d,圆周率%f,面积是:%f\n",r,pi,s); //%f:单精度浮点float占位符 |
练习
#include <stdio.h>
void main(){
float pi = 3.14;
int r = 22;
float he = pi*r*r;
printf("圆的半径%d圆周率%f圆的面积%f\n",r,pi,he);
}
printf()函数和scanf()函数:
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
scanf()函数是C语言中的一个输入函数,一般用于获取printf()函数的数值。
示例:
int bottom,height;
printf("请输入三角形的底边长:");
scanf("%d",&bottom);//将用户输入的值赋值给bottom变量 : &:取地址
printf("请输入三角形的高:");
scanf("%d",&height);//将用户输入的值赋值给height变量
double s=bottom*height/2;
printf("三角行的面积为:%7.2lf",s);//%lf:double的占位符 l7.2f:七位有效数字,精确到小数点后2位
练习:
int gao,di;
printf("请输入三角形的高;");
scanf("%d",&gao);
printf("请输入三角形的底;");
scanf("%d",&di);
double as=gao*di/2;
printf("三角形的面积是%lf",as);//千万不能忘记所有的符号!
算术运算符:
二元运算: +,-,*,/,%(取模或求余)//两个数的预算如1+1=2
一元运算符: ++num,--num,num++,num-- //一个数的运算,如++6=7。++num和num++的区别是前者先自加再走下一条指令,后者先走下一条指令再自加。
--和++相同。
示例:
int num1 = 10;
int num2= ++num1+num1--;
printf("num2=%d",num2);//打印结果22
printf("num1=%d",num1);//打印结果10
如何计算 |
结果 (num1=5) |
|
num2 = ++num1; |
num1 = num1 + 1; num2 = num1; |
num2 = 6; num1 = 6; |
num2 = num1++; |
num2 = num1; num1 = num1 + 1; |
num2 = 5; num1 = 6; |
num2 = --num1; |
num1 = num1 - 1; num2 = num1; |
num2 = 4; num1 = 4; |
num2 = num1--; |
num2 = num1; num1 = num1 - 1; |
num2 = 5; num1 = 4; |
小练习:通过中间变量实现变量交换
int num1,num2;
int temp;//中间变量
printf("请输入的num1的值");
scanf("%d",&num1);
printf("请输入的num2的值");
scanf("%d",&num2);
printf("交换前num1=%d,num2=%d\n",num1,num2);
temp=num1;
num1=num2;
num2=temp;//通过中间变量实现交换
printf("交换后num1=%d,num2=%d\n",num1,num2);
自己的练习:
int num1,num2,num3;
printf("输入一个数");
scanf("%d",&num1);
printf("再来一个数");
scanf("%d",&num2);
printf("变身前num1=%d,num2=%d\n",num1,num2);
num3=num1;
num1=num2;
num2=num3;
printf("变身后num1=%d,num2=%d\n",num1,num2);
类型转换
• 自动类型转换
• 原则:把表示范围小的类型的值转换到表示范围大的类型的值就可以自动转换。把大的转换成小的就得用下面的强制转换。
• short à int à long à float à double
• 强制类型转换
• 语法:(类型名) 变量或数值
• 例如:
int a = 5, b = 3;
float qu = float(a) / b;
getchar()和putchar():getchar()和printf()效果相同,但不如printf()效果强大,putchar()和scanf()效果相同,同样的不如scanf()效果强大。
示例: fflush(stdin)等同刷新,在这个例子中没有 fflush(stdin)的话就完全不行,用户输入的数据储存在缓存区,如果不用fflush清空缓存区的话就没办法在获取新的数据。
char a,b; printf("请输入第一个字符:"); a=getchar();//获取输入字符 fflush(stdin); printf("请输入第二个字符:"); b=getchar();//获取输入字符 fflush(stdin); putchar(a);//输出字符 putchar(b); putchar("\n");
|
自己的小练习:
char a,b;
printf("输入一个字母:");
a = getchar();
fflush(stdin);
printf("再输入一个字母:");
b = getchar();
fflush(stdin);
putchar(a);
putchar(b);
putchar("\n");
*/
char a,b;
printf("输入一个字母:");
scanf("%c",&a);
fflush(stdin);
printf("输入另一个字母:");
scanf("%c",&b);
fflush(stdin);
printf("a=%c,b=%c\n",a,b);
课后作业:根据用户输入的底和高计算梯形的面积(精确到小数点后两位)。
#include <stdio.h>
void main(){
//首先获取上下底及高的数值,然后进行运算。
double sdi,xdi,gao,he;
printf("输入上底长度;");
scanf("%lf",&sdi);
printf("输入下底长度;");
scanf("%lf",&xdi);
printf("输入高度;");
scanf("%lf",&gao);
he = (sdi+xdi)*gao/2;
printf("梯形的面积是;%7.2lf",he);
}
转换字符串 |
说 明 |
%d |
将参数按整数形式转换输出,对应参数应是int 类型 |
%ld |
将参数按长整数形式转换输出,对应参数应是long 类型 |
%c |
输出一个字符,对应参数应该是一个字符 |
%s |
输出一个字符串,对应参数应该是一个字符串 |
%f |
将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 6 位小数 |