C语言好题解析(一)

简介: C语言好题解析(一)

选择题1

执行下面程序,正确的输出是( )
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后面都应该要有&,其实&只是为了储存数据地址,而数组可以省略&。

我们举一个例子

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

这个代码运行结果如图

而加上&后

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

【代码】

#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;
}
相关文章
|
10月前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
708 14
|
10月前
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
2936 6
|
10月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
898 5
|
10月前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
199 5
|
13天前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
465 0
|
3月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
244 15
|
9月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
380 23
|
8月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
199 1
一文彻底搞清楚C语言的函数
|
9月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
315 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
9月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
154 24

热门文章

最新文章

推荐镜像

更多
  • DNS