1.编写一个函数,通过输入一个数字字符,返回该数字29.
/*1.编写一个函数,通过输入一个数字字符,返回该数字 */#include <stdio.h>//函数定义,返回类型为int
int char_num(char c)
{if(c >= '0' && c <= '9') //检查是否为数字{return c - '0';}return -1; //返回错误标志,注意这里的错误标志不可以是1-9嗷
}int main(void)
{char c;printf("请输入一个数字字符:");scanf("%c",&c);int num = char_num(c);if(num != -1){printf("数字字符: %c 对应的数字是: %d\n",c,num);}else{printf("输入的不是数字字符!\n");}return 0;}
2.编写一个函数,输入四个数据分别表示2个点的x,y坐标,返回两点之间的距离
/*2.编写一个函数,输入四个数据分别表示2个点的x,y坐标,返回两点之间的距离*/#include <stdio.h>
#include <math.h>float two_distance(float x1,float x2,float y1,float y2) //函数定义
{float dx = x2 - x1;float dy = y2 - y1;float distance = sqrt(dx * dx + dy * dy);return distance;
}int main(void)
{float x1,y1,x2,y2,distance;printf("请输入第一个点的坐标(a b):");scanf("%f%f",&x1,&x2);printf("请输入第二个点的坐标(a b):");scanf("%f%f",&y1,&y2);distance = two_distance(x1,x2,y1,y2); //函数调用printf("两点之间的距离是: %.3f\n",distance);return 0;
}
在函数组这里,函数允许我们先使用在定义,但是我们要先声明,举个例子,下面的代码就是把函数放在后面,要先声明函数。
/*2.编写一个函数,输入四个数据分别表示2个点的x,y坐标,返回两点之间的距离*/#include <stdio.h>
#include <math.h>float two_distance(float x1,float x2,float y1,float y2); //函数声明int main(void)
{float x1,y1,x2,y2,distance;printf("请输入第一个点的坐标(a b):");scanf("%f%f",&x1,&x2);printf("请输入第二个点的坐标(a b):");scanf("%f%f",&y1,&y2);distance = two_distance(x1,x2,y1,y2); //函数调用并接收返回值printf("两点之间的距离是: %.3f\n",distance);return 0;
}
//函数定义
float two_distance(float x1,float x2,float y1,float y2)
{//计算两点之间的距离float dx = x2 - x1;float dy = y2 - y1;float distance = sqrt(dx * dx + dy * dy);return distance;
}
3.编写一个函数,通过参数输入x的值,计算如下的数学函数值,当 x>5时, f(x) = 4x+7;否则 f(x)= -2x+3,返回结果值。
/*3.编写一个函数,通过参数输入x的值,计算如下的数学函数值当 x>5时, f(x) = 4x+7;否则 f(x)= -2x+3,返回结果值。*/#include <stdio.h>int calculate_f(int x) //函数定义
{if(x > 5){return 4 * x + 7;}else{ return -2 * x + 3;}
}int main(void)
{int x;printf("请输入x的值");scanf("%d",&x);int result = calculate_f(x);// 打印根据x值计算f(x)的过程if (x > 5) {printf("因为 x > 5,所以我们使用公式 f(x) = 4x + 7 来计算:\n");printf("f(x) = 4 * %d + 7 = %d + 7 = %d\n", x, 4 * x, 4 * x + 7);} else {printf("因为 x <= 5,所以我们使用公式 f(x) = -2x + 3 来计算:\n");printf("f(x) = -2 * %d + 3 = %d + 3 = %d\n", x, -2 * x, -2 * x + 3);}printf("f(x)的值为: %d\n",result);return 0;
}
当然我们也可以声明函数先使用放后面
/*3.编写一个函数,通过参数输入x的值,计算如下的数学函数值当 x>5时, f(x) = 4x+7;否则 f(x)= -2x+3,返回结果值。*/#include <stdio.h>int calculate_f(int x); //函数声明int main()
{int x;printf("请输入x的值: ");scanf("%d", &x);int result = calculate_f(x);printf("根据您输入的x值,f(x)的计算过程如下:\n");if (x > 5){printf("因为 x > 5,所以我们使用公式 f(x) = 4x + 7 来计算:\n");printf("f(x) = 4 * %d + 7 = %d + 7 = %d\n", x, 4 * x, 4 * x + 7);}else{printf("因为 x <= 5,所以我们使用公式 f(x) = -2x + 3 来计算:\n");printf("f(x) = -2 * %d + 3 = %d + 3 = %d\n", x, -2 * x, -2 * x + 3);}printf("最终 f(x) 的值为: %d\n", result);return 0;
}int calculate_f(int x) //函数定义
{if (x > 5){return 4 * x + 7;}else{return -2 * x + 3;}
}
4.设计一个函数,统计字符串中大写字母的个数
/*4.设计一个函数,统计字符串中大写字母的个数*/#include <stdio.h>
#include <string.h>int countUpperCase(char string[]); //函数声明int main(void)
{char str[] = "Hello World";int count = countUpperCase(str);printf("字符串为: %s\n",str);printf("大写字母的个数是: %d\n",count);return 0;}int countUpperCase(char str[])
{int count = 0;int len = strlen(str);for(int i = 0;i < len;i++){if(str[i] >= 'A' && str[i] <= 'Z'){count++;}}return count;}
5.编写一个函数,通过参数输入一个整型数,返回该数各位上数字的平方和;
int sofs(int a)
{if(a == 0) //递归,结束条件必须在前面return 0;int sum = 0;int g = a % 10;sum = g * g;sum += sofs( a / 10); //计算个位数的平方和相加return sum;
}
我在这里举个例子
soft(123)
a不为0
g = 123 % 10 = 12...3 即g为3
sum = 3 * 3 计算出个位数的平方和
递归调用soft(12)
a不为0
g = 12 % 10 = 1...2 即g为2
sum = 2 * 2 计算出个位数的平方和
soft(1)
a为0将不会再进行下次调用
g = 1 % 10 = 0...1 即g为1
sum = 1 * 1
最后sum = 9 + 4 + 1 = 14
即返回sum值为14
/*5.编写一个函数,通过参数输入一个整型数,返回该数各位上数字的平方和;*/
#include <stdio.h>/*int sumofsquar(int a)
{int sum = 0;while(a) //循环{int g = a % 10;sum += g * g;a /= 10;}return sum;
}*/int sofs(int a)
{if(a == 0) //递归,结束条件必须在前面return 0;int sum = 0;int g = a % 10;sum = g * g;sum += sofs( a / 10); //计算个位数的平方和相加return sum;
}int main(void)
{int num = 0;printf("请输入一个整数:");scanf("%d",&num);// int sum = sumofsquar(num);
// printf("%d 各个数位平方和为:%d\n",num,sum);int sum = sofs(num);printf("%d 各个数位平方和为:%d\n",num,sum);return 0;
}
思考题:
6.编写一个函数,将数组中的数据首尾互换,要求分别用循环和用递归的方法实现
/*6.29思考题:1.编写一个函数,将数组中的数据首尾互换,要求分别用循环和用递归的方法实现*/
#include <stdio.h>/*void reverse(int a[],int n) //循环实现数据首位互换
{int i = 0,j = n-1;for(; i < j; i++,j--){int t = a[i];a[i] = a[j];a[j] = t;}
}int main(void)
{int a[] = {1,3,5,7,9};int n = sizeof(a)/sizeof(a[0]);reverse(a,n);for(int i = 0;i < n;i++) //C99标准{printf("%5d",a[i]);}printf("\n");return 0;
} */
void reverse_v2(int a[],int n) //递归实现数据互换
{if(n < 2) //当小于2个数的时候就不该再递归自身了return ;int t = a[0];a[0] = a[n-1];a[n-1] = t;reverse_v2(&a[1],n-2); //&a[1]传递下一个元素的地址 n-2每次少俩个
}int main(void)
{int a[] = {1,3,6,7,9};int n = sizeof(a)/sizeof(a[0]);//打印原始数组printf("原始数组为:");for(int i = 0;i < n;i++){printf("%5d",a[i]);}printf("\n");reverse_v2(a,n);printf("翻转数组为:");for(int i = 0; i < n; i++) //C99标准{printf("%5d",a[i]);}printf("\n");return 0;
}
碎碎念可能有一些逻辑并不是很完整,我尽力了,若我懂了我会回来修改的