C语言作业-Day3

写作能力有限,请多多包含( $ _ $ )
如有错误理解,请指出文中有误的地方。(可以私信)
 一、选择题

1、已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( )

A: fun(c,&d);   B: fun(c,d);   C: fun(&c,&d);   D: fun(&c,d);

分析:fun 的原型是int fun(char b[10], int &a),有两个参数。

第一个参数是一维数组,其中 char c[10] ,c 是个数组,数组名 c 就是个地址,因此直接传入 c。
第二个参数整形指针参数,而 d 是 整型,要使用取址符 & 得到 d 的地址后再传入,因此传给 fun 函数的实参是 &d。最终,fun 函数调用的形式是 f(c,&d)

答案:A

2、请问下列表达式哪些会被编译器禁止【多选】( )

A: *c = 32;   B: *d = 43   C: e=&a   D: f=0x321f

int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;

如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量;*c和*d不能变。

如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量;e和f不能变。 

答案:ABCD

3、以下程序的输出结果为( )

A: ***   B: *** *** *** ***   C: *** ***   D: * * *

#include <stdio.h>
int i;
void prt()
{
for (i = 5; i < 8; i++)
printf("%c", '*');
printf("\t");  //两个*号间有一个Tab键的间隔
}
int main()
{
for (i = 5; i <= 8; i++)
prt();
return 0

因为i是全局变量在函数,void prt()中执行完调用的函数后i变为8,所以main函数中的for语句
for(i=5;i<=8;i++) prt();实际只执行了一次

答案:A

4、下面代码段的输出是( )

A: -6   B: 12   C: 0   D: -12

int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}

①先算 a-=a*a  等价于 a=a-a*a =3-3*3 =-6,此时a的值为-6

②再算 a+=-6 等价于 a=a+(-6) =(-6)+(-6) =-12

答案:D

5、下列不能实现死循环的是( )

A: while(1){}   B: for(;1;){}   C: do{}while(1);   D: for(;0;){}

①循环语句中:只有条件判断为真时才进行循环,ABC中1为真,D中0为假

②for(表达式1;表达式2;表达式3)

表达式1:初始化语句。用于初始化循环变量;

表达式2:条件判断语句,用于判断循环终止条件;表达式2值为真,循环,为假,不循环;

表达式3:调整部分,用于循环条件的调整。

答案:D

二、编程题 
 1、记负均正_牛客题霸_牛客网 (nowcoder.com)
#include<stdio.h>
int main() {
    int n = 0;
    while ((scanf("%d", &n) == 1))
    {
        int count1 = 0;
        int count2 = 0;
        int tmp = 0;
        float sum = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &tmp);
            if (tmp < 0) {
                count1++;//统计负数的个数
            }
            else if (tmp > 0) {
                sum += tmp;//正数求和
                count2++;//统计正数的个数
            }
        }
        printf("%d %.1f\n", count1, sum / count2);

    }
    return 0;
}

、旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)

 

int minNumberInRotateArray(int* rotateArray, int rotateArrayLen )
{
    int i=0;
    for(i=1;i<rotateArrayLen;i++)
    {
        if(rotateArray[i-1]>rotateArray[i])//有序数组
            return rotateArray[i];
    }
    return rotateArray[0];
}
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @param numsLen int nums数组长度
 * @return int整型
 */
//将旋转数组分成两部分,将前部分放到后一部分的后面
//那么最小值就是新数组后部分的第一个值
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
    int left = 0, right = rotateArrayLen - 1;
    while (left < right) {
        int mid = (left + right) / 2; //取中间值
        if (rotateArray[mid] > rotateArray[right])
            left = mid +1; //中间值大于最后一个值说明中间值不属于后部分,
                            //而属于前部分,那么最小值就在后部分,搜索中间值的右边
        else if (rotateArray[mid] < rotateArray[right])
            right = mid;//中间值小于最后一个值说明中间值属于后部分,
                         //那么最小值就在中间值及其前面的数中找
        else            //如果中间值等于最后一个值,那么不知道它是属于前部分还是后部分
            right --;   //缩短数组
    }
    return rotateArray[left];
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值