1.编写一函数int count(),使得第一次调用时返回1,第二次调用时返回2,即返回当前的调用次数。
#include <stdio.h>
int count() {
static int counter = 0;
counter++;
return counter;
}
int main() {
printf("%d\n", count()); // 第一次调用,返回1
printf("%d\n", count()); // 第二次调用,返回2
printf("%d\n", count()); // 第三次调用,返回3
return 0;
}
解析:要编写一个函数int count(),使得第一次调用时返回1,第二次调用时返回2,即返回当前的调用次数,可以使用静态变量来实现。静态变量只会在第一次调用时初始化,之后每次调用都会保留上一次的值,因此可以用静态变量来记录调用次数。
2.假设系统只支持输出一个字符的功能,试设计一个函数void print(double d)输出一个实型数d,保留8位精度。如果d大于108或者d小于10^-8,则按科学计数法输出。
#include <stdio.h>
#include <math.h>
void print(double d) {
if(d>pow(10,8) || d<pow(10,-8)){
printf("%e\n",d); //以科学计数法形式输出
}else{
printf("%.8lf\n",d);
}
}
int main() {
double d;
printf("请输入d:");
scanf("%lf",&d);
print(d);
return 0;
}
3.创建一个函数Fib,每调用一次就返回Fibonacci序列(即:斐波那契数列)的下一个值,即第一次调用就返回1,第二次调用就返回1,第三次调用就返回2,第四次调用就返回3等等。
#include <stdio.h>
int Fib() {
static int t1 = 1;
static int t2 = 1;
static nextTerm = 0;
t1=t2;
t2=nextTerm;
nextTerm=t1+t2;
return nextTerm;
}
int main() {
for(int i=1;i<=10;i++){
printf("%d ",Fib());
}
return 0;
}
4.已知华氏温度到摄氏温度的转换公式为:C=5/9*(F-32),试编写一个将华氏温度转换到摄氏温度的函数
#include <stdio.h>
double Convert(double F) {
double c;
c=(5/9.0)*(F-32);
return c;
}
int main() {
double C,F;
printf("请输入华氏温度:");
scanf("%lf",&F);
C=Convert(F);
printf("C=%.2lf℃\n",C);
return 0;
}
5.写一个函数bool isEven(int n);当n的每一位数都是偶数时,返回1,否则返回0。如n的值是1234,函数返回false;如n的值为2048,返回true。用递归和非递归两种方法实现。
递归方式:
#include<stdio.h>
#include <stdbool.h>
// 递归判断n的每一位是否都是偶数
bool isEvenHelper(int n){
// 当n小于10时,只有一位数,判断是否为偶数即可
if(n < 10){
return (n % 2 == 0);
}
// 判断最后一位是否为偶数
if(n % 2 != 0){
return false;
}
// 递归判断剩余位数
return isEvenHelper(n / 10);
}
// 调用递归函数判断是否所有位数都是偶数
bool isEven(int n){
// 处理n为负数的情况
if(n < 0){
n = -n;
}
// 调用递归函数
return isEvenHelper(n);
}
int main(){
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if(isEven(n)){
printf("所有位数都是偶数\n");
printf("%d",true);
}else{
printf("存在奇数位数\n");
printf("%d",false);
}
return 0;
}
非递归方式:
#include<stdio.h>
#include <stdbool.h>
// 判断n的每一位是否都是偶数
bool isEven(int n){
// 处理n为负数的情况
if(n < 0){
n = -n;
}
// 依次判断每一位是否为偶数
while(n > 0){
int digit = n % 10;
if(digit % 2 != 0){
return false;
}
n /= 10;
}
return true;
}
int main(){
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if(isEven(n)){
printf("所有位数都是偶数\n");
printf("%d",true);
}else{
printf("存在奇数位数\n");
printf("%d",false);
}
return 0;
}
第5题的内容涉及到了递归这个概念,大家不了解的可以看一下这个链接:
https://blog.csdn.net/weixin_44572229/article/details/119909728
标签:返回,调用,return,int,C语言,案例,printf,include From: https://blog.51cto.com/u_16174658/8190205