C语言暑假刷题冲刺篇——day3

简介: 在大家学完初阶C语言后,有很多知识点是比较模糊的,我们应该多刷题,这样才能巩固我们所学知识。所以我开了一个新专栏C语言每日一刷,每一篇都包含5道选择题,2道编程题,每一道题后面都会有详细的解析。这个系列每日一更,大家来看看吧!

一、选择题

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);


【答案】A


【解析】


函数的原型是: int fun(char b[10], int&a);

变量c,d的定义是: char c[1];int d;

D函数第一个形参 char b[10],需要传入的是数组的首地址。数组char c[10] 的数组名 c 是数组的首元素地址,可以传入 C。

@函数第二个形参int &a为引用类型作为形参,d 是 整型变量,可以直接传入,因此传给 fun 函数的实参是 d。最终,fun 函数调用的形式是 f(c,d)。因此选A。


补充:


如果函数原型为int fun(char b[10],int*a

即此时第二个形参为指针类型,则需传入变量d的地址,此处就应该选B


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

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

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


【答案】ABCD


【解析】


这里的考点为对const掌握的是否清楚


1.const如果在指针变量的“ * ”的左边(即 const int * a 和 int const * a的意义是相同的,作用是等价的)


表达的意思是:对指针变量a 解引用的值是保持不变的


只有a里面存放的地址改变了,解引用出来的值才会变化


 2. const如果在指针变量的“ * ”的右边【即 int * const a】 表达的意思是: a里面存放的地址是保持不变


只有主动对 *a 赋值才能改变这个值,但a里面的地址是一直保持不


对于A和B:const在“ * ”的左面,则 const 就是用来修饰指针所指向的变量,即指针指向为常量,则此时的*c和*d不变


对于C和D:如果 const 位于“ * ”的右侧,则 const 就是修饰指针本身,即指针本身是常量


则e和f的地址不能被改变


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

#include <stdio.h>
int i;
void prt()
{
  for (i = 5; i < 8; i++)
    printf("%c", '*');
  printf("\t");
} 
int main()
{
  for (i = 5; i <= 8; i++)
    prt();  
  return 0;
}

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


【答案】A


【解析】


注意:这里出现转义字符 \t ,而 \t 代表为水平制表符,简单来说就是在键盘上按了TAB的效果,也可以理解为缩进符


全局变量创建在静态区中,作用域为整个程序且生命周期与主函数相同,只有程序结束,它才会销毁


全局变量 i ,在 main() 中修改为 5 ,第一次在 prt() 中执行循环输出三次 '*' , i 被修改为 8 ,回到 main() 中第二次调用 prt() 时,i<8 为假,循环结束没输出,执行一次 print("\t") ,再次回到主函数后 i++ 变为 9 , i<=8 为假,循环结束 ;


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

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

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


【答案】D


【解析】


本题可以写成:表达式a+a-=a*a中*的优先级最高,其次是-=,+的优先级最低,因此先求a*a,所以原表达式可写成a+a-=9,再算a-=9,原表达式可写为a=a-9=-6,最后算a+a,因为此时a=-6,所以a+a=-6+(-6)=-12,故选择D选项。


拓展:操作符优先级图表


90dc3514c1bc9d0b97430507dbe3e607.jpeg


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


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


【答案】D


【解析】


只有条件为真时才进行循环, ABC 中 1 为真, D 中 0 为假,故选D。


二、编程题

1.OJ链接 【牛客网题号: HJ97 记负均正】【难度:简单】


首先输入要输入的整数个数 n ,然后输入 n 个整数。输出为 n 个整数中负数的个数,和所有正整数的平均值,

结果保留一位小数。

注意: 0 即不是正整数,也不是负数,不计入计算; 本题有多组输入用例。

输入描述:首先输入一个正整数 n ,然后输入 n 个整数。

输出描述:输出负数的个数,和所有正整数的平均值。

#include<stdio.h>                                              
int main() {
    int n = 0;
    while (~scanf("%d ", &n))
    {
        int arr[2001] = { 0 };
        int count1 = 0;
        int count2 = 0;
        int sum = 0;
        float ave = 0;
        int i = 0;
        for (i = 0; i < n; i++)
        {
            scanf("%d ", &arr[i]);
            if (arr[i] < 0)
            {
                count1++;
            }
            else if (arr[i] > 0)
            {
                count2++;
                sum += arr[i];
            }
        }
        printf("%d ", count1);
         if (count2)
        {
            ave = sum / count2;
            printf("%.1lf\n", ave);
        }
        else
        {
            printf("0.0\n");
        }
    }
    return 0;
}


2.OJ链接 【牛客网题号:JZ11 旋转数组的最小数字】【难度:简单】


有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。


数据范围:1≤ n ≤ 10000,数组中任意元素的值: 0 ≤ val ≤ 10000


示例:

输入:[3,4,5,1,2]

返回值:1

int minNumberInRotateArray(int* nums, int numsLen) {
  int left = 0;
  int right = numsLen - 1;
  while (left < right)
  {
    int mid = (left + right) / 2;
    if (nums[mid] < nums[right])
      right = mid;
    else if (nums[mid] > nums[right])
      left = mid + 1;
    else
      right--;
  }
  return nums[right];
}

好了,今天的每日一刷就到这里结束了,感谢大家的观看!

d52ce744a5b345408dd596d71f65e762[1].png

相关文章
|
6月前
|
安全 C语言
【C语言刷题】字符串逆序
【C语言刷题】字符串逆序
57 0
|
6月前
|
存储 C语言
【C语言刷题】操作符系列
【C语言刷题】操作符系列
44 0
|
6月前
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
89 1
|
6月前
|
机器学习/深度学习 C语言
【C语言刷题】函数递归系列
【C语言刷题】函数递归系列
32 1
|
7月前
|
编译器 C语言
C语言刷题(1)
C语言刷题(1)
52 0
|
5天前
|
C语言
C语言刷题1
C语言刷题1
|
2月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
29 0
|
2月前
|
C语言
错误的集合(初阶C语言刷题)
错误的集合(初阶C语言刷题)
|
3月前
|
C语言
C语言刷题训练【第11天】
C语言刷题训练【第11天】
|
3月前
|
C语言
C语言刷题训练【第十天】
C语言刷题训练【第十天】

相关实验场景

更多