《程序设计基础与实验》期末考试第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→23+ 43→72(第1次变换)
72→73+23 →351(第2次变换)
351→33 +53+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;
}
来源:CSDN
作者:鯐藍
链接:https://blog.csdn.net/qq_45052346/article/details/104466430