返回首页   进站必读

0826练习题


1.

编写程序实现以下功能,在字符串str中找出最大的字符并放在第一个位置上, 并将该字符前的原字符往后顺序移动;
如str字符串内容为”chyab”,程序执行完毕,str中的内容将成为”ychab”;1.c

/** 
* @file 1.c
* @brief 编写程序实现以下功能,在字符串str中找出最大的字符并放在第一个位置上,
* 并将该字符前的原字符往后顺序移动;
* 如str字符串内容为”chyab”,程序执行完毕,str中的内容将成为”ychab”;
* @author GaoJinlong
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

char *find_max(char *str)
{
        char *max = str;

        while(*str)
        {
                if(*max < *str)
                        max = str;
                str++;
        }

        return max;
}

char *parse(char *str)
{
        char *max_p = find_max(str);
        char max = *max_p;
        char *tmp;

        for(tmp = max_p; tmp >= str; tmp--)
                *tmp = *(tmp - 1);
        *str = max;

        return str;
}

int main(int argc, const char *argv[])
{
        char buf[100] = "chyab";

        printf("%s\n", parse(buf));

        return 0;
}

2.

设有一个数列,包含10个整数,要求此数列已经按照升序排好。现在编写程序, 要求程序实现能把从指定位置开始的n个数按逆序重新排列并输出新的完整数列;2.c

/** 
* @file 2.c
* @brief 设有一个数列,包含10个整数,要求此数列已经按照升序排好。现在编写程序,
* 要求程序实现能把从指定位置开始的n个数按逆序重新排列并输出新的完整数列
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 10

void init(int num[], int len)
{
        int i;
        srand(time(NULL));

        for (i = 0; i < len; i++)
        {
                num[i] = rand() % 100;        
        }
}

void show(int num[], int len)
{
        int i;

        for (i = 0; i < len; i++)
        {
        
                printf("%d ", num[i]);
        }
        printf("\n");
}

void sort(int num[], int len)
{
        int i, j, pos, tmp;
        
        for (i = 0; i < len - 1; i++)
        {
                pos = i;
                for (j = i + 1; j < len; j++)
                {
                
                        if (num[pos] > num[j])
                                pos = j;
                }
                if (pos != i)
                {
                        tmp = num[pos];
                        num[pos] = num[i];
                        num[i] = tmp;
                }
        }
}

void reverse(int num[], int start, int len)
{
        int i, j, end = start + len - 1, tmp;

        for (i = start, j = end; i <= j; i++, j--)
        {
                tmp = num[i];
                num[i] = num[j];
                num[j] = tmp;
        }

}

int main(int argc, const char *argv[])
{
        int arr[N];

        init(arr, N);
        show(arr, N);
        
        sort(arr, N);
        show(arr, N);
        
        reverse(arr, 1, 4);
        show(arr, N);

        return 0;
}

3.

编写程序计算一个英文句子中最长单词的长度(字母个数)max,假设该英文句子中只含有字母和空格,空格之间连续的字母称为单词。3.c

/** 
* @file 3.c
* @brief 编写程序计算一个英文句子中最长单词的长度(字母个数)max,
* 假设该英文句子中只含有字母和空格,空格之间连续的字母称为单词
* @author GaoJinlong
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

int calc(char *str)
{
        int max = 0, tmp = 0;

        while(*str)
        {
                if(*str == ' ')
                {
                        if(tmp > max)
                                max = tmp;
                        tmp = 0;
                }
                else
                        tmp++;
                str++;
        }
        if(tmp > max)
                max = tmp;

        return max;
}

int main(int argc, const char *argv[])
{
        printf("%d\n", calc("hello everyone"));

        return 0;
}