2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > (级吉林大学)中国大学MOOC《高级语言程序设计》期末考试——主观题

(级吉林大学)中国大学MOOC《高级语言程序设计》期末考试——主观题

时间:2021-09-15 15:47:04

相关推荐

(级吉林大学)中国大学MOOC《高级语言程序设计》期末考试——主观题

《高级语言程序设计》期末考试——主观题

1降序数(15分)

问题描述:编写程序,判断给定自然数n是否为降序数。降序数是指对于n=d1d2d3…dk,有:di>=di+1,i=1,2,…,k-1。例如:54321就是一个降序数。

输入:一个自然数n

输出:如果n是降序数,则输出YES,否则输出NO

样例:输入:543 输出:YES

时间限制:500ms内存限制:31kb

#include <stdio.h>int main(void) {int n,i=0,flag=0;int a[100];scanf("%d",&n);while(n) {a[i++]=n%10;n/=10;}for(int j=0; j<i-1; j++)if(a[j]>a[j+1]) flag=1;if(flag) printf("NO");else printf("YES");return 0;}

2组合数计算(15分)

问题描述:编写程序计算从m个物体中选取n个物体所组成的组合数目(m>=n>0)。如果用f(m,n)表示这个组合数,这里可以得到一个分段函数的定义:

当m=n时,f(m,n)=1;

当n=1时,f(m,n)=m;

m<=0或n<=0或m<n时,f(m,n)=-1;

其他情况时,f(m,n)=f(m-1,n)+f(m-1,n-1);

输入:两个整数,中间以一个西文空格字符间隔,第一个为m的值,第二个是n的值。

输出:一个整数。

样例1:输入 -3 2 输出:-1

样例2:输入 2 -1 输出:-1

样例3:输入 4 1 输出:4

样例4:输入 5 5 输出:1

样例5:输入 5 2 输出:10

时间限制:2000ms内存限制:128000kb

#include <stdio.h>int C(int m,int n) {if(m==n) return 1;else if(n==1) return m;else if(m<=0||n<=0||m<n) return -1;else return C(m-1,n)+C(m-1,n-1);}int main(void) {int m,n;scanf("%d %d",&m,&n);printf("%d",C(m,n));return 0;}

3统计词频(20分)

问题描述:输入6个单词,查找第6个单词在前5个单词中出现的次数。

输入:6个单词

输出:一个整数(次数)

样例:输入 Mary Olivia Donald Olivia Linda Olivia 输出:2

时间限制:500ms内存限制:32000kb`

#include<stdio.h>#include<string.h>int main(void) {int j=0;char word[5][100];char competitor[100];for(int i=0; i<5; i++)scanf("%s",word[i]);scanf("%s",competitor);for(int i=0; i<5; i++)if(!strcmp(competitor,word[i]))j++;printf("%d",j);return 0;}

4生成有序序列(20分)

问题描述:设整数集合 M 定义如下:1∈M;若x∈M , 则2x+1∈M , 3x+1∈M;没有别的整数属于集合 M。编程序按递增顺序生成并输出集合M的无重复的前n(n<50)项。

输入:一个整数n

输出:n个无重复的递增整数,整数之间以一个西文空格间隔。

样例1:输入3 输出1 3 4

样例2:输入 10 输出1 3 4 7 9 10 13 15 19 21

样例3:输入 15 输出 1 3 4 7 9 10 13 15 19 21 22 27 28 31 39

时间限制:500ms内存限制:32000kb

#include<stdio.h>#include<math.h>void sortofup(int *a,int n) {int flag=1,r,i;while(flag){flag=0;for(i=0; i<n; i++) if(a[i]>a[i+1]) {r=a[i];a[i]=a[i+1];a[i+1]=r;flag=1;}}}int main(void) {int a[11][1024],b[2048]= {0},i,j,k=0,n;scanf("%d",&n);a[0][0]=1;for(i=0; i<10; i++)for(j=0; j<pow(2,i); j++){a[i+1][2*j]=a[i][j]*2+1;a[i+1][2*j+1]=a[i][j]*3+1;}for(i=0; i<10; i++)for(j=0; j<pow(2,i); j++){b[k]=a[i][j];k++;}sortofup(b,k);printf("%d",b[1]);for(i=2; i<n+1; i++){if(b[i]==b[i+1]) {i++;n++;}printf("% d",b[i]);}return 0;}

5十六进制大整数加法(20分)

问题描述:编写程序,从键盘读入形如X + Y=的表达式计算结果,其中X和Y都是合法且长度不超过64位的十六进制非负整数,结果中所有字符均大写且无多余的零。

样例1:输入 1234+1234=输出0X2468

样例2:输入 0000+12A= 输出0X12A

样例3:输入 12ff+1= 输出 0X1300

时间限制:500ms内存限制:32000kb

#include<stdio.h>#include<string.h>#define N 100 int main(void) {char a[N]= {},b[N]= {};scanf("%[^+]",a);getchar();scanf("%[^=]",b);getchar();int a0[N]= {},b0[N]= {},c0[N]= {0},k,length;for(int i=(int)strlen(a)-1,j=0; a[j]!='\0'; i--,j++) {if(a[j]>='0'&&a[j]<='9') a0[i]=(int)(a[j]-48);if(a[j]>='a'&&a[j]<='f') a0[i]=(int)(a[j]-87);if(a[j]>='A'&&a[j]<='F') a0[i]=(int)(a[j]-55);}for(int i=(int)strlen(b)-1,j=0; b[j]!='\0'; i--,j++) {if(b[j]>='0'&&b[j]<='9') b0[i]=(int)(b[j]-48);if(b[j]>='a'&&b[j]<='f') b0[i]=(int)(b[j]-87);if(b[j]>='A'&&b[j]<='F') b0[i]=(int)(b[j]-55);}for(k=0;k<N; k++){if(a0[k]+b0[k]+c0[k]>15) c0[k+1]++;c0[k]=(a0[k]+b0[k]+c0[k])%16;}printf("0X");for(length=N-1;c0[length]==0;length--);for(int i=length; i>=0; i--)switch(c0[i]) {case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:printf("%d",c0[i]);break;case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;default:break;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。