华南农业大学C语言oj第八章

版权声明:本文版权属CSDN博客黑兔子撒所有,转载请申明版权。 https://blog.csdn.net/weixin_41409140/article/details/88071047

18058 一年的第几天

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

定义一个结构体类型表示日期类型(包括年、月、日)。程序中定义一个日期类型的变量,输入该日期的年、月、日,

计算并输出该日期是一年的第几天。

#include <stdio.h> 

struct DATE 
{ 
_______________________ 
}; 

int days(struct DATE date) 
{ 
_______________________ 
} 

int main() 
{ 
    struct DATE d; 
    scanf("%d-%d-%d", &d.year, &d.month, &d.day); 
    printf("%d", days(d)); 
} 

输入格式

年月日,格式如样例

输出格式

该年的第几天

输入样例

扫描二维码关注公众号,回复: 5757096 查看本文章

2015-1-1

输出样例

1

$block1$

int year;

    int month;

    int day;

$end1$

$block2$

int day;

    if(date.month==1)day=0;

    else if(date.month==2)day=31;

    else if(date.month==3)day=59;

    else if(date.month==4)day=90;

    else if(date.month==5)day=120;

    else if(date.month==6)day=151;

    else if(date.month==7)day=181;

    else if(date.month==8)day=212;

    else if(date.month==9)day=243;

    else if(date.month==10)day=273;

    else if(date.month==11)day=304;

    else if(date.month==12)day=334;

    if(date.year%4==0&&date.year%100!=0||date.year%400==0)

    {

        if(date.month>=3)

        {

            day=day+1;

        }

    }

    day=day+date.day;

    return day;

$end2$

 

18059 学生成绩表

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

输入10个学生,每个学生的数据包括学号、姓名、3门课的成绩。定义结构体类型表示学生类型,输入10个学生的数据,

计算每个学生的平均成绩。按平均成绩由高到低输出所有学生信息,成绩相同时按学号从小到大输出。

#include <stdio.h> 

struct data 
{ 
_______________________ 
}; 

int main() 
{ 
    int i,j; 
    struct data stu[10],tmp; 
    for(i=0; i<10; i++) 
    { 
_______________________ 
    } 
    for(i=0; i<9; i++) 
        for(j=0; j<9-i; j++) 
        { 
_______________________ 
        } 
    for(i=0; i<10; i++) 
    { 
        printf("%d %s %.0lf %.0lf %.0lf\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]); 
    } 
    return 0; 
} 

输入格式

10个学生信息,每行一个学生

输出格式

如题

输入样例

1 aaa 50 60 70

2 bbb 50 50 50

3 ccc 60 70 80

4 ddd 40 40 40

5 eee 70 80 90

6 fff 30 30 30

7 ggg 80 90 100

8 hhh 20 20 20

9 iii 100 100 100

10 jjj 10 10 10

输出样例

9 iii 100 100 100

7 ggg 80 90 100

5 eee 70 80 90

3 ccc 60 70 80

1 aaa 50 60 70

2 bbb 50 50 50

4 ddd 40 40 40

6 fff 30 30 30

8 hhh 20 20 20

10 jjj 10 10 10

$block1$

    int num;

    char name[20];

    double score[3];

    double average;

$end1$

$block2$

        scanf("%d%s%lf%lf%lf", &stu[i].num, stu[i].name, stu[i].score, stu[i].score+1, stu[i].score+2);

         stu[i].average=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];

$end2$

$block3$

            if(stu[j].average<stu[j+1].average)

            {

                tmp=stu[j];stu[j]=stu[j+1];stu[j+1]=tmp;

            }

$end3$

 

18060 删除空格

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

用指针方法解决,输入一个字符串,删除字符串中所有空格后,输出字符串

#include <stdio.h> 

void removeSpace(char *s) 
{ 
_______________________ 
} 

int main() 
{ 
    char s[81]; 
    gets(s); 
    removeSpace(s); 
    printf("%s", s); 
    return 0; 
} 

输入格式

一行字符,以换行回车结束,最多不超过80个字符

输出格式

删除所有空格后输出

输入样例

abc    456

输出样例

abc456

标程

$block1$

    int i=0,j=0;

    while(s[j]!='\0')

    {

        if(s[j]==' ') j++;

        else

            s[i++]=s[j++];

    }

    s[i]='\0';

$end1$

 

18061 数的交换

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

输入10个整数,把其中最小的数与第一个数交换,最大的数与最后一个数交换。使用3个函数解决问题:

(1) 输入10个整数的函数

(2) 进行交换处理的函数

(3) 输出10个数的函数

#include <stdio.h> 

void input(int a[]) 
{ 
    _______________________ 
} 

void swap(int a[]) 
{ 
    _______________________ 
} 

void display(int a[]) 
{ 
    int i; 
    for(i=0; i<10; i++) 
        printf("%d\n", a[i]); 
} 

int main() 
{ 
    int a[10]; 
    input(a); 
    printf("input done\n"); 
    swap(a); 
    printf("swap done\n"); 
    display(a); 
    printf("display done\n"); 
    return 0; 
} 

输入格式

输入10个整数

输出格式

输出结果,一行一个数字

输入样例

2 1 3 4 5 6 7 8 9 0

输出样例

input done

swap done

0

1

3

4

5

6

7

8

2

9

display done

$block1$

    int i;

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

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

$end1$

$block2$

    int temp,mini,maxi;

    int i;

    mini=0;

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

        if(a[mini]>a[i])

            mini=i;

    temp=a[mini];a[mini]=a[0];a[0]=temp;

    maxi=0;

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

        if(a[maxi]<a[i])

            maxi=i;

    temp=a[maxi];a[maxi]=a[9];a[9]=temp;

$end2$

 

18062 二维数组每行中的最大值

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

输入一个4*4的二维整型数组,使用指针变量查找并输出二维整型数组中每一行的最大值。

#include <stdio.h> 

void find(int a[][4]) 
{ 
    int (*p)[4], *q, *max; 
    for(_______________________) 
    { 
        max=*p; 
        for(_______________________) 
        { 
_______________________ 
        } 
        printf("%d\n", *max); 
    } 
} 

int main() 
{ 
    int a[4][4],i,j; 
    for(i=0; i<4; i++) 
        for(j=0; j<4; j++) 
            scanf("%d", &a[i][j]); 
    find(a); 
    return 0; 
} 

输入格式

4*4的整数矩阵

输出格式

每行最大值,一行一个

输入样例

1 2 3 4

8 7 6 5

1 1 1 1

2 2 2 2

输出样例

4

8

1

2

标程

$line1$

p=a; p<a+4; p++

$line2$

q=*p+1; q<*p+4; q++

$block1$

            if(*max<*q)

                *max=*q;

$end1$

 

18063 圈中的游戏

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC;VC

Description

有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。

输入格式

输入一个数n,1000000>=n>0

输出格式

输出最后留下的人的编号

输入样例

3

输出样例

2

#include <stdio.h>

int c[1000000];



int main()

{

    int i, j, n, pre, cur;

    scanf("%d", &n);

    if(n==1) printf("1\n");

    else

    {

        for(i=0; i<n-1; i++) c[i]=i+1;

        c[n-1]=0;

        cur=n-1;

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

        {

            for(j=0; j<3; j++)

            {

                pre = cur;

                cur=c[cur];

            }

            c[pre]=c[cur];

        }

        printf("%d", pre+1);

    }

    return 0;

}


 

18064 链表的有序合并

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 填空题   语言: G++;GCC;VC

Description

已知有两个链表a和b,结点类型相同,均包括一个int类型的数据。编程把两个链表合并成一个,结点按升序排列。

#include "stdio.h" 
#include "malloc.h" 
#define LEN sizeof(struct DATA) 

struct DATA 
{ 
     long num; 
     struct DATA *next; 
}; 

struct DATA *create(int n) 
{ 
     struct DATA *head=NULL,*p1=NULL,*p2=NULL; 
     int i; 
     for(i=1;i<=n;i++) 
     {  p1=(struct DATA *)malloc(LEN); 
        scanf("%ld",&p1->num); 
        p1->next=NULL; 
        if(i==1) head=p1; 
        else p2->next=p1; 
        p2=p1; 
      } 
      return(head); 
} 

struct DATA *merge(struct DATA *head, struct DATA *head2) 
{ 
    _______________________ 
    return head; 
} 

struct DATA *insert(struct DATA *head, struct DATA *d) 
{ 
    _______________________ 
    return head; 
} 

struct DATA *sort(struct DATA *head)  
{  
    _______________________ 
    return head; 
}  

void print(struct DATA *head) 
{ 
    struct DATA *p; 
    p=head; 
    while(p!=NULL) 
    { 
        printf("%ld",p->num); 
        p=p->next; 
        printf("\n"); 
    } 
} 

main() 
{ 
    struct DATA *head, *head2; 
    int n; 
    long del_num; 
    scanf("%d",&n); 
    head=create(n); 
    scanf("%d",&n); 
    head2=create(n); 
    head = merge(head, head2); 
    head = sort(head); 
    print(head); 
} 

输入格式

第一行一个数n,表示第一个列表的数据个数

每二行为n个数

第三行为一个数m

第四行为m个数

输出格式

输出合并后的有序的数据,一行一个数

输入样例

2

4 8

3

9 1 5

输出样例

1

4

5

8

9

$block1$

    struct DATA *p;

    p=head;

    while(p->next!=NULL) p=p->next;

    p->next = head2;

    return head;

$end1$

$block2$

struct DATA *p0,*p1,*p2;

p1=head;

p0=d;

if(head==NULL){head=p0;p0->next=NULL;}

else

{while((p0->num>p1->num)&&(p1->next!=NULL))

{ p2=p1;

  p1=p1->next;}

  if(p0->num<=p1->num)

  { if(head==p1)head=p0;

    else p2->next=p0;

    p0->next=p1;

  }

  else {p1->next=p0;p0->next=NULL;}

}

$end2$

$block3$

struct DATA *p1,*p2;

p2=head;p1=head;

p2=p2->next;

p1->next=NULL;

p1=p2;

while(p2->next!=NULL)

{

  p2=p2->next;

  p1->next=NULL;

  head=insert(head,p1);

  p1=p2;

}

head=insert(head,p1);

$end3$

猜你喜欢

转载自blog.csdn.net/weixin_41409140/article/details/88071047