2 simple C++ programs

write in advance

这两天考试,遇到了两道简单的送分题,与文件I/O 有关。只需要简单的文件操作就可以解决问题。可惜忘记了与文件相关的有关操作,悔不当初。此处水一篇文章,记录该次考试的两道试题:

第一题:重定向输入

#include<iostream>
#include<fstream>
const int Max = 2000;
int main()
{
	char temp[Max];
	std::ofstream outfile;
	outfile.open("mytest.txt");

    	do
	{
		std::cin.getline(temp, Max);
		outfile << temp << std::endl;

	}while(strcmp(temp,"quit"));

    // version 2, both ok
	//while (std::cin.getline(temp, Max))
	//{
	//	if (!strcmp(temp, "quit"))
	//	{
	//		outfile << "quit";
	//		break;
	//	}
	//	outfile << temp << std::endl;
	//}        

	outfile.close();
	return 0;
}

该题需要将console 的输入输出到文件中,在console输入 quit 后,将 quit 输入文件,并结束接收输入。程序结束。做题时想到的是重定向, redirection,直接将console 的 input 输入到 file中,并对输入的内容进行条件判断, 当输入 quit 后,程序结束。 

可惜 redirection 的概念我了如指掌,但操作忘得干净。此处采用另一种方法,先将一行的输入暂存到一个数组中,再在循环中将 数组 temp 的内容输出。注意条件判断需放置在 while loop 中的前半部分,否则不符合程序期待。数组的长度需要足够大,这样可以很方便地省去输入字符过长,超出限制的问题。——当然,这并不是标准做法,标准做法就是 redirection, 我后面再补充。

在这个程序中,我并没有对可能存在的异常情况进行判断。在简单的题目中,当然可以只考虑正确的代码。但在实际开发中,最好加上对文件读取成功与否等异常情况的检测,尤其是当文件工程浩大时。那会节约定位错误的时间,有利于改进。

第二题  所谓的水仙花数

#include<iostream>
bool check(int );
int calcu(int);

int main()
{
	int lower, upper;
    std::cin >> lower >> upper;
	for (int i = lower; i < uppper + 1; i++)
	{
		if (check(i))
			std::cout << i << " ";
	}
	std::cout << "that is all,done!\n";
	return 0;
}

bool check(int num)
{
	int one = num % 10;
	int ten = num / 10 % 10;
	int hundred = num / 100 % 10;
	if (num == calcu(one) + calcu(ten) + calcu(hundred))
		return true;
	return false;
}

int calcu(int num)
{
	return num * num * num;
}

水仙花数是一个十进制三位数,其数字本身等于其各位的三次幂相加。主要考察的还是取余操作。这里有必要提出,因为计算机擅长高速执行执行重复指令,取余在很多程序中都发挥着重要的作用。它是很重要的运算符。

summary

仅以此篇,警醒自己,送分的题得拿满。不要一昧地前冲学习class and OOP, 但把基础的语法知识忘记了。当然还有记录试题,省得日后忘记。

日后可能会上传自己做的其他更需要脑子更有意思的题目,挖个坑。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值