1. printf 函数的运用
1. 打印非输出控制符:
printf("Hello World!");
转义字符:
\n | 换行符 | 换行,将当前位置移到下一行开头 |
\t | 横向制表符 | 水平制表(跳到下一个 Tab 位置) |
\b | 退格符 | 退格,将当前位置移到前一列 |
\r | 回车符 | 回车,将当前位置移到本行开头 |
\\ | \字符 | 代表一个反斜杠字符 “ \ ” |
\" | "字符 | 代表一个双引号字符 |
\' | '字符 | 代表一个单引号字符 |
利用上诉不同符
2.打印单个输出控制符:
int Num = 0;
double f = 3.14;
printf("Num = %d\n",Num);
printf 格式字符:
%d | 按照十进制打印 |
%o | 按照八进制打印 |
%x | 按照十六进制打印 |
%c | 按照字符打印 |
%f | 按照浮点数类型打印 |
%s | 按照字符串打印 |
%p | 按照指针类型打印 |
%u | 按照无符号类型打印 |
%e | 按照科学计数法打印浮点数类型 |
%% | 打印%号 |
int:整型使用 %d 打印
unsigned:无符号类型使用 %u 打印;
char:字符型使用 %c 打印;
float: 单精度浮点型使用 %f 打印;
3. 打印多个输出控制符
int Num1 = 100;
int Num2 = 200;
printf("Num2 = %d, Num1 = %d\n", Num2, Num1);
注意:输出控制符的个数必须与后面的表达式个数一一匹配
4. printf 格式化打印
%nd | n:域宽,数据不足域宽,高位用空格补齐 |
%0nd | 0:数据不足域宽,高位用 0 补齐 |
%-nd | -:左对齐 |
%.mf | m:保留小数点后 m 位有效数字 |
练习:
设a,b为int型变量,x,y为 float 型变量,c1,c2为 char 型变量,且设a = 5,b = 10,x = 3.5,y = 10.8,c1 = 'A',c2 = 'B'。为了得到以下的输出格式和结果,请写出对应的printf语句。
(1)a = 5,b = 10,x + y = 14.3
printf("a = %d, b = %d, x + y = %.1f\n", a, b, x+y);
(2)x - y = -7.3,a - b = -5
printf("x - y = %.1f, a - b = %d\n", x-y, a-b);
(3)c1 = ’A’ or 65(ASCII) c2 = ’B’ or 66(ASCII)
printf("c1 = '%c' or %d(ASCII) c2 = '%c' or %d(ASCII)\n", c1, c1, c2, c2);
2. scanf 函数的运用:
1. 接收非输入控制符
scanf("m");
非输入控制符需要原封不动的从终端输入
2. 接收输入控制符
%d | 按照有符号十进制接收数据 |
%c | 按照字符接收数据 |
%c | 接收一个 ' ' 和 '\n' 的字符 |
%f | 按照 float 接收数据 |
%lf | 按照 double 接收数据 |
%s | 按照字符串接收数 |
练习:
从终端接收圆的半径,打印圆的周长和面积
vim test2.c
gcc test2.c -o test2
./test2
#include <stdio.h>
#define PI 3.1415926
int main()
{
double r = 0;
double s = 0;
double c = 0;
printf("请输出一个圆的半径值:\nr = ");
scanf("%lf",&r);
s = PI * r * r;
c = 2 * PI * r;
printf("圆的面积为:s = %.3lf\n",s);
printf("圆的周长为:c = %.3lf\n",c);
return 0;
}
3. 接收多个输入控制符:
int Num1 = 0;
int Num2 = 0;
float f = 0;
scanf("%d %d", &Num1. &Num2);
scanf("%d %f", &Num1. &f);
练习:
从终端接收两个数,打印出这两个数四则运算的结果
vim test3.c
gcc test3.c -o test3
./test3
#include <stdio.h>
int main(void)
{
double Num1 = 0;
double Num2 = 0;
scanf("%lf %lf",&Num1,&Num2);
printf("Num1 + Num2 = %.3lf\n",Num1+Num2);
printf("Num1 - Num2 = %.3lf\n",Num1-Num2);
printf("Num1 * Num2 = %.3lf\n",Num1*Num2);
printf("Num1 / Num2 = %.3lf\n",Num1/Num2);
return 0;
}
注意:
1. scanf 如果输入数据与想要接收的数据不匹配,从不匹配的位置开始不再向后读取;
2. scanf 除了 %s 形式外,都需要加 &;
3. scanf 除了 %c 形式外,均无法接收 ' ' 和 '\n' 字符
4. scanf 中 %c 可以接收非 ' ' 和 '\n' 字符
5. scanf 中严禁\n
3. puts函数的运用:
功能:在终端打印一行字符串
示例:
puts("Hello World!");
注意: puts会在字符串末尾多打印一个\n字符
4. gets函数的运用:
功能:从终端接收一行字符串
示例:
char str1[32] = {0};
char str2[32] = {0};
gets(str1);
scanf("%s",str2);
puts(str1);
printf("%s\n",str2);
从输出结果可知:与 scanf 函数相比 gets 可以输入带空格的字符串,但 scanf 函数接收到空格后自动停止输入。(报错属于正常现象,不用理会!)
注意:
1. gets 会去掉从终端接收的 \n 字符
2. gets 可以接收带 ' ' 的字符串,scanf 无法接收带 ' ' 的字符串
C语言流程控制:
1. 顺序结构:
从main函数开始执行,执行到main结束
2. 分支结构
1. 逻辑表达式:
1. 关系运算符:
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
2. 逻辑运算符:
&& | 逻辑与 | 一假为假,全真为真(既...又...) |
|| | 逻辑或 | 一真为真,全假为假(要么...要么...) |
! | 逻辑非 | 真取非得加,假取非得真 |
截断特性:
1. 逻辑与左边为假值,右边不再计算
2. 逻辑或左边为真值,右边不再计算
2. if
简单分支:
if(逻辑表达式)
{
语句块1;
}
else
{
语句块2;
}
注意:
1. if 后面必须加判断条件 else 不能加判断条件;
2. if 可以脱离 else 单独使用,但是 else 不能脱离if单独使用;
3. if 和 else 不加括号,默认控制一句代码,为了保证程序不出错,一句代码也要加括号;
作业:
1.从终端接收三角形三边的长,计算三角形的周长和面积(提示:海伦公式)
根号:sqrt函数,在代码前加入#inclued <math.h>
编译时在后面加 -lm
2. 从终端输入一个数,利用if判断,打印出该为为奇数还是偶数
3. 从终端输入一个年份,打印出该年是闰年还是平年?
普通闰年: 4的倍数却不是100的倍数
世纪闰年: 400的倍数