习题练习 C语言(暑期第三弹)

news2024/12/23 14:00:34

在这里插入图片描述

自我小提升!

  • 前言
  • 一、存储地址
  • 二、逗号表达式
  • 三、除自身以外数组的乘积
  • 四、字节与二进制
  • 五、符号计算
  • 六、不用加减乘除做加法
  • 七、unsigned判断
  • 八、移位计算
  • 九、sizeof宏
  • 十、移位计算
  • 十一、移位计算
  • 十二、优先级判断
  • 十三、单词倒排
  • 总结


前言

重要的事说三遍!
学习!学习!学习!


一、存储地址

二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( )
A: Oxf8b821c4
B: Oxf8b821a6
C:Oxf8b82198
D: Oxf8b821c0

题目解析:
假设每行有n个元素:那x[9][9]元素的地址 - x[4][4]元素的地址 = 0x21c-0x140=5n+5(21c和140是地址末三位的十六进制数),这里n是43,假设x[7][7]的地址是z,x[7][7]元素的地址 - x[4][4]元素的地址 = 0x140 = 3n+3,z = 3n+3+140 =3*43+3+0x140 = 0x84+0x140 = 0x1c4,看地址的尾数,选择A

题目答案:
A


二、逗号表达式

以下逗号表达式的值为( )

(x= 4 * 5 , x * 5) , x + 5;

A: 25 B: 20 C: 100 D: 45

题目解析:
逗号表达式是从前到后依次计算子表达式,而其结果是最后一项的值,此题去掉括号后的表达式,和原表达式是等价的,先计算45并赋值给x,x变为20,中间x5并没有改变x的值,最后一项x+5值是25,也就是整个表达式的值

题目答案:
A


三、除自身以外数组的乘积

题目链接:OJ链接
在这里插入图片描述

提示:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内

题目解析:
将乘积分为两次进行,第一次先将每个位置左边的数据乘积计算出来放到返回数组中,后边第二次循环
将对应位置右边的数据乘积计算出来与返回数组对应位置的左半边乘积相乘得到结果。

示例: 一个数组 int nums[] = {2, 3, 4} 。
int left = 1, right = 1;
计算左侧乘积:
第0个元素的左边乘积, arr[0] = left 然后计算第1位左侧乘积
left*=nums[0] -> left = 12
第1个元素的左边乘积, arr[1] = left 然后计算第2位左侧乘积
left
=nums[1] -> left = 123
第2个元素的左边乘积, arr[2] = left 然后计算第3位左侧乘积 已经没必要了,因为第2元素是末尾元素了
一次循环完毕后,返回数组中每个元素存储的都是自己左侧元素的乘积。 arr[]中的值: [1, 2, 6]
计算右侧乘积:
第2个元素的右边乘积, arr[2] = right 然后计算第1位右侧乘积 right=nums[2] -> right =14
第1个元素的右边乘积, arr[1] = right 然后计算第0位右侧乘积 right=nums[1] -> right =1
43
第0个元素的右边乘积, arr[0] = right 然后计算第-1位右侧乘积 -1位已经不需要计算了
循环完毕后,返回数组中的每个元素都是其他元素的乘积了 arr[2]
=1; arr[1]
=4; arr[0]*=12

题目答案:

int* productExceptSelf(int* nums, int numsSize, int* returnSize){
    *returnSize=numsSize;
    static int answer[100000]={0};
    int left=1,right=1;
    for(int i=0;i<numsSize;i++){
        answer[i]=left;
        left*=nums[i];
    }
    for(int i=numsSize-1;i>=0;i--){
        answer[i]*=right;
        right*=nums[i];
    }
    return answer;
}

四、字节与二进制

求函数返回值,传入 -1 ,则在64位机器上函数返回( )

int func(int x)
{
    int count = 0;
    while (x)
    {
        count++;
        x = x&(x - 1);//与运算
    } 
    return count;
}

A: 死循环 B: 64 C: 32 D: 16

题目解析:
x=x&(x-1)这个表达式执行一次就会将x的2进制中最右边的1去掉,在x变成0之前,表达式能执行几次,就去掉几个1,所以这个代码实现了求一个有符号整数二进制补码中1的个数的功能,我们知道-1的补码是全1,而int类型4个字节32位,选C

题目答案:
C


五、符号计算

以下程序运行后的输出结果是( )

int main()
{
    int a=1,b=2,m=0,n=0,k;
    k=(n=b<a)&&(m=a);
    printf("%d,%d\n",k,m);
    return 0;
}

A: 0,0 B: 0,1 C: 1,0 D: 1,1

题目解析:
k=(n=b<a)&&(m=a);这部分的执行顺序如下:先执行n=b<a部分,其中,关系运算符优先级高于赋值运算符,所以先算b<a,得到0,n=0赋值运算的结果将作为括号内表达式的结果,即(n=b<a)&&(m=a)转换成(0)&&(m=a),&&运算前表达式为假,则后面的括号(m=a)不运算,m值还是0,最后,&&的结果是0,即k=0

题目答案:
A


六、不用加减乘除做加法

题目链接:OJ链接

题目解析:
十进制相加思想: 15+07 , 先计算不考虑进位的相加结果 12 (因为 5+7 的不考虑进位的结果是 2 ,遇 10 进位嘛),然后计算进位 5+7 进位是 10 ,则 10 与 12 再次相加,得到 22 ,进位为 0 ,则计算到此结束。这里使用二进制求和完成,思想类似,但是二进制计算相加和进位不需要使用 + 符号二进制相加思想:与十进制相同,先计算不考虑进位的相加结果( 0+0 得 0 , 1+1 进位得 0 , 1+0 得 1 ),使用异或可以取得; 然后计算相加的进位结果(同 1 的位置左移一位即可),使用相与后左移取得。
示例:5: 0101 + 7: 0111
不考虑进位的相加结果 0101^0111 -> 0010
相加的进位 0101&0111 -> 0101 因为进位左移得到 1010
1010 + 0010
不考虑进位的相加结果 1010 ^ 0010 -> 1000
相加的进位 1010 & 0010 -> 0010 因为进位左移得到 0100
1000 + 0100
不考虑进位的相加结果 1000 ^ 0100 -> 1100
相加的进位 1000 & 0100 -> 0000 进位为0结束运算

题目答案:

int Add(int num1, int num2 ) {
    while (num2 != 0) { 
        int tmp = num1 ^ num2;
        num2 = (num1 & num2) << 1;
        num1 = tmp;
    }
    return num1;
}

七、unsigned判断

关于代码的说法正确的是( )

#include <stdio.h>
int main()
{
    int x = -1;
    unsigned int y = 2;
    if (x > y)
    {
        printf("x is greater");
    } 
    else
    {
        printf("y is greater");
    } 
    return 0;
}

A: x is greater B: y is greater C: 依赖实现 D: 随机

题目解析:
x是有符号数-1,内存中是全1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数,这时就选择A了

题目答案:
A


八、移位计算

下面函数的输出结果是( )

void func()
{
int k = 1^(1 << 31 >> 31);
printf("%d\n", k);
}

A: 0 B: -1 C: -2 D: 1

题目解析:
(1 << 31 );左移31位,并在右侧填充0,得到0x80000000,即符号位为1,其他为0,即-2147483648
int k = 1^(1 << 31 >> 31);
注意,这里在右移的时候,符号位保持为1,右移后填充1,结果为0xFFFFFFFF,即-1,0x00000001^0xFFFFFFFF,即0xFFFFFFFE(-2)

题目答案:
C

九、sizeof宏

如下代码的输出结果是( )

#
include <stdio.h>
int main()
{
    int i = 1;
    sizeof(i++);
    printf("%d\n", i);
    return 0;
}

A: 1 B: 4 C: 2 D: 8

题目解析:
一般表达式的运算是在运行时执行的,而sizeof是一个编译阶段就执行的运算符,在其内的任何运算都不执行,只推测出其中表达式结果的类型求其大小,故前后i的值不变。

题目答案:
A

十、移位计算

下面函数的输出结果是( )

void func()
{
int k = 1^(1 << 31 >> 31);
printf("%d\n", k);
}

A: 0 B: -1 C: -2 D: 1

题目解析:
(1 << 31 );左移31位,并在右侧填充0,得到0x80000000,即符号位为1,其他为0,即-2147483648
int k = 1^(1 << 31 >> 31);
注意,这里在右移的时候,符号位保持为1,右移后填充1,结果为0xFFFFFFFF,即-1,0x00000001^0xFFFFFFFF,即0xFFFFFFFE(-2)

题目答案:
C

十一、移位计算

请阅读以下程序,其运行结果是( )

int main()
{
    char c='A';
    if('0'<=c<='9') printf("YES");
    else printf("NO");
    return 0;
}

A: YES B: NO C: YESNO D: 语句错误

题目解析:
‘0’<=c<=‘9’并非判断x大于等于字符0,小于等于字符9,而是先执行’0’<=c,使用这个表达式的结果再和’9’比较,‘0’的ASCII码值是48,‘A’的ASCII码值是’65’,故’0’<c是真值1,1无疑是小于字符’9’的,最终是真

题目答案:
A

十二、优先级判断

C 语言中,下列运算符优先级最高的是 ( )
A: !
B: %
C: >>
D: ==

题目解析:
单目运算符的优先级通常都比较高,具体情况可查阅运算符优先级表格
优先级表:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目答案:
C

十三、单词倒排

题目链接:OJ链接
在这里插入图片描述在这里插入图片描述

题目解析:
本题可以先将每两个空格之间的单句反转,最后逆序输出,就可以实现单词逆序排放啦

题目答案:

#include <stdio.h>
#include <string.h>
int main() {
    char arr[10001];//接收字符串
    while (gets(arr) > 0) {
        char*dete=arr;
        while(*dete!='\0'){//利用dete指针将字符串中的非字母符号变为空格
            if((*dete >= 'a' && *dete <= 'z') || (*dete >= 'A' && *dete <= 'Z'))
                dete++;
            else{
                *dete=' ';
                dete++;
            }           
        }
        char*left=arr;//单句左指针
        char*right=arr;//单句右指针
        char*jb=arr;//循环结束判断指针
        while(*jb!='\0'){
            while(*right != ' ' && *right != '\0')//right指针找到单句右边的第一个空格或\0
               right++;
            jb=right;//将right的地址给到jb,如果为\0则说明字符串单句逆序完成
            while(*left == ' ')//left指针找到单句左边第一个字母
               left++;
            char*moveleft=left;//moveleft指向单句左边第一个字母
            char*moveright=right-1;//moveright指向单句右边第一个字母
            while(moveleft<moveright){//单句逆序
                char temp=*moveleft;
                *moveleft=*moveright;
                *moveright=temp;
                moveleft++;
                moveright--;
            }
            left=right;//让left继承right指针的位置
            while(*right == ' ')//将right指针指向下一个单句的首字母位置
               right++;
        }
        char*ptr=left-1;//结束单句逆序时left指针指向\0,则让ptr指向left-1,即最后一个单词的位置
        while(ptr>=arr){//逆序输出
            printf("%c",*ptr);
            ptr--;
        }
    }
    return 0;
}           

总结

重要的事说三遍!
进步!进步!进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

仓储24代电子标签操作指导

服务器使用 服务器环境需求 数据库&#xff1a;Mysql5.7 Java环境&#xff1a;jdk1.8 软件容器&#xff1a; Tomcat8.5/9.0 软件部署步骤 mysql5.7, 创建db_wms数据库并导入原始数据库文件 安装jdk1.8, 配置java环境变量 下载tomca8.0, 部署wms.war到tomcat, 并启动tomc…

一体化智能可观测平台助力车企数智化转型

8月24日&#xff0c;博睿数据主办的《"车程ONE里&#xff0c;万事大吉" - 可观测性在汽车行业的应用与发展网络分享会》开播&#xff0c;邀请了博睿数据全国汽车行业负责人吴伟硕和博睿数据资深技术专家向涛做客直播间&#xff0c;分享汽车企业数字化转型的故事&…

恒运资本:华为Mate 60 Pro突然发售拉动半导体股,中芯国际等开盘涨超5%

8月30日&#xff0c;受华为突然发售Mate 60 Pro手机影响&#xff0c;A股开盘后半导体板块迅速拉升&#xff0c;伟测科技、美芯晟涨超10%&#xff0c;利扬芯片、唯捷创芯、芯动联科、中芯世界、华虹公司等涨超5%。 恒运资本平台&#xff08;百度搜索恒运资本&#xff09;是深圳…

QT生成可执行文件

有时候为方便在没有QT电脑上执行程序&#xff0c;需要生成可执行文件 1.在计算机任意英文路径下新建一个文件夹。本文在F:\QTproject\hisiupdate下创建了test文件夹。将QT工程运行Release生成的build-update-MinGW-Release文件夹下Release下.exe文件拷贝到新建的test文件夹下。…

【数据结构-链表-01】反转链表

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

基于swing的图书管理系统java书店信息 jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的图书管理系统 系统有1权限:管理员 二、主…

Ansible学习笔记6

stat模块&#xff1a;获取文件的状态信息&#xff0c;类似Linux的stat状态。 获取/etc/fstab文件的状态。 [rootlocalhost tmp]# ansible group1 -m stat -a "path/etc/fstab" 192.168.17.106 | SUCCESS > {"ansible_facts": {"discovered_inter…

数据通信——传输层TCP(可靠传输原理的ARQ)

引言 上一篇讲述了停止等待协议的工作流程&#xff0c;在最后提到了ARQ自动请求重传机制。接下来&#xff0c;我们就接着上一篇的篇幅&#xff0c;讲一下ARQ这个机制 还是这个图来镇楼 ARQ是什么&#xff1f; 发送端对出错的数据帧进行重传是自动进行的&#xff0c;因而这种…

《Go 语言第一课》课程学习笔记(十三)

方法 认识 Go 方法 Go 语言从设计伊始&#xff0c;就不支持经典的面向对象语法元素&#xff0c;比如类、对象、继承&#xff0c;等等&#xff0c;但 Go 语言仍保留了名为“方法&#xff08;method&#xff09;”的语法元素。当然&#xff0c;Go 语言中的方法和面向对象中的方…

高忆管理:培育钻石价格大跌,力量钻石等多家概念股业绩下滑

8月29日&#xff0c;培养钻石板块直线拉升&#xff0c;其间沃尔德&#xff08;688028.SH&#xff09;涨幅达10.89%&#xff0c;力气钻石(301071.SZ)、惠丰钻石&#xff08;839725.BJ&#xff09;、四方达&#xff08;300179.SZ&#xff09;、黄河旋风&#xff08;600172.SH&…

【STM32】学习笔记(TIM定时器)-江科大

TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且…

SpringBoot实现简单的登录验证码

参考了一些资料&#xff0c;完成了这个验证码的功能&#xff0c;下面记录一下功能的实现过程。 一、效果图 二、实现原理 后台生成验证码图片&#xff0c;将图片传到前台。后台在session中保存验证码内容。前台输入验证码后传到后台在后台取出session中保存的验证码进行校验。…

x86架构 指令INT3只有一个字节的原因

文章目录 一、单字节原因简介二、断点原理三、单字节具体原因参考资料 一、单字节原因简介 INT3指令生成一个特殊的单字节操作码&#xff08;CC&#xff09;&#xff0c;用于调用调试异常处理程序。&#xff08;这种单字节形式很有价值&#xff0c;因为它可以用来用断点替换任何…

冠达管理:火爆!拼多多飙涨15%,中概股沸腾!这些外资巨头唱多中国资产

当地时间8月29日&#xff0c;美国三大股指团体收涨&#xff0c;道指涨0.85%&#xff0c;标普500指数涨1.45%&#xff0c;纳指涨1.74%。科技股大涨&#xff0c;特斯拉涨7.69%&#xff0c;英伟达涨4.16%。纳斯达克我国金龙指数收涨3.7%&#xff0c;拼多多涨超15%。 广东研山私募…

开源百度电商小程序源码 含完整代码包+安装部署教程 一键搭建商城小程序

分享一款开源百度电商小程序源码&#xff0c;含完整代码包安装部署教程&#xff0c;一键搭建商城小程序&#xff0c;源码开源可二开&#xff0c;已测试完美运营版&#xff0c;帮你一键搭建百度商城小程序&#xff0c;含多套模板、自由DIY功能和完整的搭建部署教程。程序支持除百…

微信测试号实现微信分享等功能

目录 1 申请微信测试号 2 测试号信息 3 下载微信的测试代码 4 将下载的代码放到自己的服务器上 5 接口配置信息 6 JS安全域名 ​7 扫码关注&#xff0c;只有关注的微信号才能测试 ​8 修改sample.php文件 9 在微信上打开&#xff0c;并分享 10 问题 1 申请微信测试号 …

【USRP】调制解调系列1:AM、FM解调

AM&#xff0c;DSB&#xff0c;SSB和VSB的联系是都为幅度调制&#xff08;调幅&#xff09; 区别&#xff1a; AM是调幅&#xff0c;带载波。 DSB是抑制载波的调幅&#xff0c;可增加功率效率&#xff0c;但两个边带均传输相同的信息。 SSB单边带抑制了一个边带&#xff0c…

高忆管理:etf联接基金有哪些?

ETF联接基金自面世以来&#xff0c;就备受出资者重视&#xff0c;由于它可以以比较低的本钱获得和国际市场相同的收益&#xff0c;而且具备杰出的流动性和简略易懂的买卖方法。那么&#xff0c;ETF联接基金都有哪些呢&#xff1f; 一、什么是ETF联接基金&#xff1f; ETF联接基…

Vue怎么安装?看这一篇就够了!

Vue2.0 安装 一般我们都不会单独用 npm 去安装 Vue 插件&#xff0c;而是通过脚手架 Vue CLI 去初始化一个 Vue 项目。 Vue CLI 安装 ::: warning 注意 使用默认的镜像源安装 npm 第三方包可能要很长时间&#xff0c;建议你已经替换了新的镜像源。如需要请查看 npm 镜像源修…

不用订阅,不用破解,永久免费使用Axure最新版教程

首先去官网下载最新的axure&#xff0c;你没听错&#xff0c;就是最新的。 下载网址&#xff1a;Axure RP - UX Prototypes, Specifications, and Diagrams in One Tool 下载完后解压安装到本地&#xff0c;并注册属于你自己的账户&#xff0c;开始试用。可惜的是只有30天的试…