@目录
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
原字母 | 对应字母 |
---|---|
A | Z |
B | Y |
C | X |
D | W |
... | ... |
X | C |
Y | B |
Z | A |
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出替换完成后的字符串。
输入样例:
Only the 11 CAPItaL LeTtERS are replaced.
输出样例:
Lnly the 11 XZKRtaO OeGtVIH are replaced.
注: 编程重点
A+Z=155 B+Y=155 C+X=155 D+W=155 … … X+C=155 Y+B=155 Z+A=155
代码:
#include<stdio.h>
// A+Z=155
// B+Y=155
// ......
int main()
{
char str[81];
gets(str);
int i;
for(i=0;i<strlen(str);i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
str[i]=155-str[i];
}
}
puts(str);
}
本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。
输出格式:
按照以下格式输出:
average = 平均成绩 max = 最高成绩 min = 最低成绩
结果均保留两位小数。
输入样例:
3 85 90 95
输出样例:
average = 90.00 max = 95.00 min = 85.00
代码:
#include<stdio.h>
double fun(int *arr,int n,int l)
{
int i;
int index=0;
for(i=1;i<n;i++)
{
if(l==1)
{
if(arr[i]>=arr[index]) index=i;
}
else
{
if(arr[i]<=arr[index]) index=i;
}
}
return arr[index]/1.0;
}
int main()
{
int N;
int arr[10000];
scanf("%d",&N);
int i;
int sum=0;
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
sum+=arr[i];
}
printf("average = %.2lf\n",sum/(double)N);
printf("max = %.2lf\n",fun(&arr,N,1));
printf("min = %.2lf\n",fun(&arr,N,2));
return 0;
}
本题要求实现一个在数组中查找指定元素的简单函数。
函数接口定义:
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;
int l=-1;
for(i=0;i<n;i++)
{
if(list[i]==x){l=1;break;}
}
if(l==1) return i;
else return l;
}
本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由
变换为
(最后m个数循环移最前面的m个位置)。
函数接口定义:
int ArrayShift( int a[], int n, int m );
其中 a[] 是用户传入的数组;n是数组的大小;m是右移的位数。函数 ArrayShift 须将循环右移后的数组仍然存在a[]中。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
int ArrayShift( int a[], int n, int m );
int main()
{
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");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
6 2 1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
代码:
int ArrayShift( int a[], int n, int m )
{
int i;
int k;
for(k=1;k<=m;k++)
{
int temp=a[n-1];
for(i=n-1;i>0;i--)
{
a[i]=a[i-1];
}
a[0]=temp;
}
}
本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。
函数接口定义:
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 suma=0; //小写字母个数
int sumA=0; //大写字母个数
int sum_=0; //空格个数
int sum1=0; //数字个数
// int sumO=0;
int i;
int len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]>='A'&&s[i]<='Z') sumA++;
if(s[i]>='a'&&s[i]<='z') suma++;
if(s[i]==' ') sum_++;
if(s[i]>='0'&&s[i]<='9') sum1++;
}
printf("%d %d %d %d %d\n",sumA,suma,sum_,sum1,len-(suma+sumA+sum_+sum1));
}
本题要求实现一个计算复数之积的简单函数。
函数接口定义:
struct complex multiply(struct complex x, struct complex y);
其中 struct complex 是复数结构体,其定义如下:
struct complex{
int real;
int imag;
};
裁判测试程序样例:
#include <stdio.h>
struct complex{
int real;
int imag;
};
struct complex multiply(struct complex x, struct complex y);
int main()
{
struct complex product, x, y;
scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
product = multiply(x, y);
printf("(%d+%di) * (%d+%di) = %d + %di\n", x.real, x.imag, y.real, y.imag, product.real, product.imag);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3 4 5 6
输出样例:
(3+4i) * (5+6i) = -9 + 38i
代码:
struct complex multiply(struct complex x, struct complex y)
{
struct complex t;
t.real=x.real*y.real-x.imag*y.imag;
t.imag=x.real*y.imag+y.real*x.imag;
return t;
};
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。
函数接口定义:
int set_grade( struct student *p, int n );
其中 p 是指向学生信息的结构体数组的指针,该结构体的定义为:
struct student{
int num;
char name[20];
int score;
char grade;
};
n 是数组元素个数。学号 num 、姓名 name 和成绩 score 均是已经存储好的。set_grade 函数需要根据学生的成绩 score 设置其等级 grade 。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时, set_grade 还需要返回不及格的人数。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{
struct student stu[MAXN], *ptr;
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10 31001 annie 85 31002 bonny 75 31003 carol 70 31004 dan 84 31005 susan 90 31006 paul 69 31007 pam 60 31008 apple 50 31009 nancy 100 31010 bob 78
输出样例:
The count for failed (<60): 1 The grades: 31001 annie A 31002 bonny B 31003 carol B 31004 dan B 31005 susan A 31006 paul C 31007 pam C 31008 apple D 31009 nancy A 31010 bob B
代码:
int set_grade( struct student *p, int n )
{
int i;
int temp=0;
for(i=0;i<n;i++)
{
if(p[i].score>=85&&p[i].score<=100) p[i].grade='A';
if(p[i].score>=70&&p[i].score<=84) p[i].grade='B';
if(p[i].score>=60&&p[i].score<=69) p[i].grade='C';
if(p[i].score>=0&&p[i].score<=59) {p[i].grade='D';temp++;}
}
return temp;
}
本题要求实现函数,可以返回一个给定月份的英文名称。
函数接口定义:
char *getmonth( int n );
函数 getmonth 应返回存储了 n 对应的月份英文名称的字符串头指针。如果传入的参数 n 不是一个代表月份的数字,则返回空指针NULL。
裁判测试程序样例:
#include <stdio.h>
char *getmonth( int n );
int main()
{
int n;
char *s;
scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
5
输出样例1:
May
输入样例2:
15
输出样例2:
wrong input!
代码:
char *getmonth( int n )
{
if(n>12||n<=0) return NULL;
else
{
if(n==1) return "January";
if(n==2) return "February";
if(n==3) return "March";
if(n==4) return "April";
if(n==5) return "May";
if(n==6) return "June";
if(n==7) return "July";
if(n==8) return "August";
if(n==9) return "September";
if(n==10) return "October";
if(n==11) return "November";
if(n==12) return "December";
}
}
本题要求实现函数,可以根据下表查找到星期,返回对应的序号。
序号 | 星期 |
---|---|
0 | Sunday |
1 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
函数接口定义:
int getindex( char *s );
函数 getindex 应返回字符串 s 序号。如果传入的参数 s 不是一个代表星期的字符串,则返回-1。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
int n;
char s[MAXS];
scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf("wrong input!\n");
else printf("%d\n", n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
Tuesday
输出样例1:
2
输入样例2:
today
输出样例2:
wrong input!
代码:
int getindex( char *s )
{
char str[8][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i,j;
int len=strlen(s);
int l=-1;
for(i=0;i<7;i++)
{
if(strcmp(s,str[i])==0)
{
l=1;break;
}
}
if(l==1) return i;
else return -1;
}
本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。
函数接口定义:
int sum( int n );
该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。
裁判测试程序样例:
#include <stdio.h>
int sum( int n );
int main()
{
int n;
scanf("%d", &n);
printf ("%d\n", sum(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
55
输入样例2:
0
输出样例2:
0
代码:
int sum( int n )
{
if(n>0)
{
if(n==1) return 1;
else return n+sum(n-1);
}
else return 0;
}