C++第二章知识点合集( getchar( ), putchar( ), gets( ), puts( ), scanf, printf 用法详解,算法以及流程图 等等)代码,例题详解这一篇就够了!

  c++知识点合集已经完成欢迎前往主页查看,点点赞点点关注不迷路哦

点我进入c++第一章知识点合集

MYSQL知识点持续更新中

MYSQL第一章节DDL数据定义语言的操作----点我进入

MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入

MYSQL-第三章节DCL-管理用户,控制权限----点我进入

MYSQL-第四章节常用函数说明----点我进入

第二章知识点合集

目录

第二章知识点合集

getchar和putchar函数的用法

字符输入函数getchar:

getchar():

例子 

字符输出函数putchar

例子

getchar函数和putchar函数与scanf函数和printf函数的区别

gets()和puts()函数的用法

 scanf()和gets()比较

两者在接受字符串时:

算法和流程图

传统流程图

传统流程图举例

三种基本结构

用N-S流程图表示

用伪代码表示算法

概述

使用scanf的注意事项

1) 参数的个数一定要对应

输入的数据类型一定要与所需要的数据类型一致

关于缓冲区

将 %d 换成 %c

%d遇到空格、回车、Tab 键

在使用 scanf 之前使用 printf 提示输入

小结

%f   %2f   %.2f

例如:

%m.nf

Print(“%*3d”)  与  %md


getchar和putchar函数的用法

字符输入函数getchar:

getchar函数是从标准的输入设备(如键盘)上输入一个字符,不带任何参数,格式为:

getchar():

getchar函数将输入的第一个字符作为函数的返回值,通常使用这个函数时,将函数的返回值赋予一个字符变量或者整型变量。

例子 
#include   //getchar是C语言的标准库函数直接调用即可

main()

{ char ch;

ch = getchar();

printf("%c %d\n",ch,ch);

printf("%c %d\n",ch-32,ch-32);

return 0;

}

程序运行时输入 abc。
得到的结果是:

a 97

A 65

总结:

在getchar函数中只把输入的第一个字符作为函数的返回值,所以在代码中输入了abc三个字符,只返回了a的值。

在执行代码时,先以字符的形式输出ch,然后进行数据的强制转换,再将ch以整型的形式输出。字符型数据向整型数据转换时,实质上是将字符型数据转换成与该字符相对应的十进制ASCII码值。a的ASCII码值是97,将a转换后就输出了97。A的ASCII值是65,输出的便是65。

字符输出函数putchar

putchar函数是向标准输出设备(屏幕)上输出一个字符的C语言标准函数,格式为:
putchar(ch);
ch可以是变量、常量,转义字符或表达式。数据类型可以是字符型或整型。当ch是整型数据时,输出的是与其相对应的ASCII码值。

例子
#include 

main()

{  int p;

char q; //此时定义的是字符变量,不是字符串,所以只能将一个字符的值赋予q

p=98;

q='a';

putchar(p);

printf("\n");

putchar(q);

return 0;

}

执行的结果就是:b  a

getchar函数和putchar函数与scanf函数和printf函数的区别

Char ch;

ch=getchar()  与 scanf(“%c”,&ch)的效果一样都是输入一个字符。

putchar(ch);   与 printf(“%c”,ch) 的效果一样都是输出一个字符。’

由于getchar函数和putchar

函数只处理字符,不需要转换说明,所以它们比更加通用的scanf函数和printf函数更高效

gets()和puts()函数的用法

gets()从标准设备读取字符直到遇到换行符(‘\n’)为止;

puts()将buffer中的字符输出到标准输出,直到遇到空字符(’\0’)为止

gets():


gets是字符串数组操作,使用前必须定义字符串数组。

char ch[10]; //定义一个空的字符数组名字为ch,最大容量为10个字符。

gets(ch);   //将键盘输入的字符存放在数组ch中。

puts(ch);  //打印出ch数组里面的各个元素。

 scanf()和gets()比较

char a[13];

scanf("%s",a);

printf("%s",a) ;

scanf虽然也能输入字符串,但是遇到空格就停止了。

两者在接受字符串时:

1.不同点:

scanf不能接受空格、Tab、等;

gets能够接受空格、Tab等;

2.相同点:

字符串接受结束后自动加’\0’。

scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中

gets:可接受回车键之前输入的所有字符。

算法和流程

传统流程图

C++第二章知识点合集( getchar( ), putchar( ), gets( ), puts( ), scanf, printf 用法详解,算法以及流程图 等等)代码,例题详解这一篇就够了!_第1张图片

传统流程图举例

C++第二章知识点合集( getchar( ), putchar( ), gets( ), puts( ), scanf, printf 用法详解,算法以及流程图 等等)代码,例题详解这一篇就够了!_第2张图片

三种基本结构

C++第二章知识点合集( getchar( ), putchar( ), gets( ), puts( ), scanf, printf 用法详解,算法以及流程图 等等)代码,例题详解这一篇就够了!_第3张图片

用N-S流程图表示

C++第二章知识点合集( getchar( ), putchar( ), gets( ), puts( ), scanf, printf 用法详解,算法以及流程图 等等)代码,例题详解这一篇就够了!_第4张图片

用伪代码表示算法

求5!,用伪代码表示。

begin (算法开始)

    1=>p

    2=>I

    while i≤5

    {    p*i=>p

         i+1=>I

    }

    print p

end (算法结束)

概述

scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。

它有两种用法,或者说有两种格式。

scanf("输入控制符", 输入参数);  scanf(“%d”,&i);

功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

#include  //引用头文件

int main(void)

{

int i;

i = 10;

printf("i = %d\n", i); //输出控制符

return 0;}

# include

int main(void)

{

int i;

scanf("%d", &i); //&i 表示变量 i 的地址,& 是取地址符  输入控制符号

printf("i = %d\n", i); 输出控制符号

return 0;}

 scanf("输入控制符非输入控制符", 输入参数);

# include

int main(void)

{

int i;

scanf("i = %d", &i);// i=必不可少

printf("i = %d\n", i);

return 0;

}

在 printf 中,所有的“非输出控制符”全部都要原样输出。同样的,在 scanf函数中 中,所有的“非输入控制符”都要原样输入。所以在输入的时候i=同样需要要原样输入。比如要从键盘给变量 i 赋值 123,那么必须要输入i=123才正确,一个都不可少,否则就会出错。

# include

int main(void)

{

int i, j;

scanf("%d%d", &i, &j);

printf("i = %d, j = %d\n", i, j);

return 0;

}

方便简单

使用scanf的注意事项

1) 参数的个数一定要对应


之前讲过 printf 的 “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要相互对应。同样scanf 也遵循该原则,也就是“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”也是要相互对应。例如:

# include

int main(void)

{

char ch;

int i;

scanf("%c%d", &ch);

printf("ch = %c, i = %d\n", ch, i);

return 0;

}

输入的数据类型一定要与所需要的数据类型一致

# include 

int main(void)

{

int i = 97;

printf("i = %c\n", i);

return 0;

}

但在 scanf 中,对于从键盘输入的数据的类型、scanf 中“输入控制符”的类型、变量所定义的类型,这三个类型一定要相同,否则就是错误的。但是编译的时候不会报错,但从程序功能的角度讲是错误的,所以无法实现我们想要的功能。例如:

# include

int main(void)

{

int i;

scanf("%d", &i);

printf("i = %d\n", i);

return 0;

}

输入a

关于缓冲区

在 scanf 中,从键盘输入的数据,不管是数字、字母,还是空格、回车、Tab 等字符等等,都会被当作数据存入到缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按回车键的时候 scanf 开始进入缓冲区取数据,从前往后依次读取。

不但如此,前面讲过,你从键盘输入 123,这个不是数字 123,而是字符 '1'、字符 '2' 和字符 '3',它们依次排列在缓冲区中。因为每个字符变量 char 只能放一个字符。所以输入“123”之后按回车,scanf 开始进入缓冲区,按照次序,先取字符 '1',如果还要取就再取字符 '2',以此类推

将 %d 换成 %c

但是如果 %d 遇到字母,那么它不会跳过并且也不会取用,而是直接从缓冲区跳出。所以上面这个程序,虽然 scanf 进入缓冲区了,但是用户输入的是字母 a,所以它什么都没读取到就跳出来了,而变量 i 没有值,即没有初始化,但如果将 %d 换成 %c,那么任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab 键它都会取回。

%d遇到空格、回车、Tab 键

但 scanf 中 %d 只可以识别“十进制整数”。对 %d 而言,空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab 键,那么它并不会读取调用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉。未被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个 scanf 来读取。

在使用 scanf 之前使用 printf 提示输入

# include 

int main(void)

{

int i, j;

printf("请输入两个值,中间以空格分隔:");

scanf("%d%d", &i, &j);

printf("i = %d, j = %d\n", i, j);

return 0;

}

代码的可读性和完整性

小结

scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:

  1. 在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。
  2. scanf 中双引号内,除了“输入控制符”外最好什么都不要写。
  3. “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
  4. “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理。
  5. 使用 scanf 之前最好先用 printf 提示输入。

%f   %2f   %.2f

%2f是把float的所有位数输出2位,包括小数点,如果不组2位,补0,如果超过2位,按照实际输出

%.2f是float后的小数只输出两位。

例如:

printf("%2f, %2f, %.2f",123.1, 123.123, 123.123);

输出就是:123.100000, 123.123000,123.12

%m.nf

在C语言的输出中,%m.nf意义:1、f表示输出的数据是浮点数;2、n表示输出的数据保留小数点后n为小数,第n+1位四舍五入,若不足n位则补0;3、m表示输出数据在终端设备上占有m个字符,并右对齐,如果实际的位数小于m时,左边用空格补足,如果实际位数大于7时,向右扩展输出。

Print(“%*3d”)  与  %md

当m>实际输出的值的列数则左补空格,m<实际输出的值的列数则按原值打印就好

你可能感兴趣的:(c++知识点合集,算法,开发语言,青少年编程,c++,c#,缓存)