1 条题解
-
0
课堂练习
- 【NOIP2014】若有如下程序段,其中
s、a、b、c均已定义为整型变量,且a、c均已赋值,。
s = a; for (b = 1; b <= c; b++) s += 1;则与上述程序段功能等价的赋值语句是( )。
A.
s = a + bB.
s = a + cC.
s = s + cD.
s = b + c【答案】B
【分析】
s初值是a,循环体执行c次,每次加1,因此s = a + c。- 【NOIP2014】要求按以下程序计算
s = 1 + 1/2 + 1/3 + ··· + 1/10。
#include<iostream> using namespace std; int main() { int n; float s; s = 1.0; for (n = 10; n > 1; n--) s = s + 1 / n; cout << s << endl; return 0; }程序运行后输出结果错误,导致错误结果的程序行是( )。
A.
s = 1.0;B.
for(n = 10; n > 1; n--)C.
s = s + 1 / n;D.
cout << s << endl;【答案】C
【分析】将不同类型进行算术运算时,会进行类型转换。 - 级别从高到底:
double > float > long long > int > char > bool; - 级别从高到底:无符号数 > 有符号数; 由于n是整数,因此表达式中的1/n会处理为整数除法,而这里我们需要的结果应该为实数。要使结果正确,需要使用实数除法,可以改为1.0/n或1/(float)n等。- 【NOIP2014】有以下程序:
#include<iostream> using namespace std; int main() { int s, a, n; s = 0; a = 1; cin >> n; do { s += 1; a -= 2; } while (a != n); cout << s << endl; return 0; }若要使程序的输出值为2,则应该从键盘给
n输入的值是( )。
A. -1
B. -3
C. -5
D. 0
【答案】B
【分析】要使得最终s = 2,需要执行两次do..while循环体,n的值应该为 -3。 4. 【NOIP2016】有以下程序:#include<iostream> using namespace std; int main() { int k = 4, n = 0; while (n < k) { n++; if (n % 3 != 0) continue; k--; } cout << k << "," << n << endl; return 0; }程序运行后的输出结果是( )。
A. 2,2
B. 2,3
C. 3,2
D. 3,3
【答案】D
【分析】continue语句的作用是跳过当前循环体未执行的语句(即本题的k--;),而继续执行下一次循环。当n < 3时,if条件始终成立,k不会发生任何变化,因此只有在n = 3时才会执行k--使得k = 3,并终止循环。 5. 【NOIP2018】为了统计一个非负整数的二进制形式中1的个数,代码如下:int CountBit(int x) { int ret = 0; while (x) { ret++; // 此处填空 } return ret; }则空格内要填入的语句是( )。
A.x >>= 1
B.x &= x - 1
C.x |= x >> 1
D.x <<= 1
【答案】B
【分析】考察位运算知识。观察程序可知ret存的是x二进制1的个数,带入一些不同的x值到程序中,会发现x &= x - 1的作用是使x最低位的1置零,所以符合要求。 6. 【NOIP2013】下列程序中,正确计算1,2,.,100这100个自然数之和sum(初始值为0)的是( )。// A选项 i = 1; do { sum += i; i++; } while (i <= 100); // B选项 i = 1; do { sum += i; i++; } while (i > 100); // C选项 i = 1; while (i < 100) { sum += i; i++; } // D选项 i = 1; while (i >= 100) { sum += i; i++; }【答案】A
【分析】可以正确的计算1,2,3,.,100之和,而B和D循环执行条件是i > 100,显然在i初始等于1的情况下,循环不会被执行。C只能求1至99的和。 7. 【NOIP2014】若有变量int a,float x,y,且a = 7,x = 2.5,y = 4.7,则表达式x + a % 3 * (int)(x + y) % 2 / 4的值大约是( )。
A. 2.500000
B. 2.750000
C. 3.500000
D. 0.000000
【答案】A
【分析】考察运算符号的优先级和运算顺序。运算级优先级为()大于%,*,/大于+,-,同一级别的从左往右计算,所以(int)(x + y)=7,a % 3 * (int)(x + y) % 2 / 4 = 1 * 7 % 2 / 4 = 0,所以最后答案为x,即2.500000。 8. 【NOIP2014】设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )。
A.x = (x * 100)+0.5 / 100.0;
B.x = (x * 100 + 0.5) / 100.0;
C.x = (int)(x * 100 + 0.5) / 100.0;
D.x = (x / 100 + 0.5) * 100.0;
【答案】C
【分析】通过将float型强制转换为int型可实现截取整数的操作,而在截取之前加0.5,就实现了四舍五入的功能。本题也可以使用排除法,通过代入具体的数值进行验证。假设x = 1.116,A,B,C,D的计算结果分别为111.605,1.121,1.12,51.116。 9. 【NOIP2014】以下程序段实现了找第二小元素的算法。输入是n个不等的数构成数组S,输出S中第二小的数SecondMin。在最坏情况下,该算法需要做( )次比较。if (S[1] < S[2]) { FirstMin = S[1]; SecondMin = S[2]; } else { FirstMin = S[2]; SecondMin = S[1]; } for (i = 3; i <= n; i++) if (S[i] < SecondMin) if (S[i] < FirstMin) { SecondMin = FirstMin; FirstMin = S[i]; } else { SecondMin = S[i]; }A.
2n
B.n - 1
C. `2n不定项选择题
- 【NOIP2013】下列程序中,正确计算1,2,.,100这100个自然数之和sum(初始值为0) 的是( )。
i=1; A. for(i=1;i<=100;i++) sum+=i; i=1; B. while (1>100){ i++; sum+=i; } i=1; C. do{ sum+=i; i++; }while(i<=100); i=1; D. do{ sum+=i; i++; }while(i>100);【答案】AC
【分析】A和C可以正确的计算1到100的和,而B和D循环执行的条件是i > 100,显然在i初始等于1的情况下,循环不会被执行。 - 【NOIP2014】若有如下程序段,其中
- 1
信息
- ID
- 16
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 0
- 上传者