[填空题][说明]
函数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所示。
[填空题] 阅读以下说明和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所示。
[填空题]下面程序通过调用函数模板实现计算两个正整数的最大公约数,把main函数中的错误找出并改正过来。 #include<iostream.h> template<class T> T gcd(T x,T y) while(x!=y) if(x>y)x-=y; else y-=x; return x; void main( ) int a; double d; cin>>a>>d: cout<<gcd(a,d)<<endl;
[填空题]阅读以下说明和C函数,填补C函数中的空缺。 [说明] 函数numberOfwords(char message[])的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母),并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。 假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即不会出现类似don’t形式的词,单词之后都为空格或标点符号。 函数中判定单词的规则是: (1)一个英文字母串是单词; (2)一个数字串是单词; (3)表示名词所有格的撇号(’)与对应的单词看作是一个单词。 除上述规则外,其他情况概不考虑。 例如,句子“The 1990’s witnessed many changes in people’s concepts of conservation”中有10个单词,输出如下: The 1990’s witnessed many changes in people’s concepts of conservation 函数numberOfwords中用到的部分标淮库函数如下所述。 函数原型 | 说明 | int islower(int ch); | 若ch表示一个小写英文字母,则返回一个非0整数,否则返回0 | int isupper(int ch): | 若ch表示一个大写英文字母,则返回一个非0整数,否则返回0 | int isalnum(int ch); | 若ch表示一个英文字母或数字字符,则返回一个非0整数,否则返回0 | int isabha(int ch); | 若ch表示一个英文字母,则返回
[简答题]【说明】 请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。 【程序】 文件search.cpp的内容如下: #include <iostream. h > int SeqSearch( int list[ ] ,int start,int n,int key) for(int i=start;i<=n;i++) //(1) if( list[i] = key)//(2) return i; return -1; void main( ) int A[10] int key,count=0,pos; cout <<" Enter a list of 10 integers:"; for(pos=0;pos<10;pos++) cin >>A; //(3) cout <<" Enter a key; "; cin >> key; pos=0; while(( pos = SeqSearch ( A, pos, 10, key)) !=-1 ) count ++; pos ++; cout<<key<<"occurs" <<count<< (count!=1" times":" time") <<" in the list," << endl; 第一种情况:输入2 3 12 6 8 45 8 33 7输入key:8 输出: (4) 第二种情况:输入2 3 126
[填空题]请补充main 函数,该函数的功能是:计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。
例如:当n=1,m=100时,sum=5050:当n=100,m=1000时,sum=495550。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
main ( )
{
int n, m;
long sum;
【1】
clrscr ( );
printf ("/nInput n,m/n");
scanf ("%d, %d", &n, &m);
while (n<=m)
{
【2】
n++;
}
printf ("sum=% 【3】 /n", sum);
}
[填空题]阅读以下函数说明和C语言函数,回答问题。 [说明] 函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示其链表根据元素之值按递增排列。函数append( )用于在链表中添加节点。 [C函数] typedef struct node int element; struct node *link; Node; Node *A,*B,*C; Node *append(last,e) Node *last; int e; last->link=(Node *)malloc(sizeof(Node)); last->link->element=e; return(last->link); Node *difference(A,B) Node *A,*B; Node *c,*last; C=last=(Node *)malloc(sizeof(Node)); while( (1) ) if(A->element<B->element) last=append(last,A->element); A=A->link: else if( (2) ) A:A->link; B:B->link; elSe (3) ; while( (4) ) last=append(last,A->element); A=A->link: (5) ; last=c; c=c->link; free(last); return(c);
购买搜题卡查看答案
[会员特权] 开通VIP, 查看 全部题目答案
[会员特权] 享免全部广告特权
请选择支付方式
-
微信支付
-
支付宝支付
立即支付
系统将自动为您注册账号
请使用微信扫码支付
请不要关闭本页面,支付完成后请点击【支付完成】按钮
恭喜您,购买搜题卡成功
重要提示:请拍照或截图保存账号密码!
我要搜题网官网:https://www.woyaosouti.com
我已记住账号密码
| |