填空题阅读以下说明和C函数,填充函数中的空缺。 [说明] 函数Insert _key(*root,key)的功能是将键值key插入到*root指向根结点的二叉查找树中(二叉查找树为空时*root为空指针)。若给定的二叉查找树中已经包含键值为key的结点,则不进行插入操作并返回0;否则申请新结点、存入key的值并将新结点加入树中,返回1。 提示: 二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树: 若它的左子树非空,则其左子树上所有结点的键值均小于根结点的键值; 若它的右子树非空,则其右子树上所有结点的键值均大于根结点的键值; 左、右子树本身就是二叉查找树。 设二又查找树采用二叉链表存储结构,链表结点类型定义如下: typedef struct BiTrrode int key _value; /*结点的键值,为非负整数*/ struct BiTnode *left,*right; /*结点的左、右子树指针*/ BiTnode, *BSTree; [C函数] int Insert _key(BsTree *root,int key) BiTnode *father=NULL,*p=*root,*s; while(______&&key!=p->key_value)(/*查找键值为]Key的结点*/ father=p; if(key<p->key_value)p=______; /*进入左子树*/ else p=______; /*进入右子树*/ if (p) return 0; /*二叉查找树中已存在键值为key的结点,无须再插入*/ s=(BiTraode*)malloc(______);/*根据结点类型生成新结点*/ if (!s) return-1; s->key_value=key; s->left=NULL; s->right=NULL; if(!father) ______; /*新结点作为二叉查找树的根结点*/ else /*新结点插入二叉查找树的适当位置*/ if(key<father->key_value)father->left=s; else father->right=s; return 1;
填空题{{B}}试题一{{/B}}阅读以下说明和C语言函数,回答问题。[说明]函数sort(NODE*head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻节点中的元素,若较小的元素在后面,则交换这两个节点中的元素值。其中,head指向链表的头节点。排序时,为了避免每趟都扫描到链表的尾节点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个节点。例如,对于图8-25(a)所示的链表进行一趟冒泡排序后,得到图8-25(b)所示的链表。链表的节点类型定义如下:typedefStruetNode{intdata;structNode*next;}NODE;[C语言函数]voidsort(NODE*head){NODE*ptr,*preptr,*endptr;inttempdata;ptr=head->next;while{{U}}(1){{/U}}/*查找表尾节点*/ptr=ptr->next;endptr=ptr;/*令endptr指向表尾节点*/ptr={{U}}(2){{/U}};while(ptr!=endptr){while({{U}}(3){{/U}}){if(ptr->data>ptr->next->data){tempdata=ptr->data;/*交换相邻节点的数据*/ptr->data=ptr->next->data;ptr->next->data=tempdata;}preptr={{U}}(4){{/U}};ptr=ptr->next;}endptr={{U}}(5){{/U}};ptr=head->next;}}
填空题阅读以下说明和C语言函数,填补空缺。
[说明] 函数count months(DATE start, DATE
end)的功能是:计算两个给定日期之间所包含的完整月份数。
该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。
规定两个相邻年份的同月同日之间的问隔为1年。例如,2007.5.30—2008.5.30的间隔为1年。若相邻两年中前一年是闰年,并且日期是2月29日,则到下一年的2月28日为1年,即2008.2.29—2009.2.28的间隔为1年。
规定两个相邻月份的相同日之间的间隔为1个月,但需要特别考虑月末的特殊情况。例如,2007.1.29—2007.2.28的间隔为1个月,同理,2007.1.30—2007.2.28、2007.1.31—2007.2.28的间隔都是1个月。
计算起止日期间隔不足一年的完整月份数时,分两种情况:
(1)起止日期不跨年度。先用终止日期的月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为2008.3.31—2008.9.20,通过月号算出月份数为6。修正时,通过调用函数makevalid将2008.9.31改为2008.9.30,与终止日期2008.9.20比较后,将月份数修正为5。
(2)起止日期跨年度。计算方法如下例所示:对于起止日期2008.7.25—2009.3.31,先计算2008.7.25—2008.12.25的月份数为5,再算出2008.12.25—2009.3.25的月份数为3,因此2008.7.25—2009.3.31之间的完整月份数为8。
日期数据类型定义如下: typedef struct {
int year; int month; int day; /*日期的年号(4位)、月和日号*/ }DATE;
程序中使用的函数cmp_date( )、isLeapYear(
)和makevalid( )说明如表11-8所示。
表11-8 函数说明
函数名
参数
返回值
说明
cmp_date
DATE start
DATE end
-1:start<end
0:start=end
1:start>end
比较两个日期的大小,例如,
2007.1.30小于2007.5.15
2008.11.23等于2008.11.23
2008.1.31大于2007.5.15
isLeap Year
int year
1:year表示的年号是闰年
0:year表示的年号不是闰年
判断给定年号是否为闰年
makevalid
DATE *r
无
若日期*r是非法的,即*r不是闰年时其日期为2月29日,或者其4、6、9、11等月份出现了31日,则将其日期改为当月最后
[C语言函数] int count_months(DATE start, DATE end)
{ int years=0, months=0;
DATE r; if (cmp_date(start, end)>0) {
r=start; start=end; end=r;
} years=end.year-start.year;
/*计算年数*/ r=start;
r.year=end.year; if (cmp_date(r, end)>0) {
/*修正年数*/ {{U}} (1) {{/U}};
r.year--; }
if(r. year<end. year) { /*跨年度时,先计算到12月的月份数*/
months={{U}} (2) {{/U}};
r. month={{U}} (12) {{/U}}; }
months+=(end. month+12-r. month)%12; r.
year=end. year; r. month=end. month; makeva!id({{U}}
(3) {{/U}}); /*将日期r修正为有效日期*/
if(cmp_date(r, end)>0) /*修正月份数*/
{{U}} (4) {{/U}}; months+={{U}} (5)
{{/U}}; /*计算总月份数*/ return months;
}
填空题阅读以下说明和C++代码,将应填入______处的字句写在对应栏内。 [说明] 已知类LinkedList表示列表类,该类具有4个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。4个方法的含义分别如下。 · void addElement(Obect):在列表尾部添加一个对象。 · Object lastElement():返回列表尾部对象。 · int numberOfElement():返回列表中对象的个数。 · void removeLastElement():删除列表尾部的对象。 现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式来实现。 [C++代码1] Class Stack:public LinkedList public:void push(Object o)(addElement(o);; //压栈 Object peek()return ______;; //获取栈顶元素 bool isEmpty() //判断栈是否为空 return numberOfElement()==0;; Object pop //弹栈 Object o=lastElement(); ______; Return 0; ; ; [C++代码2] class stack private: ______; public: void push(Object o) //压栈 list.addElement(o); ; object peek //获取栈顶元素 return list ______; ; bool isEmpty() //判断栈是否为空 retum list.numberOfElement()==0 ; Object pop() //弹栈 Objecto=list.lastElement(); list.removeLastElement(); return o; ; [问题]若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?______(A.继承B.组合)
填空题阅读以下说明和C程序,填充函数中的空缺。[说明]N个游戏者围成一圈,从1~N顺序编号,游戏方式如下;从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。下面的函数playing(Linklisthead)模拟上述游戏过程并返回获胜者的编号。其中,N个人围成的圈用一个包含N个结点的单循环链表来表示,如图1所示,游戏者的编号放在结点的数据域中。在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量c(初值为1)用于计数,指针变量p的初始值为。head(如图1所示)。游戏时,从p所指向的结点开始计数,p沿链表中的指针方向遍历结点,c的值随p的移动相应地递增。当c计数到2时,就删除p所指结点的下一个结点(因下一个结点就表示报数到3的游戏者),如图2所示,然后将c设置为0后继续游戏过程。结点类型定义如下:typedefstructnode(intcode;/*游戏者的编号*/struetnode*next;NODE,*LinkList;[C函数]intplaying(LinkListhead,intn)/*head指向含有n个结点的循环单链表的第一个结点(即编号为1的游戏者)*/LinkListp=head,q;intthewinner,c=1;while(n>______)if(c==2)/*当c等于2时,P所指向结点的后继即为将被删除的结点*/q=p->next;p->next=______;printf("%d/t",q->code);/*输出退出圈子的游戏者编号*/free(q);c=______;n--;/*if*/p=______;c++;/*while*/theWinner=______;free(p);returntheWinner;/*返回最后一个游戏者(即获胜者)的编号*/
填空题写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请填写“无”)。
填空题[说明]某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据D1,D2,…,Dn中,选出其中所有不重复的k个数据,置于原来前k个数据的位置上。该流程图的算法如下:第1个数据必然被选出,然后从第2个数据开始,逐个考察其余的数据。假设D1,D2,…,Dm(m≥1)是已经选出的、不重复的数据,则对于数据Di(m<i≤n),将其依次与Dm,Dm-1,…,D1进行比较,若没有发现与之相同者,则Di被选出并置于Dm+1的位置上;否则对Di不做处理。例如,如下10个数据:5,2,2,7,4,4,7,1,9,1(n=10)经过上述算法处理后的结果为:5,2,7,4,1,9(k=6)[流程图]本题流程图如图8-32所示。注:循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
填空题【说明】
程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。
假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额。适用税率如表所示。
级数
月应纳税所得额
适用税率(%)
1
2
3
4
5
6
7
8
9
不超过500元的部分
501元~2000元的部分
2001元~5000元的部分
5001元~2000元的部分
2001元~4000元的部分
4001元~6000元的部分
6001元~8000元的部分
8001元~100000元的部分
超过100000元的部分
5
10
15
20
25
30
35
40
45
上表表明,个人收入所得税是按照超额累进的税率来征收的。
设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S (元);
若0<K≤500,则S=K×5%;
若500<K≤2000,则S=500×5%+(K-500)×10%;
若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%;
若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;
...
例如,某人某月收入总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。
【程序】
#include<stdio.h>
#define MaxNum 50
#define BASE 800 /*免税金额基数*/
int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,1000001};
int taxPrate[]={5,10,15,20,25,30,35,40,45}; /*税率表*/
typedef struct{
int ld; /*职工的工号*/
long Salary; /*职工的工资*/
} Info;
/*查找工号为ld的职工在数组employee中的下标,返回值为0表示没有*/
int find (int ld ,Info employee[], int m) {
int j;
employee[0]. Id=Id;
for(j=m;
________
;j--);
return j;
}
void main(void)
{ Info employee[MaxNum+1];
long Wage;
double sum=0, K,S;
int i,j,N=0,Code;
scanf("%d %Id",
while(Code>0){
i=find (Code, empolyee, N );
if(i>0)employee [i]. Salary+=Wage;
else{
________
;
employee[N]. Id=Code;employee[N]. Salary =Wage;
}
scanf("%d %Id",
}
for(i=1;i<=N;i++) {
K=
________
; /*计算月应纳税所得额*/
S=0; /*月应纳税额赋初值*/
if(K>0) {
for(j=1;j<=9;j++)
if
________
/*月应纳税所得额超过第j级*/
S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;
else{S =S+
________
* taxPrate[j-1]/100; break; }
}
printf("职工%d应缴纳的个人所得税额:%10.21f/n",employee[i].Id,S);
sum+=S;
}
printf("全体职工个人所得税总额:%10.21f/n",sum);
}
填空题{{B}}试题四{{/B}}阅渎以下说叫和C函数,回答问题。[说明]已知某二叉树的非叶子节点都有两个孩子节点,现将该二叉树存储在结构数组Ht中。节点结构及数组Ht的定义如下:#defineMAXLEAFNUM30Structnode{charch;char*pstr;intparent;intlchild,rchiid;};StructnodeHt[2*MAXLEAFNUM];该二叉树的n个叶子节点存储在下标为1~n的Ht数组元素中。例如,某二叉树如图8-26所示,其存储结构如图8-27所示,其中,与叶子节点a对应的数组元素下标为1,a的父节点存储在Ht[5],表示为Ht[1].parent=5。Ht[7].parent=0表示7号节点是树根,Ht[7].lchild=3、Ht[7].rchild=6分别表示7号节点的左孩子是3号节点、右孩子是6号节点。如果用“0”或“1”分别标识二叉树的左分支和右分支如图8-26所示,从根节点开始到叶子节点为止,按所经过分支的次序将相应标识依次排列,可得到一个0、1序列,称之为对应叶子节点的编码。例如,图8-26中a、b、c、d的编码分别是100、101、0、11。函数LeafCode(Ht[],n)的功能是:求解存储在Ht中的二叉树中所有叶子节点(n个)的编码,叶子节点存储在Ht[1]~Ht[n]中,求出的编码存储区由对应的数组元素pstr域指示。函数LeafCode从叶子到根逆向求叶子节点的编码。例如,对图8-26中叶子节点a求编码的过程如图8-28所示。[函数]typedefenumStatus{ERROR,OK}Status;StatusLeafCode(StruetnodeHt[],intn){intpc,pf;inti,start;chartstr[31]={'/0');for(i=1;{{U}}(1){{/U}};i++){start=29;pc=i;pf=Ht[i].parent;while(Pf!={{U}}(2){{/U}}){if({{U}}(3){{/U}}.lchiid==pc)tstr[--start]='0';elsetstr[-start]='1';pc={{U}}(4){{/U}};pf=Ht[Pf].parent;}Ht[i].pstr=(char*)malloc(31-start);if(!Ht[i].pstr)returnERROR;strcpy(Ht[i].pstr,{{U}}(5){{/U}};}returnOK;}
填空题阅读以下说明和C程序,填充程序中的空缺。
[说明]
埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。
下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](i>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为0。
[C程序]
#include <stdio.h>
#define N 10000
int main()
{
char sieve[N+1]=(0);
int i=0,k;
/*初始时2~N都放入sieve数组*/
for(i=2;______;i++)
sieve[i]=1;
for(k=2;;){
/*找出剩下的数中最小者并用K表示*/
for(;k<N+1&&sieve[k]==0;______);
if(______) break;
print("%d/t",k); /*输出素数*/
/*从sieve中去掉k及其倍数*/
for(i=k;i<N+1;i=______)
______;
return 0;
} /*end of main*/
填空题阅读以下说明和C程序,填充程序中的空缺。 [说明] 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。 下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](u>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为0。 [C程序] #include <stdio.h> #define N 10000 int main() char sieve[N+1]=(0); int i=0,k; /*初始时2~N都放入sieve数组*/ for(i=2;______;i++) sieve[i]=1; for(k=2;;) /*找出剩下的数中最小者并用K表示*/ for(;k<N+1&&sieve[k]==0;______); if(______)break; print("%d/t",k); /*输出素数*/ /*从Sieve中去掉k及其倍数*/ for(i=k;i<N+1;i=______) ______; return 0; /*end of main*/
填空题阅读以下说明和C函数,填充函数中的空缺。 [说明] 已知两个整数数组A和B中分别存放了长度为m和n的两个非递减有序序列,函数Adiustment(A,B,m,n)的功能是合并两个非递减序列,并将序列的前m个整数存入A中,其余元素依序存入B中。例如: 合并前 合并后 数组A的内容 1,9,28 1,4,7 数组B的内容 4,7,12,29,37 9,12,28,29,37 合并过程如下:从数组A的第一个元素开始处理。用数组B的最小元素B[0]与数组A的当前元素比较,若A的元素较小,则继续考查A的下一个元素;否则,先将A的最大元素暂存入temp,然后移动A中的元素挪出空闲单元并将B[0]插入数组A,最后将暂存在temp中的数据插入数组B的适当位置(保持B的有序性)。如此重复,直到A中所有元素都不大于B中所有元素为止。 [C函数] void Adjustment(int A[],int B[],int m,int n) /*数组A有m个元素,数组B有n个元素*/ int k,temp; for(i=0;i<m;i++) if(A[i]<=B[0]) continue, temp=______;/*将A中的最大元素备份至temp*/ /*从后往前依次考查A的元素,移动A的元素并将来自B的最小元素插入A中*/ for(k=m-1;______;k--) A[k]=A[k-i]; A[i]=______; /*将备份在temp的数据插入数组B的适当位置*/ for(k=1;______&&k<n;k++) B[k-i]=B[k]; B[k-1]=______;
填空题阅读以下说明和C函数,填充函数中的空缺。 [说明] 如果矩阵A中的元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。 一个矩阵可能存在多个马鞍点,也可能不存在马鞍点。下面的函数求解并输出一个矩阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。 [C函数] Int findSaddle(int a[][N],int M), /*a表示M行N列矩阵,N是宏定义符号常量*/ int row,coiumn,i,k; int minElem; int count=0;/*count用于记录矩阵中马鞍点的个数*/ for(row=0;row<______;row++) /*minElem用于表示第row行的最小元素值,其初值设为该行第0列的元素值*/ ______; for(culumn=1;column<______;column++) if(minElem>a[row][column]) minElem=a[row][coiumn]; for(k=0;k<N;k++) if(a[row][k]==minelem) /对第row行的每个最小元素,判断其是否为所在列的最大元素*/ for(i=0;i<M;i++) if(______>minElem)break; if(i>=______) printf("(%d,%d):%d/n",row,k,minElem);/*输出马鞍点*/ count++; /*if*/ /*if*/ /*for*/ return count, )/*findSaddle*/
填空题阅读以下说明和流程图,填补流程图中的空缺。[说明]本流程图用于计算菲波那契数列{a1=1,a2=1,an=an-1+an-2,|n=3,4,...}的前n项(n≥2)之和S。例如,菲波那契数列前6项之和为20。计算过程中,当前项之前的两项分别动态地保存在变量A和B中。[流程图]
填空题[说明] 假设数组A中的各元素A(1),A(2),…,A(M)已经按从小到大排序(M≥1);数组B中的各元素B(1),B(2),…,B(N)也已经按从小到大排序(N≥1)。执行下面的流程图后,可以将数组A与数组B中所有的元素全都存入数组C中,且按从小到大排序(注意:序列中相同的数全部保留并不计排列顺序)。例如,设数组A中有元素:2,5,6,7,9;数组B中有元素2,3,4,7;则数组C中将有元素:2,2,3,4,5,6,7,7,9。 [流程图] 本题流程图如图8-31所示。
填空题阅读以下说明和C函数,填补C函数中的空缺。[说明]函数SetDiff(LA,LB)的功能是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与LB不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针。例如,单链表LA、LB的示例如图中的(a)、(b)所示,删除与LB共有的元素后的LA如图中的(c)所示。链表的结点类型定义如下:typedefstructNodeintdata;structNode*next;Node,*LinkList;函数SetDiff(LinkListLA,LinkListLB)的处理思路如下:(1)从LA的第一个元素结点开始,令LA的第一个元素为当前元素;(2)在LB中进行顺序查找,查找与LA的当前元素相同者,方法是:令LA的当前元素先与LB的第一个元素进行比较,若相等,则结束在LB中的查找过程,否则继续与LB的下一个元素比较,重复以上过程,直到LB中的某一个元素与LA的当前元素相等(表明查找成功),或者到达LB的表尾(表明查找失败)为止;(3)结束在LB表的一次查找后,若在LB申发现了与LA的当前元素相同者,则删除LA的当前元素,否则,保留LA的当前元素;(4)取LA的下一个元素为当前元素,重复(2)、(3),直到LA的表尾。[C函数]voidSetDiff(LinkListLA,LinkListLB)LinkListpre,pa,pb;/*pa用于指向单链表LA的当前元素结点,pre指向pa所指元素的前驱*//*pb用于指向单链表LB的元素结点*/______;/*丌始时令pa指向LA的第一个元素*/pre=LA;while(pa)pb=LB->next;/*在LB中查找与LA的当前元素相同者,直到找到或者到达表尾*/while(______)if(pa->data==pb->data)break;______;if(!pb)/*若在LB中没有找到与LA中当前元素相同者,则继续考察LA的后续元素*/pre=pa;pa=pa->next;else/*若在LB中找到与LA的当前元素相同者,则删除LA的当前元素*/pre->next=______;free(pa);pa=______;
填空题阅读以下说明和流程图,将应填入______处的字句写在对应栏内。[说明]下面的流程图旨在统计指定关键词在某一篇文章中出现的次数。设这篇文章由字符A(0),…,A(n-1)依次组成,指定关键词由字符B(0),…,B(m-1)依次组成,其中n>m≥1。注意,关键词的各次出现不允许有交叉重叠。例如,在“aaaa”中只出现两次“aa”。该流程图采用的算法是:在字符串A中,从左到右寻找与字符串B相匹配的并且没有交叉重叠的所有子串。流程图中,i为字符串A中当前正在进行比较的动态子串首字符的下标,j为字符串B的下标,k为指定关键词出现的次数。[流程图]
填空题阅读以下说明和C语言函数,填补空缺。
[说明] 已知1900年1月1日是星期一,下面的函数count_5_13(int
year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
函数count_5_13(int
year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int
year),其功能是判断给定年份是否为闰年,返回值为1(或0)分别表示year是(或不是)闰年。
[C语言函数] int Count_5_13(int year)
{ int date;
/*date为0表示星期日,为1~6分别表示星期一至星期六*/ long days=0;
/*days记录天数*/ int m, y, c=0;
/*c用于表示黑色星期五的个数*/ if(year<1900) return-1;
/*计算从1900年1月1日起,至给定年份year的1月13日间隔的天数*/
days=12; for(y=1900; y<year; y++) {
days +=365; if (iSLeapYear(Y)){{U}} (1)
{{/U}}; }
date=((days%7)+1)%7;
/*算出给定年份year的1月13日是星期几+/ c=({{U}} (2)
{{/U}})?1:0; for(m=1; {{U}}(3) {{/U}}; m++)
{ switch(m) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2: days=28;
if({{U}} (4) {{/U}})days=29;
break; }/*end of switch*/
date=((days%7)+ {{U}}(5) {{/U}})%7;
if (date==5) c++; } /*end of for*/
return c; }
填空题请补齐上述代码中的空缺(1)和(2)。
填空题[说明] 下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的C程序代码中有5个错误,请指出所有的错误。 [C程序代码] 01 #include <stdio.h> 02 03 int main( ) 04 05 long n, num; 06 int i; 07 08 do 09 printf("清输入一个正整数: "); 10 scanf("%id", n); 11 while(n<=0); 12 k=1; 13 for(i=1; n>=0; i++) 14 if(i io 2=1) 15 Rum=num+(n%10)*k; 16 k=k * 10; 17 18 n=n/10; 19 20 printf("新数据为: %d/n", num); 21 return 0; 22