C语言练习-day26

题目:数字金字塔。本题要求实现函数输出n行数字金字塔。(注意每个数字后面跟一个空格)

输入:“金字塔”的层数n(为[1, 9]的正整数),类型为int。

输出:输出对应数字金字塔。

优化目标:无。

算法思想:首先每i行输出n-i个空格,表示在每行第一个元素前的空格,然后依次输出每行元素(第一行就是一个1,第二行就是两个2,····)。

#include <stdio.h>

void pyramid( int n );

int main()
{    
    int n;

    scanf("%d", &n);
    pyramid(n);
    
    return 0;
}

void pyramid( int n ){
	int i,j;
	for(i = 1;i<=n;i++){
		for(j = 1;j<=(n-i);j++){
			printf("%s"," ");
		}
	
		for(j = 1;j<=i;j++){
			printf("%d ",i);
		}
		printf("\n");
	}
	
}

输入:6

输出:

     1
    2 2
   3 3 3
  4 4 4 4
 5 5 5 5 5
6 6 6 6 6 6

题目:使用函数求奇数和。本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。

输入:预输入的数字个数N,类型为int,依次输入N个整数。

输出:输出输入元素中的奇数和奇数和。

优化目标:无。

算法思想:函数even将根据用户传入的参数n的奇偶性返回相应值,当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和。首先将每个输入元素去even函数中判断,如果是奇数就输出元素,最后调用OddSum输出奇数和。

#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);
    for ( i=0; i<N; i++ ) {
        scanf("%d", &List[i]);
    }
    printf("Sum of ( ");
    for ( i=0; i<N; i++ ) {
        if ( even(List[i])==0 )
            printf("%d ", List[i]);
    }
    printf(") = %d\n", OddSum(List, N));
    
    return 0;
}


int even( int n ){
	if(n%2 == 0){
		return 1;
	}
	else{
		return 0;
	}
}

int OddSum( int List[], int N ){
	int sum = 0;
	for(int i=0;i<N;i++){
		if(even(List[i]) == 0){
			sum = sum+List[i];
		}
	}
	return sum;
	
}

输入:

6

1 2 3 4 5 6

输出:

Sum of ( 1 3 5 ) = 9

题目:使用函数计算两点间的距离。本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。

输入:两个点坐标的(x1,y1)和(x2,y2),类型都是double。

输出:输出两个坐标的距离。

优化目标:无。

算法思想:先将坐标点对应相减后乘自身(如(x1-x2)*(x1-x2))再相加,得到的是距离的平方,然后使用math库的sqrt函数就求导距离,然后返回输出。

#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;
}

double dist( double x1, double y1, double x2, double y2 ){
	double power,distance;
	power = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
	distance = sqrt(power);
	return distance;
}

输入:10 10 200 100

输出:dist = 210.24

题目:使用函数求素数和,本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。(素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。)

输入:所要求和的素数的上下界m和n,类型都是int。

输出:输出输入范围中的素数和素数和。

优化目标:无。

算法思想:其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数m≤n。依次将范围内的数传入prime,判断是否为素数,是就输出。然后再调用PrimeSum函数输出总和。

#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;
}

int prime( int p ){
	int i;
	for(i=2;i<p;i++){
		if(p%i == 0){
			break;
		}
	}
	if(i==p){
		return 1;
	}
	else{
		return 0;
	}
	
}

int PrimeSum( int m, int n ){
	int sum = 0;
	for(int i=m;i<=n;i++){
		if( prime(i) != 0 )
		    sum+=i;
	}
	return sum;
}

输入:2 12

输出:Sum of ( 2 3 5 7 11 ) = 28

今日总结:前段时间一直在做关于数据结构的题,感觉有点忽略了C语言本身的题,所以这几天就主要是练一下C语言的题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值