| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:综合编程题
只看楼主 加入收藏
下个路口再见
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-12-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
综合编程题
有没有大神能给一个编程啊,就是综合数组、循环、指针、调用函数的那种,谢谢了
2016-12-11 14:20
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
在同一个数据域中,指针和数组最好二选一,两者都用容易发生混乱~至于循环加调用函数,兼并为递归函数吧,递归也是循环的一种。

如果真的要用,用链表做个信息管理系统玩玩,一个结构体成员要你输入学生名称,这个是数组,链表指针,这个是指针,用循环来查找插入节点,这个是循环,调用信息管理系统各个功能,这个是调用函数。还差个文件输入和输出呢,例如还要保持各个学生的数据~够你玩了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-11 14:46
下个路口再见
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-12-11
收藏
得分:0 
回复 2楼 九转星河
说得好简单啊 然而不会做 大神可以帮帮我吗
2016-12-12 21:09
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
写一个结构类型列表
2016-12-12 21:42
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 下个路口再见
我以前做了一个,工程量很大的,诶,现在感觉以前写的不咋专业,不过凑合看看还是可以的~试试看

程序代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Studnet)
void creat();
void print();
void Insert();
void Del();
void Menu();
struct Studnet
{
    int num;
    int score;
    struct Studnet *next;
}*head=NULL,*Mark_head;
int n=0;
void Menu()
{
    printf("菜单:\n输入1创建/加长链表\n");
    printf("输入2插入链表\n");
    printf("输入3删除链表\n");
    printf("输入4输出链表\n");
    printf("输入0退出\n");
}
void creat()
{
    struct Studnet *p1,*p2;
    if (n==0)
    {
        printf("请输入学生的成绩和学号(按0退出)\n");
        Mark_head=p1=p2=(struct Studnet *)malloc(LEN);
        head=p1;
        printf("%d--",n+1);
        scanf("%d%d",&p1->num,&p1->score);
    }
    else
    {
        p1=head;
        while (p1->next)
            p1=p1->next;//这个循环构造是把结构体指针p1移向尾部
        p2=p1;
        n--;
    }
    while (p1->num)
    {
        n++;
        p2->next=p1;
        p2=p1;
        p1=(struct Studnet *)malloc(LEN);
        printf("%d--",n+1);
        scanf("%d%d",&p1->num,&p1->score);
    }
    p2->next=NULL;
}
void print()
{
    struct Studnet *p=head;
    int i=1;
    if (n==0)
    {
        printf("该表为空表,返回菜单\n");
        return;
    }
    while (p)
    {
        printf("%d--",i++);
        printf("%4d %4d\n",p->num,p->score);
        p=p->next;
    }
    printf("\n");
}
void Insert()//插入链表
{
    int point,i;
    struct Studnet *p1=head;
    struct Studnet *p2,*pt=NULL;
    if (n==0)
    {
        printf("该表为空表\n");
        return;
    }
    while (n)
    {
        i=1;                      
        p1=p2=head; //初始化
        printf("插入节点:请输入学生的学号和成绩(学号输入0返回菜单,输入-1查询链表情况)\n");
        p2=(struct Studnet *)malloc(LEN);
        printf("%d--",n+1);
        if (scanf("%d%d",&p2->num,&p2->score)&&p2->num==0)
            return;
        else if (p2->num==-1)
        {
            printf("链表数据如下:\n");
            print();
            printf("\n请重新输入数据(学号输入0返回菜单)\n");
            printf("%d--",n+1);
            if (scanf("%d%d",&p2->num,&p2->score)&&p2->num==0)
            return;
        }
        printf("请选择你要插入的节点位置(现在共有%d个节点,按0返回菜单)\n",n);
        while (scanf("%d",&point)&&(point>n||point<1)&&point!=0)
            printf("找不到该节点\n");
        if (point==0)
            return;
        while (1)
        {
            if (point==1)//插入节点在头部
            {
                p2->next=p1;
                head=p2;
                Mark_head=p2;
                n++;
                printf("插入成功\n");
                break;
            }
            else if (point==n)//插入节点在尾部
            {
                while (p1->next)
                    p1=p1->next;
                p1->next=p2;
                p2->next=NULL;
                n++;
                printf("插入成功\n");
                break;
            }
            if (point!=i+1)
            {
                p1=p1->next;
                i++;
            }
            else //插入节点在中间
            {
                pt=p1->next;
                p1->next=p2;
                p2->next=pt;
                n++;
                printf("插入成功\n");
                break;
            }
        }
    }
    printf("该表为空表\n");
}
void Del()//删除节点
{
    struct Studnet *p1,*p2,*pt;
    int point,i;
    if (n==0)
    {
        printf("该表为空表\n");
        return;
    }
    while (1)
    {
        i=1;
        p1=p2=head;//初始化
        printf("请选择要删除的节点(现在共有%d个节点,按0返回菜单,按-1输出链表)\n",n);
        while (scanf("%d",&point)&&(point<0||point>n)&&point!=0)
        {
            if (point==-1)
            {
                print();
                Del();
            }
            if (n==0)
                return;
            printf("找不到该节点\n");
        }
        if (point==0)
            return;
        while (1)
        {
            if (point==1&&n!=1)//删除节点在头部
            {
                head=head->next;
                p1=head;
                free(Mark_head);
                Mark_head=p1;
                n--;
                printf("已成功删除节点\n");
                break;
            }
            if (point==n&&n!=1)//删除节点在尾部
            {
                while (p1->next)
                {
                    p2=p1;
                    p1=p1->next;
                }
                free(p1);
                p2->next=NULL;
                printf("已成功删除节点\n");
                n--;
                break;
            }
            if (n==1)//当链表只有一个节点的时候
            {
                free(Mark_head);
                n--;
                printf("已成功删除节点--现在链表为空表\n");
                return;
            }
            if (point!=i)//删除节点在中间
            {
                if (i!=1)
                    p2=p2->next;
                p1=p1->next;
                i++;
            }
            else  //找到删除的节点
            {
                pt=p2->next;
                p1=p1->next;
                p2->next=p1;
                free(pt);
                n--;
                printf("已成功删除节点\n");
                break;
            }
        }
    }
}
int main()
{
    short choice;
    Menu();
    while (scanf("%d",&choice)&&choice)
    {
        fflush(stdin);
        system("cls");
        switch (choice)
        {
           case 1:creat();break;
           case 2:Insert();break;
           case 3:Del();break;
           case 4:print();break;
        }
        if (choice)
            Menu();
    }
    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-12 22:24
下个路口再见
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-12-11
收藏
得分:0 
我的天呐 有木有简单一点的。。。
2016-12-21 21:52
快速回复:综合编程题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022522 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved