12.2C语言练习

1、有一百个整数,其中有负数,找出连续三个数之和最大的部分.
示例:
输入:2 ,-8 ,3,-2 ,4,-10
输出: 5 ({3, -2, 4})

首先我们需要去遍历数组才能得到结果,
之后我们就要遍历,从首元素开始,连续三个做一次判断,直到倒数第三个元素为止。所以我们就可以采取下面的措施。

#include <stdio.h>
void fun(int arr[], int n)
{
    int i = 0, j = 0, k = 0;
    int m = 0, l = 0;
    int max = arr[0] + arr[1] + arr[2];
    for(m=0; m<n-2; m++)
    {
        if(((arr[m] + arr[m+1] + arr[m+2]) > max))
        {
            i = arr[m];
            j = arr[m+1];
            k = arr[m+2];//保存相邻的三个的最大值的具体值
            max = i + j + k;,保存最大值
        }
    }
    printf("%d ({%d,%d,%d})", max, i, j, k);
}
int main(void)
{
    int arr[6] = {2,-8,3,-2,4,-10};
    fun(arr,6);
    return 0;
}

2、用<<,>>,|,&实现一个unsigned short型变量(2个字节)的高低位交换!!
例如:0x1234 交换后 0x3412
函数原型:void func(unsigned short *a)

我们可以定义一个只有一个字节有效的short型。利用它来得到我们想要交换的位数,然后赋值给我们想给的short型变量的中转站。之后再进行或运算得到我们最后的结果。

#include <stdio.h>
int main(void)
{
    unsigned short a = 0x1234;
    unsigned short b = 0xff;
    unsigned short d = 0;
    unsigned short e = 0;
    printf("a = %x\n", a);
    d = a & (b << 8);
    e = b & a;
    e = e << 8;将e(3400)左移8位变为(3400)
    d = d >> 8;//将d(1200)右移8位变为(12)
    a = 0;  将a(清零)
    a = a | e;//将a与e(3400)或运算得(3400)
    a = a | d  ;//将a (3400)或运算得(3412)
    printf("a = %x\n", a);
    return 0;
}

3、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

/*为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa66;

A more obscure approach is:
一个较晦涩的方法是:

*(int * const)(0x67a9) = 0xaa66;*/


。。。。。不会
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值