2.格式化输入输出(根据王道c++训练营整理自用)

2.1 输入/输出模型

2.2 printf函数

2.2.1 转换说明

                                                printf函数的转换指定符(完整解释)

2.2.2 转义序列

2.3 scanf函数

示例:

2.3.1  scanf的函数工作原理

2.3.2  格式串中的普通字符

2.3.2  格式串中的普通字符

课后作业

简答题

1.printf的作用是什么?

printf函数的作用:显示格式串的内容,并用后面表达式的值替换格式串种的转换说明。printf函数用于将格式化的数据输出到stdout缓冲区中。

2.printf 函数的格式串中可以包含普通字符和转换说明,printf对这两者的处理有何不同?转换说明的作用是什么?

printf会将普通字符原样输出到目标设备。转换说明是以'%'开始的,指示printf如何取得相应的变量,并将其格式化后输出。转换说明决定了如何解释相应的变量(例如作为整数、浮点数、字符等),以及如何格式化(例如宽度、精度、填充字符等),可以对输出格式进行精确的控制。

3.scanf的作用是什么?

scanf函数是C语言中的一个标准输入函数,用于从标准输入设备(stdin)读取格式化输入。它可以读取stdin中不同类型的输入数据,并根据格式字符串指定的方式,将读入的数据存储到程序指定的变量中。

4.scanf 函数的格式串中可以包含普通字符、空白字符和转换说明,scanf对这三者的处理有何不同?

普通字符: 对于scanf,格式字符串中的普通字符(不包括空白字符和'%')必须与输入流中的字符严格匹配才能继续执行,否则输入过程中断。

空白字符: 在scanf格式串中,空白字符(如空格、制表符和换行符)可以匹配输入中的零个或多个空白字符。

转换说明: 类似于printf,转换说明告诉scanf如何读取输入并将其转换为相应类型的数据。转换说明还包括如何处理输入字段的宽度、读取特定类型的数据等信息。

5.写一个程序,实现分数相加。用户以分子/分母的形式输入分数,程序打印相加后的结果(化为最简分数)。如:

输入:

Enter first fraction: 5/6    

Enter second fraction: 3/4

输出:

The sum is 19/12

(注:利用欧几里得算法求最大公约数,进行分数简化

// 利用欧几里得算法求a和b的最大公约数
int gcd(int a, int b) {
	// 首先确保a>=b
	if (a < b) {
		int tmp = a;
		a = b;
		b = tmp;
	}
	// 当b不为0时,计算a除以b的余数r,将b的值赋给a,r的值赋给b
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}

	return a;
}

/*
* 递归求解欧几里得算法
* 递归的出口: b=0时,a的值就是最大公约数
* 递归体:只要b不是0,把b赋值成a,把a%b赋值给b,再次调用函数自身
*/
int gcd_recursion(int a, int b) {
	// 递归的出口
	if (b == 0) {
		return a;
	}
	// 递归体
	return gcd_recursion(b, a % b);
}

int main(void) {
	int num1, denom1;	// 第一个分子分母
	int num2, denom2;	// 第二个分子分母

	printf("请输入第一个分数(分子/分母): ");
	scanf("%d/%d", &num1, &denom1);
	printf("请输入第二个分数(分子/分母): ");
	scanf("%d/%d", &num2, &denom2);

	int result_num = num1 * denom2 + num2 * denom1;
	int result_denom = denom1 * denom2;

	// 欧几里得算法求最大公约数
	int result_gcd = gcd(result_num, result_denom);

	// 下面进行结果分数的化简,特殊情况是最大公约数等于结果分母,此时分数可以化简成一个整数
	if (result_gcd == result_denom) {
		printf("两个分数的和是一个整数,即:%d\n", (result_num / result_denom));
	}
	else {
		// 结果是一个分数
		printf("两个分数的和是一个分数,即:%d/%d\n", (result_num / result_gcd), (result_denom / result_gcd));
	}

	return 0;
}

(根据王道训练营和参考《C语言程序设计、现代方法》整理)

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值