目录
1.使用函数计算分段函数的值:
输入x,计算并输出下列分段函数 f(x) 的值。要定义和调用函数sign(x)实现该分段函数。试编写相应程序。
函数接口定义:
int sign( int x );
其中
x
是用户传入的整型参数。符号函数的定义为:若x
大于0,sign(x)
= 1;若x
等于0,sign(x)
= 0;否则,sign(x)
= −1。裁判测试程序样例:
#include <stdio.h> int sign( int x ); int main() { int x; scanf("%d", &x); printf("sign(%d) = %d\n", x, sign(x)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
sign(10) = 1
int sign( int x ){
int result;
if(x>0){
result=1;
}else if(x==0){
result=0;
}else {
result=-1;
}
return result;
}
2.使用函数求奇数和:
输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。试编写相应程序。
函数接口定义:
int even( int n ); int OddSum( int List[], int N );
其中函数
even
将根据用户传入的参数n
的奇偶性返回相应值:当n
为偶数时返回1,否则返回0。函数OddSum
负责计算并返回传入的N
个整数List[]
中所有奇数的和。裁判测试程序样例:
#include <stdio.h> #define MAXN 10 int even( int n ); int OddSum( int List[], int N ); int main() { int List[MAXN], N, i; scanf("%d", &N); printf("Sum of ( "); for ( i=0; i<N; i++ ) { scanf("%d", &List[i]); if ( even(List[i])==0 ) printf("%d ", List[i]); } printf(") = %d\n", OddSum(List, N)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
6 2 -3 7 88 0 15
输出样例:
Sum of ( -3 7 15 ) = 19
int even( int n ) {
if(n%2==0) {
return 1;
} else {
return 0;
}
}
int OddSum( int List[], int N ) {
int i,sum=0;
for(i=0; i<N; i++) {
if(even(List[i])==0) {
sum=sum+List[i];
}
}
return sum;
}
3.使用函数计算两点间的距离:
给定平面任意两坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位小数)。要求定义和调用函数dist(x1,y1,x2,y2)计算两点间的距离。试编写相应程序。
函数接口定义:
double dist( double x1, double y1, double x2, double y2 );
其中用户传入的参数为平面上两个点的坐标(
x1
,y1
)和(x2
,y2
),函数dist
应返回两点间的距离。裁判测试程序样例
#include <stdio.h> #include <math.h> double dist( double x1, double y1, double x2, double y2 ); int main() { double x1, y1, x2, y2; scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2); printf("dist = %.2f\n", dist(x1, y1, x2, y2)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
10 10 200 100
输出样例:
dist = 210.24
double dist( double x1, double y1, double x2, double y2 ){
double sum;
sum = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return sum;
}
4.利用函数计算素数个数并求和:
输入两个正整数m和n(1≤m,n≤500),统计并输出m和n之间的素数的个数以及这些素数的和。要求定义并调用函数prime(m)判断m是否为素数。试编写相应程序。
函数接口定义:
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
int prime( int p ){
if(p<=1){
return 0;
}else if(p==2){
return 1;
}else{
int i;
int limit=sqrt(p);
for(i=2;i<=limit;i++){
if(p%i==0){
return 0;
}
}
return 1;
}
}
int PrimeSum( int m, int n ){
int sum=0;
int j;
for(j=m;j<=n;j++){
if(prime(j)!=0){
sum+=j;
}
}
return sum;
}
5.使用函数统计指定数字的个数:
读入一个整数,统计并输出该数中“ 2 ” 的个数。要求定义并调用函数countdigit ( number, digit),它的功能是统计整数 number 中数字 digit 的个数。例如countdigit(12 292,2)的返回值是3。试编写相应程序。
函数接口定义:
int countdigit( int number, int digit );
其中
number
是不超过长整型的整数,digit
为[0, 9]区间内的整数。函数CountDigit
应返回number
中digit
出现的次数。裁判测试程序样例:
#include <stdio.h> int countdigit( int number, int digit ); int main() { int number, digit; scanf("%d %d", &number, &digit); printf("Number of digit %d in %d: %d\n", digit, number, Ccountdigit(number, digit)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
-21252 2
输出样例:
Number of digit 2 in -21252: 3
int countdigit( int number, int digit ){
int count=0;
if(number<0){
number=-number;
}
if(number==0&&number==digit){
count++;
}
int sum=number;
while(sum>0){
if(digit==(sum%10)){
count++;
}
sum=sum/10;
}
return count;
}
6.使用函数输出水仙花数:
输入两个正整数m和n(1≤m,n≤1 000),输出m~n之间的所有满足各位数字的立方和等于它本身的数。要求定义并调用函数 is(number)判断number 的各位数字之立方和是否等于它本身。试编写相应程序。
函数接口定义:
int is( int number ); void PrintN( int m, int n );
函数is判断
number
是否为水仙花数,是则返回1,否则返回0。函数
PrintN
则打印开区间(m
,n
)内所有的水仙花数,每个数字占一行。题目保证100≤m
≤n
≤10000。裁判测试程序样例:
#include <stdio.h> #include <math.h> int is( int number ); void PrintN( int m, int n ); int main() { int m, n; scanf("%d %d", &m, &n); PrintN(m, n); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
153 400
输出样例:
153 is a narcissistic number 370 371
int is( int number ) {//判断是否是水仙花数
int count=0;
int sum=number;
while(sum>0) {
count ++;
sum /= 10;
}
int a=number;
int i;
while(a) {
i = a % 10;
sum += pow( i,count);
a/=10;
}
if(sum==number) {
return 1;
} else {
return 0;
}
}
void PrintN( int m, int n ) {//输出m到n间的所有水仙花数
int i;
for(i=m+1; i<n; i++) {
if( is(i) ) {
printf("%d\n", i);
}
}
}
7.使用函数求余弦函数的近似值:
输入精度e,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funcos(e,x)求余弦函数的近似值。试编写相应程序。
函数接口定义:
double funcos( double e, double x );
其中用户传入的参数为误差上限
e
和自变量x
;函数funcos
应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。裁判测试程序样例:
#include <stdio.h> #include <math.h> double funcos( double e, double x ); int main() { double e, x; scanf("%lf %lf", &e, &x); printf("cos(%.2f) = %.6f\n", x, funcos(e, x)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
0.01 -3.14
输出样例:
cos(-3.14) = -0.999899
double funcos( double e, double x ) {
int i=0,flag=1;
double item,sum=0,fact=1;
do {
item=pow(x,i)/fact;
sum+=flag*item;
i+=2;
fact=fact*(i-1)*i;
flag=-flag;
} while(item>=e);
return sum;
}
8.输入一个正整数n,输出n行空心的数字金字塔。
要求定义和调用函数hollow_pyramid(n) 输出n行空心的数字金字塔。当n=5时,5行空心的数字金字塔如下所示。
函数接口定义:
void hollow_pyramid( int n );
其中
n
是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n
行数字空心金字塔。裁判测试程序样例:
#include <stdio.h> void hollow_pyramid( int n ); int main() { int n; scanf("%d", &n); hollow_pyramid(n); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
5
输出样例:
1 2 2 3 3 4 4 555555555
void hollow_pyramid( int n ) {
int i,j,k;
for(i=1; i<n; i++) {
for(k=n-i; k>0; k--) {//没出现数字前的空格
printf(" ");
}
for(j=1; j<=2*i-1; j++) {
if(j==1||j==2*i-1)
printf("%d",i);
else
printf(" ");//数字中间的空格
}
printf("\n");
}
for(j=1; j<=2*n-1; j++) {//最后一行没有空格
printf("%d",i);
}
}