C语言好题解析(四)

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

选择题一

已知函数的原型是: int fun(char b[10], int *a); 
设定义: char c[10];int d; ,正确的调用语句是( )
A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d);

【答案】A

【分析】

数组:在传参时我们需要注意参数类型,对于数组而言,传参时我们可以直接省略[]和里面的数字

指针:当传参时为指针时,我们就需要注意了,指针int*a表示传入参数为整形类型的指针地址,因此表示整形地址则需&和整形类型的元素d

选择题二

请问下列表达式哪些会被编译器禁止【多选】( )
int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f

【答案】ABCD

【分析】这道题注意是考察const的理解

int const c = 21因为const在c的左边,因此为常量指针,即c是不能改变的,所以c=32错误,但是只是*c不能改变,c是可以改变的,比如c=&a

const int d = &a因为const在d的左边,因此d不能改变,这个和上边的错误一样
int const e = &b const只在e的左边,因此只有e不能被改变,而e是可以改变的,因此e=&a错误,但是e=248是正确的

int const * const f = &a,我们可以看到有两个const,一个在f左边,另一个在f左边,因此不管是f还是f都是不能被改变的,f=0x321f是16进制,表示的是地址,反正不管是f还是*f改变都是错的

选择题三

以下程序的输出结果为( )
#include <stdio.h>
int i;
void prt()
{
for (i = 5; i < 8; i++)
printf("%c", '*');
printf("\t");
} 
int main()
{
for (i = 5; i <= 8; i++)
prt();
return 0;
}
A: *** B: *** *** *** *** C: *** *** D: * * *

【答案】A

【分析】注意int i是全局变量,因此生命周期和主函数一样,只有当程序销毁了才会消失

在prt循环后i=8,跳出prt后,主函数循环中i=8是满足i<=8,然后i++使i=9,由于i=9在prt中不满足循环条件i<8直接跳出循环,最终值输出了***

注意不是prt循环三次跳出后在主函数中再循环,然后又进prt中循环,这样的结果是B,是因为没有理解到全局变量的含义。

\t的含义约等于TAB键,可以理解为按了几次空格键

下面是我用调试对关键过程的截图

选择题四

下面代码段的输出是( )
int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}
A: -6 B: 12 C: 0 D: -12

【答案】D

【分析】这种题我觉得就和我之前写的一篇博客讲的一样操作符详解下(非常详细)有点花里胡哨,根本没必要这样来写,如果分步骤来写的话清晰明了

下面是对这道题的分析

这种算法是从右向左进行的,因此先看a-=a*a,这样算出的结果a=-6,再看a+=a,这样算出结果是-12。

选择题五

下列不能实现死循环的是( )
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}

【答案】 D

【分析】对于while来说要想实现死循环,只需让while()里面的内容为真,并且while里面的语句没有break就可以实现死循环

而for中(;x;)x为1则为真死循环,为0则为假,不循环。

编程题一

题目链接

首先输入要输入的整数个数 n ,然后输入 n 个整数。
输出为 n 个整数中负数的个数,和所有正整数的平均值
结果保留一位小数。
注意: 0 即不是正整数,也不是负数,不计入计算 
本题有多组输入用例。
输入描述:首先输入一个正整数 n ,然后输入 n 个整数
输出描述:输出负数的个数,和所有正整数的平均值

【题目分析】题目要求输出负数的个数和正整数的平均值,并且要排除输入0的情况,因此需要用到if语句将这几种情况分开

我们假设sum=0为统计输入负数的个数,average=0为正整数的平均值,x为输入的数字,当输入负数是sum++,而输入正整数时average+x

0这种情况就有点麻烦,我们还需要设一个y=0,当输入0时y–,并且将x赋值为1,这样x有0变到1,y由0变到-1,这样输入0是x+y就可以抵消,并且y也就统计出了输入0的个数,之后我们就可以在计算平均值时加上y,就相当于减去输入0的个数,值得注意的是负数的个数也需要减去(我因为没有减所以一直没做出来)

【代码】

#include<stdio.h>
int main()
{
  int n, sum = 0, x, y = 0;
  double average = 0;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
  {
    scanf("%d", &x);
    if (x == 0)
    {
      x = 1;
      average += x;/*因为这样做x+y=0,
                    这样就可以抵消,
            并且n最后也可以减掉x=0的个数*/
      y--;
    }
    else if (x > 0)
    {
      average += x;//x为正数
    }
    else
    {
      sum++;//x为负数
    }
  }
  if (n + y == 0)
    average = 0.0;//全部为0的情况
  else
  {
    average = average + y;/*不全部为0的情况
               +y后就把x=0变成x=1的都减掉*/
    n = n + y-sum;//减去x=0的个数
    average = average / n;//算平均值
  }
  printf("%d %.1f", sum, average);
  return 0;
}


相关文章
|
10月前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
708 14
|
10月前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
419 8
|
10月前
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
2936 6
|
10月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
898 5
|
10月前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
199 5
|
11月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
270 2
|
7月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
657 29
|
7月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
188 4
|
7月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

推荐镜像

更多
  • DNS