C语言基础学习Day3(连载中)

本文是C语言基础学习连载的第三天,主要介绍了基本输入与输出函数printf和scanf的用法,包括不同形式的输出控制符及输入控制符。接着讲解了运算符,包括算术、关系、逻辑和赋值运算符。此外,还详细阐述了流程控制中的选择执行,讲解了if语句的不同形式及应用,并给出了实际示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言基础学习(Day3)

笔者有话说:紧接上期预备知识,第三天继续编写C语言相关知识,今天学习的主要内容是C语言中的选择执行,依旧用通俗易懂的语言带领小白15天掌握C语言基本知识,打卡第三天~

基础知识

1、基本输入与输出函数的用法

(1)输出——printf()——将变量的内容输出到显示器上
四种用法

printf(“字符串\n”);

#include<stdio.h>

int main(void)
{
	printf("Hello!\n");	//"\n"——转义字符,表示换行 
	return 0;
}

printf(“输出控制符”, 输出参数);

#include<stdio.h>

int main(void)
{
	int i = 10;
	printf("%d\n",i);	//%d是输出控制符,i为输出参数 
	return 0;
}

Tipd代表以十进制输出

printf(“输出控制符1 输出控制符2 …”, 输出参数1, 输出参数2, …);

  #include<stdio.h>
    
    int main(void)
    {
    	int i = 2;
    	int j = 4;
    	printf("%d %d\n", i, j);	//%d是输出控制符,i为输出参数 
    	return 0;
    }

Tip:输出控制符与输出参数个数必须一一对应

printf(“输出控制符 非输出控制符”, 输出参数);

输出控制符包含如下:%d %ld %c %f %lf %x%X%#X %o

另外:%x在调试中的使用较为重要,因此需要掌握printf中%x及其相关的用法

int x = 47; //100前没有加0、0x或0X,表示100为十进制

 #include<stdio.h>
    
    int main(void)
    {
    	int x = 47;
    	printf("%x\n", x);	//输出结果为2f
    	printf("%X\n", x);	//输出结果为2F
    	printf("%#x\n", x);	//输出结果为0x2f
    	printf("%#X\n", x);	//输出结果为0X2F
    	return 0; 
    }

Tip%#X推荐使用!——可以一目了然看出输出结果为十六进制

输出控制符参数以其规定的格式输出,而非输出控制符则以原样输出

例如:

#include<stdio.h>

int main(void)
{
	int i = 4;
	int j = 9;
	printf("i = %d, j = %d/n", i, j);
	return 0; 
}

输出结果:i = 4, j = 9

说明:为什么需要输出控制符?

①0、1组成的代码可以表示数据也可以表示指令
②如果0、1组成的代码表示的是数据,同样的0、1代码组合以不同的输出格式输出,会有不同的输出结果

(2)输入——scanf()——通过键盘将数据输入到变量中

scanf(“输入控制符”, 输入参数);

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

举例

 #include <stdio.h>
    
    int main(void)
    {
      	int i;
    	scanf("%d", &i);
    	printf("i = %d\n", i);	//&i表示i的地址,&表示取地址符 
    	return 0;
    }

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

Tip:非输入控制符必须原样输出

举例

#include <stdio.h>

int main(void)
{
  	int i;
	scanf("mm%d", &i);		//mm为非输入控制符 %d为输入控制符
	printf("i = %d\n", i);	
	return 0;
}

mm123正确输入,而123非法的输入

scanf(”输入控制符1 输入控制符2 …", 输入参数1, 输入参数2, … );

一次给多个变量键盘赋值


```c
  #include <stdio.h>
    
    int main(void)
    {
    	int i, j, k;
    	scanf("%d, %d, %d", &i, &j, &k);
    	printf("i = %d, j = %d, k = %d\n", i, j, k);
    	return 0;
    }

Tip:","为非输入控制符,要原样输入,才能保证是合法输入

如何使用scanf编写出高质量代码?

使用scanf前最好先使用printf提示用户以什么样的方式来输入

scanf中尽量不要使用非控制符,尤其不要使用\n。

编写代码对scanf中用户的非法输入做适当处理

while ( (ch = getchar()) != ‘\n’ )

continue;

——此处用到循环语句,后期深入学习

 #include <stdio.h>
    
    int main(void)
    {
    	int i,j;
    	char ch;
    
    	scanf("%d", &i);
    	printf("i = %d\n", i);
    
    	//......
    
    	while ( (ch = getchar()) != '\n')
    		continue;
    
    	scanf("%d", &j);
    	printf("j = %d\n", j);
    	return 0;
    }

2、运算符

(1)算术运算符:+ - * /(除) %(取余)

(2)关系运算符:> >= < <= !=(不等于) ==(等于)

(3)逻辑运算符:!(非) &&(并且) ||(或者)

(4)赋值运算符:= += -= *= /=

(5)优先级别:算术 > 关系 > 逻辑 > 赋值

注意

除法运算中,运算结果与运算对象的数据类型有关,两个数都为整数,则商为int,若商中有小数,则截取整数部分;被除数和除数中只要有一个或者两个为浮点型数据,则商也是浮点型数据不截取小数部分

取余的运算对象必须是整数,结果是整除后的余数,其余数的符号被除数相同,例如:13%-3=1, -13%3=-1, -13%3=-1。

③C语言对真假的处理:非零是真零是假真用1表示假用0表示

 #include<stdio.h>
    
    int main(void)
    {
    	int i = 1;
    	int j = 2;
    	int k = 3;
    	int m;
    
    	//m = (3>2) && (k = 8);			//=表示赋值 ——m为1, k为8 
    	//m = (3>2) && (k = 0);			//m为0, k为0 
    	m = (2>3) && (k = 20);			//m为0, k为3
    	//不含有";"的是表达式,含有";"的是语句 
    	printf("m = %d, k = %d", m, k);
    }

若&&左边为假,右边的表达式肯定不会执行;


若||左边为真,右边的表达式肯定不会执行。

3、流程控制

(1)什么是流程控制

程序代码执行的顺序

(2)流程控制的分类

顺序执行(按顺序从上往下执行)

选择执行(选择性执行某部分代码)

循环执行(反复执行某部分代码)

4、选择——选择执行

某些代码可能执行,也可能不执行,有选择地执行某些代码。

(1)if

简单方法

格式

if (表达式)

语句

#include <stdio.h>

int main(void)
{
	if (3)
		printf("AAAA\n");	//会输出 
	
	if (0)
		printf("BBBB\n");	//不会输出

	if (0 == 0)
		printf("CCCC\n");	//表达式为真,会输出 
	
	return 0;
}

输出结果为

AAAA

CCCC

功能

如果表达式为执行语句;

如果表达式为不执行语句。

if的范围问题

格式一

if(表达式)

语句A;

语句B;

#include <stdio.h>

int main(void)
{
	if(1>2)
		printf("AAAA\n");
		printf("BBBB\n");
        
	return 0;
}

输出结果为:BBBB

说明一:if默认只能控制语句A的执行或不执行,无法控制语句B的执行或不执行(或者说:语句B一定会执行)。

格式二:

if(表达式)

{

语句A;

语句B;

}

#include <stdio.h>

int main(void)
{
	if(1>2)
	{
		printf("AAAA\n");
		printf("BBBB\n");
	}
  
	printf("CCCC\n";
    
	return 0;
}

输出结果为:CCCC

说明二:此时if可以控制语句A和语句B

综上所述:if默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行就必须把这些语句用{}括起来。

if…else…与if…else if…else

格式

if (1)

A;

else if (2)

B;

else if (3)

C;

else

D;

说明:如果1成立,则执行A;如果1不成立2成立,则执行2;如果1、2不成立3成立,则执行C;如果1、2、3都不成立,则执行D。

#include <stdio.h>

int main(void)
{
	double delta = 3;

	if (delta > 0)
		printf("有两个解\n");
	else if (delta == 0)
		printf("有唯一解\n"); 
	else
		printf("无解\n");

	return 0; 
}

输出结果:有两个解

C语言对真假的处理

非零是真,零是假;

真用1表示,假用0表示。

实例

源代码

 #include <stdio.h>
    
    int main(void)
    {
    	float score;
    	scanf("%f", &score);
    
    	if (score > 100)
    		printf("你在做梦!\n");
    	else if (score >= 90 && score <= 100)	//不能写成90<=score<=100 
    		printf("优秀\n");
    	else if (score >= 80 && score <= 90)
    		printf("良好\n");
    	else if (score >= 60 && score <= 80)
    		printf("及格\n"); 
    	else if (score >= 0 && score <= 60)
    		printf("不及格\n"); 
    	else
    		printf("输入的分数过低,请不要如此自卑。\n");
    		
    	return 0;
    }

互换两个数字

错误示范:

 #include <stdio.h>
    int main(void)
    {
    	int i = 3;
    	int j = 5;
    
    	//以下两行无法完成i、j的互换 
    	i = j;	//j = 5 => i = 5 
    	j = i;	//i = 5 => j = 5
    	printf("i = %d, j = %d\n", i, j);
    
    	return 0;
    }

输出结果:i = 5, j = 5

正确方法

#include <stdio.h>

int main(void)
{
	int i = 3;
	int j = 5;

	//以下方法正确实现i、j的互换 
	int k;
	k = i;
	i = j;
	j = k;	
	printf("i = %d, j = %d\n", i, j);

	return 0;
}

输出结果:i = 5, j = 3

对任意三个数字进行排序

#include <stdio.h>

int main(void)
{
	int a, b, c;
	int t;

	printf("请输入三个整数(中间以空格分隔):\n");
	scanf("%d %d %d", &a, &b, &c); 

	//编写代码进行排序
	if (a < b)
	{
		t = a;
		a = b;
		b = t;
 	} 
 
 	if (a < c)
 	{
 		t = a;
 		a = c;
 		c = t;
	}
 
	if (b < c)
	{
		t = b;
		b = c;
		c = t;
	}

	printf("%d > %d > %d\n", a, b, c);
	
	return 0;
}

看懂一个程序的三个步骤

梳理流程;

弄懂每个语句的功能;

不断试数。

(2)switch
——较少使用,后期深入学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值