C语言好题解析(一)

目录

选择题1

复制代码
执行下面程序,正确的输出是( )
c 复制代码
int x = 5, y = 7;
void swap()
{
	int z;
	z = x;
	x = y;
	y = z;
} int main()
{
	int x = 3, y = 8;
	swap();
	printf("%d,%d\n",x, y);
	return 0;
}
复制代码
A: 5,7    B: 7,5    C: 3,8    D: 8,3

【答案】 C

【分析】 首先我们可以看到x和y有两个不同的值,为x=5和3,y=7和8,其中x=5和y=7的范围比x=3和y=8的范围更大(即作用域更大),而printf函数有一个就近原则 ,即输出与它最近的x和y,swap函数则是将x=5和y=7进行交换(因为swap函数没有就近原则,而x=5和y=7作用域更大

选择题2

复制代码
以下不正确的定义语句是( )
A double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B char c2[] = {'\x10', '\xa', '\8'};
C char c1[] = {'1','2','3','4','5'};
D int y[5+3]={0, 1, 3, 5, 7, 9};

【答案】 B

【分析】\8表示8进制的8,而8进制的数字表示为0~7,因此\8表示错误

选择题3

复制代码
若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ()
A: 和(M==0)等价 B: 和(M==1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价

【答案】 C

【分析】(M)?(a++):(a--)的含义为判断表达式M是否为真(M!=0)(因为为表达式,所以只要非0就为真),如果为真就a++,反之则a--

选择题4

复制代码
有如下定义语句,则正确的输入语句是【多选】( )
int b;
char c[10];
A: scanf("%d%s",&b,&c); B: scanf("%d%s",&b,c);
C: scanf("%d%s",b,c); D: scanf("%d%s",b,&c);

【答案】 AB

【分析】这里可能会有人认为scanf后面都应该要有&,其实&只是为了储存数据地址,而数组可以省略&。

我们举一个例子

c 复制代码
#include<stdio.h>
void jack( int *arr)
{
	for (int i = 0; i <= 5; i++)
	{
		arr[i] = i;
	}
}
int main()
{
	int arr[6] = { 0 };
	jack(arr);
	for (int i = 0; i <= 5; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

这个代码运行结果如图

而加上&后

c 复制代码
#include<stdio.h>
void jack( int *arr)
{
	for (int i = 0; i <= 5; i++)
	{
		arr[i] = i;
	}
}
int main()
{
	int arr[6] = { 0 };
	jack(&arr);
	for (int i = 0; i <= 5; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

我们可以看出结果并没有变,所以&可加可不加。

编程题一

复制代码
根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。
输入描述:输入一行,每行空格分割,分别是年,月,日。
输出描述:输出是这一年的第几天
示例:
输入:2012 12 31 输入:1982 3 4
输出:366 输出:63

牛客网题目链接

【题目分析】

1:由于每个月的天数都不一定相同,如果我们不用数组的话是非常难搞定这问题的(我去试了),因此我们需要定义一个数组,以每个月的天数为元素,按顺序输入进数组,又因为闰年的二月和非闰年的二月天数不同,因此我们要定义两个数组分别代表闰年和非闰年。

2:因为我们最后输入的日不一定是这个月的最后一天,因此我们需要少计算一个月,然后将前面月的天数相加,再加上输入的天数,即可得到最终结果

【代码】

c 复制代码
#include <stdio.h>
int main()
{
	int year, month, day,sum=0;
	scanf("%d %d %d", &year, &month, &day);
	int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
	int notrun[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		for (int i = 0; i <= month - 2; i++)
		{
			sum = sum+run[i];
		}
		sum += day;
	}
	else
	{
		for (int i = 0; i <= month - 2; i++)
		{
			sum =sum+ notrun[i];
		}
		sum += day;
	}
	printf("%d", sum);
	return 0;
}
相关推荐
三品吉他手会点灯5 小时前
C语言学习笔记 - 20.C编程预备计算机专业知识 - 变量为什么必须的初始化【重点】
c语言·笔记·学习
Old Uncle Tom5 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆6 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移6 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业6 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
智者知已应修善业8 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
JasmineX-19 小时前
数据结构(笔记)——双向链表
c语言·数据结构·笔记·链表
.5489 小时前
## Sorting(排序算法)
python·算法·排序算法
wuweijianlove9 小时前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
子琦啊9 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法