嵌入式软件开发 day5(输入输出,流程控制)

man手册看什么

包含头文件

函数传参

函数返回值

DECRIPTION(函数说明)

CONFORMING——遵循哪些标准(C89 C99——移植性好)

BUGS

RETURN(返回值)

一、输入输出

在这里插入图片描述

在这里插入图片描述

1.printf

用法printf("format",var...); format:%[修饰符]格式符

返回值:成功打印字符个数

示例

int main()
{
	int i = 1234;
	float f = 3.333;
	char ch = 'x';
	double d = 6.666;
	int ret;

	ret = printf("Hello World!\n");
	printf("RET:%d\n",ret);

	printf("%d %.1f %c %.2lf %s\n",i,f,ch,d,"hello");
	
	printf("---i = %2d---\n",i);
	printf("%.3s\n","1234567890");

	printf("Hello!\n");
	
	//exit(0);
}

2.scanf

用法scanf("format",&var...); format:%[修饰符]格式符

返回值:成功被输入赋值的对象个数

示例

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i = 4;
	float f = 3.333;
	char ch = 'a';
	double d = 6.666;
	int ret;

//	printf("%d\n",ch + i);


	ret = scanf("%d%f%c",&i,&f,&ch);
//	printf("%d--%f--%d\n",i,f,ch);
	printf("RET : %d\n",ret);

	exit(0);
}

3.getchar

描述:从标准输入 stdin 获取一个字符(一个无符号字符),这等同于 getc 带有 stdin 作为参数。

声明

int getchar(void)

返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

4.putchar

描述:把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中

声明

int putchar(int char)

返回值:该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。

示例

#include <stdio.h>
#include <stdlib.h>


int main()
{
	int ch;

	ch = getchar();
	
	putchar(ch);

	exit(0);
}

5.puts

描述:把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中

返回值:如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0),如果发生错误则返回 EOF。

6.gets

描述:从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

返回值:如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。

示例

#include <stdio.h>
#include <stdlib.h>


int main()
{
	char str[5];
	
	gets(str);
	puts(str);

	exit(0);
}

程序忌讳

  1. 数组越界
  2. 野指针——指针已经不知道指到哪了,还在使用这个指针

二、程序流程结构

最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足,有选择的执行相应功能
  • 循环结构:依据条件是否满足,循环多次执行某段代码

1.选择结构

1)if语句

作用:执行满足条件的语句

if语句的三种形式

  • 单行格式if语句

  • 多行格式if语句

  • 多条件的if语句

  1. 单行格式if语句:if(条件){ 条件满足执行的语句 }
  2. 多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };
  3. 多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断

注意

  1. if条件表达式后不要加分号
  2. 一句语句可以省略大括号 {},多句语句必须要加大括号 {}
  3. if else 语句中 else 只会匹配到与其最近的if

示例

#include <stdio.h>
#include <stdlib.h>

/*
if( exp )
{
	;
	;
}

if(exp)
{

}
else	// exp == 0
{

}

*/

int main()
{

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

	if(a == b)
	{
		if(b == c)
			printf("a == b == c\n");
	}	
	else
		printf("a != b\n");

/*
	int a = 8,b = 9,c = 0;

	if(a > b && b <= 0)
		c = 100;

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

	if(a++ >= b && !b-- || c != 0)
		printf("1\n");
	else
		printf("2\n");
*/

	exit(0);
}

2)switch语句

作用:执行多条件分支语句

语法:

switch(exp)
{
	case 常整形1:     		//3 25  'a'  '\n' 
		;
		;
		break;
	case 常整形2:
        ;
        ;
        break;	
	...
	default:
		break;
}

注意1:switch语句中表达式类型只能是整型或者字符型

注意2:case里如果没有break,那么程序会一直向下执行

注意3:break语句只会跳出所在层的switch

总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

2.循环结构

1)while循环语句

作用:满足循环条件,执行循环语句

语法:while(循环条件){ 循环语句 }

解释:只要循环条件的结果为真,就执行循环语句

示例:

int main()
{
	int i = 1,sum = 0;
	while (i <= 100)
	{
		sum += i;
		i++;
	}
    
	printf("sum = %d\n",sum);

	exit(0);
}

注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环

2)do…while循环语句

作用: 满足循环条件,执行循环语句

语法: do{ 循环语句 } while(循环条件);

注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件

示例:

int main() 
{

	int i = 1,sum = 0;
	do
	{
		sum += i;
		i++;

	} while (i <= 10);
	printf("sum = %d\n",sum);
    
	exit(0);
}

总结:与while循环区别在于,do…while先执行一次循环语句,再判断循环条件

3)for循环语句

作用: 满足循环条件,执行循环语句

语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }

示例:

int main()
{
    int i = 1,sum = 0;
    
	for(   ; i <= 100; i++)
	{
		sum += i;
	}
	printf("sum = %d\n",sum);
	exit(0);
}

注意:for循环中的表达式,要用分号进行分隔

总结:while , do…while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用

4)嵌套循环

作用: 在循环体中再嵌套一层循环,解决一些实际问题

例如我们想在屏幕中打印如下图片,就需要利用嵌套循环

示例:

int main() 
{
	int i,j;
	//外层循环执行1次,内层循环执行1轮
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("x");
		}
		printf("\n");
	}
	exit(0);
}

3.跳转语句

1)break语句

作用: 用于跳出选择结构或者循环结构

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句

示例:

int main() 
{
	//在循环语句中用break
	for (int i = 0; i < 10; i++)
	{
		if (i == 5)
		{
			break; //跳出循环语句
		}
		printf("i");
	}

	exit(0);
}

示例3:

int main()
{
	//在嵌套循环语句中使用break,退出内层循环
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (j == 5)
			{
				break;
			}
			printf("x");
		}
		printf("\n");
	}

	exit(0);
}

2)continue语句

作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

示例:

int main()
{

	int i = 4,j = 10;


	while(i < j)
	{
		printf("AA%d\n",i);
		if(i % 3 == 0)
		{
			i++;
			continue;
		}	
		printf("BB%d\n\n",i);
		i++;
	}

	printf("CC\n");

	exit(0);
}

注意:continue并没有使整个循环终止,而break会跳出循环

3)goto语句

作用:可以无条件跳转语句

语法: goto 标记;

解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

示例:

int main()
{

	int i = 1,sum = 0;


loop:
	sum += i;
	i++;
	if(i <= 100)
		goto loop;
    
	printf("sum = %d\n",sum);
	exit(0);
}

注意:在程序中不建议使用goto语句,以免造成程序流程混乱

随堂练习

1.if-else练习

练习一

实现级别判断(score)

我的代码

#include <stdio.h>

int main()
{
	float score;

	printf("请输入您的成绩:\n");
	if(scanf("%f",&score) != 1)
			return 1;

	if(score > 100 || score < 0)
	{
		printf("成绩输入有误\n");
	}
	else if(90 <= score && score <= 100)
	{
		printf("优秀!!!!\n");
	}
	else if(80 <= score && score <90)
	{
		printf("良好!!!\n");
	}
	else if(70 <= score && score <80)
	{
		printf("中等!!\n");
	}
	else if(60 <= score && score < 70)
	{
		printf("及格!\n");
	}
	else
	{
		printf("不及格\n");
	}
	return 0;
}

演示

在这里插入图片描述

练习二

闰年(leap year)的计算,判断是否为闰年的条件:能被4整除但不能被100整除或者能被400整除。

我的代码

#include <stdio.h>

int main()
{
	int year;
	printf("请输入年份:\n");
	if(scanf("%d",&year) != 1)
			return 1;
	
	if(year%4 == 0 && year%100 != 0 || year%400 == 0)
	{
			printf("是闰年\n");
	}
	else
	{
			printf("不是闰年\n");
	}
}

演示

在这里插入图片描述

老师的代码

#include <stdio.h>
#include <stdlib.h>

void leapyear()
{
	int year;

	scanf("%d",&year);

	if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		printf("%d is a leap year.\n",year);

}

void score()
{
	int s;

	scanf("%d",&s);

	if(s > 100 || s < 0)
	{
		printf("Input error.\n");
		return ;
	}

	// [0,100]
	
	if(s >= 90)
		printf("A\n");
	else	// s < 90
	{
		if(s >= 80)
			printf("B\n");
		else
		{
			if(s >= 70)
				printf("C\n");
			else
			{
				if(s >= 60)
					printf("D\n");
				else
					printf("E\n");
			}
		}

	}	

	/*
	if(s <= 100 && s >= 90)
		printf("A\n");
	if(s < 90 && s >= 80)
		printf("B\n");
	if(s < 80 && s >= 70)
		printf("C\n");
	if(s < 70 && s >= 60)
		printf("D\n");
	if(s < 60)
		printf("E\n");
	*/
}


int main()
{

//	leapyear();
	score();

	exit(0);
}

2.switch部分练习

练习一

根据输入的字母进行以该字母为开关的动物信息的输出

老师的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int ch;
	
	ch = getchar();

	switch(ch)
	{
		case 'a':
		case 'A':
			printf("Ant:a small insect which lives in group.\n");
			break;
		case 'b':
		case 'B':
			printf("Bee:a small flying insect which dangerous.\n");
			break;
		case 'c':
		case 'C':
			printf("Cobra:a type of snake which very dangerous.\n");
			break;
		case 'd':
		case 'D':
			printf("Donkey:a lovely animal which has long ears and shourt legs.\n");
			break;
		default:
			printf("Input Error.\n");
			break;
	}

	exit(0);
}

练习二

完成分数分等级

我的代码

#include <stdio.h>

int main()
{
	float score;
	int t;
	printf("请输入您的成绩:\n");
	if(scanf("%f",&score) != 1)
			return 1;
	t = score/10;
	
	if(score > 100 || score <0)
	{
		printf("成绩输入有误\n");
	}
	else
	{
	
		switch(t)
		{
				case 10:
						printf("满分!!!!!\n");
						break;
				case 9:
						printf("优秀!!!!\n");
						break;
				case 8:
						printf("良好!!!!\n");
						break;
				case 7:
						printf("中等!!\n");
						break;
				case 6:
						printf("及格!\n");
						break;
				default:
						printf("不及格\n");
						break;
		}
	}
	return 0;
}

老师的代码

#include <stdio.h>
#include <stdlib.h>


int main()
{

	int s;

	scanf("%d",&s);

	if(s > 100 || s < 0)
	{
		printf("Input error.\n");
		return 1;
	}

	switch(s/10)
	{
		case 10:
		case 9:
			printf("A\n");
			break;
		case 8:
			printf("B\n");
			break;
		case 7:
			printf("C\n");
			break;
		case 6:
			printf("D\n");
			break;
		default:
			printf("E\n");
			break;
	}

	exit(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值