本系列是学习总结:中国大学MOOC的程序设计入门C语言
c语言32个关键字
类型 | 包含关键字 |
---|---|
类型说明保留字 | int,long,short,float,double,char,unsigned,signed,const,void,volatile,enum,struct,union |
语句定义保留字 | if,else,goto,switch,case,do,while,for,continue,break,return,default,typedef |
存储类说明保留字 | auto,register,extern,static |
长度运算符保留字 | sizeof |
变量
如何输入数字运行?
1 需要有个地方可以放置
2 有地方可以输入
3 可以对输入进行运算
一个简单的计算找零程序
#include <stdio.h>
int main()
{
int price = 0; //变量是放数据的地方
printf("请输入金额(元)");
scanf("%d", &price);
int change = 100 - price; //C99的写法,ANSI C中必须开头先定义所有变量再使用
printf("找零:%d 元", change);
}
注意
1 输入也是在终端中进行
2 输入是以行为单位进行的
3 变量的名字:标识符,只能是字母,数字和下划线,数字不能开头,不能使用关键字
赋值和初始化
=:右边的值赋给左边,在定义变量时赋值就叫做初始化,在c语言中差别不大。
对于数学中:a=b表示一种关系,它们相等,而在c语言中,表示一个动作:赋值,意思相反
每个变量在使用前都必须被初始化一次。
关于scanf
出现在scanf中的数据,是程序一定要输入的东西,而不是给我们看的数据,例如:
int price = 0;
int numbers = 0;
scanf("price %d %d", price, numbers); //必须输入price [val] [val]才可以正确执行到scanf
scanf("%d %d ", price, numbers); //输入后必须再输入个其他东西占位才能正确执行scanf
scanf("%d %d\n", price, numbers); //与上一条一样
变量类型
c是一种有类型的语言,所有的变量在使用前必须进行定义或声明, 所有变量必须具有确定的数据类型,数据类型表明变量中只能存放某类型的数据且运行中也不可修改类型。
常量
固定不变的数为常量,直接写在程序里称为直接量,更好的方式是定义常量:
CONST int AMOUNT = 100;
数据类型
例:英尺英寸转化为米为单位的身高:
#include <stdio.h>
int main()
{
double foot, inch;
printf("请输入英制身高:英尺 英寸:\n");
scanf("%lf %lf", &foot, &inch); //输入时%lf代表双精度浮点数,%f代表单精度
printf("您的身高是:%lf", (foot + inch / 12) * 0.3048);
return 0;
}
如果类型为int,那么计算结果会出错,因为数据变成了整型,会舍弃小数点后数数据。
c语言对浮点数和整数一起运行时,会自动把整数转化成浮点数,然后计算。
表达式
运算符:动作(+、-、*、/等)
算子:参与计算的值
例:计算两个时间差值
#include <stdio.h>
int main()
{
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
int space = (hour2 * 60 + minute2) - (hour1 * 60 + minute1);
int hourSpace = space / 60;
int minuteSpace = space % 60;
printf("时间差为:%d小时%d分钟", hourSpace, minuteSpace);
}
运算符优先级
例:计算平均数
#include <stdio.h>
int main()
{
int i, j;
printf("请输入两个数:");
scanf("%d %d", &i, &j);
double avg = (i + j) / 2.0; //因为i j都是整数,所以用2.0来转化成小数计算
printf("平均值是:%f", avg);
return 0;
}
c语言和普通运算一样有优先级:
注意:
赋值也是运算,结果为被赋予的值(php也一样)。printf("%d", (a = 6))结果为6
但程序中最好不要使用嵌入式赋值(如c = 1 + (a = b)),不利于理解且容易产生错误。
交换两个变量
#include <stdio.h>
int main()
{
int a = 6;
int b = 7;
int tmp;
tmp = a;
a = b;
b = tmp;
printf("a: %d, b: %d", a, b);
return 0;
}
很多计算会有一些固定的套路,可以多阅读多思考来学习。
复合赋值
例如: += -+是特殊的赋值运算符,需要特别注意,是先把右侧算完再和左侧结合。
total += (sum + 100) / 2 //相当于total = total + (sum + 100) / 2
total *= sum + 100 //相当于total = total * (sum + 100)
递增递减运算符
针对变量的单目运算符(注意不能对常量执行)。
前缀形式:++a: 都是对a+1,返回值为a + 1
后缀形式:a++: 对a+1,返回值为a
递增递减运算法可以单独使用,但不要组合进表达式,否则会难以阅读。