Bootstrap

C++赛前练习题

【题目一】程序改错题--闰年判断

输入一个年份,判断这一年是否是闰年,如果是输出 1,否则输出 0。

输入格式

输入一个正整数 n,表示年份。

输出格式

输出一行。如果输入的年份是闰年则输出 1,否则输出 0。

样例输入

1926

样例输出

0

/***********FOUND***********/ 后是有问题的代码,请修改.

【分析】

在以上代码中,条件表达式存在一个错误。

cout<<(n/4==0&&n%100!=0)?1:0;

问题在于条件表达式中的判断条件有误。这段代码的目的是判断输入的整数n是否满足以下两个条件:

  1. n除以4的余数为0
  2. n除以100的余数不为0

然而,这个条件表达式的判断逻辑是错误的。

正确的判断条件应该是:

(n%4==0 && n%100!=0) || n%400==0

这个条件表达式的意思是:如果n除以4的余数为0且除以100的余数不为0或者n除以400的余数为0,则条件成立。

cout<<((n%4==0 && n%100!=0) || n%400==0)?1:0;

完整代码如下: 

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    cin>>n;
    /***********FOUND***********/
    cout<<((n%4==0 && n%100!=0) || n%400==0)?1:0;
    return 0;
}

【题目二】程序改错题--求和

下面的程序时计算并输出1到用户输入的 n 之间所有整数的和。

/***********FOUND***********/ 后是有问题的代码

【分析】

在以上代码中,有一个问题存在于for循环的语法部分:

for(int i = 1; i <= n; i++);
{
    sum += i;
}

问题在于for循环的结束括号后面多了一个分号。这个分号导致循环体为空,且循环体被提前结束,实际上循环体内的语句都不会执行。

完整代码如下: 

#include<iostream>
using namespace std;
int main() {
    int n, sum = 0;
    cin >> n;
    /**********FOUND**********/ 
    for(int i = 1; i <= n; i++)
    {
        sum += i;
    }
    cout << "1到" << n << "的所有整数的和为:" << sum;
    return 0;
}

【题目三】程序改错题--计算字符串的长度

修改下面的程序,使用户输入的一个字符串,可以计算并输出该字符串的长度。

/***********FOUND***********/ 后是有问题的代码

【分析】

在上述的代码中,获取字符串长度的代码存在一个问题。

cout << "字符串的长度为:" << str.size;

在这行代码中,使用了str.size来获取字符串的长度,但是忘记了调用函数的括号

修正的代码如下所示:

cout << "字符串的长度为:" << str.size();

在这个修正后的代码中,我们在str.size后面添加了括号(),以调用字符串的size()函数来获取字符串的长度

完整代码如下: 

#include<iostream>
#include<string>
using namespace std;
int main() {
    string str;
    cin >> str;
    /**********FOUND**********/
    cout << "字符串的长度为:" << str.size();
    return 0;
}

【题目四】程序填空题--打印信息

下面这个程序将读取用户的输入并打印出相应的消息,但是其中有一部分被遗漏了。请补全:

【分析】

在横线处填写输入和输出的占位符。

完整代码如下: 

#include <iostream>
#
;