6-7 分类统计字符个数
本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。
函数接口定义:
voidStringCount( char s[] );
其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
裁判测试程序样例:
#include<stdio.h>#define MAXS 15voidStringCount( char s[] );
voidReadString( char s[] ); /* 由裁判实现,略去不表 */intmain(){
char s[MAXS];
ReadString(s);
StringCount(s);
return0;
}
/* Your function will be put here */
输入样例:
aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
void StringCount( char s[] )
{
int letter=0,blank=0,digit=0,other=0;
for(int i=0;i<=s[i];i++)
{
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
letter++;
else if(s[i]==' '||s[i]=='\n')
blank++;
else if(s[i]>='0'&&s[i]<='9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n",
letter,blank,digit,other);
}
6-8 在数组中查找指定元素
本题要求实现一个在数组中查找指定元素的简单函数。
函数接口定义:
intsearch( intlist[], int n, int x );
其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到
则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。
裁判测试程序样例:
#include<stdio.h>#define MAXN 10intsearch( intlist[], int n, int x );
intmain(){
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);
elseprintf("Not found\n");
return0;
}
/* 你的代码将被嵌在这里 */
输入样例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 t=-1;
for(int i=0;i<n&&t==-1;i++)
{
if(list[i]==x)
t=i;
}
return t;
}
6-9 数组循环右移
本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)(最后m个数循环移至最前面的m个位置)。
函数接口定义:
voidArrayShift( int a[], int n, int m );
其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。
裁判测试程序样例:
#include<stdio.h>#define MAXN 10voidArrayShift( int a[], int n, int m );
intmain(){
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return0;
}
/* 你的代码将被嵌在这里 */
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
//方法一
void ArrayShift( int a[], int n, int m )
{
int i;
int b[n];
for(i=0;i<n;i++)
b[(i+m)%n]=a[i];
for(i=0;i<n;i++)
a[i]=b[i];
}
//方法二
void ArrayShift( int a[], int n, int m )
{
int mid;
for(int j=0;j<m;j++)
{
mid=a[n-1];
for(int i=n-1;i>0;i--)
{
a[i]=a[i-1];
}
a[0]=mid;
}
}
6-10 使用函数判断完全平方数
本题要求实现一个判断整数是否为完全平方数的简单函数。
函数接口定义:
intIsSquare( int n );
其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。
裁判测试程序样例:
#include<stdio.h>#include<math.h>intIsSquare( int n );
intmain(){
int n;
scanf("%d", &n);
if ( IsSquare(n) ) printf("YES\n");
elseprintf("NO\n");
return0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
90
输出样例1:
NO
输入样例2:
100
输出样例2:
YES
int IsSquare( int n )
{
if((int)sqrt(n)==sqrt(n))
return 1;
else
return 0;
}