C语句和数据的输入输出

C语句
定义
C程序是以函数为基础单位的。
一个函数的执行部分是由若干条语句。
C语句都是用来完成一定的操作任务。
C语句必须依赖于函数存在。
C程序结构
C语句和数据的输入输出_第1张图片
C语句分类
控制语句
用于完成一定的控制功能
① if..else..
② for..
③ while..
④ do..while
⑤ continue
⑥ break
⑦ switch
⑧ return
⑨ goto
函数调用语句
由一个函数调用加一个分号组成,例如:
printf("这是一个C程序!\n");
test();
表达式语句
由一个表达式加一个分号构成,最典型的表达式语句就是赋值语句,例如:
a = 3 // 是一个表达式
score >= 90 // 是一个表达式
score = 90; // 是一个表达式语句
空语句
只有一个分号,什么都不做,例如:
;
复合语句
“{……}”括起来的若干个语句,例如:
{
z = x + y;
t = z / 100;
printf("%f\n",t);
}
一般形式为:{语句部分;}
数据的输入输出
数据的输入与输出是相对而言,其中:
从计算机向外部设备输送数据称之为输出(output)。通常的输出设备包括:显示器、打印机
等。
从外部设备向计算机输送数据称之为输入(input)。通常的输入设备包括:键盘、鼠标、扫描
仪等。
C语言中,输入与输出需要使用标准的输入输出库(stdio.h)中的输入函数(scanf())、输
出函数(printf())实现。
库函数已经被编译成了目标文件,在链接时与编译源程序得到的目标文件(.obj)相链接,生
成可执行程序。
注意:在使用系统库函数时,要用预处理指令#include将有关的头文件包含到用户源文件中(要放
在程序的开头位置)头文件中包含了调用函数时需要的有关信息,具体的函数在编译的时候再去链
接对应的系统库。
简单的输入与输出
用简单的printf函数输出数据
语法:
printf("格式控制",输出列表);
注意:格式控制中的格式化符号(如%d)要和输出的数据一一对应。
举例:
printf("i=%d,x=%d,y=%d\n",i,34,i+1);
格式控制:用一对英文双引号括起来,包括两种信息:
1. 格式说明:由 % 特定字符组成 ,如:%d,%f,%u等,这是格式说明符,用于说明输出项目所
采用的格式。
2. 普通字符:作为说明性文字、符号等,照原样显示出来。
输出列表:输出列表中的各项目指出了所要输出的内容,可以是常量、变量、表达式。
基本的格式字符
%d 按有符号十进制整型(int)数据的实际长度输出。(十进制(0)、八进制(00)、十六进
制(0x00))
%u 按无符号十进制整型(int)数据的实际长度输出。
%c 仅输出一个字符(char
%s 输出结果是字符串,举例:printf("%s\n","CHINA");,输出结果:CHINA
%f 以小数形式输出一个实数(涵单双精度)。整数部分全部输出,小数部分输出6位。
%e 也可以写作%E,以指数形式输出一个实数(涵单双精度)。小数点前1位非0数字,并输出6
位小数。
%hd 短整型(short int/short)
%hhd 字符型的ASCII码,char数据对应的ASCII码的值,举例:char a = 'A';printf("%hhd\n",a);,输
出结果:65
%lf 双精度浮点型(double
%ld 长整型(long int/long
%lld 长长整型(long long int/long long
%x 十六进制,但是十六进制的前缀0x不会打印出来,举例:printf("%x,%#x\n",198,198);,输
出结果:c6,0xc6
%#x 十六进制,并且十六进制的前缀0x也会打印出来,举例:0x05
%#o 八进制,并且八进制的前缀0也会打印出来,举例:05
%p 打印内存的地址
用简单的scanf函数输入数据
语法:
scanf("格式控制",地址列表);
注意:不能传变量、常量、表达式,只能传与之对应的内存地址(首地址)
举例:
int a = 10; // 定义了一个变量a
scanf("%d",&a); // &被称作取地址符,&a意思获取a变量对应的内存地址(首地址)
printf("%p\n",a);// 打印输出a的内存地址(首地址)
作用:
将从键盘输入的值存入内存中所占的存储单元里。存储单元有地址标识。
说明:
格式控制:含义等同于printf函数的格式控制,说明输入的数据应该使用的格式,但是格式控制
中不能添加除格式化符以外的字符。
地址列表:是由若干个地址组成的,可以是变量的地址或者字符串的首地址。&是取地址运算
符,用于取出变量的地址。与格式化输出一样,在格式控制中,用于说明数据格式的格式说明
符以%开头,后面紧跟具体的格式。
案例:
需求:从键盘输入整数给变量a,b,c
代码:
#include
int main()
{
// 定义三个变量a,b,c,用来接收控制台的输入
int a,b,c;
// 加一个提示信息,这样效果好一些
printf("请输入三个整数:\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
注意:输入的数据可用空格、Tab键、回车键中的任意一种方式。
C语句和数据的输入输出_第2张图片
说明:
scanf函数中的格式控制后面应当是变量的地址,由取地址运算符&和变量名共同组成,不
能仅是变量名:scanf("%f%d",&a,&b);
如果格式控制中除了格式说明以外还有其他字符,则在输入数据是必须在对应位置输入与
之相同的字符:
scanf("%d,%d",&a,&b);
从键盘录入的时候必须输入逗号:3,4
scanf("%d%d%d",&year,&month,&day);
从键盘录入的时候必须输入逗号:2025210
%c格式输入字符时,空格和转义字符(\n)都作为有效字符输入,应注意:
scanf("%c%c%c",&a,&b,&c);
只有输入:xyz
才能得到a=x,b=y,c=z
在输入数值型数据(整型+浮点型)时,遇到空格、回车、Tab键或遇到非法输入,则认为该
数据结束:
对于unsigned型变量所需的数据,可以用%u%d格式输入。
复杂的输入与输出
按指定格式输出数据的宽度、小数位数、上下行数据按小数点对齐、用八进制、十六进制输出等。
输出数据格式的控制
整型格式说明符
十进制形式(0~9)
说明符                     说明                                                              数据类型
%d%md            用于基本整型                                                       int
%ld%mld           用于长整型                                                           long
%u%mu        用于无符号基本整型                                        unsigned int
%lu%mlu        用于无符号长整型                                         unsigned long
八进制形式(0~7)
说明符                    说明                                                           数据类型
%o%mo          用于基本整型                                                        int
%lo和%mlo           用于长整型                                                            long
十六进制形式(0~F)
说明符                  说明                                                                 数据类型
%x和%mx          用于基本整型                                                               int
%lx%mlx         用于长整型                                                             long
m表示输出整型数据所占总宽度(即列数),其中:
当实际数据的位数不到m位时,数据前面将用空格填满;
若实际数据的位数大于等于m位时,则以数据的实际位数为准进行输出;
一个int型整数也可以用%u输出,反之一个unsigned型整数也可以用%d%o%x格式输出。按相
互赋值的规则处理。
举例:
/*************************************************************************
> File Name: demo03.c
> Author: FPF
> Description:
> Created Time: 20250210日 星期一 153714
************************************************************************/
#include
int main(int argc,char *argv[])
{
printf("%d\n",12); // 实际只占2列,12
printf("%6d\n",12); // m是正数,实际占了6列,前面不足的使用空格填充,♦♦♦♦12
printf("%-6d\n",12); // m是负数,实际占了6列,后面不足的使用空格填充,12♦♦♦♦
printf("%6d\n",12345678); // 如果实际的数据列宽超过了规定的列宽,列宽失效,按照实际显示,
12345678
return 0;
}
字符型格式说明符
字符型
说明符                                      说明                                                                     举例
%c或者%mc                     输出的字符占m列                                              printf("%3c\n",'a');
字符串型
C语言中,是支持字符串常量的,但是不支持字符串变量。
说明符
说明
%ms
输出的字符串占m列。若串长>=m,全部输出;反之在串前补空格(m为正往前补空
格)
举例:printf("%6s\n",hello); // ♦hello
%-ms
输出的字符串占m列。若串长>=m,全部输出;反之在串后补空格(m为负往后补空
格)
举例:printf("%-6s\n",hello); // hello♦
%m.ns
输出的字符串占m列。只取字符串前n个字符,不足部分串前补空格。
举例:printf("%6.2s\n","hello"); // ♦♦♦♦he
%-m.ns
输出的字符串占m列。只取字符串前n个字符,不足部分串后补空格。
举例:printf("%-6.2s\n","hello"); // he♦♦♦♦
注意:因为空格本身不是很好区分,笔记中使用代替空格显示
一个整数,只要其值在0 ~ 255范围内,也可以用%c格式按其字符形式输出。这里0 ~ 127对应
ASCII码。
在输出前,系统会自动将整数作为ASCII码转换成相应的字符;反之,一个字符也可以输出成一个整 数。
案例:
要求:字符串输出
代码:
#include
int main()
{
printf("%3s,%7.2s,%-5.3s,%.4s\n","CHINA","CHINA","CHINA","CHINA");
}
运行结果:
CHINA,♦♦♦♦♦CH,CHI♦♦,CHIN
浮点型格式说明符
浮点型格式分为三种形式:
十进制形式: %m.nf 或者 %-m.nf
指数形式: %m.ne 或者 %-m.ne
%g或者%G形式:根据数值的大小,自动选择%f或者%e中宽度较短的一种格式,不输出无意义
0
解释:
在输出浮点型数据时,格式说明符中的m表示整个数据所占的列宽,n表示小数点后面所占的位数
(保留的小数位)
如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则
按实际的位数进行输出。
C语言中,用于输出单精度浮点型与双精度浮点型数据格式说明符是一样的。
案例:
要求:输出浮点型数时,指定小数位。
代码:
#include
int main()
{
float f = 123.456;
printf("%8.2f,%-8.2f,%8.6f,%8.2e,%g\n",f,f,f,f,f);
}
运行结果:
♦♦123.46,123.46♦♦,123.456001,1.23e+02,123.456
案例:
要求:求3个圆的周长,输出结果时上下按小数点对齐,取两位小数。
代码:
#include
#define PI 3.1415926
void main ( )
{
double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3;
s1=2.0*PI*r1;
s2=2.0*PI*r2;
s3=2.0*PI*r3;
}
运行结果:
...
案例:
要求:设有如下C程序
代码
#include
#define PI 3.1415926
void main ( )
{
double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3;
s1=2.0*PI*r1;
s2=2.0*PI*r2;
s3=2.0*PI*r3;
}
运行结果:
...
案例:
要求:设有如下C程序
代码
#include "stdio.h"
main()
{
double x=34.567;
printf("x=f\n",x);// 34.567000
printf("x=d\n",x);// 27263,这种写法错误,自动类型转换异常
printf("x=d\n",(int)x);// 34
}
这个程序的实际运行结果为
x=34.567000
x=27263
x=34
说明
显然,这个程序中的第二个格式输出语句输出的结果是错误的,这是因为在第二个格式输出语
句中,格式说明符%d是基本整型格式说明符,而输出项目是双精度型的数据,它们是不匹配
的。
输入数据格式的控制
整型格式说明符
十进制形式
说明符                         说明                                                                           数据类型
d                      用于基本整型                                                                         int
ld                     用于长整型                                                                            long
u                 用于无符号基本整型                                                               unsigned
lu                  用于无符号长整型                                                              unsigned long
八进制形式
说明符                     说明                                                                               数据类型
o                      用于基本整型                                                                          int
lo                    用于长整型                                                                             long
十六进制形式
说明符                     说明                                                                                     数据类型
x                     用于基本整型                                                                                  int                    %xl                      用于长整型                                                                                  long
可见:
用于输入与输出整型数据的格式说明符是完全一致的。
与输出情形一样,对于八进制与十六进制的输入格式,主要用于输入无符号的整型数
据。
浮点型格式说明符
单精度浮点型:%f或者%e
双精度浮点型:%lf
可见:
与输出不同,输入时无论是单精度还是双精度浮点型,都不能用m.n来指定输出的宽度和小
数点后的位数。
可以指定输入数据所占的列数,系统自动按他截取所需数据,如:
scanf("%3d%3d",&a,&b); 当输入1234567时,a得到123b得到456,多余的7无用。
若在%后有一个 * 和一个数字,表示跳过他指定的列数,如:
scanf("%2d%*3d%3d",&a,&b); 当输入12345678时,a得到12%*3d表示跳过3列,b得到
的是678
案例:
#include
int main()
{
int a,b;
scanf("%3d%3d",&a,&b);// 输入1234567a=123,b=456
}
当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情
况:
如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"
"回车"来分隔。
如果各格式说明符之间包含其它字符,则在输入数据时,应输入与 这些字符相同的字符作为
间隔。
例如,设有如下说明
int a,b;
float c,d;
现要利用格式输入函数输入a=12b=78c=12.5d=7.6。 采用不同的格式说明,其输入数
据的形式也是不同的。分别说明如下:
若输入语句为 scanf("ddff"&a&b&c&d)(即格式说明符中没有宽度说
明,各格式说明符之间也没有其他字符。)
则输入数据的形式应为 12 78 12.5 7.6 ↲ (两个数据之间用空格来分隔,当然也可用
“Tab”回车来分隔。)
若输入语句为 scanf("d,d,f,f"&a&b&c&d)(格式说明符中没有宽度说明,
但各格式说明符之间有其它字符,即逗号)
则输入数据的形式应为 12,78,12.5,7.6 (即在输入的两个数据之间同时要输入逗号。)
若输入语句 scanf("a=d,b=d,c=f,d=f"&a&b&c&d); (即格式说明符中没
有宽度说明,但各格式说明符之间有其它字符。)
输入数据的形式应为 a=12,b=78,c=12.5,d=7.6 (即在输入的两个数据之间同时要输入
这些非格式说明符的字符。)
在用于输入的实型格式说明符中不能用m.n来指定输入的宽度和小数点后的位数(这是与输出的
不同之处)
例如: scanf("7.2f"&a) × 此用法是错误的
为了便于程序执行过程中从键盘输入数据,在一个C程序开始执行时,系统就在计算机内存中开
辟了一个输入缓冲区,用于暂存从键盘输入的数据。开始时该输入缓冲区是空的。当执行到一
个输入函数时,就检查输入缓冲区中是否有数据;

你可能感兴趣的:(c语言,开发语言)