c语言练习题2

1. 指针练习,输入年份和天数,得到对应的具体日期

#include<stdio.h>

void select_day(int year, int day, int * pmonth, int * pdata);
int main(void)
{
    int year, day, month, data;
    printf("input year and day:");
    scanf_s("%d %d", &year, &day);
    select_day(year, day, &month, &data);
    printf("the day is %d-%d-%d.\n", year, month, data);


    return 0;
}
void select_day(int year, int day, int * pmonth, int * pdata)
{

    int flag,i;
    int a[2][13] ={
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31},
    };
    flag = (year % 4 ==0&& year % 100 != 0 )|| (year % 400 == 0);
    
        for (i = 1; day > a[flag][i]; i++)
        {
                day = day - a[flag][i];
        }
        *pmonth = i;
        *pdata = day;

}

2. 加密通话(每个字符后移一位,z变为a)

void encrypt(char *input);
int main(void)
{
    char inp[100];

    printf("please input the word:");
    gets(inp);
    encrypt(inp);
    printf("the encrypt word is:%s\n",inp);



    return 0;
}
void encrypt(char *input)
{
    int i;
    //使用指针排序
    /*for (; *input != 0; *input++)
    {
        
        if (*input == 'z')
            *input = 'a';
        else
            *input =*input+1;
    }*/
    //数组排序
    for (i = 0; input[i] != '\0'; i++)
    {
        if (input[i] == 'z')
            input[i] = 'a';
        else
            input[i] = input[i] + 1;
    }
}

3. 定义结构体,输入n个学生的姓名、学号、三门课的成绩,输出平均值最大的学生

struct student {
    char name[20];
    int id;
    int chinese, english, math;
    double average;
};

int main(void)
{
    int i, n;
    struct student s1, max;//定义结构体

    printf("please input n:");
    scanf_s("%d", &n);
    printf("please input the student's message:name id chinese english math:\n");
    for (i = 1; i <=n; i++)
    {
        printf("no.%d ", i);
        scanf_s("%s %d %d %d %d", s1.name,20, &s1.id, &s1.chinese, &s1.english, &s1.math);
        s1.average = ((double)(s1.chinese + s1.english + s1.math)) / 3.0;
        if (i == 1)
            max = s1;
        if (max.average<s1.average)
        {
            max = s1;
        }
    }
    printf("the best student is %d %s,the average is %lf.\n",max.id,max.name,max.average);

    return 0;
}

4. 学生成绩排序

struct student {
    char name[20];
    int id;
    int chinese, english, math;
    double average;
};
int main(void)
{
    int i, n,j,point;
    struct student s1[50],max;//定义结构体

    printf("please input n:");
    scanf_s("%d", &n);
    printf("please input the student's message:name id chinese english math:\n");
    for (i = 0; i < n; i++)
    {
        printf("no.%d ", i);
        scanf_s("%s %d %d %d %d", s1[i].name, 20, &s1[i].id, &s1[i].chinese, &s1[i].english, &s1[i].math);
        s1[i].average = ((double)s1[i].chinese + (double)s1[i].english + (double)s1[i].math) / 3.0;
        
    }
    for (i = 0; i <n-1; i++)
    {
        point = i;
        for (j = i+1; j < n; j++)
        {
            if (s1[i].average < s1[j].average)
            {
                point = j;
            }

        }
        max = s1[point];
        s1[point] = s1[i];
        s1[i] = max;
    }
    for (i = 0; i < n; i++)
    {
        printf("the no.%d is %s %d,the grade is %lf.\n", i+1, s1[i].name,s1[i].id, s1[i].average);
    }

    return 0;
}

5. 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。

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

int main(void)
{
    
    char chr[200];
    int temp,i,j,n=100;
    //printf("please input 4 char:");
    gets(chr);
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(chr[j]<chr[i])
            {
                temp=chr[i];
                chr[i]=chr[j];
                chr[j]=temp;
            }
        }
    }
    puts(chr);
    return(0);
}

6. 对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。 请计算需要经过几步才能将n变到1

#include<stdio.h>

int main(void)
{
    int n, flag = 0;
    scanf("%d", &n);
    for (; n != 1;)
    {
        if (n == 0)
        {
            printf(0);
            break;
        }
        if (n % 2)
        {
            //奇数
            n = (n * 3 + 1) / 2;
        }
        else//偶数
        {
            n = n / 2;
        }
        flag++;
    }
    printf("%d", flag);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值