7月18日作业题练习

题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <stdio.h>

int main()
{
    int i,j,k;                                             //定义三个循环变量
    int count = 0;                                           //定义一个计数器并初始化
    int number;
    
    for(i = 1;i <= 4;i++)
    {
        for(j = 1;j <= 4;j++)
        {
            for(k = 1;k <= 4;k++)
            {
                number = ( i * 100 ) + ( j * 10 ) + k;     //得到三位数
                count++;                                   //计数
                printf("%5d",number);                      //输出三位数
            }
        }
    }

    printf("输出组成的个数:%d\n",count);

    return 0;
}


题目2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

#include <stdio.h>
#include <math.h>

int main()
{
    int num;
    int i;

    for(num = 0;num < 10000;num++)
    {
        if((( num + 100 ) == (sqrt(num + 100) * sqrt(num + 100))))   //判断
        {
            i = num + 100;
            if((( i + 168 ) == (sqrt(i + 168) * sqrt(i + 168))))
                {
                    printf("%d\n",num);
                }
        }
    }
    printf("\n");

    return 0;
}

题目3:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

#include <stdio.h>
#include <math.h>

void prime(int n)
{
    int i;                                      //定义一个质因子,当作循环变量
    int p;                                      //用来存放整数n

    p=n;

    printf("%d=",p);

    for(i = 2;i <= sqrt(n);i++)                 //for循环求出每个质因子
    {
        if(n%i == 0)
        {
            printf("%d*",i);
            n = n / i;
        }
        else
        {
            break;
        }
    }
    printf("%d",n);
    
    printf("\n");

}

int main()
{
    int num;                                    

    printf("输入一个整数:\n");
    scanf("%d",&num);

    prime(num);                                 //采用构造的函数求出结果

    return 0;
}

题目4:输入两个正整数m和n,求其最大公约数和最小公倍数。

#include <stdio.h>
void div_mul(int n,int m)
{
    int temp;                              //定义一个中间变量
    
    if(n < m)                                //保证n大于m
    {
        temp = n;
        n = m;
        m = temp;
    }

    int a,b;                                 //记录n,m

    a=n;
    b=m;

    int c_div;                               //定义公约数
    int c_mul;                               //定义最大公倍数
    int t;                                   //定义一个判定条件

    while(t != 0)                        //利用while循环求出最大公约数
    {
        t = n % m;
        n = m;
        m = t;
    }
    
    c_div=n;
    
    printf("最大公约数:%d\n",c_div);

    c_mul = (a / c_div) * (b / c_div) * c_div;

    printf("最大公倍数:%d\n",c_mul);
}
int main()
{
    int i,j;

    printf("输入两个整数:\n");
    scanf("%d%d",&i,&j);

    div_mul(i,j);

    return 0;
}

题目5:输入一行字符,分别统计出其中英文字母、空格、数字的个数。

#include <stdio.h>
#include <string.h>

void sta(char a[100])                                 //定义一个统计函数
{
    int lenth = strlen(a);                            //用作计算字符串
    int i;                                            //定义一个循环变量
    
    //定义个数并初始化
    int num = 0;
    int word = 0;
    int sp = 0;

    a[lenth-- - 1] = '0';

    for(i = 0;i < lenth;i++)
    {
        if(a[i] >= '0' && a[i] <= '9')                //判断数字的字数
        {
            num++;
        }

        if(a[i] >= 'A' && a[i] <= 'Z' 
                || a[i] >= 'a' && a[i] <= 'z')        //判断英文字母的个数
        {
            word++;
        }

        if(a[i] == ' ')                               //判断空格的个数
        {
            sp++;
        }
    }

    printf("英文字母的个数:%d\n",word);
    printf("数字的个数:%d\n",num);
    printf("空格的个数:%d\n",sp);

}

int main()
{
    char array[100];

    printf("输入一串字符:\n");
    fgets(array,100,stdin);

    sta(array);

    return 0;
}

题目6:写一个函数,将字符串转换成带符号整型数据,注意判断字符串长度
如:“-123134” -123134 , “123134” 123134

#include <stdio.h>
#include <string.h>

void turn(char * p)
{
    int i=1;                              //符号标志
    int num=0;                            

    while(*p != '\0')                     //判断是否为NULL
    {
        if(*p == '-')                     //判断开头是否为负号
        {
            i = -1;
        }

        if(*p >= '0' && *p <= '9')
        {
            num = (num * 10) + (*p - '0');      //转为整型数据
        }

        p++;
    }
    
    printf("结果:%d\n",num*i);

}

int main()
{
    char a[100];
    int i;

    printf("输入字符串:\n");
    
    fgets(a,100,stdin);
    
    //消除'\n'字符
    i = strlen(a);
    a[i] = 0;
    
    turn(a);

    return 0;
}


题目7:方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3…的自然数列,从左上角开始,
按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。(所有函数写在一个函数中)

#include <stdio.h>

int main()
{
    int n;                                       

    printf("输入一个整数:\n");
    scanf("%d",&n);

    int i,j;                                    //定义循环变量
    int a[n][n];

    //初始化二维数组
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < n;j++)
        {
            a[i][j] = 0;
        }
    }

    int count=1;                               //定义一个赋值元素并初始化为1
    i = 0;

    //给数组赋值
    for(i = 0;i < n;i++)
    {
        for(j = i;j < (n-2*i-1);j++)           //行赋值
        {
            a[i][j] = count++;
        }

        for(j = i;j < (n-2*i-1);j++)           //对角线赋值
        {
            a[j][n-i-j-1] = count++;
        }

        for(j = i;j < (n-2*i-1);j++)           //列赋值
        {
            a[n-i-j-1][i] = count++;
        }
    }

    //中间不是一个环是一个数
    if((n - 1)%3 == 0)
    {
        a[(n-1)/3][(n-1)/3] = count;
    }

    printf("结果:\n");
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < n;j++)
        {
            if(a[i][j] == 0)                   //如果当前元素是0跳过
            {
                continue;
            }
            else
            {
                printf("%4d",a[i][j]);
            }
        }

        printf("\n");
    
    }

    return 0;
}

题目8: 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)

#include <stdio.h>

int main()
{
    int year,D;

    printf("输入年份和天数:\n");
    scanf("%d%d",&year,&D);

    int t=0;                                               //定义一个判定闰年的条件

    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    {
        t=1;
    }

    int day = 0;                                           //定义一个月多少天并初始化
    int d;                                                 //对天数计次
    int month;

    for(month = 0;month < 12;month++)
    {
        if(month == 1)
        {
            if(t == 1)
            {
                day = 29;
            }
            else
            {
                day = 28;
            }
            for(d = 1;d <= day;d++)
            {
                D--;
                if(D == 0)
                {
                    printf("%d年%d月%d日",year,month+1,d);
                }
            }
        }

        else
        {
            if(month % 2 == 0)
            {
                day = 31;
            }
            else
            {
                day = 30;
            }
            for(d = 1;d <= day;d++)
            {
                D--;
                if(D == 0)
                {
                    printf("%d年%d月%d日",year,month+1,d);
                }
            }
        }
    }

    return 0;
}


题目9: 取十个1-100的随机整数,然后倒序打印出来。(通过指针,而不是数组下标)

#include <stdio.h>

int main()
{
    int a[10];
    int i;                                        //循环变量
    
    printf("输入10个数:\n");
    for(i = 0;i < 10;i++)
    {
        scanf("%d",&a[i]);
    }

    int * p;

    p = a;                                    //p对应着数组a的首地址

    for(i = 9;i >= 0;i--)
    {
        printf("%5d",*(p+i));
    }

    printf("\n");

    return 0;
}

题目10: 通过随机函数获取到26个小写英文字母,存储到数组里并小写字母顺序打印出来。

#include <stdio.h>

int main()
{
    char a[26];
    int i;                                //循环变量

    //随机输入26个字母
    for(i = 0;i < 26;i++)
    {
        a[i] = 'a' + (rand() % 26);
    }

    printf("输出排序之前的:\n");

    for(i = 0;i < 26;i++)
    {
        printf("%2c",a[i]);
    }

    printf("\n");

    //冒泡排序
    char min;
    int j;                               //循环变量

    for(i = 1;i < 26;i++)
    {
        for(j = 25;j >= i;j--)
        {
            if(a[j] < a[j-1])            //元素交换
            {
                min = a[j];
                a[j] = a[j-1];
                a[j-1] = min;
            }
        }
    }

    printf("输出排序后的:\n");

    for(i = 0;i < 26;i++)
    {
        printf("%2c",a[i]);
    }

    printf("\n");

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值