【暑期每日一练】 day7

目录

选择题

(1)

解析:

(2)

解析:

(3)

解析:

(4)

解析:

(5)

解析:

编程题

题一

描述

输入描述:

输出描述:

示例

解析

代码实现

题二

描述

示例

提示

解析

代码实现

总结


选择题

(1)

1、以下对C语言函数的有关描述中,正确的有【多选】( )

A: 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体

B: 函数的实参和形参可以是相同的名字

C: 在main()中定义的变量都可以在其它被调函数中直接使用

D: 在C程序中,函数调用不能出现在表达式语句中
答案:A、B

解析:

主函数中定义的局部变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系,C错误;当函数有返回值时,可以出现在表达式中,D错误

(2)

2、在C语言中,以下正确的说法是( )

A: 实参和与其对应的形参各占用独立的存储单元

B: 实参和与其对应的形参共占用一个存储单元

C: 只有当实参和与其对应的形参同名时才共占用存储单元

D: 形参是虚拟的,不占用存储单元
答案:A

解析:

在调用函数的时候,真实传递给函数的是实参,函数定义部分函数名后的参数是形参。形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分别占用不同的内存空间,所以A正确,B错误,及时形参和实参的名字相同,也是占用不同的内存空间,所以B错误;函数如果不被调用时,函数的形参是形式上存在的,但是函数在被调用的时候,形参是要分配内存空间的,所以D错误。

(3)

3、在上下文及头文件均正常的情况下,下列代码的输出是( )(注: print 已经声明过)

int main()
{
    char str[] = "Geneius";
    print(str);
    return 0;
}
    print(char *s)
{
    if(*s)
    {
        print(++s);
        printf("%c", *s);
    }
}

A: suiene B: neius C: run-time error D: suieneG
答案: C

解析:

代码实现了递归倒序打印字符串的功能,但是++s使得s的值发生了变化,回不到'G'的位置上,故而没有打印'G'

(4)

4、对于函数 void f(int x); ,下面调用正确的是( )

A: int y=f(9); B: f(9); C: f(f(9)); D: x=f();

答案:B

解析:

函数f是没有返回值的,不能给int类型变量赋值,故A错误,同时需要一个整型参数,C中f(9)不能作为f的参数,也是错的,D选项没有传参,也不能接收返回值也是错误的。

(5)

5、给定 fun 函数如下,那么 fun(10) 的输出结果是( )

int fun(int x)
{
    return (x==1) ? 1 : (x + fun(x-1));
}

A: 0 B: 10 C: 55 D: 3628800

答案:C

解析:

代码是一个递归函数,计算x+(x-1)+(x-2)+...+2+1即等差数列的和

编程题

题一

描述

Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。

Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。

数据范围:每组输入的字符串长度满足 1≤�≤1000 1≤n≤1000

输入描述:

一行,一个字符串,字符串中的每个字符表示一张Lily使用的图片。

输出描述:

Lily的所有图片按照从小到大的顺序输出

示例

解析

这道题考察的其实就是字符排序,每个 ascii 字符在内存都有一个对应的 ascii 值,通过内存中数据的存储进行排序就行。

冒泡排序:相邻数据之间进行比较交换,将较大或较小的数据向后推到数组末尾,然后开始下一轮次大数据的冒泡过程

代码实现

#include <stdio.h>
int main()
{
	char str[1024] = { 0 };
	while (gets(str)) {
		int len = strlen(str);
		for (int i = 0; i < len; i++) {
			for (int j = 1; j < len - i; j++) {
				if (str[j] < str[j - 1]) {
					char ch = str[j - 1];
					str[j - 1] = str[j];
					str[j] = ch;
				}
			}
		}
		printf("%s\n", str);
	} 
	return 0;
}

题二

描述

给你一个整数数组 nums ,请计算数组的 中心下标 。

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。

示例

提示

解析

从数组的0下标处开始向后逐下标统计,计算当前下标左边之和,和右边之和,进行判断,相等则为中心下标,如果数组循环结束都没有找到中心下标,则返回-1,表示没有中心下标

代码实现

int pivotIndex(int* nums, int numsSize) {
	int i, j;
	for (i = 0; i < numsSize; i++) {//从假设中心点为0开始进行统计判断
		int l_sum = 0, r_sum = 0;//初始化左边之和和右边之和为0
		for (j = 0; j < numsSize; j++) 
		{
			if (j < i) l_sum += nums[j]; //小于i坐标的都是左边的数字
			else if (j > i) r_sum += nums[j];//大于i坐标的都是右边的数字
		} if
			(l_sum == r_sum) {//如果两遍相等则i就是中心坐标
			return i;
		}
	} 
	return - 1;
}

总结

关于今日练习讲解到这儿,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。

相关推荐
爱吃生蚝的于勒2 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~6 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
binishuaio12 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE14 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻18 分钟前
WPF中的依赖属性
开发语言·wpf
洋24026 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙28 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点29 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder1 小时前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春1 小时前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt