访客

大一c语言必背编程题(大一c语言作业)

240 hacker 黑客接单网

本文目录一览:

大一C语言编程题?

车票根据题意两两站点连线生成,金额和数量分别用随机数。

数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。

购买流程:检查输入数值有效性-检查车票库存-购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码允许一个用户同时购买多种票,每种票可分批购买多张。购买流水记录自动增加和更新。

退票流程:检查输入和用户购买记录,同步更新用户及车票信息。

删除流程:选择删除没有被用户购买的票(函数检查所有用户,虽然本题只要一个用户,实际传参用户数组首地址)。

PS: 这个题目涉及到增删改,用链表来写更好,但考虑你学习范围,没有使用链表而是动态数组,动态数组删除,考虑内存占用,不仅要需循环移位还要释放多余地址。

另外整体程序,异常的处理我只是单纯返回0或者1或者-1区分基本的成功与失败。你如想对个别异常进行特殊处理,自行修改返回值,接收判断。

下面是代码:

#include stdio.h

#include stdlib.h

#include string.h

#include time.h

#include windows.h

#include conio.h

#define MS 5//最大站点数

typedef struct station

{

  char sid[10];

  char sName[20];

}STN;

typedef struct ticket

{

  int tid;//票编号

  STN *ssP;//起始站

  STN *tsP;//终点站

  int value;//票价

  int number;//数量

}TKT;

typedef struct userInfo//用户

{

  char uid[20];//身份证号

  int cnt;//购买的票种类数量

  int *btids;//购买的所有票id数组

  int *btNum;//购买的所有票数量数组

}UIFO;

int init(STN stns[MS],TKT **tkts);//初始化车站、票数据

int disAllTickets(TKT *tkts);

int buyTicket(UIFO *uifo,TKT *tkts);//异常返回0

int reTicket(UIFO *uifo,TKT *tkts);//异常返回0

int showMenu(UIFO *uifo,TKT *tkts);

int delIntByIndex(int *nums,int len,int index);//通过下标index删除动态整型数组nums对应元素,并释放多余地址,返回删除后的数组长度,异常返回-1

int delTkts(UIFO *uifos,int len,TKT *tkts);//删除指定票(检查用户组,只要有一个用户购买,无法删除)

int cnt;//票种类数量

int main()

{

  STN stns[MS];

  TKT *tkts=NULL;

  UIFO uifo={"321002199902050614",0,NULL,NULL};

  srand(time(NULL));

  cnt=init(stns,tkts);

  printf("共生成%d组票(每组往返两种票,共%d种票)\n\n",cnt/2,cnt);

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

  system("cls");

  showMenu(uifo,tkts);

  return 0;

}

int showMenu(UIFO *uifo,TKT *tkts)

{

  int n=5;

  printf("(1) Buy ticket\n");

  printf("(2) Refund ticket\n");

  printf("(3) Remove ticket\n");

  printf("(4) Display all tickets\n");

  printf("(0) Exit\n");

  while(n0 || n4)

      scanf("%d",n);

  switch(n)

  {

      case 0: return 0;

      case 1: if(!buyTicket(uifo,tkts)) return 0;break;

      case 2: if(!reTicket(uifo,tkts)) return 0;break;

      case 3: if(!delTkts(uifo,1,tkts)) return 0;break;

      //这里删除功能,用户多名,要传数组首地址,由于演示只有一个用户(len=对应用户数),所以只传该用户地址(len=1)

      case 4: disAllTickets(tkts);break;

  }

  showMenu(uifo,tkts);

  return 1;

}

int disAllTickets(TKT *tkts)

{

  int i;

  for(i=0;icnt;i++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

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

  system("cls");

  return 1;

}

int delIntByIndex(int *nums,int len,int index)

{

  int i,*temp=NULL;

  if(indexlen-1) return -1;

  for(i=index;ilen-1;i++)

      nums[i]=nums[i+1];

  len--;

  if(len)

  {

      temp=(int *)realloc(nums,sizeof(int)*len);

      if(!temp) return -1;

      nums=temp;

  }

  else

      free(nums);

  return len;

}

int reTicket(UIFO *uifo,TKT *tkts)

{

  int i,j,tid,n,index,len,flag=0;

  printf("当前用户购买记录:\n");

  for(i=0;iuifo-cnt;i++)

  {

      for(j=0;jcnt;j++)

          if(tkts[j].tid==uifo-btids[i]) index=j;

      printf("--车票编号:%d,起末站:%s-%s,购买票数:%d\n",uifo-btids[i],tkts[index].ssP-sName,tkts[index].tsP-sName,uifo-btNum[i]);

  }

  printf("请输入要退票的车票id及票数:"),scanf("%d%d",tid,n);

  for(i=0;iuifo-cnt;i++)

      if(uifo-btids[i]==tid uifo-btNum[i]=n)

      {

          for(j=0;jcnt;j++)

              if(tkts[j].tid==uifo-btids[i]) tkts[j].number+=n;//同步修改对应车票剩余票数

          uifo-btNum[i]-=n;//用户购买记录修改

          if(uifo-btNum[i]==0)//某种车票全部退完,删除该条记录

          {

              len=delIntByIndex(uifo-btNum,uifo-cnt,i);

              if(len==-1) return 0;

              len=delIntByIndex(uifo-btids,uifo-cnt,i);

              if(len==-1) return 0;

              uifo-cnt=len;

          }

          flag=1;

          break;

      }

  if(flag)

      printf("退票成功!\n");

  else

      printf("无此购买记录或输入数量不符合\n");

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

  system("cls");

  return 1;

}

int buyTicket(UIFO *uifo,TKT *tkts)

{

  char spn[20],tpn[20];

  int i,n=-1,index=-1,*temp=NULL;

  for(i=0;icnt;i++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

  printf("请输入始发站站名和终点站站名:"),scanf("%s%s",spn,tpn);

  for(i=0;icnt;i++)

      if(strcmp(tkts[i].ssP-sName,spn)==0 strcmp(tkts[i].tsP-sName,tpn)==0)

      {

          printf("车票%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

          index=i;

          break;

      }

  if(index==-1)

      printf("购买失败!无此路程的车票\n");

  else

  {

      while(n=0)

      {

          printf("请输入要购买的数量(大于0):"),scanf("%d",n);

          if(tkts[index].numbern)

              printf("错误:车票数量不足或者输入数值超出范围!请重新输入!\n"),n=-1;

      }

      for(i=0;iuifo-cnt;i++)//检查用户购买记录,重复票累加购买数量,不同票新增记录

      {

          if(uifo-btids[i]==tkts[index].tid)

          {

              printf("该票已购买了%d张,现再次购买%d张,累计购买了%d张\n",uifo-btNum[i],n,uifo-btNum[i]+n);

              uifo-btNum[i]+=n;

              tkts[index].number-=n;

              break;

          }

      }

      if(i==uifo-cnt)//未检查到重复记录,新增

      {

          if(!uifo-btids)

          {

              uifo-btids=(int *)malloc(sizeof(int));

              if(!uifo-btids) return 0;

              uifo-btNum=(int *)malloc(sizeof(int));

              if(!uifo-btNum) return 0;

          }

          else

          {

              temp=(int *)realloc(uifo-btids,sizeof(int)*(uifo-cnt+1));

              if(!temp) return 0;

              uifo-btids=temp;

              temp=(int *)realloc(uifo-btNum,sizeof(int)*(uifo-cnt+1));

              if(!temp) return 0;

              uifo-btNum=temp;

          }

          uifo-btids[uifo-cnt]=tkts[index].tid;

          printf("该票购买了%d张\n",(uifo-btNum[uifo-cnt]=n));

          tkts[index].number-=n;

          uifo-cnt++;

          printf("用户购买记录:\n");

          for(i=0;iuifo-cnt;i++)

              printf("--车票编号:%d,购买票数:%d\n",uifo-btids[i],uifo-btNum[i]);

      }

      printf("本次成功购买了%s-%s的票%d张!\n",tkts[index].ssP-sName,tkts[index].tsP-sName,n);

  }

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

  system("cls");

  return 1;

}

int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有购买的用户数量

{

  int i,j,k,tid,flag=0,index;

  for(i=0;icnt;i++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

  printf("请输入要删除的车票编号:"),scanf("%d",tid);

  for(i=0;icnt;i++)

      if(tid==tkts[i].tid)

      {

          index=i;

          flag=1;

          for(j=0;jlen;j++)//检查所有用户购买记录

          {

              for(k=0;kuifos[j].cnt;k++)

                  if(uifos[j].btids[k]==tid)

                  {

                      flag=0;

                      printf("该票已被用户购买,无法删除,需先完成退票!\n");

                      break;

                  }

              if(!flag)

                  break;

          }

          break;

      }

  if(!flag) printf(" 删除失败,输入数值超出范围或不可删除!\n");

  else

  {

      cnt--;

      if(cnt==0)

      {

          free(tkts[index].ssP);

          free(tkts[index].tsP);

          free(tkts[index]);

      }

      else

      {

          free(tkts[index].ssP);

          free(tkts[index].tsP);

          for(i=index;icnt;i++)

              tkts[i]=tkts[i+1];

          tkts[cnt].ssP=NULL;

          tkts[cnt].tsP=NULL;

          free(tkts[cnt]);

      }

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

  }

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

  system("cls");

  return 1;

}

int init(STN stns[MS],TKT **tkts)

{

  TKT *tTemp=NULL;

  int i,j,n,v,cnt=2;

  static int id=1;

  printf("生成站点:\n");

  for(i=0;iMS;i++,id++)

  {

      sprintf(stns[i].sid,"车站%03d",id);

      sprintf(stns[i].sName,"SN%03d",id);

      printf("----站点名:%s。站点ID:%s\n",stns[i].sid,stns[i].sName);

  }

  printf("计算所有站点连线,生成车票(票是往返,所以一次生成往返两组票):\n");

  for(i=0;iMS;i++)

      for(j=i+1;jMS;j++)

      {

          if(!(*tkts))

          {

              *tkts=(TKT *)malloc(sizeof(TKT)*2);

              if(!(*tkts)) return -1;

          }

          else

          {

              tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);

              if(!tTemp) return -1;

              *tkts=tTemp;

          }

          n=rand()%4+2;//每种票随机2~5张(保证总数大于20)

          v=rand()%201+50;//随机生成票价50~250

          (*tkts)[cnt-1].tid=cnt;

          (*tkts)[cnt-1].ssP=stns[i];

          (*tkts)[cnt-1].tsP=stns[j];

          (*tkts)[cnt-1].value=v;

          (*tkts)[cnt-1].number=n;

          (*tkts)[cnt-2].tid=cnt-1;

          (*tkts)[cnt-2].ssP=stns[j];

          (*tkts)[cnt-2].tsP=stns[i];

          (*tkts)[cnt-2].value=v;

          (*tkts)[cnt-2].number=n;

          printf("----%s和%s的之间往返票各生成%d张,票价为%d(随机)\n",stns[i].sName,stns[j].sName,n,v);

          cnt+=2;

      }

  return cnt-2;

}

//答题不易,如采纳的,请不要无故删除问题。

大一c语言编程题

#include stdio.h

int main()

{

int n,a,b,c;

scanf("%d",n);

if(n100||n999)

printf("Input error!");

else

{

a=n/100;

b=n/10%10;

c=n%10;

printf("%d",a*a*a+b*b*b+c*c*c);

}

return 0;

}

谁有大一C语言考试题?快考试了,跪求题库··

单项选择题(每小题2分,共50分)

1、一个C程序的执行是从___A__。

A、本程序的main函数开始,到main函数结束

B、本程序的main函数开始,到本程序文件的最后一个函数结束

C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

D、本程序文件的第一个函数开始,到本程序main函数结束

2、C语言程序的基本单位是___C___。

A、程序行 B、语句

C、函数 D、字符

3、请选出可用作C语言用户标识符的一组标识符___B___。

A、void B、a3_b3 C、For D、2a

define _123 -abc DO

WORD IF ase sizeof

主要特点

C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。

以上内容参考:百度百科-c语言

THE END
相关文章

暖度计是以防伤风 发热 没有时之需,以是 险些 年夜 部门 野庭皆有的,暖度计有火银暖度计取电子暖度计,由于 价钱 廉价 ,火银暖度也许多 人运用,这么火银暖度

水银温度计打碎了怎么处理 这样处理最安全

焦点 力气 其真其实不须要 天天 练,但若是焦点 力气 比拟 强的人,也能够保持 锤炼 ,历久 保持 后您会领现本身 的体态 有很年夜 的转变 ,正常一般人是一

核心力量需要每天练吗

Gerald Genta,被称为钟表界的毕添索,设计了寰球有名 的爱彼皇野橡树。他的私家 皇野橡树于  一 九 七 八 年制作 的 五 四0 二 带金表圈。Uo

继百达翡丽、蒂芙尼下一个百万美元手表:Gerald

评论列表
  • 酒奴过活
    酒奴过活 Jun 27日, 2022 @ 06:07 pm uifo-btids[uifo-cnt]=tkts[index].tid;           printf("该票购买了%d张\n",(uifo-btNum[uifo-cnt]=n));           tkts[index].number-=n;         回复
发布评论
提交