【C语言】填空题/程序填空题1

news/2025/2/3 15:39:15/

1. 

下列程序取出一个整数x的二进制表示中,从第p位开始的n位二进制,并输出所表示的整数值。如:

输入:-17 5 3

输出:5

【说明】整数-1732位二进制表示为:11111111 11111111 11111111 11101111,第5位(从右往左数,最右边位为第0位)开始的3位二进制为101,其所表示的整数为5

请填空补全程序。(空为???)

#include <stdio.h>int GetBits(int x, int p, int n);int main(void)
{int x, p, n;scanf("%d%d%d", &x, &p, &n);printf("%d\n", GetBits(x, p, n));return 0;
}int GetBits(int x, int p, int n)
{x = ???; //将从第p位开始的n位二进制右移到最右边int mask = ???; //设置掩模为:最低n位全为1,其余位全为0return x & mask; //用位逻辑与运算,取出已处于最右边的n位二进制
}

 答案:第一空:x>>(p+1-n)

第二空:~(~0<<n)或pow(2,n-1)

解题思路:

 

2.

下面程序段的运行结果是(ef)

  char str[]= "abc\0def\0ghi", *p = str;printf("%s", p+5) ;

 \0看做一个字符,且遇到\0停止读入

3.

下列程序段的输出结果为7,-13

#define F(x)  x - 2
#define D(x)  x * F(x)
printf("%d,%d\n", D(3), D(D(3))) ; /* 中间没有空格 */

 分析:

第二问:首先带入内部D(3)得D*D-2

再把D展开

3*3-2*3*3-2-2

即先展开外部函数(展开时把里面看做整体),再展开内部,而不是直接把原式等价于D(7)

4.

写出以下程序的运行结果。

#include<stdio.h>
int f(int n)
{    static int k = 1;k++;return 2*n + k;
}
int main(void)
{    printf("%d\n", f(4));printf("%d\n", f(f(4)));return 0;
}

第1行输出:10

第2行输出:26

分析:求第二行时:先算最里层的函数,外层先不算,k也不加

3,4题总结:函数是先算内层函数再算外层函数;宏定义是先展开外层函数(展开时把内层函数看做整体)再展开内层函数

 5.

阅读以下程序并回答问题。

#include <stdio.h>
#define T(a, b) ((a) != (b)) ? ((a) > (b) ? 1 : -1) : 0int f1() 
{   int x = -10;return !x == 10 == 0 == 1;
}void f2(int n) 
{   int s = 0;while(n--){s += n;}printf("%d,%d\n", n, s);  /* 中间没有空格 */
}double f3(int n)
{   if(n == 1) return 1.0;else return n * f3(n-1);  
}int main(void)
{    printf("%d,%d,%d\n", T(4, 5), T(10, 10), T(5, 4)); /* 中间没有空格 */printf("%d\n", f1());f2(4);printf("%.1f\n", f3(5));return 0;
}

(1)程序运行时,第1行输出-1,0,1

(2)程序运行时,第2行输出1

(3)程序运行时,第3行输出-1,6

(4)程序运行时,第4行输出120.0

第三行答案解析:

第一次循环:while(4)成立,n变成3,s加上3

第二次循环:while(3)成立,n变成2,s加上2

第三次循环:while(2)成立,n变成1,s加上1

第四次循环:while(1)成立,n变成0,s加上0

第五次循环:while(0)不成立,但不是直接退出,还要把这个语句执行完,即n--也要完成,n变成-1,退出

输出-1,6


http://www.ppmy.cn/news/1568986.html

相关文章

wx043基于springboot+vue+uniapp的智慧物流小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

康德哲学与自组织思想的渊源:从《判断力批判》到系统论的桥梁

康德哲学与自组织思想的渊源&#xff1a;从《判断力批判》到系统论的桥梁 第一节&#xff1a;康德哲学中的自然目的论与自组织思想 核心内容&#xff1a; 康德哲学中的自然目的论和反思判断力概念&#xff0c;为现代系统论中的自组织思想提供了哲学基础&#xff0c;预见了复…

Hutool工具类

Hutool 是一个非常流行的 Java 工具类库&#xff0c;它提供了丰富的功能来简化开发中的常见任务&#xff0c;比如文件操作、加密、日期处理、字符串操作、数据库工具等。它是一个轻量级的工具库&#xff0c;可以减少开发者编写常用代码的工作量&#xff0c;提高开发效率。 主要…

虚幻基础10:isValid

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 isValid isValid 节点&#xff1a;检测资产&#xff0c;防止游戏崩溃。

[SAP ABAP] 在ABAP Debugger调试器中设置断点

在命令框输入/H&#xff0c;点击回车以后&#xff0c;调试被激活&#xff0c;点击触发任意事件进入ABAP Debugger调试器界面 点击按钮&#xff0c;可以在Debugger调试器中新增临时断点 我们可以从ABAP命令、方法、功能、表单、异常、消息、源代码等多个维度在Debugger调试器中设…

您与此网站之间建立的连接不安全

网站建立好后&#xff0c;用360浏览器打开后地址栏有一个灰色小锁打着红色叉点击后显示“您与此网站之间建立的连接不安全”“请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。” 出现这个提示的主要原…

《苍穹外卖》项目学习记录-Day10来单提醒

type&#xff1a;用来标识消息的类型&#xff0c;比如说type1表示来单提醒&#xff0c;type2表示客户催单。 orderId&#xff1a;表示订单id&#xff0c;因为不管是来单提醒还是客户催单&#xff0c;这一次提醒都对应一个订单。是用户下了某个单或者催促某个订单&#xff0c;这…

关于合并两个有序链表

题目&#xff1a; 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。(两链表节点个数范围[0, 50]) 思路&#xff1a; 创建新的空链表&#xff0c;遍历原链表&#xff0c;将节点小的节点拿到新链表中进行尾插操作 下面是我画的…