NOIP 普及组初赛 · NOIP 2016 普及组初赛试题 第 27 题

完善程序 · 答案 cin.get()num=c-'0'num=c-48c>='0'&&c<='9'c>=48&&c<=57num=num*10+c-'0'num=num*10+c-48num=-numreturn -num · 考点:基本数据类型、输入输出、位运算、分支结构、循环结构

← 整套速查表 NOIP 普及组初赛 全部真题

题目

完善程序: (读入整数) 请完善下面的程序,使得程序能够读入两个 int 范围内的整数, 并将这两个整数分别输出,每行一个。(第一、五空 $2.5$ 分,其余 $3$ 分) 输入的整数之间和前后只会出现空格或者回车。输入数据保证合法。 例如: 输入:

123  -789  

输出:

123  
-789  

程序:

#include <iostream>
using namespace std;

int readint(){
	int num = 0;	      // 存储读取到的整数
	int negative = 0;    // 负数标识
	char c;	              // 存储当前读取到的字符
	c = cin.get();
	while ((c < '0' || c > '9') && c != '-')
		c = ①;
	if (c == '-')
		negative = 1;
	else
		②;
	c = cin.get();
	while (③){
		④;
		c = cin.get();
	}
	if (negative == 1)
		⑤;
	return num;
}
int main()
{
	int a, b;
	a = readint();
	b = readint();
	cout << a << endl
		 << b << endl;
	return 0;
}
答案:cin.get()num=c-'0'num=c-48c>='0'&&c<='9'c>=48&&c<=57num=num*10+c-'0'num=num*10+c-48num=-numreturn -num

考点

基本数据类型输入输出位运算 讲解 →位运算 真题汇总 →分支结构循环结构

解题思维

看到字符转数字 → 必减'0';看到负号 → 只改num不return

常见错误

易错:第二空直接赋c(错,需c-'0');第五空写return -num(错,函数已有return num,只能改num)

详细解析(节选)

考点:字符转数字|负号处理

程序在做什么

函数逐字符读入整数:先跳过非法字符,识别负号,累加数字串,最后处理负号。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断