【C语言】初阶完结练习题

  •  🎈个人主页:库库的里昂
  •  🎐CSDN新晋作者
  •  🎉欢迎 👍点赞✍评论⭐收藏
  •  ✨收录专栏:C语言初阶
  •  ✨其他专栏:代码小游戏
  •  🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

【前言】

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

A.41                  B.67

C.109                D.177

【解析】:D        

传进去一个数字8,只要n>=2,cnt就++一次,进入下面的return fib(n - 1) + fib(n - 2)会产生两种结果,分别是7和6,再继续递归时会7又会产生6和5,6产生5和4,一次下去,直到所有递归都结束。.

2.在上下文和头文件均正常的情况下,以下程序的输出结果是()

int x = 1;
do{printf("%2d", x++);} while (x--);

A.1                  B.无任何输出

C.2                  D.陷入死循环

【解析】D

初始化x=1,进入do...while语句,输出x++,x=2出来到while语句中执行x--(先用x=2判断是否为真,再自减),因为x=2为真,所以进行进入do语句,此时x=1,跟刚开始一样一直循环,陷入死循环。

3.下面的代码中,执行之后i和j的值是什么()

int i = 1;
int j;
j = i++;

A.1,1                B.1,2

C.2 ,1               D.2,2

【解析】C

初始化i=1,将i++(先赋值再自增)赋给j,所以j=1,i=2。

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

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

A.90                B.50

C.70                D.30

【解析】A

初始化i=10、j=20、k=3,而表达式k *= i + j等效于k = k * (i + j),所以k=3*(10+20)=90。

5.以下C程序的最终输出结果是()

#include<stdio.h>
#include<stdlib.h>int a = 1;
void test()
{int a = 2; a += 1;
}int main()
{test();printf("%d", a);return 0;
}

A.1               B.2

C.3               D.4

【解析】A

这里test()函数内a为局部变量,局部的a只能在test函数内使用,又初始化全局变量a=1,所以结果输出1。

6.下列描述中正确的是()

A:表示m>n为ture或者m<n为ture的表达式为m>n&&m<n

B:switch语句结构中必须有default语句

C:如果至少有一个操作数为ture,则包含“||”运算符的表达式ture

D:if语句结果中必须有else语句

【解析】C

A选项是m>n || m<n

B选项可以无default语句

D选项也可以为if和else if语句或者只有if语句

7.C语言规定,在一个源程序中,main函数的位置 ()

A:必须在最开始

B:必须在系统调用的库函数的后面

C:可以任意

D:必须在最后

【解析】C

C程序中main函数的位置任意

8.以下叙述不正确的是()

A:一个源程序可由一个或多个函数组成

B:一个源程序必须包含一个main函数

C:c程序的基本组成单位是函数

D:在c程序中,注释说明只能位于一条语句的后面

【解析】D

选项D注释可以随处良好的注释说明,一般建议是写在语句的上面。

9.以下叙述正确的是()

A:在c程序中,main函数必须位于程序的最前面

B:c程序的每行中只能写一条语句

C:C语言本身没有输入输出语句

D:在对一个c程序进行编译的过程中,可发现注释中的拼写错误

【解析】C

选项A中C程序中main函数的位置任意

选项B你可以写一个语句,也可以写多个语句。

选项D中C程序进行编译的过程中,是不可以发现注释中粗祥的拼写错误的。注释中的拼写错误只可能通过人工检查发现。

10.在上下文及头文件均正常的情况下,执行如下代码,c的值是()

int a = 0;
int c = 0;
do
{--c;a = a - 1;
}while (a > 0);

A.0               B.1

C.-1              D.死循环

【解析】C

初始化a=0、c=0,进入do...while循环,先计算c--得到c=-1,赋值a=a - 1得到a=-1,执行while语句中的a>0为假跳出循环,此时c=1。

11.假定x和y为double类型,则执行x=2;y=x+3/2;后y的值为()

A.3.500000             B.3

C.2.000000             D.3.000000

【解析】D

3/2是两个整数相处,得到的结果是1,x+3/2=3,又y为double类型,所以结果为3.000000

12.以下for循环执行的次数是()

for (x = 0, y = 0; (y = 123) && (x < 4); x++);

A.是无限循环            B.循环次数不定

C.4                            D.3

【解析】C

第一次循环:x=0、y=0进来,判断(y = 123) && (x < 4)为真,x自增1;

第二次循环:x=1、y=123进来,判断(y = 123) && (x < 4)为真,x自增1;

第三次循环:x=2、y=123进来,判断(y = 123) && (x < 4)为真,x自增1;

第四次循环:x=3、y=123进来,判断(y = 123) && (x < 4)为真,x自增1;

第五次循环:x=4、y=123进来,判断(y = 123) && (x < 4)为假跳出循环。

所以总共四次循环

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

A.p+=1;             B.(*p)++;

C.++(*p);           D.*p++ 

【解析】D

++的优先级比*高,所以D中p++先执行,p指向的地址改变了,所以year的大小没有变化。

14.选择表达式11|10的结果(本题数值均为十进制)()

A.11             B.10

C.8               D.2

【解析】A

11补码:1011

10补码:1010

               1011(11)

15.

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

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

A.float             B.int

C.char             D.double

【解析】D

a(char) * b(int) + d(double) - c(float)

根据整型提升,所以表达式变为:a(int) * b(int) + d(double) - c(float)

根据算术转换,所以表达式变为:a(double * b(double) + d(double) - c(double)

所以表达式结果为double类型

二、编程题

题目1:求最小公倍数,正整数a和正整数b的最小公倍数是指能被a和b整除的最小的正数值,设计一个算法,求a和b的最小公倍数

输入描述:输入两个整数a和b

输出描述:输出a和b 的最小公倍数

示例:

输入:5 7

输出:35

【解析一】

先找出a和b中的最大数赋值给max,然后用 if 判断最大数max是否能同时%a和b等于零那么它就是最小公倍数如果不行那最大数max++

代码示例:

#include<stdio.h>
int main()
{int a = 0, b = 0;scanf("%d %d", &a, &b);int m = a < b ? a : b;while (m){if (m % a == 0 && m % b == 0){printf("%d\n", m);break;}m++;}return 0;
}

运行结果:

【解析二】

先用辗转相除法求出最大公约数,然后a*b/最大公约数=最小公倍

代码示例:

#include<stdio.h>
int main()
{int a = 0, b = 0;scanf("%d %d", &a, &b);int n = a * b;int m = 0;while (m = a % b){a = b;b = m;}printf("%d\n", n / b);
}

 运行结果:

【解析三】

创建个 while 循环 if 判断 a * i % b == 0,看 a 乘于 i 得出的数看能不能被 b 整除如果可以那么它就是最小公倍数

 代码示例:

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

运行结果:

题目2:将一句话的单词进行倒置,标点不倒置。比如I like beijing.经过函数后变为beijing. like I

输入描述:

将一句话的单词倒置,标点不倒置。比如 I like Beijing.经过函数后变为 bejing .like i

输出描述:

每个测试输入包含1个测试用例,输入长度不超过100个单词

示例:

输入:I like beijing.

输出:beijing. like I

【解析】

第一步:字符串整体逆置,得到:.gnijieb ekil I

第二步:将字符串中每一个单词逆置,得到:beijing. like I

这里字符串操作的实现非常关键,故单独实现一个函数进行字符串的逆置,由于每个单词的长度不一,因此通过指针来实现字符串的逆置可以对代码进行简化

代码示例:

#include <stdio.h>
#include <string.h>
void ReverseString(char* left, char* right)//反转字符串
{while(left <= right){char tmp = *left;*left = *right;*right = tmp;left++; right--;}
}
int main()
{char str[100] = "0"; gets(str);int length = strlen(str);//将字符串整体翻转ReverseString(str, str + length - 1); char* start = str;//将字符串中的每个单词翻转 while(*start){char* end = start;while(*end != ' ' && *end)//寻找空格或‘\0’{end++;}ReverseString(start, end - 1);if(*end == ' '){start = end + 1;}else{start = end;}printf("%s",str); return 0;}
}

代码结果:

这片代码是输入字符串  需要注意的是最后要将最后一个字符补为'\0'  因为getchar()可以接收回车符 

 今天讲的C语言初阶完结练习题就到这里了,小伙伴们好好做哈~~

 

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

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

相关文章

Misc取证学习

文章目录 Misc取证学习磁盘取证工具veracryto挂载fat文件DiskGenius 磁盘取证例题[RCTF2019]disk 磁盘[](https://ciphersaw.me/ctf-wiki/misc/disk-memory/introduction/#_2)内存取证工具volatility 内存取证例题数字取证赛题0x01.从内存中获取到用户admin的密码并且破解密码 …

ffmpeg视频音频命令

视频音频合并 视频音频合并&#xff0c;以视频时间为主&#xff0c;音频短了循环 方法1&#xff1a;混音&#xff0c;视频权重0&#xff0c;volume调节音量&#xff0c;aloop无限循环&#xff0c;duration:first为第一个素材的长度 ffmpeg -i video.mp4 -i audio.mp3 -filter_…

P3754. [NOIP2002 提高组] 字串变换

本题思路 纯bfs&#xff0c;注意一个字符中有多个相同的可变字符即可。 代码 void solve() {string a,b; cin>>a>>b; // 读入起始串和结束串vector<pair<string,string>> mss; // 可能有一个字符串的多个变换规则&#xff0c;不能用map&#xff0c;…

如何搭建一个成功的家具小程序

家具行业近年来发展迅猛&#xff0c;越来越多的消费者开始选择在小程序商城上购买家具。因此&#xff0c;制作一款家具小程序商城成为了许多家具商家的必然选择。那么&#xff0c;如何制作一款个性化、功能齐全的家具小程序商城呢&#xff1f;下面将为大家介绍一种简单且高效的…

观察者模式(C++)

定义 定义对象间的一种一对多(变化)的依赖关系&#xff0c;以便当一个对象(Subject)的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并自动更新。 ——《设计模式》GoF 使用场景 一个对象&#xff08;目标对象&#xff09;的状态发生改变&#xff0c;所有的依赖对…

首页文章列表分页模板渲染(Go搭建qiucode.cn 之六)

笔者小站:秋码记录 距离上一篇已过去好久了,当然咯,秋码记录 也已换了本来的面貌,其中林林种种,不可道于外人乎!然而之所以会有第六篇,完全得益于那位订阅的粉丝,也是他唤起了我应该将Go搭建qiucode.cn写完,在此我由衷的感谢这位,且作为本专栏首位订阅者。 接上一篇,…

Pytorch Tutorial【Chapter 3. Simple Neural Network】

Pytorch Tutorial【Chapter 3. Simple Neural Network】 文章目录 Pytorch Tutorial【Chapter 3. Simple Neural Network】Chapter 3. Simple Neural Network3.1 Train Neural Network Procedure训练神经网络流程3.2 Build Neural Network Procedure 搭建神经网络3.3 Use Loss …

SpringBoot——使用@Value()注解获取yml字段为null

文章目录 使用Value注解获取yml字段当字段设为static时获取的为null 使用Value注解获取yml字段 在Spring Boot中&#xff0c;可以使用Value注解来读取和赋值YAML配置文件中的值到变量中。 如何读取YAML配置文件中的值并将其赋值给变量 示例代码: import org.springframework.…

【LeetCode】24.两两交换链表中的节点

题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a…

python项目各个文件夹的解释

一个大的 Python 项目通常会被组织成多个文件夹&#xff0c;每个文件夹都有特定的功能和用途。 以下是常见的文件夹和它们可能的用途&#xff1a; src 或 source&#xff1a; 这通常是项目的主要源代码目录。您会在这里找到实际执行功能的 Python 脚本或模块。tests 或 testin…

SQL-每日一题【1193. 每月交易 I】

题目 Table: Transactions 编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 1.题目要求我们查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数…

HTML <script> 标签

实例 在 HTML 页面中插入一段 JavaScript: <script type="text/javascript"> document.write("Hello World!") </script>(在本页底部可以找到更多实例) 定义和用法 <script> 标签用于定义客户端脚本,比如 JavaScript。 script …

实验笔记之——Windows下的Android环境开发搭建

好久一段时间没有进行Android开发了&#xff0c;最新在用的电脑也没有了Android studio了。为此&#xff0c;本博文记录一下最近重新搭建Android开发的过程。本博文仅为本人学习记录用&#xff08;**别看&#xff09; 目录 安装Android Studio以及JDK JDK Android Studiio …

Java并发系列之七:ConcurrentHashMap

回顾HashMap 既然说到HashMap了&#xff0c;那么我们就先来简单总结一下HashMap的重点。 1.基本结构 HashMap存储的是存在映射关系的键值对&#xff0c;存储在被称为哈希表(数组链表/红黑树)的数据结构中。通过计算key的hashCode值来确定键值对在数组中的位置&#xff0c;假…

【机器学习】西瓜书学习心得及课后习题参考答案—第5章神经网络

笔记心得 5.1神经元模型——这是神经网络中最基本的成分。 5.2感知机与多层网络——由简单的感知机循序渐进引出多层前馈神经网络。 5.3误差逆传播算法——BP算法&#xff0c;迄今最成功的神经网络学习算法。算法如下&#xff08;公式参考西瓜书&#xff09; 停止条件与缓解…

Laravel 框架路由参数.重定向.视图回退.当前路由.单行为 ②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

Golang 切片 常用方法

文章目录 移除指定位置的元素查找元素的位置查找最大最小的元素去重随机打乱排序二维排序sort.Sort 排序 下面的方法省略一些校验&#xff0c;如数组越界等&#xff0c;且都采用泛型(要求go版本 > 1.18) 移除指定位置的元素 package mainimport ("fmt" )func Del…

Redis压缩列表

区分一下 3.2之前 Redis中的List有两种编码格式 一个是LINKEDLIST 一个是ZIPLIST 这个ZIPLIST就是压缩列表 3.2之后来了一个QUICKLIST QUICKLIST是ZIPLIST和LINKEDLIST的结合体 也就是说Redis中没有ZIPLIST和LINKEDLIST了 然后在Redis5.0引入了LISTPACK用来替换QUiCKLIST中的…

【C++】深入浅出STL之vector类

文章篇幅较长&#xff0c;越3万余字&#xff0c;建议电脑端访问 文章目录 一、前言二、vector的介绍及使用1、vector的介绍2、常用接口细述1&#xff09;vector类对象的默认成员函数① 构造函数② 拷贝构造③ 赋值重载 2&#xff09;vector类对象的访问及遍历操作① operator[]…

数电与Verilog基础知识之同步和异步、同步复位与异步复位

同步和异步是两种不同的处理方式&#xff0c;它们的区别主要在于是否需要等待结果。同步是指一个任务在执行过程中&#xff0c;必须等待上一个任务完成后才能继续执行下一个任务&#xff1b;异步是指一个任务在执行过程中&#xff0c;不需要等待上一个任务完成&#xff0c;可以…