首页 > 其他分享 >C语言中,scanf和printf函数,分支和循环

C语言中,scanf和printf函数,分支和循环

时间:2024-07-11 12:27:16浏览次数:10  
标签:语句 int scanf 占位 printf C语言 表达式

目录

1.printf函数

1.占位符

2.输出格式

a.输出宽度

b.总是显⽰正负号

c.限制小数位数

d.输出部分字符串

2.scanf函数

1.基本用法

2.返回值

3.占位符

4.赋值忽略符

3.if语句

else

else if

4.关系操作符

5.条件操作符(三目操作符)

6.逻辑操作符

a.逻辑取反操作符!

b.逻辑与运算符&&

c.逻辑或运算符||

7.短路

8.switch语句

9.while语句

 10.for循环

11.do while语句

12.break和continue语句

13.goto语句


1.printf函数

作用:将参数文本输出到屏幕

注意:printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。

1.占位符

所谓“占位符”,就是这个位置可以⽤其他值代⼊。

%a:⼗六进制浮点数,字⺟输出为⼩写。

%A:⼗六进制浮点数,字⺟输出为大写。

%c:字符。

%d:十进制整数

%e:使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

%E:使⽤科学计数法的浮点数,指数部分的 e 为大写。

%i:整数,基本等同于 %d。

%f:⼩数(float类型)

%lf:小数(double类型)

%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。

%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。

%hd :⼗进制 short int类型。

%ho :⼋进制 short int 类型。

%hx :⼗六进制 short int 类型。

%hu :unsigned short int 类型。

%ld :⼗进制 long int 类型。

%lo :⼋进制 long int 类型。

%lx :⼗六进制 long int 类型。

%lu :unsigned long int 类型。

%lld :⼗进制 long long int 类型。

%llo :⼋进制 long long int 类型。

%llx :⼗六进制 long long int 类型。

%llu :unsigned long long int 类型。

%Le :科学计数法表⽰的 long double 类型浮点数。

%Lf :long double 类型浮点数。

%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o :⼋进制整数。

%p :指针(⽤来打印地址)。

%s :字符串。

%u :⽆符号整数(unsigned int)。

%x :⼗六进制整数。

%zd : size_t 类型。

%% :输出⼀个百分号。 

2.输出格式

a.输出宽度

%5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。

注意:如果%5d,但是数字是6位,依旧输出6位,限制宽度,是指最小是五位。

b.总是显⽰正负号

默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 +。

#include<stdio.h>
int main()
{
printf("+%d",+12);//输出+12
printf("+%d",-12);//输出-12
return 0;
}
c.限制小数位数

输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写 成 %.2f 。

注意:若限制的宽度小于小数位数,会根据四舍五入来进位。

最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。

printf("%*.*lf",3,1,3.14526);//输出(一个空格)3.1

d.输出部分字符串

%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出 的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度。

printf("%.5s","abcedfj");//输出abced

2.scanf函数

1.基本用法

scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 它的原型定义在头⽂件 stdio.h 。它的第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符(与 printf() 的占位符基本⼀致),告诉编 译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。 这是因为C语⾔的数据都是有类型的, scanf() 必须提前知道⽤⼾输⼊的数据类型,才能处理数 据。 它的其余参数就是存放⽤⼾输⼊的变量,格式字符串⾥⾯有多少个占位符,就有多少个变量。 上⾯⽰例中, scanf() 的第⼀个参数 %d ,表⽰⽤⼾输⼊的应该是⼀个整数。 %d 就是⼀个占位 符, % 是占位符的标志, d 表⽰整数。第⼆个参数 &i 表⽰,将⽤⼾从键盘输⼊的整数存⼊变量 i 。

注意:变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址, 即将变量 i 的地址指向⽤⼾输⼊的值。 如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符。

scanf("%d",&a);

scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存 进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条 件的字符为⽌。

示例:

scanf("%d,%d",&x,&y);//输入-13.45e12

上⾯⽰例中, scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读 取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 。 第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符 是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的 # 不属于浮点数的有效字符,所以会停在这⾥。

2.返回值

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。 如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)。EOF - end of file ⽂件结束标志

3.占位符

scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。

%c :字符。

%d :整数。

%f : float 类型浮点数。

%lf : double 类型浮点数。

%Lf : long double 类型浮点数。

%s :字符串。

%[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会 停⽌。

上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返 回当前第⼀个字符,⽆论该字符是否为空格。

注意:如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表 ⽰跳过零个或多个空⽩字符。

重点:%s的规则是,从当前第⼀个⾮空⽩ 字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着, scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位 符,会在字符串变量末尾存储⼀个空字符 \0

注意:scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时, 很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定 读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后 ⾯的字符将被丢弃。

#include<stdio.h>

int main()

{
char name[11];

scanf("%10s",name);

return 0;

}

4.赋值忽略符

有时,⽤⼾的输⼊可能不符合预定的格式。

#include<stdio.h>

int main()

{

int year = 0;

int month = 0;

int day = 0;

scanf("%d-%d-%d", &year, &month, &day);

printf("%d %d %d\n", year, month, day);

return 0;

}

上⾯⽰例中,如果⽤⼾输⼊ 2020-01-01 ,就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他 格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。

为了避免这种情况, scanf() 提供了⼀个赋值忽略符 * 。 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

#include<stdio.h>

int main()

{

int year = 0;

int month = 0;

int day = 0;

scanf("%d%*c%d%*c%d", &year, &month, &day);

return 0;

}

上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。

3.if语句

if语句表达式如下:

if(表达式)

语句

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不 是0,则语句执⾏。

else

if(表达式)

语句1

else

语句2

注意:默认条件下,if和else后只能跟一条语句;如果想加入多条语句,需要使用{}。

else if

if(表达式1)

语句1

else if(表达式2)

语句2

else if....

.....

else

语句

注意:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

4.关系操作符

1.大于运算符>

2.小于运算符<

3.等于运算符==

4.大于等于运算符>=

5.小于等于运算符<=

6.不相等运算符!=

注意:多个关系运算符不宜连⽤。

5>3>1//5大于3为真,返回值为1,1大于1为假,则返回0,最后的值为0

5.条件操作符(三目操作符)

表达式1?表达式2:表达式3

首先,执行表达式1,若为真,则执行表达式2;若为假,则执行表达式3。

if(a>1)

a=2;

else

a=3;

a>1?a=2:a=3;

6.逻辑操作符

! :逻辑取反运算符(改变单个表达式的真假)。

&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

a.逻辑取反操作符!

!真=>假

!假=>真

b.逻辑与运算符&&

真&&真=>真

真&&假=>假

假&&真=>假

假&&假=>假

总结:有假即为假

c.逻辑或运算符||

真||真=>真

真||假=>真

假||真=>真

假||假=>假

总结:有真即为真

7.短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

int i=0, a=0, b=1, c=2;

i=(a++&&b++&c++);//i=0;a=1;b=1;c=2;

8.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

switch 语句是⼀种特殊形式的if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。

switch (expression) {

case value1: statement

case value2: statement

default: statement

}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀。

注意:switch 后的 expression 必须是整型表达式

case 后的值,必须是整形常量表达式

switch(n%3) {

case 0: printf("整除,余数为0\n"); break;

case 1: printf("余数是1\n"); break;

case 2: printf("余数是2\n"); break;//default:printf("余数是2\n");break;

}

注意:1. case 和后边的数字之间必须有空格

2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

3.在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。只是通常放在后面

9.while语句

while(表达式)

语句

执行流程

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断

 10.for循环

for(表达式1;表达式2;表达式3)

语句;

表达式1:初始化表达式

表达式2:判断表达式

表达式3:调整

执行流程:

⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继 续。

整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循 环。

11.do while语句

do

语句

while表达式

先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

执行流程:

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。

所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

12.break和continue语句

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执 ⾏。 continue 的作⽤是跳过本次循环中 continue 后边的代码。

for(int i=0;i<=5;i++){
if(i==3)

break;

printf("%d",i);

}//打印12

for(int i=0;i<=5;i++){
if(i==3)

continue;

printf("%d",i);

}//打印1245

13.goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

#include <stdio.h>
int main()
{
 printf("hehe\n");
 goto next;
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n"); 
 return 0;
}

标签:语句,int,scanf,占位,printf,C语言,表达式
From: https://blog.csdn.net/2401_83794450/article/details/140142001

相关文章

  • C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,
    目录C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化:部分初始化:字符数组的初始化:自动初始化为0:使用`memset`函数初始化:循环初始化:指定初始化器(`c99`,`gcc`)支持:一维数组的使用案例1:统计随机数的分布......
  • C语言-常用算法-6
    题目:一个球从100米高度自由下落,每次落地后反弹回原来高度的一半;再落下,那么它在第10次落地时,共经过多少米?第十次反弹多高。源代码:#include<stdio.h>intmain(){doubleheight=100,length_total=100;for(inti=0;i<10;i++){height/=2;......
  • C语言-常用算法-5
    题目:如果一个渔夫从2011年1月1日开始每三天打一次鱼,两天晒一次网,编程实现输入2011年1月日后的任意日期,输入该渔夫是在打鱼还是晒网。源代码:#include<stdio.h>intmain(){intmonth_days[12]={31,28,31,30,31,30,31,31,30,31,30,31};intyear,month,day;......
  • 嵌入式学习——C语言数据结构(三)
    七、赋值运算符    1、+=     加且赋值         C += A;等价于C=C+A    2、-=      减且赋值         C -= A;等价于C=C-A    3、*=      乘且赋值      ......
  • 墨烯的C语言技术栈-C语言基础-011
    函数在数学中f(x)=2*x+1这是数学的函数C语言是结构化的程序设计语言结构化分为三种(1)顺序结构(2)选择结构(3)循环结构这种三种以及这三种组合可以描述生活中的所有事比如//求两个任意整数和Add(intx,inty){ intz=0; z=x+y; returnz;}in......
  • 衡庐浅析·C语言程序设计·第二章·运算符及其优先级关系(练习题一)
        本文适用于大学的期中期末考试、专升本(专接本、专插本)考试、408等考研预科。如有相关题目疑问或建议欢迎在评论区进行互动。    转载请标明出处。不知道大家有没有消化完第二章的内容。在这里我们将列出一些关于运算符及其优先级关系的课后练习题,方便大家......
  • 入门c语言DAY7——转义字符
    入门第七天(昨天就要发出来的,结果退出来的时候系统没给我保存....目前写过的最长的一篇文章了) 由例子引出转义字符,如图: 可以看到将n前加上\后不但没有打印出\n,反而空了一行。像\n这样的字符就叫转义字符。(当然也不是什么字符前加\都可以用作转义字符~先来浅浅看一下转义......
  • Linux C语言基础 day8
    目录思维导图:学习目标:学习内容:1.字符数组1.1二维字符数组1.1.1格式1.1.2初始化1.1.3 二维字符数组输入输出、求最值、排序2.函数2.1概念关于函数的相关概念2.2函数的定义及调用2.2.1定义函数的格式2.3 函数的分类1.无参无返回值函数2、有参无返回......
  • 【C语言学习】2.常量的分类及使用
    C语言中的常量有以下几种:·字面常量·const修饰的常变量·#define定义的标识符常量·枚举常量1.字面常量如数字(整型、浮点型),字符串等2.const修饰的常变量对于a这一变量,可以多次赋值而使用const修饰后变量被锁定,变更为常变量仍为变量的证明:创建数组后运行,报错显示其......
  • 【C语言学习】3.字符串+转义字符+注释
    字符串由双引号引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。注:字符串以\0为结束标志,不算作字符串内容,若未输入,编译器将隐藏添加\0。\0为字符串的结束标志的证明:法一:chararr1[]="abc";//双引号为字符串chararr2[]={'a','b','c'};//单引号......