大一c语言期末考试题编程题(大一新生c语言期末考试题)
C语言期末考试编程代码函数题?
按照题目要求编写的完整程序如下(见图,图中重复的地方只需写一次)
大一c语言期末考试编程题不写可以及格吗
可以。大一c语言期末考试编程题不写可以及格。考试在的特定环境中,竟然成为了某种贬义词,似乎但凡涉及考试,必是与“双减”相矛盾的增负行为。
大一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语言编程高手
1、10 逗号(,)分隔开的连续表达式,取最后一个表达式的值为整个表达式的值。
2、A吧。这个不太确定。c语言中不允许出现A=B=C形式的赋值。C中没有**这个东西,D中,强制转换为y=(float)i;
3、B 所谓保留字,一般是指C语言留作关键字了,比如int,我们不能定义一个变量名叫int的。
4、8 参照题目一,依次计算各个表达式,取最后一个表达式的值,结果为8。
大一期末考C语言试题求解答
第一题:#includestdio.h
void?main()
{
int?a[10],b[9],i=0;
for(;i10;i++)
{
printf("请输入第%d个数",i+1);
scanf("%d",a[i]);
}
for(i=1;i10;i++)
b[i-1]=a[i]-a[i-1];
for(i=0;i9;i++)
{
if(i%3==0)printf("\n");
printf("%d? ",b[i]);
}
}
运行结果:
第二题:#includestdio.h
void?main()
{
char?a[100];int?i=0;
? printf("请输入一串字符按回车结束");
scanf("%s",a);
? while(1)
{
if(a[i]='A'a[i]='Z')
? ? ? ?a[i]=a[i]+32;
printf("%c",a[i]);
i++;
if(a[i]==0)break;
}
?printf("\r\n");
}
运行结果:
第三题:(以两名学生为例,其他只要改变对应的值即可,照着框架来即可)#includestdio.h
void?main()
{
int?a[2][5],i,j;
for(i=0;i2;i++)
{?
for(j=0;j5;j++)
{
?printf("请输入第%d个学生,第%d门成绩",i+1,j+1);
?scanf("%d",a[i][j]);
}
printf("\n");
}
int?sum,csum=0;
printf("%14c第1门课%4c第2门课%4c第3门课%4c第4门课%4c第5门课%4c总分\n",32,32,32,32,32,32);
for(i=0;i2;i++)
{?
sum=0;
printf("第%d个学生",i);
for(j=0;j5;j++)
{
?printf("%6c%d",32,a[i][j]);
?printf("%3c",32);
?sum=sum+a[i][j];
}
csum=csum+sum;
printf("%5c%d",32,sum);
printf("\n");
}
int?temp;
printf("班级总分?");
for(j=0;j5;j++)
{
temp=0;
for(i=0;i2;i++)
?temp=temp+a[i][j];
printf("%6c%d",32,temp);
printf("%2c",32);
}
printf("%5c%d\n",32,csum);
printf("\n");
}
运行结果:
第四题:#includestdio.h
void?main()
{
int?a[10],i=0,j,temp;
for(;i10;i++)
{
printf("请输入第%d个数",i+1);
scanf("%d",a[i]);
}
for(j=0;j=9;j++)
{
for?(i=0;i10-j;i++)
?if?(a[i]a[i+1])
?{
? temp=a[i];
? a[i]=a[i+1];
? a[i+1]=temp;
?}
}
for(i=0;i10;i++)
printf("%d?",a[i]?);
printf("\n");
}
运行结果:
学习是要用心的,多动脑,多思考学到的东西才是自己的。喔,对了给分哟!!!!!