2019.07.18

难过!!!今天又是作业写不出来的一天!终于开始看指针了,一直拖着,要挤出时间赶紧把指针看完。
今天写的一些题目,查阅资料后做出来的,要多复习复习!
1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <stdio.h>


int main() 
{
    int i,j,k;
    int num=0;/*三为数个数计数器*/
    for(i = 1;i <= 4;i++)
    {
        for(j = 1;j <= 4;j++)
        {
            for(k = 1;k <= 4;k++)/*三为数的每一位都可以是1~4其中一个*/
            {
                if(i != j && i != k && j != k)/*三个数不能重复*/
                {
                    printf(" %3d",100*i+10*j+k);
                    num++;
                }
            }
        }
    }
    putchar('\n');
    printf("有%d个这样的数\n",num);
    return 0;
}

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

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

int main()
{
    int i;
    int x,y;/*存放i+100和i+268开根厚的值*/

    for(i = 0;i < 100000;i++)
    {
        x = sqrt(i + 100);
        y = sqrt(i + 268);
       
        /*i是整型,如果x和y的平方刚好是i+100,i+268,说明x,y也是整数*/
        if((x * x == i + 100) && (y * y == i + 268) )
        {
            printf("%d\n",i);
        }
    }

    return 0;
}

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

#include <stdio.h>
int main()

{
    int n;
    int i;
    printf("请输入一个整数:");
    scanf("%d",&n);
    printf("%d=",n);
    for(i = 2;n >= 2 && n < 100000;)
    {
        if(n % i == 0)
        {
            printf("%d",i);
            n = n / i;
            if(n != 1)
            {
                putchar('*');
            }
        }
        else
        {
            i++;
        }
    }
    putchar('\n');
    return 0;
}

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

#include <stdio.h>
int main()
{
    int m,n;
    int mul;
    int max,min;
    int tmp=0;

    printf("请输入两个数:");
    scanf("%d%d",&m,&n);
    min = (m<n) ? m : n;/*比较两数的大小*/
    max = (m>n) ? m : n;
    mul = m * n;

    if(max % min == 0)/*max正好是min的倍数*/
    {
        printf("最大公因数是:%d最小公倍数是:%d\n",min,max);
    }
    while(max % min != 0)/*举例 24和18 24%18=6 18%6=0 取余数直到为0
                           此时最大公因式是6 最小公倍数是24*18/6*/
    {
        tmp = min;
        min = max % min;
        max = tmp;

        printf("最大公因数是:%d最小公倍数是:%d\n",min,mul / min);
    }
    return 0;

}

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

#include <stdio.h>
int change(char *str)
{
    int i = 1;
    int num = 0;
    while(*str != '\0')
    {
        if(*str == '-')
        {
            i = -1;
        }
        if(*str >= '0' && *str <= '9')
        {
            num = num * 10 +(*str - '0');
        }
        str++;
    }
    return num*i;
}

int main()
{
    char str[128];

    printf("输入字符串:");
    fgets(str,128,stdin);
    printf("转换之后:%d\n",change(str));

    return 0;
}

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

#include <stdio.h>

void count(const char *str)
{
    int word_cnt = 0;
    int num_cnt = 0;
    int space_cnt = 0;
    while(*str != '\0')
    {
        if((*str >='a' && *str <= 'z')|| (*str >= 'A' && *str <= 'Z'))
        {
            word_cnt++;
        }
        else if(*str >='0' && *str <='9')
        {
            num_cnt++;
        }
        else if(*str == ' ')
        {
            space_cnt++;
        }
        str++;
    }
        printf("字母:%d数字:%d空格:%d\n",word_cnt,num_cnt++,space_cnt++);  
}

int main()
{
    char a[100];

    printf("请输入一行字符串:");
    fgets(a,100,stdin);
    count(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 i,j;
    int a[20][20]={0};
    int num = 1;
    int n;

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

    int m = n;
    for(i = 0;i <= n;i++)
    {
        j = i;
    while(j < m - i)
    {
        a[i][j++] = num++;
    }

    int tmp = i + 1;
    j = m - 2 - i;
    while(j >= i)
    {
        a[tmp++][j--] = num++;
    }
    j = i;
    tmp = m - 2 - i;
    while(tmp > i)
    {
        a[tmp--][j] = num++;
    }
    m = m - 1;
    }
    int k;
    for(i = 0;i < n;i++)
    {
        for(k = 0;k < n - i;k++)
        {
            printf("%4d",a[i][k]);
        }
        putchar('\n');
    }

    return 0;
}

  1. 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)
#include <stdio.h>
#define N 12

int main()
{
    int date[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
        {31,29,31,30,31,30,31,31,30,31,30,31}};
    int year,month,day;
    int x,t;
    int i;

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

    t = x;/*下面的循环中x的值发生改变,先用一个变量存一下x的值最后输出*/
    if((year % 4 == 0 && year % 100 !=0)||(year % 400 == 0))/*判断闰年*/
    {
        for(i = 0;i < N;i++)
        {
            x = x - date[1][i];/*x依次减去每个月的月份,直到满足if条件*/
            if(x > 0 && x < 32)
            {
                break;
            }
        }
    }
    else
    {
        for(i = 0;i < N;i++)
        {
            x = x - date[0][i];
            if(x > 0 && x < 32)
            {
                break;
            }
        }
    }

    month = i + 1 + 1;/*i从0开始所以多加一个1*/
    day = x;

    printf("%d年的第%d天是%d年%d月%d日",year,t,year,month,day);

    return 0;
}

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

#include <stdio.h>
#include<time.h>
#include<stdlib.h>

int random_100(void)
{
    int a;

    srand((unsigned)time(NULL));
    a = rand() % 100 + 1;

    return a;
}

int main()
{
    int *p;
    int *min;
    int tmp;
    int num[10];
    int i;
    int j;

    for(i=0;i<10;i++)
    {
        num[i] = random_100();
        sleep(1);
    }

    for(i=0;i<9;i++)
    {
        p = num;
        p++;
        min = num;
        for(j = 0;j < 9 - i;j++)
        {
            if((*min)<(*p))
            {
                tmp = *min;
                *min = *p;
                *p = tmp;
            }
            
            p++;
            min++;
        }
    }

    p = num;

    for(i = 0;i < 10;i++)
    {
        printf("result is : %d\n",*p);
        p++;
    }

    return 0;
}

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

#include <stdio.h>
#include<time.h>
#define N 26

int main()
{
    srand(time(0));
    int i,j,t;
    char str[N];

    for(i = 0;i < N;i++)/*随机生成26个字母*/
    {
        str[i] = rand() % N + 'a';
    }
    for(i = 0;i < N;i++)
    {
        printf("%4c",str[i]);/*因为输出单个字符,用%c*/
    }
    putchar('\n');

    for(i = 0;i < N - 1;i++)/*冒泡排序法*/
    {
        for(j = 0;j < N - i - 1;j++)
        {
            if(str[j] > str[j + 1])
            {
                t = str[j];
                str[j] = str[j + 1];
                str[j + 1] = t;
            }
        }
    }
    
    printf("result is :");/*放在循环外面就不会打印26次*/
    for(i = 0;i < N;i++)
    {
        printf("%4c",str[i]);
    }
    putchar('\n');

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值