几道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);

原文地址:https://www.cnblogs.com/fengwei/p/3160731.html