【C语言】每日一题(半月斩)——day3

目录

一,选择题

[1.已知函数的原型是: int fun(char b[10], int *a);](#1.已知函数的原型是: int fun(char b[10], int *a);)

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

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

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

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

二,编程题

1.记负均正

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

解析:

本体考察的是函数的调用和传参;

数组名:

数组名就是地址,通常来说:数组名是数组首元素的地址

但是有2个例外:

  1. sizeof(数组名),这里的数组名表示的整个数组,计算的是整个数组的大小,单位是字节。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

除此之外,所有遇到的数组名都是数组首元素的地址。

注:数组传参的本质是指针,传递的是数组首元素地址

但是形参也可以是数组接收,也可以指针接收。

正确答案:A

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

解析:

考察的是对const的理解

const修饰指针

修饰指针有两种方法

counst int* p ;

int * counst p;

  • const 放在的左边

限制的指针指向的内容,也就是说: 不能通过指针来修改指针指向的内容

但是指针变量是可以修改的,也就是指针指向其他变量的

  • const 放在的右边

限制的是指针变量本身,指针变量不能再指向其他对象

但是可以通过指针变量来修改指向的内容

正确答案:ABCD

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

复制代码
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: * * *

解析:

本题考察的是,转义字符和全局变量

转义字符:

'\t' 代表为水平制表符 ,简单来说就是在键盘上按了TAB的效果,也可以理解为缩进符

全局变量

作用域为整个程序生命周期与主函数相同,只有程序结束,它才会销毁

在进入prt()后出来时 i 被修改成了8,然后进行主函数的条件调整表达式; i++;i变成了9;

不满足主函数的条件判断表达式,推出循环

正确答案:A

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

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

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

解析:

考察:运算符优先级,操作符(复合赋值符)的理解

查看操作符优先级表可以得知,'*'乘法的优先级高于赋值操作符;

所以先算后面的 a-=a*a -> a=a-a*a; a=-6;

再算前面的 a+=a-> a=a+a; a=-12;

正确答案:D

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

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

解析:

考察:循环条件判断

C语言中规定:0为假,非0为真;

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

正确答案:D

二,编程题

1.记负均正

首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。

0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均值为0。

记负均正------牛客网

复制代码
int main()
{
	int n = 0;
	int arr[1000];
	scanf("%d", &n);
	int i = 0;
	//往数组输入元素
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//输出负数
	int num = 0;	//记录负数个数
	//正整数的平均值
	double pos = 0;	//记录正整数个数
	double temp = 0;
	double sum = 0;	//平均数
	int zero = 0;  //记录0的个数
	for (i = 0; i < n; i++)
	{
		if (arr[i] < 0)
		{
			num++;
		}
		else if (arr[i] == 0)
			zero++;
		else
		{
			temp = temp + arr[i];
			pos++;
		}
	}
	if (zero == n)
	{
		printf("%d 0.0\n",num);
	}
	else {
    {
        sum = temp / pos;
	printf("%d %.1lf",num, sum);
    }
    }
	return 0;
}

2.旋转数组的最小数字

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

旋转数组的最小值------牛客网

复制代码
static int min = 10000;
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
    // write code here
    int i = 0;
    for(i = 0; i < rotateArrayLen;i++)
    {
        if(rotateArray[i]< min)
        {
            min = rotateArray[i];
        }
    }
    return min;
}
相关推荐
万粉变现经纪人12 分钟前
如何解决 pip install -r requirements.txt 无效可编辑项 ‘e .‘(-e 拼写错误)问题
开发语言·python·r语言·beautifulsoup·pandas·pip·scipy
前端 贾公子22 分钟前
《Vuejs设计与实现》第 5 章(非原始值响应式方案)下 Set 和 Map 的响应式代理
数据结构·算法
say_fall28 分钟前
精通C语言(2.结构体)(内含彩虹)
c语言·开发语言·windows
潇凝子潇28 分钟前
在使用Nacos作为注册中心和配置中心时,如何解决服务发现延迟或配置更新不及时的问题
开发语言·python·服务发现
快乐是一切34 分钟前
PDF底层格式之水印解析与去除机制分析
前端·数据结构
递归不收敛1 小时前
吴恩达机器学习课程(PyTorch 适配)学习笔记:3.4 强化学习
pytorch·学习·机器学习
StarPrayers.1 小时前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
纵横八荒1 小时前
Java基础加强13-集合框架、Stream流
java·开发语言
MHJ_1 小时前
Multi-Metric Integration(多指标集成)
数据结构
能不能别报错1 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes