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

这篇具有很好参考价值的文章主要介绍了习题练习 C语言(暑期第三弹)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

习题练习 C语言(暑期第三弹),c语言,算法


前言

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


一、存储地址

二维数组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链接
习题练习 C语言(暑期第三弹),c语言,算法

提示:
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语言(暑期第三弹),c语言,算法习题练习 C语言(暑期第三弹),c语言,算法习题练习 C语言(暑期第三弹),c语言,算法

题目答案:
C

十三、单词倒排

题目链接:OJ链接
习题练习 C语言(暑期第三弹),c语言,算法习题练习 C语言(暑期第三弹),c语言,算法

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

题目答案:

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

总结

重要的事说三遍!
进步!进步!进步!文章来源地址https://www.toymoban.com/news/detail-684762.html

到了这里,关于习题练习 C语言(暑期第三弹)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    重要的事说三遍! 学习!学习!学习! 对于代码段,下面描述正确的是( ) A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与’0’等价 C:其中循环控制表达式是不合法的 D: 以上说法都不对 题目解析: 因print(“*”)函数调用的返回值是字符串中字符的个数,即为1。

    2024年02月10日
    浏览(38)
  • 数据库SQL语言实战(五)(数据库系统概念第三章练习题)

    目录 前言知识 一、 关系模式 二、 属性域 例子 介绍 作用 三、Select常数 举例 解释  四、集合差运算 本质 举例  结论 练习题 3.17 3.18  3.21  总结  注:本文的SQL语言适用的是 Oracle数据库 与mySQL可能存在略微不同 模式的定义 :模式则是指数据库中 所有关系模式 的集合,它

    2024年04月22日
    浏览(62)
  • 数据库系统概述——第三章 关系数据库标准语言SQL(知识点复习+练习题)

    🌟 博主: 命运之光 🦄 专栏: 离散数学考前复习(知识点+题) 🍓 专栏: 概率论期末速成(一套卷) 🐳 专栏: 数字电路考前复习 🦚 专栏: 数据库系统概述 ☀️ 博主的其他文章: 点击进入博主的主页​​​​​ 前言: 身为大学生考前复习一定十分痛苦,你有没有过

    2024年02月10日
    浏览(69)
  • C语言第三弹---数据类型和变量

    ✨ 个人主页: 熬夜学编程的小林 💗 系列专栏: 【C语言详解】 【数据结构详解】 C语言提供了丰富的 数据类型来描述生活中的各种数据 。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。 所谓“类型”,就是相似的数据所拥有的共同特征

    2024年01月20日
    浏览(42)
  • 人工智能(第三版)—【第一章】练习题

    逆图灵测试的一个可能的实际应用是 在线购票系统 。在购票过程中,用户可能会遇到各种问题、疑虑或困惑,例如座位选择、票价查询、支付问题等。通过进行逆图灵测试,系统可以判断用户是在与人交互还是与另一台计算机交互,从而提供更加个性化和准确的服务。 在这

    2024年02月21日
    浏览(56)
  • Python基础练习题--第三章 控制结构

    目录 1025:【例3.1】购买笔记本 1026:【例3.2】判断奇偶 1027:【例3.3】区间测速 1028:【例3.4】飞船速度 1029:练3.1最大优惠价 1030:练3.2判断闰年 1031:练3.3最适宜运动心率2 1032:【例3.5】计程票 1033:【例3.6】BMI健康信息 1034:练3.4  区间测速2 1035:练3.5  购买笔记本2 【题

    2024年02月07日
    浏览(53)
  • 计算机网络基础 第三章练习题

    现在大量的计算机是通过诸如以太网这样的局域网连入广域网的,而局域网与广城网的互联是通过( A)实现的。 A. 路由器B. 资源子网C. 桥接器D. 中继器 下列不属于数据链路层功能的是(B )。 A. 帧定界功能B. 电路管理功能C. 差错控制功能D. 流量控制功能 数据链路层是OSI模型中的

    2023年04月25日
    浏览(58)
  • 【机器学习】第三章线性模型练习题及答案

    一. 单选题(共21题,63分) 1.【单选题】以下哪组变量之间存在线性回归关系? A. 正三角形的边长与周长 B. 学生的性别与他的成绩 C. 正方形的边长与面积 D. 儿子的身高与父亲的身高 正确答案: A 2.【单选题】下列关于线性回归分析中的残差(Residuals)说法正确的是? A. 以上说法

    2024年02月03日
    浏览(54)
  • 云计算与大数据第三章 云存储练习题及答案

    1、SAN是一种(B)。 A. 存储设备                            B. 专为数据存储而设计和构建的存储网络系统 C. 光纤交换机                        D. HBA 2、在GFS中,客户端可以并行访问多个(C),提高了系统的整体性能。 A. 客户端               

    2024年02月03日
    浏览(45)
  • 2022第三届全国大学生网络安全精英赛练习题(4)

    301、Windows10各版本中,功能最少的是() A.家庭版 B.专业版 C.企业版 D.教育版 正确答案:A 解析:功能从少到多∶家庭版——专业版——教育版——企业版(教育版和企业版功能基本相同) 302、漏洞扫描技术是一类重要的网络安全技术。它和防火墙、入侵检测系统互相配合,能够有

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包