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

ops/2025/2/4 19:03:21/

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/ops/155651.html

相关文章

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

DDD - 领域事件_解耦微服务的关键

文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题 EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念 领域事件&a…

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …

在AWS上使用Flume搜集分布在不同EC2实例上的应用程序日志具体流程和代码

在AWS上使用Flume搜集日志的一个典型应用案例涉及将分布在不同EC2实例上的应用程序日志实时收集并集中存储到Amazon S3或Amazon HDFS&#xff08;如果已部署&#xff09;中&#xff0c;以供后续分析和处理。以下是该案例的详细步骤&#xff1a; 环境准备 • 确保在AWS上有一组…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

数据的添加、更新与删除

一&#xff0c;添加数据 INSERT INTO 表名 VALUES(); 存在两种书写形式&#xff1a; &#xff08;1&#xff09;自主填写 自主填写的形式&#xff1a; ①根据创建表的字段结构&#xff0c;依次填入数据。 ②填入数据时&#xff0c;自己指明字段结构&#xff0c;依据就近…

【数据结构】_链表经典算法OJ:链表判环问题

目录 1. 题目1&#xff1a;环形链表判环是否存在 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 关于快慢指针的追击问题 2.1 试分析快指针步长为2的可行性&#xff1f; 2.2 试分析快指针步长为3的可行性&#xff1f; 3. 题目2&#xff1a;环形链表判环是否存在并返回入…

【Validator】自定义字段、结构体补充及自定义验证,go案例讲解ReportError和errors.As在其中的使用

自定义字段名称的显示 RegisterTagNameFunc&#xff0c;自定义字段名称的显示&#xff0c;以便于从字段标签&#xff08;tag&#xff09;中提取更有意义的名称。 代码示例&#xff1a;自定义字段名称 package mainimport ("fmt""reflect""strings&q…