栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

假期复习(刷题)总结 day9-10

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

假期复习(刷题)总结 day9-10

一、选择题 1 、下列程序的输出是( ) #include int main () { int a [ 12 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } , * p [ 4 ], i ; for ( i = 0 ; i < 4 ; i ++ ) p [ i ] =& a [ i * 3 ]; printf ( "%dn" , p [ 3 ][ 2 ]); return 0 ; } A: 上述程序有错误 B: 6 C: 8 D: 12 D,这里p[i] = &a[i*3]等于将数组a的12个元素每3个分一组放进p的二维数组里面去,p[3][2]就是第四排的第三个元素就是12 2 、二维数组 X 按行顺序存储,其中每个元素占 1 个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存 储地址为 Oxf8b8221c , 则 X[7][7] 的存储地址为( ) A: Oxf8b821c4 B: Oxf8b821a6 C: Oxf8b82198 D: Oxf8b821c0 这题先说思路再说答案,我们知道[4][4]的地址是0x140,知道[9][9]的地址是0x21c,那[9][9]到[4][4]中间差了5行5位,所以我们直接相减=(21c(540)-140[320] -5 )-5,我们算出来一行是43,那[7][7]的坐标离[4][4]有3行+3,所以我们算出:3*43+3=132(0x84),我们将21c+84=1c4,我们就在选项里找尾数是1c4的,选A。 3 、以下哪个选项可以正确描述 sizeof(double) ( ) A: 一个整型表达式 B: 一个双精度型表达式 C: 一个不合法的表达式 D: 一种函数调用 A,这里sizeof肯定不是一种函数调用,因为sizeof本身是操作符,而它的返回值是double在内存种占用几个字节的无符号整型,所以我们可以将其看成一个整型表达式。 4 、下列代码运行后的结果是什么() int main () { char a = 'a' , b ; printf ( "%c," , ++ a ); printf ( "%cn" , b = a ++ ); return 0 ; } A: b,b B: b,c C: a,b D: a,c A,毫无疑问,一开是的a是字符a,但因为是前置++,所以它会变成字符b打印出来,而b表达式中的是后置++,会先打印出b,再将字符b变成字符c。 5 、以下逗号表达式的值为( ) ( x = 4 * 5 , x * 5 ) , x + 5 ; A: 25 B: 20 C: 100 D: 45 A,这里括号里面的因为优先级相同,所以从左往右算,x=4*5=20,然后因为是逗号表达式,其值是最后运算的值,20+5=25. 二、编程题 1 、自除数 是指可以被它包含的每一位数除尽的数。例如, 128 是一个自除数,因为 128 % 1 == 0 , 128 % 2 == 0 , 128 % 8 == 0 。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界 (含边界)内所有的自除数。 728. 自除数 - 力扣(LeetCode) (leetcode-cn.com)

先创建一个数组放我们确定的自除数,然后再将需要判断的数字用for,从left开始,获取它的每一位我们只需要%10再/10即可,确认后再将它放进我们创建好的数组里面:

class Solution {
public:
    vector selfDividingNumbers(int left, int right) 
    {
    vector ret;
	for (int i = left; i <= right; i++)
	{
     int num = i; 
    while(num) 
	{ 
    int remainder = num % 10;//计算余数
	if (remainder == 0 || i % remainder)
	{
		break; 
	}
	num /= 10; 
	}
	if (num == 0)
    {
		ret.push_back(i);
	}
    }
	return ret;
    }
};

这里还有一道题:

238. 除自身以外数组的乘积 - 力扣(LeetCode) (leetcode-cn.com)

因为道题我觉得实在有意思,所以决定另写一篇文章,详细点进我的专栏即可看到。

day10 一、选择题 1 、求函数返回值,传入 - 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 C,我们知道-1在程序中的补码是全1,而x&(x-1)则是每次运行就去掉一个1,int型一共32个,所以选C。

2 、读代码选结果( ) int count = 0 ; int x = - 1 ; while ( x ) { count ++ ; x = x >> 1 ; } printf ( "%d" , count ); A: 1 B: 2 C: 32 D: 死循环,没结果 D,这道题乍一看跟上面的很像,只不过是将&换成了>>,所以第一反应是C,但实际上将x右移会补上符号位,也就说这个x不会等于0,既然不会等于0拿while就会一直运行下去。 3 、下述赋值语句错误的是( ) A: a = (b = (c = 2 , d = 3)) B: i++ C: a/b = 2 D: a = a < a + 1

C,这里一看就会发现C式子左边是一个表达式,所以不能赋值。

4 、若有 int w=1, x=2, y=3, z=4 ; 则条件表达 w < x ? w : y < z ? y : z 的值是( ) A: 1 B: 2 C: 3 D: 4 A,这里看的可能有些混乱,但如果我们加上括号 w < x ? w : (y < z ? y : z ),是不是就好理解一点? 5 、以下程序运行后的输出结果是( ) int main () { int a = 1 , b = 2 , m = 0 , n = 0 , k ; k = ( n = b < a ) && ( m = a ); printf ( "%d,%dn" , k , m ); return 0 ; } A: 0,0 B: 0,1 C: 1,0 D: 1,1 A,这里从左往右算,左边b 二、编程题 1 、写一个函数,求两个整数之和,要求在函数体内不得使用 + 、 - 、 * 、 / 四则运算符号。 数据范围:两个数都满足 0≤n≤1000 这题简直白给,我们先将两个数字直接或运算,得到它们不进位的值,再将两个数字与运算再左移1位,得到它们进位的值,再将不进位的值加上进位的值就得到最后的结果:
int Add(int num1, int num2 )
{
    while(num2 !=0)
    {
        int sum = num1^num2;
        int  k = (num1&num2) <<1;
        num1 = sum;
        num2 = k;
    }
    return num1;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/766716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号