C语言阶段性测试题

【前言】:本部分是C语言初阶学完阶段性测试题,最后一道编程题有一定的难度,需要多去揣摩,代码敲多了,自然就感觉不难了,加油,铁汁们!!!

一、选择题

1.下面程序执行后,输出的结果为()

#include<stdio.h>
int cnt = 0;
int fib(int n)
{cnt++;if (n == 0)return 1;else if (n == 1)return 2;elsereturn fib(n - 1) + fib(n - 2);
}
void main()
{fib(8);printf("%d", cnt);
}

【解答】:67

函数递归的问题:进入一次fib函数,cnt++,要算cnt的值也就是算进入了多少次fib函数,那就列树状图:直到列到1和0就不会再进入fib函数为止,然后列出来的每一个数都会进入函数使cnt++,算一共列有多少数,对于的也就是cnt的值:1+2+4+8+16+22+12+2=67


2.以下程序k的最终值是()

    int i = 10;int j = 20;int k = 3;k *= i + j;

【解答】:90

本题考察的是操作符优先级的问题

赋值操作符(*=,/=,+=,-=)的优先级很低,所以肯定是i+j先算,然后再*k,也就是k*=30,也就是90


3.判断正误:C语言本身没有输入输出语句

【解答】:正确

C语言是给定了语法,输入输出是库函数提供的

C语言约定了一些函数,规定了函数的名字,功能,参数,返回类型

这些规定的函数是由编译器的厂商实现的,msvc,gcc,clang的厂商在实现编译器的时候提供实现的,这些函数是放在标准库中,称为库函数


 4.若有定义语句int year=1009,*p=&year,以下不能使变量year中的值增至1010的语句是()

A.*p+=1                         B.(*p)++                                C.++(*p)                  D.*p++

【解答】:D

其实上面的代码就相当于int year=1009;int *p=&year

A.*(解引用操作符)的优先级高于+=(赋值操作符),p解引用指向year,然后year++

B.有括号先算*p,然后year++

C.也有括号,只要对(*p)也就是year++就可以

D.*p++,++优先级高于*,++先执行,p++后置++,值先为p,然后p++,这里就是地址++,而不是地址指向的元素++


5.char a;int b;float c;double d;

则表达式a*b+d-c值的类型为

【解答】:double类型

首先a*b(char*int),char类型整形提升变成int类型,int *int类型结果是int类型

然后int+double类型,这个时候int类型就算术转化为double类型,double+double类型结果是double类型

最后double-float类型,这个时候float类型就算术转化为double类型,double-double类型结果是double类型

【注意】:这个过程发生了整形提升和算术转化,是先变类型再进行运算

二、编程题

1.求最小公倍数

【题目】:

 【题解1】:常规做法

最小公倍数一定是大于等于输入的两个数的,所以可以从两个数的较大数开始加,看加到哪个数可以同时将两个数整除

#include <stdio.h>
int main() 
{int a=0;int b=0;//输入scanf("%d %d",&a,&b);//求较大值int m=a>b?a:b;//从较大者开始求最小公倍数while(1){if(m%a==0&&m%b==0)break;m++;}//输出printf("%d\n",m);return 0;
}

【题解2】:最小公倍数=输入的两个数的积 / 最大公约数(辗转相除法)

#include <stdio.h>
int main() 
{int a=0;int b=0;int c=0;//输入scanf("%d %d",&a,&b);int n=a*b;//求最大公约数while(c=a%b){a=b;b=c;}//输出printf("%d\n",n/b);return 0;
}

【题解3】:效率最高

假设m是a和b的最小公倍数,那么m既能被a整除,又能被b整除,m/a=i,m/b=j,那么我们就看a*i能否将b整除,eg:求3和5的最小公倍数,首先看3*1能否整除5,再看3*2是否能整除5,以此类推,直到找到3*i可以整除5,那么这时3*i就是最小公倍数

#include <stdio.h>
int main() 
{int a=0;int b=0;//输入scanf("%d %d",&a,&b);int i=1;while(a*i%b){i++;}//输出printf("%d\n",a*i);return 0;
}

【注意】:我们最好把int类型都写成long long类型,因为a和b最大可以到达100000,他们相乘是很大的,long long类型的输入输出都是%lld

2.字符串的倒置 

【题目】:

【题解】:

思路:逆序整个字符串,再逆序每个单词(或者先逆序每个单词,再逆序整个字符串)

#include <stdio.h>
#include<string.h>
void reverse(char* left, char* right) 
{while (left < right) {char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
int main() 
{char arr[101] = {0};gets(arr);int len=strlen(arr);//1.逆序整个字符串reverse(arr,arr+len-1);//2.逆序每个单词char*cur=arr;while(*cur!='\0'){char*start=cur;while(*cur!=' '&&*cur!='\0'){cur++;}char*end=cur-1;reverse(start,end);if(*cur==' ')cur++;}printf("%s\n",arr);return 0;
}

【注意事项】:

(1)输入字符串:不能正常用scanf函数输入,因为它一遇到空格就停止读取了,gets(arr)

要用也得这样写scanf("%[^\n]s",arr);意思就是scanf函数直到读到\n才停止

也可以用getchar:

int ch=0;

int i=0;

while(   (ch=getchar(  ) )!='\n')

{
    arr[i++]=ch;
}

(2)逆序整个字符串:思路是将左右字符一个一个交换,直到 left>right停止交换

还有就是reverse自定义函数传参的时候最后字符的地址怎么传:首字符地址+字符串的长度-1

 (3)逆序输出:首先定义一个cur指针指向字符串的最前面,然后开始遍历,以一个单词为一个循环,当指针指向的不是空格或者\0时cur继续向下遍历,直到遇到了,就倒置这个单词,我们就用start和end指针分别来指向一个单词的首尾,然后单词也可以当字符串倒置

当一个单词结束,就需要进入下一个单词,这个时候就要将cur++,但是如果这是最后一个单词,就不需要cur++,因为再++就会造成数组越界

这次内容就到此啦,有什么问题欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 !

 

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

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

相关文章

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板12

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

使用 OpenCV 和 Python 卡通化图像-附源码

介绍 在本文中,我们将构建一个有趣的应用程序,它将卡通化提供给它的图像。为了构建这个卡通化器应用程序,我们将使用 python 和 OpenCV。这是机器学习令人兴奋的应用之一。在构建此应用程序时,我们还将了解如何使用 easygui、Tkinter 等库。在这里,您必须选择图像,然后应…

20天学rust(一)和rust say hi

关注我&#xff0c;学习Rust不迷路 工欲善其事&#xff0c;必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具&#xff0c;然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具&#xff0c;专门用于 rust 版本的管理&#xff0c;网…

Modbus TCP转Profinet网关modbus tcp转以太网

大家好&#xff0c;今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先&#xff0c;我们需要安装捷米特JM-TCP-PN的GSD文件&#xff0c;并根据现场设备情况配置modbusTCP地址。然后&#xff0c;在博图中添加该GSD文件&#x…

Dockerfile构建MySQL镜像(yum方式)

目录 Dockerfile构建MySQL镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 Dockerfile构建MySQL镜像 1、建立工作目录 [roothuyang1 ~]# mkdir mysql [roothuyang1 ~]# cd mysql/ 2、编写Dockerfile文件 [roothuyang1 mysql]# vim Dockerfile 配置如…

SegNeXt:重新思考用于语义分割的卷积注意力

&原文信息 原文题目&#xff1a;《SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation》 原文引用&#xff1a;Guo M H, Lu C Z, Hou Q, et al. Segnext: Rethinking convolutional attention design for semantic segmentation[J]. Advance…

把网站改为HTTPS访问方法

HTTPS是使用TSL/SSL加密超文本传输协议的扩展&#xff0c;用于跨网络的安全传输。网站更改为HTTPS&#xff0c;直接在网站形象上可以得到提升&#xff0c;更重要的是您的网站肯定会在排名和提升方面受益。机密信息的交换需要受到保护&#xff0c;以阻止未经授权的访问。 加密&a…

组件化、跨平台…未来前端框架将如何演进?

前端框架在过去几年间取得了显著的进步和演进。前端框架也将继续不断地演化&#xff0c;以满足日益复杂的业务需求和用户体验要求。从全球web发展角度看&#xff0c;框架竞争已经从第一阶段的前端框架之争&#xff08;比如Vue、React、Angular等&#xff09;&#xff0c;过渡到…

Flink 系列四 Flink 运行时架构

目录 前言 介绍 1、程序结构 1.1、Source 1.2、Transformation 1.3、Sink 1.4、数据流 2、Flink运行时组件 2.1、Dispatcher 2.2、JobManager 2.3、TaskManager 2.4、ResourceManager 3、任务提交流程 3.1、standalone 模式 3.2、yarn 模式 4、任务调度原理 4…

精选5个AI绘画工具,灵感与创意迸发!

伴随着AI技术的发展&#xff0c;AI绘画工具也走进了人们的视线&#xff0c;今天本文将为大家推荐5个最近火爆的AI绘画神器&#xff0c;一起来看看吧&#xff01; 1、即时灵感 即时灵感是一个国产的AI绘画神器&#xff0c;非常受国内设计师的欢迎。它支持设计师使用中文描述词…

OpenSource - 分布式重试平台

文章目录 概述重试方案对比设计思想流量管理平台预览场景应用强通知场景发送MQ场景回调场景异步场景 概述 在当前广泛流行的分布式系统中&#xff0c;确保系统数据的一致性和正确性是一项重大挑战。为了解决分布式事务问题&#xff0c;涌现了许多理论和业务实践&#xff0c;其…

【Python】数据可视化利器PyCharts在测试工作中的应用

目录 PyCharts 简介 PyCharts 的安装 缺陷统计 测试用例执行情况 使用JavaScript情况 缺陷趋势分析 将两张图放在一个组合里&#xff08;grid&#xff09; 将两张图重叠成一张图&#xff08;overlap&#xff09; 将多张图组合在一个page 中&#xff08;page&#xff0…

马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能

&#x1f989; AI新闻 &#x1f680; AI拍照小程序妙鸭相机上线商业工作站并邀请摄影师进行内测 摘要&#xff1a;AI拍照小程序妙鸭相机将上线面向商业端的工作站&#xff0c;并邀请摄影师进行模板设计的内测。妙鸭相机希望为行业提供更多生态产品&#xff0c;扩大行业规模&a…

探究Spring事务:了解失效场景及应对策略

在现代软件开发中&#xff0c;数据的一致性和完整性是至关重要的。为了保证这些特性&#xff0c;Spring框架提供了强大的事务管理机制&#xff0c;让开发者能够更加自信地处理数据库操作。然而&#xff0c;事务并非银弹&#xff0c;存在一些失效的情景&#xff0c;本文将带您深…

坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第2期培训

中国邮政储蓄银行金融科技前沿技术发展与应用场景第2期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…

Flink之JDBC Sink

这里介绍一下Flink Sink中jdbc sink的使用方法,以mysql为例,这里代码分为两种,事务和非事务 非事务代码 import org.apache.flink.connector.jdbc.JdbcConnectionOptions; import org.apache.flink.connector.jdbc.JdbcExecutionOptions; import org.apache.flink.connector.…

wireshark简单使用(一)

前两天为同事处理交换机故障&#xff0c;接触到wireshark使用&#xff0c;意识到这个工具对于工程师来说&#xff0c;查询报文还是必须的&#xff0c;了解基本的使用。 于是接触到一些视频&#xff0c;开始自学。 第一步 查询本机IP地址 cmd---ipconfig 查看本机IP地址和网关…

【CI/CD】图解六种分支管理模型

图解六种分支管理模型 任何一家公司乃至于一个小组织&#xff0c;只要有写代码的地方&#xff0c;就有代码版本管理的主场&#xff0c;初入职场&#xff0c;总会遇到第一个拦路虎 git 管理流程&#xff0c;但是每一个企业似乎都有自己的 git 管理流程&#xff0c;倘若我们能掌握…

学习购药系统源码:从前端到后端的技术探索

本文将带领读者探索购药系统源码&#xff0c;从前端到后端逐步深入&#xff0c;了解其核心功能和实现方式。我们将使用常见的Web技术&#xff0c;包括HTML、CSS、JavaScript、以及Python的Django框架&#xff0c;展示购药系统的技术奥秘。 前端技术探索 HTML结构搭建 购药系…

京东开源的、高效的企业级表格可视化搭建解决方案:DripTable

DripTable 是京东零售推出的一款用于企业级中后台的动态列表解决方案&#xff0c;项目基于 React 和 JSON Schema&#xff0c;旨在通过简单配置快速生成页面动态列表来降低列表开发难度、提高工作效率。 DripTable 目前包含以下子项目&#xff1a;drip-table、drip-table-gene…