#include //预处理 引入用于输入输出函数的头文件
//任何C程序都需要有main函数
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
return 0;
}
顺序结构是最简单的程序结构,它的执行顺序是自上而下,依次执行.
例如,从键盘读入3门成绩,求这三门成绩的总成绩和平均成绩
int main() {
int score1;
int score2,score3;
printf("Please input three scores:\n");
//终端格式化输入函数 注意格式输入的写法问题(如下面第二幅图就是错误的输入格式),否则很容易出现问题
scanf("%d %d %d", &score1, &score2, &score3);
int sum = score1 + score2 + score3;
double average = (double)sum / 3;
printf("sum = %d\n",sum);
printf("average = %.1lf\n",average);
}
计算机执行程序时,组成程序的指令和程序所操作的数据需要存储在某个地方,这个地方即为计算机的内存.可以直接操作的内存最小单位是字节(byte),一个字节由8个位(bit)组成,每个字节都有唯一的地址,如果存储无符号整数,一个字节可以表示0~255范围的数字
变量是计算机里一块特定的内存,他是有一个或多个连续的字节所组成的.包括多种不同的类型.它可以存储整数,浮点数,字符等.每个变量都有一个名称,变量名由1个或多个字符组成.其中可以包括大小写字母,数字,下划线,变量名不能以数组开头;变量名不能与C语言关键字相同.
使用”=”为变量进行赋值,可以在变量定义的时候进行赋值,也可以在后续语句中未变量赋值.
使用”&”获取变量所在的内存地址.
int main() {
//变量类型 + 变量名 定义变量
int a = 12345;//变量定义时进行赋值
double A_DOUBLE_variable;
char ch123;
A_DOUBLE_variable = 35.234243;
int *a_address = &a; //取变量a的地址&a,将其存储在变量a_adress中
printf("a = %d, a_address = %x\n", a, a_address);
printf("A_DOUBLE_variable = %lf\n", A_DOUBLE_variable);
return 0;
}
C语言的输入(从键盘输入数据)使用scanf函数,输出(将数据输出到屏幕上)使用printf函数.
使用它们需要引入头文件stdio.h
scanf(“%d %d %d”, &a,&b,&c);
printf(“a=%d b=%d c=%d”, a,b,c);
括号()运算符可改变运算的优先级,带括号的表达式从内到外计算.
在计算机程序运行时,往往需要定义一些不会被程序修改的量,这些量需要定义为常量,例如 圆周率PI 。C语言中,有两种方法定义常量。
方法1,在预处理时定义: #define PI 3.14159265 这种定义方法将PI定义为“3.14159265”的取代符号,后面的程序中,只要出现PI,编译器会将它 替换为“3.14159265”。
方法2,定义为常量变量: const double PI = 3.14159265; 这种定义方法将PI定义为值无法修改的变量,即变量PI增加了const修饰后,后续的程序就无法对 变量PI进行修改了,变量PI就成为了常量PI。
类型转换包括显示转换的强制类型转换与隐式类型转换,
1.显示的强制类型转换:把变量从一个类型转换成另一种类型.将目标类型放在变量前面的括号中.
2.隐式类型转换:发生在二元运算或者赋值运算时.
a.在二元运算时,将值域较小的操作数类型转换成值域较大的操作数类型
b.在赋值运算时,当赋值运算符右边的表达式与左边的变量类型不同时,即进行隐式类型转换.
int main() {
int total_score = 200;
double average1 = total_score / 3; //没有类型转换,结果错误(丢失小数)
double average2 = (double)total_score / 3;//显示的强制类型转换
double average3 = total_score / 3.0;//二元运算时的隐式类型转换
printf("average1 = %lf\n",average1);
printf("average2 = %lf\n",average2);
printf("average3 = %lf\n",average3);
double test1 = total_score;//赋值时的隐式类型转换,值域小的整型赋值到值域大的浮点型
int test2 = average2;//赋值时的隐式类型转换,值域大的浮点型赋值到值域小的整型
printf("test1 = %lf, test2 = %d\n",test1,test2);
return 0;
}
有些数据总是非负的.例如一个班的学生人数.对于每个带符号的整数类型,都有一个对应的无符号整数类型,同类型的有符号与无符号数据占用的内存空间相同.同类型的无符号变量比有符号变量存储范围大一倍,因为最高位是符号位,不参与计算.
浮点数类型数据没有无符号类型.
当向某变量中存储超过其存储范围的数据时,就会发生数据溢出现象
int main() {
char ch1 = 200;
unsigned char ch2 = 200;
printf("ch1 = %d ch2 = %d\n",ch1, ch2);
}
-56是怎么计算出来的? 200的二进制数据为11001000; ch1是有符号字符型数据.值域为-128~128.200已经超出值域范围.所以取200的补码显示(反码 + 1).取反码的时候保持最高位为符号位不变,即10111000转成10进制为-56.
在while循环中,只要while后()中的逻辑表达式等于true,就重复执行while后的{}中的语句块.
一般明确循环重复执行的次数时,使用For循环.
递增与递减运算尽可能的独立成一个句子,避免与其他计算放在一起执行.
break语句的作用是终止循环体内的语句块.break经常出现在循环中的条件分支,从而在某条件成立时,终止循环.
continue语句的作用是终止循环体内当前的循环,当前循环continue后的语句不在执行,直到跳到循环的下一次开始.continue经常出现在循环中的条件分支,从而在某条件成立时,终止本次循环.