大一C语言编程题?

 2025-02-17 15:39:01  阅读 638  评论 0

摘要:车票根据题意两两站点连线生成,金额和数量分别用随机数。数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。购买流程:检查输入数值有效性->检查车票库存->购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码

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

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

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

大一C语言编程题?

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

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

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种票)nn",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 ticketn")

  printf("(2) Refund ticketn")

  printf("(3) Remove ticketn")

  printf("(4) Display all ticketsn")

  printf("(0) Exitn")

  while(n<0 || n>4)

      scanf("%d",&n)

  switch(n)

  {

      case 0: return 0

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

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

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

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

      case 4: disAllTickets(tkts)break

  }

  showMenu(uifo,tkts)

  return 1

}

int disAllTickets(TKT *tkts)

{

  int i

  for(i=0i<cnti++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%dn",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(index>len-1) return -1

  for(i=indexi<len-1i++)

      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=0i<uifo->cnti++)

  {

      for(j=0j<cntj++)

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

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

  }

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

  for(i=0i<uifo->cnti++)

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

      {

          for(j=0j<cntj++)

              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=0i<cnti++)

      printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%dn",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=0i<cnti++)

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

      {

          printf("车票%s-%s 票价:%3d 剩余票数:%dn",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].number<n)

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

      }

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

      {

          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=0i<uifo->cnti++)

              printf("--车票编号:%d,购买票数:%dn",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=0i<cnti++)

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

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

  for(i=0i<cnti++)

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

      {

          index=i

          flag=1

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

          {

              for(k=0k<uifos[j].cntk++)

                  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=indexi<cnti++)

              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=0i<MSi++,id++)

  {

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

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

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

  }

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

  for(i=0i<MSi++)

      for(j=i+1j<MSj++)

      {

          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语言题目的啊?

单项选择题(每小题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语言

《C语言程序设计》练习题

大学c语言搜题app。大学c语言搜题app原名叫做菜鸟学C语言是一款非常好用的学习c语言的手机软件

软件功能

1、选择题:按照考点分类的选择题习题,并有答案解析。

2、错题库:可自动加练习过程中错题加入收藏,以便反复练习。

3、上机操作题:300道上机操作题,程序填空题、程序修改题、程序设计题。

软件优势

1、选择题:按照考点分类的选择题习题,并有答案解析。

2、上级操作题:300道上机操作题,程序填空题、程序修改题、程序设计题。

3、最新押题:最新考试押题3套。

4、考点汇总:包含复习的考点。

5、错题库:可自动加练习过程中错题加入收藏,以便反复练习。

6、收藏夹:可在练习过程中自行收录题目到收藏夹,形成自己的小题库,针对性练习,提高通过率。

软件特色

1、随时随地都能够学习,而且还支持下载保存你学习内容离线继续学习。

2、同学们能够直接通过搜索引擎来查询寻找你感兴趣对你内容。

3、解答问题的办法非常多,可以选择通过拍照来答题,也可以选择输入题目来解答。

一、选择题

1、C语言规定,在一个源程序中,main()函数的位置(C )。

A) 必须在最开始 B)必须在最后

C) 可以任意 D) 必须在系统调用的库函数后面

这题你死记就行,你看看这个

任何一个C++程序都必须定义一个main函数,它的返回类型总是int类型。这个函数由操作系统来调用,在main函

数执行完以后,程序也就终止了。 main也可以使用return向操作系统返回一个值,使用操作系统的命令可以检测

main的返回值。一般约定在main返回0时,表示程序运行过程中没有出现错误,其它非零值表示程序出现异常情况。

若没有为main指定返回值,这样返回值是任意的。

2、若x和y都是int 型变量,x=100,y=200,且有以下程序段,printf(“%d”,(x,y))则其输出结果是( A)。

A) 200 B) 100 C) 100 200 D) 输出不确定值

(x,y)这是个逗号表达式,表达式的值为最后一个逗号后面表达式的值,因为前面有一个%d,所以输出 的是y的

3、合法的C语法字符常量是(C )。

A) “A” B) 65 C) ‘t’ D) A

字符都是由两个单引号括起来的,死记,a)为字符串

4、表达式“3!=4”的值是(A )。

A) 1 B) 0 C) T D) F

!=是c语言的逻辑运算符,3!=4为真,多以得1, 3=4为假,值为0

5、 int a=1,b=2,c=3,d=4,执行下列程序后x的值为( C)。

if(a>b) x=1else if (c>d) x=2else x=3

A) 1 B) 2 C) 3 D) 4

如果a>b,1>2为假,不执行x=1,执行else if(c>d),判断:3>4为假,不执行x=2,执行=3,完

6、以下程序的输出结果是(D)。

Int x=10,y=3,zprintf(“%dn”,z=(x%y,x/y))

A)1 B) 0 C) 4 D) 3

逗号表达式,x%y,10%3,商3余1,模取余数1,x/y,10/3,商3余1,除法取商3,逗号表达式,表达式的值为最后一

个逗号后面表达式的值

7、为表示x≥y≥z,应使用C语言表达式(A )。

A) (x>=y)&&(y>=z) B) (x>=y) AND (y>=z)

C) (x>=y>=z) D) (x>=y) &(y>=z)

关系运算符,x>=y与y>=z必须是同时成立的,因此要用逻辑运算符&&,&&与的意思

8、合法的数组定义是( a )。

A) int a[ ]=”string”B) int a[5]={0,1,2,3,4,5}

C) char a=”string”D) char a[ ]={“01234”}

a不指定数组长度定义,正确

b数组长度为5,就是里面有5个数组元素,多了一个数组元素

c定义a不是数组而是一个变量,素组应该是a[]

d是错的,字符串是这样定义的:char a[ ]={'0','1','2','3','4','0'}

[4]中数字是数组长度,说明里面有几个元素

9、设x和y均为int型变量,则语句“x+=yy=x-yx-=y;”的功能是(D)。

A) 把x和y按从小到大排列 B)把x和y按从大到小排列

C)无确定结果 D)交换x和y中的值

x+=y等同于x=x+y,把x加y的值赋给x,x现在存的是x与y的和

y=x-y把x减y的值赋给y,x现在存的是x与y的和 (x+y)-y=x,把x的值给y,y存x的值

x-=y等同于x=x-y,把x减y的值赋给x,(x+y)-y=x,现在的后面的y存的是x的值,做完后x里存的值是y,完成交换

10、若已定义x和y为double类型,则表达式“x=1,y=x+3/2”的值是(C)。

A) 1 B)2 C) 2.0 D) 1.0

逗号表达式,先让x=1在算y=x+3/2,得2,因为是double类型,所以有小数点

11、下列条件语句中,功能与其他语句不同的是 (D)

A) if(a) printf("%dn",x)else printf("%dn",y)

B) if(a==0) printf("%dn",y)else printf("%dn",x)

C) if (a!=0) printf("%dn",x)else printf("%dn",y)

D) if(a==0) printf("%dn",x)else printf("%dn",y)

a 如果a为真输出x,如果a为假输出y

b 如果a==0,也就是为假,输出y,a为真输出x,同a

c 如果a!=0为真,输出x,a为假输出y同上

d 如果a为假输出x,如果a为真输出y,与以上的都不同

12、以下能正确定义二维数组的是 (C)

A) int a[][3]B) int a[][3]=2{2*3}

C) int a[][3]={0}D) int a[2][3]={{1},{2},{3,4}}

a 没有给数组赋初值

b {}里不能有*

c 正确,记住第一个[]中可以为空,第二个[]不能为空,死记

d a[2][3] 的意思是有两个一维数组,每个一维数组里有3个元素,{{1},{2},{3,4}}她的意思是三个数组,{}中的每一个{}代表一个数组,里边的数为数组元素

13、用C语言编写的代码程序 (B)

A)可立即执行 B)是一个源程序

C)经过编译即可执行 D)经过编译解释才能执行

死记

以上就是关于大一C语言编程题?全部的内容,如果了解更多相关内容,可以关注,你们的支持是我们更新的动力!

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【大一C语言编程题?】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/1465915.html

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0327秒, 内存占用2.02 MB, 访问数据库22次

陕ICP备14005772号-15