c语言每日一练(12)

这篇具有很好参考价值的文章主要介绍了c语言每日一练(12)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

五道选择题:

1、程序运行的结果是() 

#define ADD(x) x+x
#include<stdio.h>
int main()
{
	int m = 1, n = 2, k = 3;
	int sum = ADD(m + n) * k;
	printf("sum = %d", sum);
}

A、 sum=9 B、 sum=10 C、 sum=12 D、 sum=18

解析:考察你对宏定义的理解。宏定义在预处理阶段就会被处理,也就是它走不到编译的阶段它就会被执行,因此我们可以粗略地把宏定义当作是一种替换。

比方说#define abc 5,那么abc*6,就可以直接看作5*6,不需要管其他运算符,你先替换完再说。这道题将ADD(x)宏定义为x+x,因此sum=1+2+1+2*3,不用管别的,你就先替换,所以sum=10,答案选B

c语言每日一练(12),每日一练,c语言,算法,数据结构

2、以下程序的输出的结果是()

#include<stdio.h>
void incre()
{
	static int x = 1;
	x *= x + 1;
	printf("%d ", x);
}
int main()
{
	int i;
	for (i = 1; i <= 2; i++) incre();
}

A、 3 3 B、 2 2 C、 2 6 D、 2 5

解析:观察代码构成发现,代码由一个main函数和一个incre函数构成,而main函数的主要作用就是调用了两次incre函数进行对应地操作。所以关键在incre,incre函数首先定义了一个x并将它初始化为1,但特别地是,这个x被static所修饰,因此,这个x的储存是放在静态区中的,故x是不会再被重定义,它在程序运行的一开始就会被定义且生命周期一直到程序结束。

由于次数少,所以直接进行代入,第一次进入incre(),x*=x+1,令x=2,故打印2,第二次进入,此时x=2,x*=x+1,令x=6,故打印6,因此答案为C

c语言每日一练(12),每日一练,c语言,算法,数据结构 3、以下程序的输出结果是哪一项()

#include <stdio.h>
int main()
{
	int a[][3] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, * p[4], i;
	for (i = 0; i < 4; i++)
		p[i] = &a[i][3];
	printf("%d\n", p[2][2]);
}

A、 输出项不合法 B、6   C、8 D、12

解析:观察代码可以发现,代码首先定义了一个没有行数只有列数的数组a,接着又定义了一个整型指针数组p和一个控制循环次数的变量i。然后使用循环的方式将一些地址存放到整型指针数组p中,循环次数只有4次,可以直接代入。

当i=0时,将a[0][3]的地址存放到p[0],也就是1行4列的地址,但没有4列,走到2行,所以把2行1列的地址即4的地址存放到p[0]中。

当i=1时,将a[1][3]的地址存放到p[1]中,也就是2行4列的地址,但没有4列,走到3行,将3行1列即7的地址存放到p[1],

当i=2时,将4行1列即10存放到p[2]中,当i=3时,将5行1列存放到p[3]中,也就是将12后面的地址存放到p[3]中,但没有,所以p[3]越界了,因此一旦使用p[3]是有问题的。

最后打印p[2][2],p[2]为10的地址,因此p[2][2]为12,所以打印12,选D

c语言每日一练(12),每日一练,c语言,算法,数据结构 4、以下关于结构体与共用体的说法,其中正确的是()
A、共用体同一个内存段可以来存放几种不同类型的成员,但在某一时刻只能存放一个成员。
B、结构体变量所占的内存长度等于最长的成员的长度,共用体变量所占内存长度是各成员占的内存长度之和。
C、共用体每个成员分别占有自己的内存单元。
D、结构体类型可以出现在共用体类型的定义中,但共用体类型不能出现在结构体类型定义之中。

解析:共用体指的是由一系列具有相同数据类型或者不同数据类型的数据组成的集合,但它们的数据为互斥关系,因为共用体所有的成员共同使用一份内存空间,当使用成员A的时候,不同于成员A类型的成员B注定不是原来的它。因此A正确。B选项刚好相反,B错误。C选项与概念相悖,大错特错。D选项错误,结构体类型和共用体类型没什么特殊的,本质上都是类型,可以用。综上所述,选A

5、下列程序段的输出结果为()

#include<stdio.h>
int main()
{
	int arr[] = { 6,7,8,9,10 };
	int* ptr;
	ptr = arr;
	*(ptr + 2) += 2;
	printf("%d,%d\n", *ptr, *(ptr + 2));
}

 A、8,10   B、6,8    C、7,9    D、6,10

解析:先定义了一个数组arr,并在里面存放了6,7,8,9,10。接着定义了一个指针ptr,并将数组arr的首地址赋值给了ptr,然后*(ptr+2)+=2,令ptr这个地址往后移两个单位,来到8上,令8+=2,使数组arr中存放的6,7,8,9,10变为6,7,10,9,10,所以最后打印ptr时打印出6,打印(ptr+2)打印出10,选D

 编程题1:

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

c语言每日一练(12),每日一练,c语言,算法,数据结构 

提示:由于只需要最后一个单词的长度,所以我们可以根据单词之间有空格的特性来进行遍历,你也可以尝试以下反着计算,也就是先用strlen计算出字符串的长度然后用反着的方式来计算最后一个单词的长度,都是可以的。 

int lengthOfLastWord(char* s) {
	int i = 0;
	int count = 0;
	//计数器,计算最后一个单词的长度
	int min = 0;
	//存储器,避免最后一个单词后面有空格,将计数器清零
	for (i = 0; s[i] != '\0'; i++)
	{
		if (s[i] == ' ')
		{
			count = 0;
			//一旦遇到空格清空计数器
		}
		else
		{
			count++;
			min = count;
		}
	}
	if (count == 0)
		//当计数器为0,不是最后一个单词后面有空格
		//就是本身就全为空格,本身就全为空格,count也为0,不影响
	{
		count = min;
	}
	return count;
}

编程题2:

 136. 只出现一次的数字 - 力扣(LeetCode)

快乐的暑假马上就结束了,最后来道简单题,放松一下 

 c语言每日一练(12),每日一练,c语言,算法,数据结构

提示:两个相同的数^(异或)=0且^满足交换律 

int singleNumber(int* nums, int numsSize){
int i=0;
int a=0;
for(i=0;i<numsSize;i++)
{
  a^=nums[i];
}
return a;
}

好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

 文章来源地址https://www.toymoban.com/news/detail-682253.html

 

到了这里,关于c语言每日一练(12)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:数组颠倒 思路一: 题二:单词倒排 思路一: 思路二: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们的

    2024年02月09日
    浏览(39)
  • C语言每日一题:13《数据结构》环形链表。

    题目链接: 使用快慢指针利用相对移动的思想: 1,令快指针(fast)速度为2. 2.慢指针(slow)速度为1. 3.以慢指针进入环中开始。 4。假设slow刚刚进入环中fast与它相距N。 如图所示: 1,令快指针(fast)速度为3.M 2.慢指针(slow)速度为1. 3.以慢指针进入环中开始。 4。假设slow刚

    2024年02月14日
    浏览(36)
  • C语言每日一题:11.《数据结构》链表分割。

    题目链接: 1.构建两个新的带头链表,头节点不存储数据。 2.循环遍历原来的链表。 3.小于x的尾插到第一个链表。 4.大于等于x尾插到第二个链表。 5.进行链表合并,注意第二个链表的尾的下一个需要置空防止成环。 6.free两个头之前需要保存新的满足条件的单链表的头。 1.有

    2024年02月14日
    浏览(37)
  • 数据结构—基础知识(12):二叉树算法补充

    复制二叉树 【算法步骤】 如果是空树,递归结束,否则进行以下操作: 申请一个新结点空间,复制根结点; 递归复制左子树; 递归复制右子树。 计算二叉树的深度 【算法步骤】 如果是空树,递归结束,深度为0,否则进行以下操作: 递归计算左子树的深度记为m; 递归计

    2024年01月25日
    浏览(40)
  • 【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

    An inch of time is an inch of gold, but you can’t buy that inch of time with an inch of gold. An inch of time is an inch of gold, but you can\\\'t buy that inch of time with an inch of gold 给你两个有序数组,请将两个数组进行合并,并且合并后的数组也必须有序 这个题目要求将两个有序数组合并成一个有序数组。在数

    2024年02月11日
    浏览(39)
  • 数据结构(12)Dijkstra算法JAVA版:图的最短路径问题

    目录 12.1.概述 12.1.1.无权图的最短路径  12.1.2.带权图的最短路径 1.单源最短路径 2.多源最短路径 12.2.代码实现 无权图的最短路径,即最少步数,使用BFS+贪心算法来求解最短路径,比较好实现,此处不做展开讨论。 有权图的最短路径,不考虑权重为负数的情况,因为权重为负

    2024年02月06日
    浏览(35)
  • 【每日算法 && 数据结构(C++)】—— 02 | 数组的并交集(解题思路、流程图、代码片段)

    When you feel like giving up, remember why you started. 当你想放弃时,请记住为什么你开始 给你两个数组,请分别求出两个数组的交集和并集 在数学中,我们可以通过交集和并集来描述两个集合之间的关系。 交集(Intersection) :指的是两个集合中共有的元素组成的集合。可以用符号

    2024年02月11日
    浏览(36)
  • 【算法每日一练]-结构优化(保姆级教程 篇4 树状数组,线段树,分块模板篇)

    目录 分块 分块算法步骤: 树状数组 树状数组步骤: 线段树点更新 点更新步骤: 线段树区间更新 区间更新步骤: 不同于倍增和前缀和与差分序列。 前缀和处理不更新的区间和 差分处理离线的区间更新问题 倍增处理离线的区间最值问题 分块,树状数组,线段树: 分块处

    2024年02月04日
    浏览(34)
  • 【数据结构与算法】【12】前缀表达式、中缀表达式、后缀表达式

    什么是前缀表达式、中缀表达式、后缀表达式 前缀表达式、中缀表达式、后缀表达式,是通过树来存储和计算表达式的三种不同方式 以如下公式为例 ( a + ( b − c ) ) ∗ d ( a+(b-c) )*d ( a + ( b − c ) ) ∗ d 通过树来存储该公式,可以表示为 那么问题就来了,树只是一种抽象的数据

    2024年02月08日
    浏览(38)
  • 【每日算法 && 数据结构(C++)】—— 13 | 求最长自增子序列(解题思路、流程图、代码片段)

    Today’s quote is: \\\"Actions speak louder than words. 今天的一句话是:“行动胜于言辞 求最长递增子序列 最长递增子序列是指在给定序列中,找到一个最长的子序列,使得子序列中的元素按照递增的顺序排列。 例如,对于序列 [1, 3, 2, 5, 4, 7, 6],其中的最长递增子序列可以是 [1, 2, 4,

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包