• 几道C语言的题目!


     

     

    注:编译环境 VC2010,系统WIN7 64位,其他编译环境和系统未测试

     

    1-1. 编程,输入n,输出如下例(n=5)所示的图形:

                           *****

                         *****

                        *****

                       *****

                      ***** 

    # include <stdio.h>

    int main()

    {

        int length;

        void print_parallelogram(int length);  

        scanf("%d", &length);

        print_parallelogram(length);

        return 0;

    }

    /**

     * 打印平行四边形

     * @param int length 边长

     */

    void print_parallelogram(int length)

    {

        char element    = '*';//元素

        char space      =' ';//空格

        int i,j,k;

        for(i=0; i<length; i++)

        {

            /** 打印空格 */

            for(j=length-(i+1); j>0; j--)

            {

                printf("%c", space);

            }

            /** 打印元素 */

            for(k=0; k<length; k++)

            {

                printf("%c",element);

            }

            printf(" ");

        }

    }

            

    1-2. 编程,输入n值,输出如下例(n=4)所示的高和上底均为n的等腰梯形:

                          ****

                         ******

                        ********

                       ********** 

    # include <stdio.h>

    int main()

    {

        int length;

        void print_isosceles_trapezoid(int length_of_side);

       

        scanf("%d", &length);

        print_isosceles_trapezoid(length);

        return 0;

    }

    /**

     * 打印等腰梯形

     * @param int length_of_side 边长

     * @turn  void

     */

    void print_isosceles_trapezoid(int length_of_side)

    {

        char element    = '*';//元素

        char space      =' ';//空格

        int i,j,k;

        for(i=0; i<length_of_side; i++)

        {

            /** 打印空格 */

            for(j=length_of_side-(i+1); j>0; j--)

            {

                printf("%c", space);

            }

            /** 打印元素 */

            for(k=0; k<length_of_side+(i*2); k++)

            {

                printf("%c",element);

            }

            printf(" ");

        }

    }     

    1-3. 编程,输入n,输出如下例(n=3)所示的边长为n的菱形:

                            *

                           ***

                          *****

                           ***

                            *

    # include <stdio.h>

    int main()

    {

        int length;

        void print_rhombus(int length_of_side);

        scanf("%d", &length);

        print_rhombus(length);

        return 0;

    }

    /**

     * 打印菱形

     * @param int length_of_side 边长

     * @turn  void

     */

    void print_rhombus(int length_of_side)

    {

        char element    = '*';//元素

        char space      =' ';//空格

        int times       = length_of_side*2-1;//循环次数

        int i,j,k,n,m;

        for(i=0; i<times; i++)

        {

            /** 计算 空格的数量  */

            n = length_of_side-(i+1);

            n = n < 0 ? -n : n;

            /** 打印空格 */

            for(j=n; j>0; j--){

                printf("%c", space);

            }

            /** 计算 棱形上边点 和下边点的数量  */

            m = i<length_of_side ? 1+(i*2) : (times-i) * 2 -1 ;

            /** 打印元素 */

            for(k=m; k>0; k--){

                printf("%c",element);

            }

            printf(" ");

        }

    }

    1-4. 编程, 输入顶行字符和图形的高。输出如下例(顶行字符为'A',图形的高为5)所示的图形,

                        A

                      B C D

                    E F G H I

                  J K L M N O P

                Q R S T U V W X Y

    # include <stdio.h>

    int main()

    {

        char letter; int height;

        void letter_pyramid(char letter, int height);

        printf("请输入金字塔塔顶字母");

        scanf("%c", &letter);

        printf("请输入金字塔塔高");

        scanf("%d", &height);

        letter_pyramid(letter, height);

        return 0;

    }

    /**

     * 打印字母金字塔

     * @param char word  塔顶字母

     * @param int  height 塔高

     * @return void

     */

    void letter_pyramid(char letter, int height)

    {

     int i,j,k;

        /** @TODO 对字符越界做简单处理 */

        if(letter+height*height > 256)  {

            printf("塔高超出限制,拜拜!!! ");

            return ;

        }

        for ( i = 0; i < height; i++)   {

            /** 打印空格 */

            for(k=height-(i+1); k>0; k--) printf("%c", ' ');

            /** 打印字母 */

            for ( j = 0; j < (i*2)+1; j++)

    {

                printf("%c", letter++);

            }

            printf(" ");

        }

    }

    1-5. 编程,打印下列上三角形式的乘法九九表。

              1  2  3  4  5  6  7  8  9

             ----------------------------

              1  2  3  4  5  6  7  8  9

                 4  6  8 10 12 14 16 18

                    9 14 15 18 21 24 27

                      16 20 24 28 32 36

                         25 30 35 40 45

                            36 42 48 54

                               49 56 63

                                  86 72

                                     81

    # include <stdio.h>

    int main()

    {  

    void multiplication_table();

        multiplication_table();

        return 0;

    }

    /**

     * @desc 打印 99乘法表

     */

    void multiplication_table()

    {

        int n = 9,i,j,k;

        for (i = 1; i <= n; i++)  printf("%3d", i);

        printf(" ");

        for (j = 1; j <= n; j++) printf("---");

        printf(" ");

        for ( i = 1; i <= n; i++)

        {

            for ( j = 1; j <= n; j++)

            {

                if (j<i){

                    printf("   ");

                }else{

                    printf("%3d", i*j);

                }

            }

            printf(" ");

        }

    }

    2-1. 编程,输出200以内(含200)所有完全平方数C(满足C2=A2+B2)及其个数。

    # include <stdio.h>

    int main()

    {

        void pythagorean_theorem();

        pythagorean_theorem();

        return 0;

    }

    /**

     *  @desc 求 200以内构成勾股数的个数

     *        勾股数公式(a²+ 1)²=(a²-1)²+(2a)²

     */

    void pythagorean_theorem()

    {

        int n=200,i,a,b,c;

        int square[200];//用于存放符合勾股数的数

        int num=0;// 计算 勾股数的个数

     

        for (i = 1; i*i+1 <= n; i++)

        {

            /** 套用勾股数定理 */

            a  = (i*i+1);

            b  = (i*i-1);

            c  = 2*i;

            if ( a*a == b*b +  c*c && b>0)

            {

                square[num] = a;

                ++num;

            }

        }

        if (!num)

        {

            printf("没有找到符合要求的");return;

        }

        printf("200内能组成勾股数的个数%d ",num);

        printf("分别是: ");

        while (num)

        {

            printf("%d ",square[--num]);

        }

    }

    2-2. 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何? 编程,输出所有可能的购买方案。

    # include <stdio.h>

     

    int main()

    {

        void money100_chickens100();

        money100_chickens100();

        return 0;

    }

     

    /**

     * @desc 《算经》的“百钱百鸡问题”

     *          分析得出公式:5x+3y+z/3=100, x+y+z=100;

     */

    void money100_chickens100()

    {

        int max_x = 100/5;//鸡翁最大数

        int max_y = 100/3;//鸡母最大数,取整

        int x,y,z;//各种鸡个数

     

        for (x = 0; x <= max_x; x++)

        {

            for (y = 0; y <= max_y; y++)

            {

                z = 100 - x - y;

                if (x *5 + y*3 + z/3.0 == 100)

                {

                    printf("x=%d,y=%d,z=%d ",x,y,z);

                }

            }

        }

    }

    2-3. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N。

    # include <stdio.h>

    int main()

    {

        /** 4位数9倍恰好是其反序数,所以其反序也是4位数*/

        int max = 10000 /9 ;//最大的反序之前的数

        int i;

        int antitone(int n);

        for ( i= 1001; i < max; i++){

            if(i*9 == antitone(i)){

                printf("%d ", i);

            }

        }

        return 0;

    }

    int antitone(int n){

        int i=0;

        while (n>0){

            i = (n%10)+i*10;

            n /=10;

        }

        return i;

    }

    2-4. 编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33

    # include <stdio.h>

    int main()

    {

        int i,j,k,n,cube;

        for ( i = 1; i <= 9; i++)   {

            for ( j = 0; j <= 9; j++)   {

                for ( k = 0; k<= 9; k++){

                    n = i*100+j*10+k;

                    cube = i*i*i + j*j*j + k*k*k;

                    if (n==cube)    {

                        printf("%d ", n);

                    } 

                }

            }

        }

    }

     

    2-5. 编程,输出555555的约数中最大的三位数。

    # include <stdio.h>

    int main()

    {

        int i ;

        for ( i = 999; i >0 ; i--)

        {

            if (555555 % i == 0)

            {

                printf("%d ", i);

                break;

            }

        }

    }

    2-6. 编程,输出1000到100000之间所有满足下列条件的所有整数及其个数:整数的各位数字之和等于5。

    # include <stdio.h>

    void main()

    {

        int min_i=1000;

        /** 因为各位位数之和等于5,所以大于50000的数位数之和也大于5 */

        unsigned int max_i=50000;

        unsigned int n,num=0;

        int figure(long number);

     

        for(n=min_i;n<=max_i;n++){

            if(figure(n)==5){

                printf("%d ",n);

                num++;

            }

        }

        printf("个数:%d ",num);

    }

    int figure(long number){

        int result=0;

        while(number>0){

            result      += number%10;

            number   = number/10;

        }

        return result;

    }

    2-7.输出1000以内的全部“完全数”。

    # include <stdio.h>

    void main()

    {

        int n=1000;

        int num=0,i,j,r;

        for (i = 1; i <= n; i++){

            r = 0;

            for (j = 1; j < i; j++){

                if (i%j==0){

                    r +=j;

                }

            }

            if (r==i){

                num++;

                printf("%d ",i);

            }

        }

        printf("完全数的个数:%d", num);

    }

    3-1. 编程,输入10个整数,然后进行查找。输入要查找的整数,若找到,则输出该数在数组中的下标位置,否则输出“can not found!”。

    # include <stdio.h>

    void main()

    {  int num[10],i,find,flag=0;

        printf("请输入10个数 ");

        for (i = 0; i < 10; i++){

            scanf("%d", &num[i]);

        }

        printf("请输入要查找的数");

        scanf("%d", &find);

        for (i = 0; i < 10; i++){

            if (num[i] == find) {

                flag=1;

    printf("下标为%d ", i);

            }

        }

        if (flag==0) {

            printf("can not found! ", i);

        }

    }

    3-2.编程,输入一个字符串并删除其中的指定字符。例如,对于字符串abcdcf,指定删除c,则结果为:abdf。

    #include <stdio.h>

    void main()

    {

        char str[80],str2[80],letter;

        int i=0, j=0;

       

        printf("请输入一个字符串 ");

        gets(str);

        printf("请输入字符串中要删除的字符 ");

        scanf("%c",&letter);

        while (str[i]!=''){

            if (str[i] != letter)   {

                str2[j++] = str[i];

            }

            i++;

        }

        str2[j]= '';

        puts(str2);

        getch();

    }

    3-3. 编程,输入一行字符,将其反序后再输出。

    #include <stdio.h>

    void main()

    {

        char str[80],letter,str2[80], *p=str, *q=str2;

        int len=0;

        printf("请输入一个字符串 ");

        gets(str);

        while (*p){

            p++;

        }

        len = p-str;

        while (--len>=0){

            *q++ = str[len];

        }

        *q = '';

        puts(str2);

    }

    3-4. 编程,输入一行字符,将其中的每个字符从小到大排列后输出。

    #include <stdio.h>

    void main()

    {

        char str[80],*s=str,temp;

        int i,j,len;

        scanf("%s",str);

        while (*s){

            s++;

        }

        len = s - str;

        for (i = 0; i < len; i++)   {

            for ( j = i+1; j < len; j++){

                if (str[i]>str[j]){

                    temp    =   str[i];

                    str[i]  =   str[j];

                    str[j]  =   temp;

                }

            }

        }

        printf("%s",str);

        getch();

    }

    3-5. 编程,输入两个已经按从小到大顺序排列好的字符串,将两个字符串合并为一个新的从小到大排列字符串并输出。

    #include <stdio.h>

    void main()

    {

        char str[80],str2[80],str3[80],*p=str,*q=str2,*r=str3, *temp_p;

        printf("请输入第一个顺序字符串 ");

        gets(str);

        printf("请输入第二个顺序字符串 ");

        gets(str2);

        while (*p!='' && *q!=''){          

            *r++ = *p <*q ? *p++ : *q++;

        }

        temp_p = *p=='' ? q :p;

        while (*r ++ = *temp_p ++ );

        *r= '';

        puts(str3);

        getch();

    }

    3-6. 输入一行文字,判断该行文字是否是回文。是输出:YES。否输出:NO

    #include <stdio.h>

    void main()

    {

        char input[80],*p,*q;

        p=q=input;

        printf("input string: ");

        gets(input);

        while(*p!='')p++;

        p--;

        while (p>=input) {

            if (*p != *q) {

                printf("NO");

                getch();

                return;

            }

            p--;q++;

        }

        printf("YES");

        getch();

        return;

    }

    3-7. 编程,输入若干个字符串,当输入字符串的长度为0时停止输入。输出最长的字符串。

    #include <stdio.h>

    int strlen(char str[]){

        char *p=str;

        while (*p!='' && p++);

        return p-str;

    }

    //把第二个字符串的值复制给第一个

    void strcpy(char str1[], char str2[]){

        char *p=str2, *q=str1;

        while (*q++ = *p++);

    }

     

    //求最短字符串

    void main()

    {

        char str[80],str2[80];

        int len=0, max_len;

        gets(str);

        max_len= strlen(str);

        strcpy(str2, str);

     

        gets(str);

        do{

            len = strlen(str);

            if (len>max_len){

                max_len = len;

                strcpy(str2, str);

            }

            gets(str);

        } while (str[0]!='');

        printf("%s", str2);

        getch();

    }

     

    3-8. 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

    #include <stdio.h>

    void main()

    {

        char str[80], *p=str;

        int num=0,flag=1;

        gets(str);

        while (*p != ''){

            printf("%d,",*p == ' ');

            if (*p == ' '){

                flag=1;

            }else{

                if(flag)num++;

                flag=0;

            }

            p++ ;

        }

        printf("total %d words", num);

  • 相关阅读:
    紫外传感器波长
    常见设备功耗
    点型感温火灾探测器研发思路
    C#使用Linq to XML进行XPath查询
    题解 最大获利
    题解 走迷宫
    2020-11-16 考试题解
    题解 最小生成树
    题解 「BZOJ4919 Lydsy1706月赛」大根堆
    题解 2020.10.24 考试 T4 模板
  • 原文地址:https://www.cnblogs.com/fengwei/p/3160731.html
Copyright © 2020-2023  润新知