从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支结构、循环结构。这三种基本结构可以组成所有的各种复架程序。C语言提供了多种语句来实现这些程序结构。
C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的,C语句可以分为下面五类:
表达式语句
函数调用语句
控制语句
复合语句
复合语句是吧多个语句是由括号括起来组成一个语句
在程序中把复合语句看成是单条语句,而不是多条
例如:
{
x = y + z;
a = b + c;
printf("%d%d",x,a);
}
符合语句内的各条语句都必须以分号结尾,在括号外不能加分号
空语句
空语句是只有分号组成的语句,空语句是什么也不执行的语句。在程序中空语句可用来作空循环体
例子如下
while(getchar()!='\n'){
;
}
本语句的功能是,只要从键盘上输入的不是回车那么久重新输入
//因为是输出输入函数所以必须调用stdio
//stdio 就是standard input output的缩写 也就是标准输入输出
#include
void main() {
char c;
printf("input a character\n");
//getchar是用来获取键盘上的输入的
c = getchar();
//putchar是用来将字符输出的
putchar(c);
}
结果显示
printf函数(格式输出函数),他的最后一个字母f即为format格式的意思,他的功能是按用户指定的格式,把指定的数据显示到显示器上
printf函数是一个标准的库函数,他的函数在头文件"stdio.h"之中。但是作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件
printf的使用步骤及效果如下
#include
void main() {
//printf的简单使用
int month = 12;
printf("一年有%d个月", month);
}
效果显示如下
prinf不仅仅只要%d还有其他的
格式字符 | 意义 |
---|---|
d | 以十进制形式输出带符号整数(正数不输出符号) |
o | 以八进制形式输出无符号整数(不输出前缀0) |
x,X | 以十六进制形式输出无符号整数(不输出前缀0x) |
u | 以十进制形式输出无符号整数 |
f | 以小数形式输出单、双精度实数 |
e、E | 以指数形式输出单、双精度实数 |
g、G | 以%f或%e中较短的输出宽度输出单、双精度实数 |
c | 输出单个字符 |
s | 输出字符串 |
输出的最小宽度:用十进制整数来表示输出的最少位数。若实际位数多余定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则以0或者空格补全
标志:标志字符为+、-、#、空格四种,他的意义如下:
标志 | 意义 |
---|---|
- | 结果左对齐,右边填空格 |
+ | 输出符号(正号或者负号) |
空格 | 输出值为正时冠以空格,为符号时冠以负号 |
# | 对c、s、d、u类没有影响。对于o类,在输出的时候加前缀哦,对于x类,在输出的时候加前缀0x;对于e、g、f类当前结果有小数时才给出小数点 |
scanf格式输入函数,即按照用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf是一个标准库函数,他的函数原型在头文件stdio.h中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件
scanf的一般形式为:
scanf ("格式控制字符串",地址列表)
其中格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串,地址就是保存接收到的地址
#define _CRT_SECURE_NO_WARNINGS 1
#include
void main(){
//定义三个变量
int a, b, c;
printf("input a,b,c\n");
//将键盘打入保存
//&变量名是获取其地址
scanf("%d%d%d", &a, &b,&c);
//输出
printf("a=%d,b=%d,c=%d",a,b,c);
}
结果
三个数字在输入的时候要么输入一个按一个空格要么回车
*符表示跳过该输入值
scanf("%d%*d%d",&a,&b,&c);
如果输入的值是1,2,3那么把1赋予a,2被跳过,3赋予c
宽度:用十进制整数指定输入的宽度
//输入1234567但只将12345赋予给a,其他的舍去
scanf("%5d",&a);
//输入123456将12赋予给a,将34赋给b
scanf("%2d%2d",&a,&b);
如果格式控制串中有非格式字符,那么在输入的时候也要输入改字符
//下面就必须要输入1,2,3
scanf("%d,%d,%d",&a,&b,&c);
//下面要输入a=1,b=2,c=3
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
输入三角形的三边长,求三角形的面积
已知三角形的三边长为a,b,c,该三角形的面积公式为
其中s=(a+b+c)/2
程序如下
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
void main()
{
float a, b, c, s, area;
printf("input a b and c\n");
scanf("%f%f%f", &a, &b, &c);
//这里之所以不直接除以2是因为浮点型乘以浮点型才能保持答案的正确
s = 1.0/2*(a + b + c);
area = sqrt(s*(s - a)*(s - b)*(s - c));
//7.2是保留俩位小数
printf("area=%7.2f", area);
}
Math函数库还有以下的函数
序号 | 函数 & 描述 |
---|---|
1 | double acos(double x) 返回以弧度表示的 x 的反余弦。 |
2 | double asin(double x) 返回以弧度表示的 x 的反正弦。 |
3 | double atan(double x) 返回以弧度表示的 x 的反正切。 |
4 | double atan2(double y, double x) 返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。 |
5 | double cos(double x) 返回弧度角 x 的余弦。 |
6 | double cosh(double x) 返回 x 的双曲余弦。 |
7 | double sin(double x) 返回弧度角 x 的正弦。 |
8 | double sinh(double x) 返回 x 的双曲正弦。 |
9 | double tanh(double x) 返回 x 的双曲正切。 |
10 | double exp(double x) 返回 e 的 x 次幂的值。 |
11 | double frexp(double x, int *exponent) 把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。 |
12 | double ldexp(double x, int exponent) 返回 x 乘以 2 的 exponent 次幂。 |
13 | double log(double x) 返回 x 的自然对数(基数为 e 的对数)。 |
14 | double log10(double x) 返回 x 的常用对数(基数为 10 的对数)。 |
15 | double modf(double x, double *integer) 返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。 |
16 | double pow(double x, double y) 返回 x 的 y 次幂。 |
17 | double sqrt(double x) 返回 x 的平方根。 |
18 | double ceil(double x) 返回大于或等于 x 的最小的整数值。 |
19 | double fabs(double x) 返回 x 的绝对值。 |
20 | double floor(double x) 返回小于或等于 x 的最大的整数值。 |
21 | double fmod(double x, double y) 返回 x 除以 y 的余数。 |
求ax2+bx+c=0方程的根,abc都由键盘输入,设b2-4ac>0,求根公式如下
代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
void main()
{
float a, b, c, p, q, x1, x2;
printf("请输入a、b、c\n");
scanf("%f%f%f", &a, &b, &c);
p = -(b / 2 * a);
q = sqrt(b*b - 4 * a*c) / 2 * a;
x1 = p + q;
x2 = p - q;
printf("x1=%7.2f,x2=%7.2f", x1, x2);
}
结果