题目:数字金字塔。本题要求实现函数输出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语言的题。