《程序设计基础与实验》期末考试第2场2018-2019学年第一学期

核能气质少年 提交于 2020-02-24 11:02:06

《程序设计基础与实验》期末考试第2场2018-2019学年第一学期

这里收集了我当时的期末考卷,这里包括程序填空题、函数题和编程题。大家可以看看当做复习练习用。
想看选择判断的请进《程序设计基础与实验》期末考试第1场2018-2019学年第一学期

程序填空题:
5-1
数学家希尔伯特在1900年国际数学家大会的报告上提出一个“孪生素数猜想”,即:存在无穷多个素数p,使得p + 2也是素数。p和p+2这一对差为2的素数,被称为“孪生素数”。看起来,这个猜想是成立的,我们总能找到很多对孪生素数,例如:3和5, 5和7, 11和13…… 但这一猜想至今还未被证明。下面这段程序对于输入的整数n,寻找大于n的最小的一对孪生素数p和q(q=p+2)。根据所提供的运行示例,将程序补充完整。

运行示例如下:
输入示例1:

1

输出示例1:

3 5

输入示例2:

5

输出示例2:

11 13
#include <stdio.h>
#include <math.h>
int isPrime(int num)
{
    if(num==1) 
    	return 0;
    for(int i=2; i<=sqrt(num); i++)
        if( num%i==0(2分) ) 
        	return 0;
    return 1;
}
int main(void)
{
    int n;

    scanf("%d",&n);   
    if(n<3) 
		printf("3 5\n");
    else
   		{
			n=n+1;
			while(1)
			{
				if(isPrime(n)==1&&isPrime(n+2)==1(2分))
				{
					printf("%d %d\n",n, n+2);
					return 0(2分);
				}
				n++;	
			};
    }

    return 0;
}

答案正确
5-2
在玩牌程序中,每一组牌用数字1〜13代表。输入数字,显示相应的牌,超出该范围则提示“Error”。其中2〜10直接显示数字,而数字1、11、12、13则分别用Ace、Jack、Queen、King来表示。请根据运行示例,将下列程序补充完整。
输入示例1:

13

输出示例1:

King

输入示例2:

8

输出示例2:

8

输入示例3:

20

输出示例3:

Error
#include <stdio.h>
int main()
{
    int n;

    scanf("%d", &n);
    if(n>=1&&n<=13(2分)){
        switch  (n){
            case 1:  printf("Ace\n"); break;
            case 11: printf("Jack\n"); break; 
            case 12: printf("Queen\n"); break;
            case 13: printf("King\n"); break; 
            default: printf("%d\n",n)(2分); break;
        }
    }
    else
    {
        printf("Error\n")(2分);
    }

    return 0;
}

答案正确
5-3
输入一个正整数n(1≤n≤10),打印一个n行n列的方阵。根据运行示例,将程序补充完整。

当n=4时,打印如下方阵:

	13  14  15  16
    9  10  11  12
    5   6   7   8
    1   2   3   4
#include <stdio.h>
int main(void)
{
	int i, j, n;
	    
	scanf("%d", &n);
	for( i=n-1(2分) ; i >= 0 ; i--(2分)) 
	{
		for ( j = 1; j <= n; j++ )
		{
			printf("%4d", n*i+j(2分));
		}
		printf("\n");
	}
	
	return 0;
}

答案正确

函数题
6-1 查找子串 (15分)
输入两个长度均不超过100的字符串str1和str2(两个字符串中均没有空格),中间用空格分隔,且保证str1的长度大于等于str2。 调用函数substr( )查找字符串str2在字符串str1中是否存在。

函数接口定义:

int substr(char *s1, char *s2); 

其中函数substr须返回字符串s2在字符串s1中是否存在,如果存在,返回1,否则返回0。
裁判测试程序样例:

#include <stdio.h>

int substr(char *s1, char *s2); 

int main(void)
{
    char str1[100] = {0};
    char str2[100] = {0};

    scanf("%s", str1);
    scanf("%s", str2);
    if(substr(str1, str2)==1)       
    	printf("Found!\n");	
    else 
        printf("None!\n");

    return 0;
}


/* 你的代码将被嵌在这里 */

输入样例:

happy app

输出样例:

Found!
int substr(char *s1, char *s2)
{
	char st1[100]={0};
	char st2[100]={0};
	int i=0,j=0;
	
	while(s1[i]!='\0')
	{
		st1[i]=s1[i];
		i++;
	}	
	st1[i]='\0';
	i=0;
	while(s2[i]!='\0')
	{
		st2[i]=s2[i];
		i++;
	}
	st2[i]='\0';
	int nn=i;
	i=0;int ff=0,k;
	while(st1[i]!='\0')
	{
		if(st1[i]==st2[j])
		{
			ff=1;
			for(k=i;j<nn;k++,j++)
			{
				if(st1[k]!=st2[j])
				{
					ff=0;
					break;
				}
			}
		}
		i++;
	}
	if(ff==0) return 0;
	else return 1;
	
}

编程题:
7-1 圣经数
人们把153叫做“圣经数”,因为153具有一个有趣的性质:任写一个3的倍数,把各位数字的立方和相加,得出和,再把和的各位数字立方相加,如此反复进行,最后必然出现153。例如:24是3的倍数,按照上述规则,进行变换的过程是:

24→2​3+ 4​3→72(第1次变换)

72→7​3+23 →351(第2次变换)

351→3​3 +5​3+13→153(第3次变换)

经过3次变换,153出现了!请你给出能够被3整除的正整数,输出变成153所需要的次数,当输入的数不是3的倍数时,提示输出“Error!”

输入格式:
输入在一行中给出1个能够被3整除的正整数。

输出格式:
对每一组输入,在一行中输出变换成圣经数所需要的次数。

输入样例1:

12

输出样例1:

count=5

输入样例2:

123

输出样例2:

count=7

输入样例3:

17

输出样例3:

Error!
#include<stdio.h>
#include<math.h>
int main(void)
{
	int x,cc=0,sum=0;
	
	scanf("%d",&x);
	if(x%3!=0)
		printf("Error!\n");
	else
	{
		while(1)
		{
			while(x!=0)
			{
				sum=sum+pow(x%10,3);
				x=x/10;
			}
			cc++;
			if(sum==153)
			{
				printf("count=%d\n",cc);
				break;
			}
			x=sum;
			sum=0;
		}
	}
	
	return 0;
}

7-2 特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246
#include<stdio.h>
int main(void)
{
	int a,n,sum=0,item=0,i,j;
	
	scanf("%d %d",&a,&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i;j++)
			item=item*10+a;
		sum=sum+item;
		item=0;
	}
	printf("s = %d\n",sum);
	
	return 0;
}

7-3 选择法排序
本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1
#include<stdio.h>
int main(void)
{
	int i,n,j,index;
	int a[10];
	
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n-1;i++)
		for(j=i+1;j<n;j++)
			if(a[j]>a[i])
			{
				index=a[i];
				a[i]=a[j];
				a[j]=index;
			}
	for(i=0;i<n;i++)
	{
		if(i==0)
			printf("%d",a[i]);
		else
			printf(" %d",a[i]);
	}
	
	return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!