期末复习记录帖子 5.28创建
实验10
6-1 多项式求值 (10 分)
本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式f(x)=∑
i=0
n
(a[i]×x
i
) 在x点的值。
函数接口定义:
double f( int n, double a[], double x );
其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf(“%lf”, &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
double f(int n,double a[],double x)
{
double sum=0;
double t=1;
int i;
for(i=0;i<=n;i++)
{
sum+=t*a[i];
t=t*x;
}
return sum;
}
6-2 移动字母 (10 分)
本题要求编写函数,将输入字符串的前3个字符移到最后。
函数接口定义:
void Shift( char s[] );
其中char s[]是用户传入的字符串,题目保证其长度不小于3;函数Shift须将按照要求变换后的字符串仍然存在s[]里。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXS 10
void Shift( char s[] );
void GetString( char s[] ); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
abcdef
输出样例:
defabc
void Shift( char s[] )
{
char x,y,z;
x=s[0];
y=s[1];
z=s[2];
int i;
int n;
n=strlen(s);
for(i=3;i<=n-1;i++)
{
s[i-3]=s[i];
}
s[n-1]=z;
s[n-2]=y;
s[n-3]=x;
}
6-3 在数组中查找指定元素 (10 分)
本题要求实现一个在数组中查找指定元素的简单函数。
函数接口定义:
int search( int list[], int n, int x );
其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到
则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else
printf("Not found\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
5
1 2 2 5 4
2
输出样例1:
index = 1
输入样例2:
5
1 2 2 5 4
0
输出样例2:
Not found
int search( int list[], int n, int x )
{
int i;
for(i=0;i<=n-1;i++)
{
if(list[i]==x)
{
return i;
}
}
return -1;
}
6-4 删除字符 (10 分)
本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );
其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void delchar( char str, char c );
void ReadString( char s[] ); / 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
a
happy new year
输出样例:
hppy new yer
这个题要注意
1.找到要删去的字符
2.处理该字符后面的序列,向前进一位
void delchar( char *str, char c )
{
int i,j,n;
n=strlen(str);
for(i=0;i<=n-1;i++)
{
while(c==str[i])
{
for(j=i;j<=n-1;j++)
{
str[j]=str[j+1];
}
n--;
}
}
return str;
}
6-5 分类统计各类字符个数 (10 分)
本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。
函数接口定义:
void StringCount( char *s );
其中 char *s 是用户传入的字符串。函数StringCount须在一行内按照
大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数
的格式输出。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 15
void StringCount( char *s );
void ReadString( char s ); / 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
/* Your function will be put here /
输入样例:
aZ&?
093 Az
输出样例:
2 2 1 3 4
void StringCount( char *s )
{
int x,y,z,p,q;
x=y=z=p=q=0;
int i=0;
int n=strlen(s);
for(i=0;i<=n-1;i++)
{
if('A'<=s[i]&&s[i]<='Z')
x++;
else if('a'<=s[i]&&s[i]<='z')
y++;
else if('0'<=s[i]&&s[i]<='9')
p++;
else if(s[i]==' ')
z++;
else
q++;
}