C语言:选择+编程(每日一练Day7)

55f0f6eb5fef45b8b31fc561c321cc87.png

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:图片整理

思路一:

思路二: 

题二:寻找数组的中心下标 

思路一:

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!


选择题:

题一:

1、以下对C语言函数的有关描述中,正确的有【多选】( )
A: 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体
B: 函数的实参和形参可以是相同的名字

C: 在main()中定义的变量都可以在其它被调函数中直接使用
D: 在C程序中,函数调用不能出现在表达式语句中

答案解析:

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

题二:

2、在C语言中,以下正确的说法是( )
A: 实参和与其对应的形参各占用独立的存储单元
B: 实参和与其对应的形参共占用一个存储单元
C: 只有当实参和与其对应的形参同名时才共占用存储单元
D: 形参是虚拟的,不占用存储单元

答案解析:

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

题三:

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

答案解析:

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

题四:

4、对于函数 void f(int x); ,下面调用正确的是( )
A: int y=f(9);    B: f(9);    C: f(f(9));    D: x=f();

答案解析:

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

题五:

5、给定 fun 函数如下,那么 fun(10) 的输出结果是( )
int fun(int x)
{
        return (x==1) ? 1 : (x + fun(x-1));
}

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

答案解析:

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

编程题:

题一:图片整理

图片整理_牛客题霸_牛客网 (nowcoder.com)

fe80b2bd5c0d4e85b2c8d3bf5aeda420.png

示例:

   输入:

   Ihave1nose2hands10fingers

   输出:

   0112Iaadeeefghhinnnorsssv

思路一:

冒泡排序:

        第一步:定义数组arr,执行输入数组元素的scanf(),计算数组元素的个数;

        第二步:冒泡排序,整个数组(遍历n-1次,每次与n-1-i个元素比较,前大于后,交换位置);

        第三步:打印arr数组。

#include <stdio.h>
#include <string.h>int main()
{//方法一//定义足够大小数组char arr[1000] = { 0 };//是否有数组输入while (scanf("%s", &arr) != EOF){//计算字符串长度int n = strlen(arr+0);int i = 0;int j = 0;//冒泡排序for (i = 0; i < n-1; i++){for (j = 0; j < n - 1 - i; j++){if (strcmp(arr + j, arr + j+1) > 0){char tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}//打印printf("%s\n", arr);}return 0;
}

思路二: 

qsort排序:

        第一步:定义数组arr,执行输入数组元素的scanf(),计算数组元素的个数;

        第二步:写一个让数组升序排列的my_cmp()函数,让arr直接升序排序;

        第三步:打印arr数组。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//比较函数
int my_cmp(const void* p1, const void* p2)
{return strcmp((char*)p1, (char*)p2);
}
int main()
{//方法二char arr[1000] = { 0 };scanf("%s", &arr);//计算长度int n = strlen(arr);//升序排序qsort(arr, n, sizeof(arr[0]), my_cmp);printf("%s\n", arr);return 0;
}


题二:寻找数组的中心下标 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

7dd4402af2a14bc1bb9221ffabcaedb6.png

示例:输入:nums = [1, 7, 3, 6, 5, 6]
   输出:3
   解释:中心下标是 3 。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。

思路一:

前缀和:

        第一步:将数组所有元素求和sum

        第二步:遍历数组: 当左右和相同时为2*sumleft加上中间数等于数组和,此时的中间数下标为“ i ”否则就一直加到数组结束。结束“ -1 ”。

int pivotIndex(int* nums, int numsSize)
{int sum = 0;int i = 0;//将数组的元素求和for(i = 0;i < numsSize;i++){sum += nums[i];}//记录当前左侧的和int sumleft = 0;for(i = 0;i < numsSize;i++){//当左右和相同时为2*sumleft加上中间数等于数组和//此时的中间数下标为iif(2 * sumleft + nums[i] == sum){return i;}sumleft += nums[i];}return -1;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              c90de1178d0345148d109f22b2169307.jpeg

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/80844.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtC++ 设计模式(四)——策略模式

策略模式 序言理解源码 序言 还是参考的菜鸟教程&#xff0c;会C的还是看C的方式来得舒服。 . 理解 使用符合UML规范的便于理解和回忆&#xff0c;接口其实就是普通的基类 . 源码 strategy.h /// 策略 class Strategy { public:virtual ~Strategy();/*** brief 计算* p…

GMS基本模块TIN、Solids、Modflow2000/2005、MT3DMS、MODPATH。及其在地下水流动、溶质运移、粒子追踪方面的应用

解决地下水数值模拟技术实施过程中遇到的困难&#xff0c;从而提出切实可行的环境保护措施&#xff0c;达到有效保护环境、防治地下水污染&#xff0c;推动经济社会可持续发展的目的。 &#xff08;1&#xff09;水文地质学&#xff0c;地下水数值模拟基础理论&#xff1b;&am…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…

PostgreSQL基本操作总结

安装按PostgreSQL数据库后&#xff0c;会默认创建用户postgres和数据库postgres&#xff0c;这个用户是超级用户&#xff0c;权限最高&#xff0c;可以创建其他用户和权限&#xff0c;在实际开发过程中&#xff0c;会新创建用户和业务数据库&#xff0c;本文主要介绍用户权限和…

动态规划入门之二维数组的动态规划(过河卒)

P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 过河卒&#xff0c;首先科普一下象棋里面的马的跳跃一步的规则吧&#xff08;这题真够坑人的&#xff0c;连个规则都不给出&#xff0c;害得我第一次交就全wa&#xff09;。一张图解释 大家看所…

“解放 Arweave“优惠:4EVERLAND的无缝上传教程

为了进一步展示 Arweave 的能力&#xff0c;4EVERLAND 骄傲地推出了“解放 Arweave”活动。我们认识到 Arweave 在数据完整性、抗审查性以及长期保存方面的无与伦比的优势&#xff0c;因此我们与这个去中心化的存储巨头建立了强大的集成。 克服了过去与加密货币支付逻辑相关的…

Redis过期数据的删除策略

1 介绍 Redis 是一个kv型数据库&#xff0c;我们所有的数据都是存放在内存中的&#xff0c;但是内存是有大小限制的&#xff0c;不可能无限制的增量。 想要把不需要的数据清理掉&#xff0c;一种办法是直接删除&#xff0c;这个咱们前面章节有详细说过&#xff1b;另外一种就是…

ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况

有时我们在家办公&#xff0c;需要控制实验室的笔记本&#xff0c;因此好用的远程控制软件会让我们的工作事半功倍&#xff01; 常用的远程控制软件有ToDesk&#xff0c;向日葵&#xff0c;以及TeamViewer&#xff0c;但是为感觉ToDesk更流畅一些&#xff0c;所以这里介绍一下…

Python - 面向对象的属性,类方法,静态方法,实例方法的区别及用法详解

一. 前言 在Python的面向对象编程中&#xff0c;类属性和实例属性是两个不同的概念&#xff0c;它们在作用域和使用方式上有所区别。在Python中的面向对象编程中有三种方法&#xff1a;实例方法、类方法和静态方法&#xff0c;它们之间的差异主要体现在参数传递和调用方式上。…

Windows运行Spark所需的Hadoop安装

解压文件 复制bin目录 找到winutils-master文件hadoop对应的bin目录版本 全部复制替换掉hadoop的bin目录文件 复制hadoop.dll文件 将bin目录下的hadoop.dll文件复制到System32目录下 配置环境变量 修改hadoop-env.cmd配置文件 注意jdk装在非C盘则完全没问题&#xff0c;如果装在…

23种设计模式攻关

&#x1f44d;一、创建者模式 &#x1f516;1.1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 在某些情况下&#xff0c;我们需要确保一个类只能有一个实例&#xff0c;比如数据库连接…

leetcode 674. 最长连续递增序列

2023.8.24 与最长递增子序列 类似&#xff0c;不同的是&#xff0c; 本题要求连续序列&#xff0c;所以不需要第二层遍历比较之前所有的元素了&#xff0c;只需要比较上一个元素i-1。 dp[i]的含义为&#xff1a;以nums[i]元素为结尾的序列的最长递增子序列。 注意这里是以i为结…