暑假第七天之每天一些题系列

暑假第七天之每天一些题系列

一、选择题

  • 设 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵小赵福星高照~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值