C语言练习题(5)

来源:互联网 发布:淘宝客佣金5元怎么设置 编辑:程序博客网 时间:2024/06/08 07:11

1、
int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位, n为需要转换的长度,假设起始点在右边.
如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001。

int intvert(unsigned int x, int p, int n){    unsigned int m = 0;    unsigned int a = 1;    int i = 0;    for (i = 0; i < n; i++)//生成n个1    {        m |= a;        a = a << 1;    }    m = m << p;//位移p位    x ^= m;    printf("x=0x%x\n", x);    return 0;}

2、已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析怎样获取WAV格式的各项信息。
这里写图片描述

思路:使用fopen函数打开wav文件,编写struct,其中定义头文件各类型参数及大小,使用fread函数按struct大小读取文件内容。

//伪代码struct WAVHead{    char RIFF;    ...}MyStruct;FILE *p = fopen("xxx.wav", "r");int n = fread(&MyStruct, sizeof(WAVHead), 1, p);

3、
下面这段代码是把中英文混合字符串(汉字用两个字节表示,特点是第一个字节的最高位是1)中的大写字母转化为小写字母,找出其中的bug。
for (char *piterator=sz_word; *piterator!=0; piterator++)
{
if (*piterator & 0x80 != 0)
{
piterator++;
}
else if (*piterator>=’A’ && *piterator<=’Z’)
piterator +=32;
}

for (char *piterator=sz_word; *piterator!=0; piterator++){    if ((*piterator) & 0x80 != 0)//*和&相同优先级,应加括号    {        piterator++;    }    else if(*piterator >='A' && *piterator<='Z')        *piterator += 32;//更改指针的内容,而不是指针本身}
原创粉丝点击