• C语言题目


    题目描述

    计算字符串最后一个单词的长度,单词以空格隔开。 

    输入描述:

    一行字符串,非空,长度小于5000。

    输出描述:

    整数N,最后一个单词的长度

    #include <stdio.h>
    int main(int argc, char const *argv[])
    {
        char a[5000];
        gets(a);        //如果用scanf,会在空格处停止录入
        //printf("%s", a);
        int m = 0;
        for (int i = 4999; i >= 0; --i)
        {
            if ((a[i] > 64 && a[i] < 91) || (a[i] > 96 && a[i] < 123))        //判断ascii码,当它满足为字母时,计数
            {
                m++;
            }
            if (a[i] == ' ')    //一直计数,计到空格位置,并输出此时的计数值
            {
                printf("%d
    ", m);
                return 0;
            }
            if (i == 0)        //如果走到了数组头部,还没有空格,说明只有一个单词,那么也输出计数值
            {
                printf("%d
    ", m);
            }
        }
        return 0;
    }

    本题注意: 1、scanf()遇到空格便停止接受了,而gets()函数直到收到换行符 才会停止,所以这里用gets() 

          2、因为不确定一定有空格,所以还要考虑到输入的字符串只是一个单词的情况,当遍历过整个数组都没有找到空格时,那么认为只有一个单词


    题目描述

    输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

    输入描述:

     输入一个整数(int类型)

    输出描述:

     这个数转换成2进制后,输出1的个数

    #include <stdio.h>
    #include <string.h>
    
    
    int main(int argc, char const *argv[])
    {
        int s = 0;
        scanf("%d",&s);
        int abc[32] = { 0 };        //注意数组初始化
    
        int tmp = 0;
        int i = 0;
    
        while (s > 0)    //短除法法转成二进制
        {    
            abc[i] = s % 2;
            i++;
            s = s / 2;
        }
        for (int j = 0; j < 32; j++)
        {
            if (abc[j] == 1)
            {
                tmp++;
            }
        }
        printf("%d", tmp);
        return 0;
    }

    本题注意:1、数组一定要初始化,否则会自动填入奇怪的值,

         2、转换二进制的方法


    题目描述

    写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

    输入描述:

    第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。

    输出描述:

    输出输入字符串中含有该字符的个数。

    #include <stdio.h>
    #include <string.h>
    int main(int argc, char const *argv[])
    {
        char a[1000] = {0} ;
        char b ;
        gets(a);
        b = getchar();
        int m = 0;
        int len = strlen(a);
        for (int i = 0; i < len; i++)
        {
            if (b == a[i] || b == (a[i]-32) || a[i] == (b -32))
            {
                m++;
            }
        }
        printf("%d
    ", m);
        return 0;
    }

    本题注意:1、数组要初始化

         2、gets() 和 getchar() 的使用

         3、注意题目要求,不区分大小写,所以判断时要加入大小写的情况,大写字母ASCII码比小写字母多32


    题目描述

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

    Input Param

    n               输入随机数的个数

    inputArray      n个随机整数组成的数组

    Return Value

    OutputArray    输出处理后的随机整数


    注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

    输入描述:

    输入多行,先输入随机整数的个数,再输入相应个数的整数

    输出描述:

    返回多行,处理后的结果

    #include<stdio.h>
    
    int main()
    {//给定范围去重
        int N, i, n;//N为数组长度    
        while (scanf("%d", &N) != EOF)
        {
            int array[1001] = { 0 };
            for (i = 0; i<N; i++)
            {
                scanf("%d", &n);
                array[n] = 1;
            }
            for (i = 0; i<1001; i++)
            {
                if (array[i] == 1)
                    printf("%d
    ", i);
            }
        }
    
        return 0;
    }

    题目描述

    输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

    输入描述:

    输入一个int型整数

    输出描述:

    按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
        //输入一个整数a
        int a;
        scanf("%d", &a);
    
        //把a转成字符串
        char str[100] = { 0 };
        itoa(a,str,10);
        puts(str);
        
        //看看字符串有多长
        int len = strlen(str);
        printf("%d
    ", len);
    
        //首尾互相调换顺序
        int tmp = len -1;
        for (int i = 0; i < len;i++)
        {
            if (i < tmp)
            {
                change(&str[i], &str[tmp]);
                tmp--;
            }
        }
        puts(str);
    
        //去除重复值
        len = strlen(str);
        char new_str[100] = {0};
        new_str[0] = str[0];
        for (int i = 1, j = 1; i < len; i++)
        {
            
                if (strchr(new_str,str[i]) == 0)
                {
                    new_str[j] = str[i];
                    j++;
                }
            
        }
        puts(new_str);
    
    }
    
    int change(char *a, char *b)
    {
        char tmp = *a;
        *a = *b;
        *b = tmp;
    }

    本题注意:1、去除重复部分实现,我用了一个新数组承接无重复的部分,并且在每次复制元素到新数组时都用strchr()看一下是否有重复

         2、首尾调换顺序注意判断条件

     


    题目描述

    写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

    输入描述:

    输入一个正浮点数值

    输出描述:

    输出该数值的近似整数值

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        float a ;
        scanf("%f", &a);
        //printf("%f
    ", a);
        int b = a;
        float tmp = a - b;
        if (tmp>=0.5)
        {
            b++;
        }
    
        printf("%d
    ", b);
    }

    本题注意:1、用int型去承接浮点数时,会自动去掉所有的小数位,保留到个位。


    题目描述

    功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

    最后一个数后面也要有空格
     

    详细描述:


    函数接口说明:

    public String getResult(long ulDataInput)

    输入参数:

    long ulDataInput:输入的正整数

    返回值:

    String

    输入描述:

    输入一个long型整数

    输出描述:

    按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int a = 0;
        scanf("%d", &a);
        int j;
        for (j = 2;j < a+1 ; j++)
        {
            if ((a % j) == 0)
            {
                printf("%d ", j);
                a = a / j;
                j = 1;
            }
        }
    }

    本题注意:1、变量j的取值范围,j < a+1 因为包包含等于a的情况,一旦输入的值是一个质数,需要能输出该值

         2、注意/ %的运用


    题目描述

    写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )

    输入描述:

    输入一个十六进制的数值字符串。

    输出描述:

    输出该数值的十进制字符串。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        /*输入十六进制数*/
        char val_16[100] = { 0 };
    
        /*保存十进制的数*/
        int val_10 = 0;
    
        while (scanf("%s", val_16) != EOF)
        {
            int val_16_len = strlen(val_16);
            val_10 = 0;
            int i = val_16_len - 1;
            int j = 1;
    
            while (i > 1)
            {
                int tmp = 0;
                int tmp_16 = val_16[i];
                if (tmp_16 >= 48 && tmp_16 <= 57)
                {
                    tmp = tmp_16 - 48;
                    val_10 = val_10 + tmp * j;
                }
                else if (val_16[i] == 'A')
                {
                    val_10 = val_10 + 10 * j;
                }
                else if (val_16[i] == 'B')
                {
                    val_10 = val_10 + 11 * j;
                }
                else if (val_16[i] == 'C')
                {
                    val_10 = val_10 + 12 * j;
                }
                else if (val_16[i] == 'D')
                {
                    val_10 = val_10 + 13 * j;
                }
                else if (val_16[i] == 'E')
                {
                    val_10 = val_10 + 14 * j;
                }
                else if (val_16[i] == 'F')
                {
                    val_10 = val_10 + 15 * j;
                }
                i--;
                j = j * 16;
            }
            printf("%d
    ", val_10);
        }
    
    }

    本题我才用了判断ascii码的方式去判断某一位是否小于10,如果小于10则转换成相对应的数字,如果是字母,另外转换成数字

    每向前走一位,就是多了16的几次方


    题目描述

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 
    •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 

    输入描述:

    连续输入字符串(输入2次,每个字符串长度小于100)

    输出描述:

    输出到长度为8的新字符串数组

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char a[100] = {0};
        char b[100] = {0};
        gets(a);
        gets(b);
    
        int len_a = strlen(a);
    
        int len_b = strlen(b);
        
        char A[][8] = { 0 };
        char B[][8] = { 0 };
    
        for (int i = 0; i < 10; i++){
            if (((len_a ) % 8 )!= 0)
            {
                a[len_a] = '0';
                len_a++;
            }
        }
        for (int i = 0; i < 10; i++){
            if (((len_b ) % 8 )!= 0)
            {
                b[len_b] = '0';
                len_b++;
            }
        }
        int count_a = len_a / 8;
        int count_b = len_b / 8;
        for (int i = 0; i < count_a;i++)
        {
            for (int j = 0; j < 8;j++)
            {
                A[i][j] = a[j + i * 8];
            }
            for (int k = 0; k < 8;k++)
            {
                printf("%c", A[i][k]);
            }
            printf("
    ");
        }
        for (int i = 0; i < count_b; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                B[i][j] = b[j + i * 8];
            }
            for (int k = 0; k < 8; k++)
            {
                printf("%c", B[i][k]);
            }
            printf("
    ");
        }
        return 0;
    }

    使用二维数组去拆分字符串,在拆分之前, 先计算是否8的整数倍,否则补0

  • 相关阅读:
    人口数据分析
    爬虫:单线程+多任务异步协程
    Python脚本实现在cmd执行相关命令
    Markdown 标记语言指北
    索引/代码块目录
    无题
    [模板] 斯坦纳树
    [模板] 欧拉回路
    [模板] 计算几何2: 自适应Simpson/凸包/半平面交/旋转卡壳/闵可夫斯基和
    [模板] 快速沃尔什变换
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/11812991.html
Copyright © 2020-2023  润新知