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;
}