暑假第七天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第七天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第七天之每天一些题系列
一、选择题
-
设 m 和 n 都是 int 类型,那么以下 for 循环语句
for(m=0,n=-1; n=0; m++,n++) n++;
A. 循环体一次也不执行
B. 循环体执行一次
C. 是无限循环
D. 有限次循环
E. 循环结束判断条件不合法
F. 运行出错
答案解析:
循环进行的条件注意是n=0;这是将n赋给了0,那循环的条件永远为假,故循环一次都进不去
-
如下程序的输出结果是什么
#include<stdio.h> #include<stdlib.h> int a = 1; void test() { int a = 2; a += 1; } int main() { test(); printf("%d\\n",a); return 0; }
A. 1 B. 2 C. 3 D. 4
答案解析:
test函数里面的a是局部变量,与外面全局变量a是不一样的,test函数在调用结束后就销毁了,所以打印的是全局变量a,即为1。
- 下面有关 for 循环的正确描述是
A. for循环只能用于循环次数已经确定的情况
B. for循环是先执行循环体语句,后判定表达式
C. 在for循环中,不能用break语句跳出循环体
D. for循环体语句中,可以包含多条语句,但要用花括号括起来
答案解析:
for循环可以用于循环次数已经确定的情况,for循环是先判定表达式,后执行循环体语句,break可以跳出循环体
- 执行代码 y = 10;x = y++; 后变量 x 和 y 的值是
A. x=10,y=10 B. x=11,y=11 C. x=10,y=11 D. x=11,y=10
答案解析:
x=y++,y是后置++,先使用后加加,故x=10,y=11
-
如下语句通过算术运算和逻辑运算之后 i 和 j 的结果是
#include <stdio.h> int main() { int i=0; int j=0; if((++i>0)||(++j>0)) { printf("i=%d;j=%d\\n", i, j); } }
A. i=0;j=0 B. i=1;j=1 C. i=0;j=1 D. i=1;j=0
答案解析:
首先前置++是先++后使用,其次需要注意的是||运算符,在前一个表达式为真时,后面的表达式就不会运算了,这里需要格外注意,故答案是i=1,j=0。
二、填空题
-
若有宏定义: #define MOD(x,y) x%y , 则执行以下语句后的输出结果是
int a = 13,b = 94; printf("%d\\n",MOD(b,a+4));
答案解析:
#define定义的宏在预处理阶段完成替换,MOD(b,a+4)就会被替换为:b%a+4,b=94,a=13,得结果为7
- char a; int b; float c;double d; 则表达式 a*b+d-c 值的类型为
答案解析:
这道题考的是算术转化,char和int进行运算得到得为int,一个int类型值和int运算也是int类型,int类型和double类型运算得到double类型。
-
执行以下程序段后,x的值是
int x=0; switch(++x) { case 0: ++x; case 1: ++x; case 2: ++x; }
答案解析:
首先是前置++,故是先++后使用,switch的参数为1,则走向case 1,case 1执行++x,x变为2,然后后面并没有break,它会继续往下走,走到case 2,再++x,x最终变为3
三、算法题
题目描述:
有一个数组 a , 编写函数,求数组中前K个最小的数字
代码如下:
#include<stdio.h>
int FindMin(int* nums, int k, int sz)
{
int i = 0;
int min = *nums;
if (k > sz)//k大于总大小的话,返回前sz个最小的数
{
for (i = 0; i < sz; i++)
{
if ((*nums) < min)
{
min = *nums;
}
nums++;
}
}
else
{
for (i = 0; i < k; i++)
{
if ((*nums) < min)
{
min = *nums;
}
nums++;
}
}
return min;
}
int main()
{
int arr[] = { 2,1,-4,3,0,5,-3,-7,8,-9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = FindMin(arr, 11, sz);
printf("%d\\n", ret);
return 0;
}
k大于总大小的话,返回前sz个最小的数,引入一个min变量记录最小值,遍历前k个数,遇到比min小的,就更新min
以上是关于暑假第七天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章