C语言,求帮忙

如题所述

问题共分三题:

1、判断回文:用两个指针指向字符串两头,往中间汇合,同时比较值,全部相等为回文。

2、猜数字:用随机数函数即可,但题目强调用指针,所以代码用递归写,指针传址。

3、数据结构:这种上限不定,且需要删除功能,用结构链表写更好,但考虑你学习范围,改用结构数组。

下面是代码:

//----------题1

#include <stdio.h>

int plalindrome(char str[]);//判断回文,是返回1,否返回0

int main()

{

    char str[50];

    while(1)

    {

        printf("请输入要判断的字符串:\n");

        scanf("%s",str);

        printf("判断结果:%s\n",plalindrome(str)?"Yes":"No");

    }

    return 0;

}

int plalindrome(char str[])

{

    char *p0=str,*p1=str;

    while(*p1!=0)p1++;

    p1--;

    while(p0<p1)

    {

        if(*p0!=*p1) return 0;

        p0++,p1--;

    }

    return 1;

}

//----------题2

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int guess(int *cnt,int *n);

int main()

{

    srand(time(NULL));

    printf("cnt- %d\n",guess(NULL,NULL));

    return 0;

}

int guess(int *cnt,int *n)

{

    int num,t,rn;

    if(cnt==NULL) cnt=&t,t=0;

    if(n==NULL) n=&rn,rn=rand()%100+1;

    printf("please input a number:"),scanf("%d",&num);

    (*cnt)++;

    if(num<*n) printf("input a big one\n");

    if(num>*n) printf("input a small one\n");

    if(num!=*n) guess(cnt,n);

    return *cnt;

}

//----------题3

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

#define MS 30//学生人数上限

typedef struct student

{

    char sid[20];

    char sname[20];

    char pnum[20];

    char qq[20];

}STU;

int sn=0;//当前学生人数

void showStu(STU stus[]);

int insertInfo(STU stus[]);

int delInfo(STU stus[]);

void refcon();

int main()

{

    int n;

    STU stus[MS];

    while(1)

    {

        printf("----班级通讯录----\n");

        printf("1、显示所有信息\n");

        printf("2、增加一条信息\n");

        printf("3、删除一条信息\n");

        printf("请输入序号:"),scanf("%d",&n);

        switch(n)

        {

            case 1:showStu(stus);refcon();break;

            case 2:insertInfo(stus);refcon();break;

            case 3:delInfo(stus);refcon();break;

        }

    }

    return 0;

}

void refcon()

{

    printf("按任意键继续。。。。。。。"),getch();

    system("cls");

}

void showStu(STU stus[])

{

    int i;

    if(sn>0)

    {

        printf("%20s %20s %20s %20s\n","学号","姓名","手机","QQ号");

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

            printf("%20s %20s %20s %20s\n",stus[i].sid,stus[i].sname,stus[i].pnum,stus[i].qq);

    }

}

int insertInfo(STU stus[])

{

    if(sn==MS)

    {

        printf("班级人数已达上限,请修改上限!\n");

        return 0;

    }

    printf("请输入学号:"),scanf("%s",stus[sn].sid);

    printf("请输入姓名:"),scanf("%s",stus[sn].sname);

    printf("请输入手机:"),scanf("%s",stus[sn].pnum);

    printf("请输入QQ号:"),scanf("%s",stus[sn].qq);

    sn++;

    fflush(stdin);

    return 1;

}

int delInfo(STU stus[])

{

    int i,j;

    char sid[20];

    if(!sn)return 0;

    showStu(stus);

    printf("请输入要删除学生的学号:"),scanf("%s",sid);

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

        if(strcmp(stus[i].sid,sid)==0)

        {

            for(j=i;j<sn;j++)

                stus[j]=stus[j+1];

            printf("删除成功!\n");

            sn--;

            return 1;

        }

    printf("未找到对应学号!\n");

    fflush(stdin);

    return 0;

}

温馨提示:答案为网友推荐,仅供参考
相似回答