C语言程序设计(第四版)—习题5程序设计题

目录

1.使用函数计算分段函数的值:

2.使用函数求奇数和:

3.使用函数计算两点间的距离:

4.利用函数计算素数个数并求和:

5.使用函数统计指定数字的个数:

6.使用函数输出水仙花数:

7.使用函数求余弦函数的近似值:

8.输入一个正整数n,输出n行空心的数字金字塔。


        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 );

其中用户传入的参数为平面上两个点的坐标(x1y1)和(x2y2),函数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返回区间[mn]内所有素数的和。题目保证用户传入的参数mn

裁判测试程序样例:

#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应返回numberdigit出现的次数。

裁判测试程序样例:

#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则打印开区间(mn)内所有的水仙花数,每个数字占一行。题目保证100≤mn≤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);
	}
}
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值