NOIP第五章习题一答案

合集下载

第5章 习题参考答案

第5章 习题参考答案

第5章习题参考答案2填空题(1)32(2)4(3)str1[7]= '\0';(4)for(i=1;i<=6;i++) gets(a[i]);(5)strcpy(web, "");(6)int *p=a;(7)5(8)1(9)*(p+6)或*(s+6)4程序阅读题(1)6(2)str(3)60(4)bcdefgacdefgabdefgabc(5)No和Y es5程序填空题(1)# include <math.h> scanf("%f", &a[i]) s=0; x=a[0] fabs(a[i]-s) (2)scanf("%d",&n) a[i][i]=1 a[i-1][j-1] printf("\n")(3)b[i]!='\0' strcpy puts(b)六、编程题1、使用数组和指针2种方法来处理。

方法一(使用数组)#include <stdio.h>void main(){ int i=0,a[10],t;printf("Enter the 10 number=\n");for(i=0; i<10; i++)scanf("%d",&a[i]);for(i=0;i<5;i++){ t=a[i];a[i]=a[9-i];a[9-i]=t;}for(i=0; i<10; i++)printf("%d ",a[i]);printf("\n");}方法二(使用指针)#include <stdio.h>void main(){ int i=0,a[10],t,*p,*q;printf("Enter the 10 number=\n");for(p=a; p<a+10; p++)scanf("%d",p);p=a;q=a+9;for(;p<q;p++,q--){ t=*p;*p=*q;*q=t;}for(p=a; p<a+10; p++)printf("%d ",*p);printf("\n");}2、#include <stdio.h>main(){int i, j, t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};for(i=0;i<10;i++)printf("%d ", a[i]);printf("\n");printf("Enter the Move n=?");scanf("%d", &n);for(i=1; i<=n; i++){t=a[10];for(j=9;j>=0;j--) a[j+1]=a[j];a[0]=t;}for(i=0; i<=10; i++)printf("%d ", a[i]);getch();}3、#include <stdio.h>#include <stdlib.h>#define N 50main(){int a[N], i, j,p,t;randomize();for(i=0; i<N; i++){a[i]=random(100);for(j=0;j<i;j++)if(a[i]==a[j]){ i--;break;}}for(i=0; i<N-1; i++){p=i;for(j=i+1; j<N; j++)if(a[j]>a[p]) p=j;t=a[p]; a[p]=a[i]; a[i]=t;}for(i=0; i<N; i++){printf("%d ", a[i]);if(i%10==9) printf("\n");}4、#include <stdio.h>#define N 10void main(){int i;float a[N],s=0.0,x0=0.0;for(i=0;i<N;i++){ scanf("%f",&a[i]);x0+=a[i];}x0/=N;for(i=0;i<N;i++)s+=(a[i]-x0)*(a[i]-x0);printf("%10.6f", s);}5、#define N 4#define M 3void main(){ int i,j,sum,a[N][M+1],max,p;printf("input score\n");for(i=0;i<N;i++) /*i代表学生序号*/{ sum=0; /*每位学生成绩输入前,其总成绩赋初值0*/ for(j=0;j<M;j++) /*j代表课程代号*/{ scanf("%d",&a[i][j]); /*输入第i号学生第j门课程的成绩*/ sum=sum+a[i][j]; /*累加求总成绩*/}a[i][M]=sum; /*求第i个学生的总成绩放到a[i][M]*/ }max=a[0][M];p=0;for(i=1;i<N;i++) /*查找总成绩最高的学生*/if(a[i][M]>max) p=i;printf("No.%d Total score:%d\n",p+1,a[p][M]);}6、#include <stdio.h>#include <math.h>void main(){float a[5][6];int i, j, max;printf("Enter array a=?\n" );for(i=0; i<5; i++)for(j=0; j<6; j++)scanf("%f", &a[i][j]);for(i=0; i<5; i++){ max=a[i][0];for(j=0; j<6; j++) /*查找第i行中绝对值最大的元素*/if(fabs(a[i][j])>fabs(max)) max=a[i][j];for(j=0; j<6; j++) /*第i行中所有元素除以绝对值最大的元素*/{ a[i][j]=a[i][j]/max;printf("%8.4f", a[i][j]);}printf(" -----max =%8.4f\n",max);}}7、#include <stdio.h>#include <string.h>#define N 20main(){char str[N][15],st[15],*p=st;int i, j;for(i=0; i<N; i++)scanf("%s", str[i]);for(i=0; i<N; i++)for(j=0; j<N-i-1; j++)if(strcmp(str[j],str[j+1])>0){strcpy(p,str[j]);strcpy(str[j],str[j+1]);strcpy(str[j+1],p);}for(i=0; i<N; i++)printf("%s\n", str[i]);}8、程序如下:#include <stdio.h>main(){int a[10], b[10], t;int n=0, m=0, i, j, f;printf("Input Array a, end with –1:");scanf("%d", &t);while(n<10 && t!=-1){ a[n++]=t; scanf("%d", &t); }printf("Input Array b, end with –1:");scanf("%d", &t);while(m<10 && t!=-1){ b[m++]=t; scanf("%d", &t); }for(i=0; i<n; i++) /* 打印只在数组a中出现的元素*/{f=1;for(j=0; j<m; j++)if(a[i]==b[j]) {f=0; break;}if(f) printf("%d", a[i]);}for(i=0; i<m; i++) /* 打印只在数组b中出现的元素*/{f=1;for(j=0; j<n; j++)if(b[i]==a[j]) {f=0; break;}if(f) printf("%d", b[i]);}}9、#include <stdio.h>main(){char str[81];int i=-1;printf("Input:");scanf("%s", str);while(++i<80 && str[i]!= '\0')if(str[i]== '$') str[i]= 'S';puts(str);}10、#include <stdio.h>void main(){ char x[80],y[26]; int i,j,ny=0;gets(x);for(i=0;x[i]!='\0';i++)if(x[i]>='A'&&x[i]<='Z') {for(j=0;j<ny;j++)if(y[j]==x[i]) break;if(j==ny) { y[ny]=x[i]; ny++; }}for(i=0;i<ny;i++)printf("%c ",y[i]);printf("\n");}11、#include <stdio.h>#include <string.h>#include <ctype.h>void main(){ char s[80];int i=0;gets(s);while(s[i]!='\0')if(isdigit(s[i])) strcpy (s+i,s+i+1); else i++;puts(s);}12、void main(){char st[80],ss[20],sp[20],*a=st,*b=ss,*t=sp;int i,n,m,p=-1;printf("\nPlease input two string:\n");gets(a);gets(b);n=strlen(a);m=strlen(b);for(i=0;i<=n-m+1;i++){a=st+i;strncpy(t,a,m); /*将字符指针a指向的字符串取前m个字符复制到t所指的字符串中*/if(strcmp(b,t)==0){p=i;break;}}if(p==-1)printf("%d",p);elseprintf("%d",p+1); /*因数组下标从0开始,所以输出p+1*/getch();}13、从键盘上输入一个字符串,再任意输入一个指定字符,删除字符串中的指定字符。

第5章 习题与思考题和答案

第5章  习题与思考题和答案
C.A=C : C=B : B=AD.A=(A+B)/2 : B=(A – B)/2
4.下段程序执行的输出结果是。
S=0:T=0:U=0
For i=1 To 3
For j=1 To i
For K=j To 3
S=S+1
Next K
T=T+1
Next j
U=U+1
Next i
Print S;T;U
A.3 6 14B.14 63C.14 3 6D.16 4 3
Next j
If j>Int (Sqr(n-m))ThenPrint n,m,n-m
EndIf
Next m
Next n
EndSub

(1)编程序计算:1!+3!+5!+….+11!
(2)输入两个正整数m和n,求其最大公约数a和最小公倍数b,计算最大公约数a的方法如下:先算出m/n余数r,若r等于0,则n为最大公约数;若r不为0,则把原来的n值作为新的m值,把原来的r值作为新的n值,继续运算。这样辗转相除,直到r为0,此时的n值为最大公约数a,最小公倍数则可用原始m与n值的积除以最大公约数求得。
Private Sub Form_click()
Dim k,a,b as integer
a=20
b=2
k=2
Do While k<=a
b=b*2
k=k+5
Loop
Print b
End Sub
5.写出以下程序在单击命令按钮后的输出结果。
Private Sub Form_click()
k=0
fori=1 to 5
If n <= 0 Or m <= 0 Then

编译原理第五章答案

编译原理第五章答案

第5章自顶向下语法分析方法第1题对文法G[S]S→a||(T)∧T→T,S|S(1) 给出(a,(a,a))和(((a,a),,(a)),a)∧的最左推导。

(2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。

(3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。

(4) 给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。

答案:也可由预测分析表中无多重入口判定文法是LL(1)的。

可见输入串(a,a)#是文法的句子。

第3题已知文法G[S]:S→MH|aH→LSo|εK→dML|εL→eHfM→K|bLM判断G是否是LL(1)文法,如果是,构造LL(1)分析表。

第7题对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。

(1)A→baB|εB→Abb|a(2) A→aABe|aB→Bb|d(3) S→Aa|bA→SBB→ab答案:(1)先改写文法为:0) A→baB1) A→ε2) B→baBbb3) B→bb4) B→a再改写文法为:0) A→baB1) A→ε2) B→bN3) B→a4) N→aBbb5) N→b(2)文法:A→aABe|a B→Bb|d提取左公共因子和消除左递归后文法变为:0) A→a N1) N→A B e2) N→ε3) B→d N14) N1→b N15) N1→ε(3)文法:S→Aa|b A→SB B→ab第1种改写:用A的产生式右部代替S的产生式右部的A得:S→SBa|b B→ab消除左递归后文法变为:0) S→b N1) N→B a N2) N→ε3) B→a b也可由预测分析表中无多重入口判定文法是LL(1)的。

第2种改写:用S的产生式右部代替A的产生式右部的S得:S→Aa|b A→AaB|bB B→ab消除左递归后文法变为:0) S→A a1) S→b2) A→b B N3) N→a B N4) N→ε5) B→a b预测分析表:。

信息学奥赛基础知识习题NOIP(答案版)

信息学奥赛基础知识习题NOIP(答案版)

信息学奥赛基础知识习题(答案版)一、选择题(下列各题仅有一个正确答案,请将你认为是正确的答案填在相应的横线上)1.我们把计算机硬件系统和软件系统总称为 C 。

(A)计算机CPU (B)固件(C)计算机系统 (D)微处理机2.硬件系统是指 D 。

(A)控制器,运算器 (B)存储器,控制器(C)接口电路,I/O设备 (D)包括(A)、(B)、(C)3. 计算机软件系统包括 B 。

A) 操作系统、网络软件 B) 系统软件、应用软件C) 客户端应用软件、服务器端系统软件 D) 操作系统、应用软件和网络软件4.计算机硬件能直接识别和执行的只有 D 。

(A)高级语言 (B)符号语言(C)汇编语言 (D)机器语言5.硬盘工作时应特别注意避免 B 。

(A)噪声 (B)震动 (C)潮湿 (D)日光6.计算机中数据的表示形式是 C 。

(A)八进制 (B)十进制 (C)二进制 (D)十六进制7.下列四个不同数制表示的数中,数值最大的是 A 。

(A)二进制数11011101 (B)八进制数334(C)十进制数219 (D)十六进制数DA8.Windows 9x操作系统是一个 A 。

(A)单用户多任务操作系统 (B)单用户单任务操作系统(C)多用户单任务操作系统 (D)多用户多任务操作系统9.局域网中的计算机为了相互通信,必须安装___B__。

(A)调制解调器(B)网卡(C)声卡(D)电视卡10.域名后缀为edu的主页一般属于__A____。

(A)教育机构(B)军事部门(C)政府部门(D)商业组织11. 香港在世界上注册的顶级域名是__A____。

(A)hk(B)cn(C)tw(D)com12.计算机能够自动、准确、快速地按照人们的意图进行运行的最基本思想是( D )。

(A)采用超大规模集成电路(B)采用CPU作为中央核心部件(C)采用操作系统(D)存储程序和程序控制13.设桌面上已经有某应用程序的图标,要运行该程序,可以 C 。

高等数学第五章课后习题答案

高等数学第五章课后习题答案

班级姓名学号1 第五章定积分1.证明定积分性质:òò=b abadxx f kdx x kf )()((k 是常数). 证:òåòå=D =D ==®=®banii ban ii x kf x kf x f k x f k)()(lim )(lim )(1010x x l l 2.估计下列积分值:(1)dxx )sin 1(4542ò+p p解:令x x f 2sin 1)(+=,则02sin cos sin 2)(===x x x x f ‘得驻点:,,221p p==x x 由23)4(,23)4(,1)(,2)2(====p p p pf f f f ,得2)(max ,1)(min ==x f x f 由性质,得pp p p2)(454££òdx x f (2)ò333arctan xdxx 解:令x x x f arctan )(=,01arctan )(2>++=xxx x f ‘,所以)(x f 在]333[,上单调增加,p p33)(max ,36)(min ==\x f x f ,)()(33333arctan 33336333-££-\òp pxdx x ,即pp32a r c t a n 9333££òx d x x班级班级 姓名姓名 学号学号3.比较下列积分值的大小:.比较下列积分值的大小: (1)dx x ò12与dxx ò13解:当10££x 时,有23x x £,且23x x -不恒等于0,0312>-\òdx x x )(,即,即 dxx dxx òò>1212。

(2)ò6pxdx 与ò6sin pxdx解:当60p££x 时,有x x £sin ,且x x sin -不恒等于0,0sin 10>-\òdx x x )(,即,即 dx x dx x òò>1010sin 。

noip考试题及答案

noip考试题及答案

noip考试题及答案一、选择题(每题2分,共20分)1. 在C++中,下列哪个关键字用于定义类的成员函数?A. staticB. inlineC. virtualD. friend答案:C2. 下列哪个算法的时间复杂度为O(n^2)?A. 归并排序B. 快速排序C. 二分查找D. 冒泡排序答案:D3. 在计算机科学中,图的遍历算法不包括以下哪个?A. 深度优先搜索B. 广度优先搜索C. 动态规划D. 拓扑排序答案:C4. 以下哪个数据结构最适合实现LRU缓存淘汰算法?A. 链表B. 数组C. 栈D. 哈希表5. 在数据库中,用于删除表中所有记录的SQL命令是?A. DELETE FROM table_nameB. DROP TABLE table_nameC. TRUNCATE TABLE table_nameD. CLEAR table_name答案:A6. 以下哪个选项不是面向对象编程的特性?A. 封装B. 继承C. 多态D. 过程化答案:D7. 在HTML中,用于定义最重要的标题的标签是?A. <h1>B. <h6>C. <p>D. <div>答案:A8. 在Python中,以下哪个函数用于将字符串转换为浮点数?A. int()B. float()C. str()D. chr()答案:B9. 在计算机系统中,用于表示二进制数据的最小单位是?B. 位C. 字D. 千字节答案:B10. 以下哪个协议用于在互联网上发送电子邮件?A. HTTPB. FTPC. SMTPD. POP3答案:C二、填空题(每题2分,共20分)1. 在C++中,____关键字用于声明一个类为另一个类的友元类。

答案:friend2. 算法的时间复杂度O(1)表示该算法的执行时间与输入数据的规模____。

答案:无关3. 在图论中,____算法用于在无权图中找到最短路径。

答案:迪杰斯特拉(Dijkstra)4. 在关系型数据库中,____用于定义表的结构。

noip问题求解试题及答案

noip问题求解试题及答案

noip问题求解试题及答案NOIP问题求解试题及答案试题一:字符串反转题目描述:给定一个字符串,请编写一个程序实现字符串的反转。

输入格式:输入包含一个字符串,字符串长度不超过100。

输出格式:输出反转后的字符串。

示例:输入:hello输出:olleh答案:```pythondef reverse_string(s):return s[::-1]input_string = input().strip()print(reverse_string(input_string))```试题二:寻找最大子数组和题目描述:给定一个整数数组,请找出该数组中连续子数组的最大和。

输入格式:第一行包含一个整数n,表示数组的长度;第二行包含n个整数,表示数组的元素。

输出格式:输出一个整数,表示最大子数组和。

示例:输入:5-2 -3 4 -1 2输出:6答案:```pythondef max_subarray_sum(nums):max_sum = nums[0]current_sum = nums[0]for i in range(1, len(nums)):current_sum = max(nums[i], current_sum + nums[i])max_sum = max(max_sum, current_sum)return max_sumn = int(input())nums = list(map(int, input().split()))print(max_subarray_sum(nums))```试题三:计算阶乘题目描述:给定一个非负整数n,请计算n的阶乘。

输入格式:输入包含一个非负整数n。

输出格式:输出一个整数,表示n的阶乘。

示例:输入:5输出:120答案:```pythondef factorial(n):if n == 0:return 1else:return n * factorial(n - 1)n = int(input())print(factorial(n))```试题四:判断素数题目描述:给定一个正整数n,请判断n是否为素数。

第五章习题解答

第五章习题解答
if(!pre) A.rhead[i]=p; else pre->right=p; p->right=pa;pre=p; p->i=i;p->j=pb->j;p->e=pb->e;
//插入行链表中
if(!A.chead[p->j]) { A.chead[p->j]=p; p->down=NULL; }
i为偶数,k=i+j 合并为一个公式,可有两种形式写法:
k=i-i%2+j k=i+(-1)i /2+j-1/2
3.给定矩阵Am×n,我们将三个顶点分别为 a1n,an1和ann的三角区域的所有元素按行优先 顺序依次存入一维数组B[1..n2 ]中,使得 B[k]=aij,请写出求k的计算公式。
解:根据题设,在aij之前的i-1行中共需存储 (i-1)(1+(i-1))/2个元素,在第i行到j列需存储 的元素共有j-(n-i)个,所以i、j与k之间有如 下关系:
A[0]→A[6]→A[12]→A[3]→A[9]→A[0] 第二条链:
A[1]→A[7]→A[13]→A[4]→A[10]→A[1] 第三条链:
A[2]→A[8]→A[14]→A[5]→A[11]→A[2] 恰好使所有元素都右移一次
*4.void RSh(int A[ ], int k,int n){ //把数组A 的元素循环右移k位,只用一个辅助存储空间 for(i=1;i<=k;i++) if(n%i==0&&k%i==0) p=i; //求n和k的最大公约数p for(i=0;i<p;i++){ m=(i+k)%n;
C.data[pc].e=A.data[pa].e
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输出:
输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。样例输入:
5
8 6 5 4 1
样例输出:
1 4 5 6 8
*/
#include "iostream" #include "iomanip" using namespace std; int main()
{
int count;
int num[100]; cin>>count;
《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、
《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。输出:
输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。样例输入:
1 5 8 10 5 1 1 2 3 4
样例输出:
2140.2
*/
#include "iostream" #include "iomanip" using namespace std; int main( )
/*
1、与指定数字相同的数的个数【1.6编程基础之一维数组01】输出一个整数序列中与指定数字相同的数的个数。
输入:
输入包含三行:
第一行为N,表示整数序列的长度(N<=100);第二行为N个整数,整数之间以一个空格分开;第三行包含一个整数,为指定的数字m。
输出:
输出为N个数中与m相同的数的个数。样例输入:
{
}
}
/*
2.陶陶摘苹果【1.6编程基础之一维数组02】Noip2005普及组第1题
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。
苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳, 当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度, 请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入:
包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单
位)
分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位), 表示陶陶把手伸直的时候能够达到的最大高度。
输出:
包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。样例输入:
int high; cin>>high; int count=0;
for(int i=0;i<10;i++)
{
if(high+30>=num[i]) count++;
}
cout<<count;return 0;
}
/*
3.计算书费【1.6编程基础之一维数组03】下面是一个图书的单价表:
计算概论28.9元/本数据结构与算法32.7元/本
}பைடு நூலகம்
cout<<fixed<<setprecision(1)<<sum<<endl;return 0;
}
/*
4.数组逆序重【1.6编程基础之一维数组04】
将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。输入:
输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔。
{
double money[10]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65};
int num[10]; for(inti=0;i<10;i++)
{
cin>>num[i];
}
double sum=0; for(int i=0;i<10;i++)
{
// cout<<num[i]<<" "<<money[i]<<endl; sum+=num[i]*money[i];
3
2 3 2
2
样例输出:
*/
#include "iostream" using namespace std; int main()
{
int num[100]; cin>>count;
for(int i=0;i<count;i++)
{
cin>>num[i];
}
int cmp; cin>>cmp;
for(int i=0;i<count;i++)
以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。样例输入:
10
1 11 21 31 41 51 61 71 81 91
理,
按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数
的比例。
输入:
共2行,第一行为过往病人的数目n(0<n<=100),第二行为每个病人患病时的年龄。输出:
按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病人数占总患病人数的比例,
for(int i=0;i<count;i++)
{
cin>>num[i];
}
int n=count;
int temp = count-1; if(count%2==0)
count=count/2;
else
count=(count-1)/2;
for(int i=0;i<count;i++)
{
int m; m=num[i];
num[i]=num[temp]; num[temp]=m; temp--;
}
for(int i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;
}
/*
5.年龄与疾病【1.6编程基础之一维数组05】
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整
100 200 150 140 129 134 167 198 200 111
110
样例输出: 5
*/
#include "iostream" using namespace std; int main()
{
int num[10]; for(inti=0;i<10;i++)
{
cin>>num[i];
}
数字逻辑45.6元/本C++程序设计教程78元/本
人工智能35元/本计算机体系结构86.2元/本
编译原理27.8元/本操作系统43元/本
计算机网络56元/本JAVA程序设计65元/本给定每种图书购买的数量,编程计算应付的总费用。
输入:
输入一行,包含10个整数(大于等于0,小于等于100),
分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、
相关文档
最新文档