填空题
阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
某银行共发出M张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多支持储蓄卡持有者的N笔“存款”或“取款”业务。程序中用数组card[M][N+3]中的每一行存放一张储蓄卡的有关信息,其中:
card[i][0]存放第i张卡的卡号;
card[i][1]存放第i张卡的余额;
card[i][2]存放第i张卡的当日业务实际发生笔数;
card[i][3]~card[i][N+2]存放第i张卡的当日存取款金额,正值代表存款,负值代表取款。
当持卡者输入正确的卡号、存款或取款金额后,程序进行相应的处理;若输入不正确的数据,程序会提示持卡者重新输入;若输入的卡号为负数时,银行终止该卡的当日业务。
[C程序]
#include<stdio.H>
#define M 6
#define N 5
long card[M][N+3]=9801,2000,0,,9812,2000,2,,9753,3000,1,,
8750,500,0,,9604,2800,3,),(8901,5000,5,;
int locate(long card[][N+3],int m,long no)
int i;
for(i=0;i<m;i++)
if( (1) ==no) return i;
(2) ;
main()
long cardNo,money;
int k;
while(1)
printf("请输入卡号:/n");
scanf("%1d",&cardNo);
if(cardNo<0) break;
k=locate(card,M,cardNo);
if(k==-1)
printf("不存在%id号的储蓄卡/n",cardNo);
continue;
printf("请输入金额(正值代表存款,负值代表取款):/n");
scanf("%id",&money);
if(card[k][1]+money<0)
printf("存款余额不足,不能完成本次的取款业务/n");
continue;
if(card[k][2]==N)
printf("已完成本卡的当日业务/n");
continue;
/*处理一笔业务的数据*/
card[k] (3) =money;
(4) ;
(5) ;
【正确答案】
1、card[i][0] (2) return-1 (3) card[k][2]+3 (4) card[k][1]+=money (5) card[k][2]
【答案解析】[解析]
按照程序的说明,函数Locate是对用户输入的卡号进行比较,当找到对应的卡号,则返回持卡者对应的记录号,否则返回-1。card[i][0]中存放着第i张卡的卡号,所以(1)填“card[i][0]”,(2)填“return-1”。当找到持卡者的卡号为k时,由于card[k][2]存放实际的交易次数,因此这次发生的交易数应该存放的位置为card[k][card[k][2]+3],即(3)填“card[k][2]+3”。在交易发生后,存款额要发生改变,即(4)填“card[k][1]+=money”,同时其交易次数增1,(5)填“card[k][2]”。