2.使用函数求奇数和:输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0 。
#include<stdio.h>
int even(int n) {
if (n % 2 == 0) {
return 1;
}
else {
return 0;
}
}
int main() {
int num,sum=0;
printf("enter numbers:");
while (1) {
scanf("%d", &num);
if (num <= 0) {
break;
}
if (!even(num)) {
sum += num;
}
}
printf("%d", sum);
return 0;
}
3.使用函数计算两点间的距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离,(保留2位小数)。要求定义和调用函数dist(x1,y1,x2,y2)计算两点间的距离。
#include<stdio.h>
#include<math.h>
double dist(double x1, double y1, double x2, double y2) {
double distance;
distance = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2));
return distance;
}
int main() {
double x1, y1, x2, y2;
printf("enter (x1,y1) (x2,y2):");
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("the distance is:%lf:", dist(x1, y1, x2, y2));
return 0;
}
4.利用函数计算素数个数并求和:输入两个正整数m和n(1≤m,n≤500),统计并输出m和n之间的素数的个数以及这些素数的和。要求定义和并调用函数prime(m)判断m是否为素数。
#include<stdio.h>
#include<math.h>
int prime(int x) {
int i;
if (x <= 1) {
return 0;
}
else if (x == 2) {
return 1;
}
else if (x > 2) {
int limit = sqrt(x) + 1;
for (i = 2; i <=limit; i++) { /*i作为除数不能为0啊啊啊啊啊啊啊啊啊啊*/
if (x % i == 0) {
return 0;
}
}
if (i > limit) {
return 1;
}
}
}
int main() {
int m,n,i,sum=0,count=0;
printf("enter m n(1≤m,n≤500):");
scanf("%d %d", &m, &n);
for (i = m; i <= n; i++) {
if (prime(i) == 1) {
count++;
sum += i;
}
}
printf("there are %d primes\n", count);
printf("the summery is:%d", sum);
return 0;
}
5.使用函数统计指定数字的个数:读入一个整数,统计并输出该数中“2”的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(12292,2)的返回值是3。
#include<stdio.h>
int countdigit(int number, int digit) {
int temp, count = 0;
while (number) {
temp = number % 10;
if (digit == temp) {
count++;
}
number /= 10;
}
return count;
}
int main() {
int n;
printf("enter n:");
scanf("%d", &n);
printf("%d", countdigit(n,2));
return 0;
}
6.使用函数输出水仙花数:输入两个正整数m和n(1≤m,n≤1000),输出m~n之间的所有满足各位数字的立方和等于它本身的数。要求定义并调用函数Is(number)判断number的各位数字之立方和是否等于它本身。
#include<stdio.h>
#include<math.h>
int Is_sxh(int number) {
int temp,digit=number,sum=0;
while (digit) {
temp = digit % 10;
sum += pow(temp, 3);
digit /= 10;
}
if (sum == number) {
return 1;
}
else {
return 0;
}
}
int main() {
int m, n;
printf("enter m n(1≤m,n≤1000):");
scanf("%d %d", &m, &n);
for (int i = m; i <= n; i++) {
if (Is_sxh(i)) {
printf("%d\n", i);
}
}
return 0;
}
8.输入一个正整数n,输出n行空心的数字金字塔。要求定义和调用函数hollow_pyramid(n)输出n行空心的数字金字塔。
#include<stdio.h>
void hollow_pyramid(int n) {
int i, j;
for (i = 1; i <= n; i++) {
for (j = 1; j <= n - i; j++) {
printf(" ");
}
if (i == 1 || i == n) {
for (j = 1; j<=2*i-1; j++ ) {
printf("%d", i);
}
}
else {
printf("%d", i);
for (j = 0; j < 2 * i - 3; j ++) {
printf(" ");
}
printf("%d", i);
for (j = n - i; j < n; j++) {
printf(" ");
}
}
printf(" \n");
}
}
int main() {
int n;
printf("enter n:");
scanf("%d", &n);
hollow_pyramid(n);
return 0;
}
注:这一节的题目都不难,主要是一些小算法要记住套路,比如最后一个打印金字塔,要套两层循环。第一层循环表示的是第i行,第二层循环表示在某一行打印第j个符号。