一九年十月二十一,突然想起MOOC C语言配套习题还没碰。
6-1 使用函数求素数和 (20 分)
本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
int PrimeSum( int m, int n );
其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数m≤n。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
/* 你的代码将被嵌在这里 */
}
输入样例:
-1 10
输出样例:
Sum of ( 2 3 5 7 ) = 17
//判断素数:a从1到根号p,p能整除,break
int prime( int p )
{
int i;
if(p<=1)//素数是正整数
return 0;
else if(p==2)
return 1;
else
{
for(i=2;i<=sqrt(p);i++)//注意等号
{
if(p%i==0)
return 0;
}
return 1;
}
}
int PrimeSum( int m, int n )
{
int sum=0,i;
for(i=m;i<=n;i++)
{
if (prime(i))
{
sum+=i;
}
}
return sum;
}
(主要是我这个笨比每次都敲不快,需要强化记忆一下。)
6-3 判断回文字符串 (20 分)
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。
函数接口定义:
bool palindrome( char *s );
函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
thisistrueurtsisiht
输出样例1:
Yes
thisistrueurtsisiht
bool palindrome( char *s )//不要冲动,先写思路,看特殊情况,注意循环条件
{
int i,j,len;
len=strlen(s);
if(len<=3)
return true;
else
{
for(i=1,j=len;i<=(len)/2;i++,j--)
{
if(s[i-1]!=s[j-1])
{
return false;
}
}
return true;
}
}
(不要冲动啊亲,先写思路和注意,要特别注意for循环条件和从0从1开始)
6-4 查找子串 (20 分)
本题要求实现一个字符串查找的简单函数。
函数接口定义:
char *search( char *s, char *t );
函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
The C Programming Language
ram
输出样例1:
10
输入样例2:
The C Programming Language
bored
输出样例2:
-1
char *search( char *s, char *t )
{
int i, j, k=0, slen, tlen;
char *p=NULL;
slen = strlen(s);
tlen = strlen(t);
for (i=0; i<slen; i++){//每次检查s串的一位
j=i;
while(s[j]==t[k]){//另外使用两个变量表示检查下标
k++;
j++;
}
if(k>=tlen){//用k与tlen检查
p = &s[i];
return p;
}
k=0;//记得赋零
}
return p;
}