1.编写一个函数,通过输入一个数字字符,返回该数字29.
cs
/*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坐标,返回两点之间的距离
cs
/*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;
}
在函数组这里,函数允许我们先使用在定义,但是我们要先声明,举个例子,下面的代码就是把函数放在后面,要先声明函数。
cs
/*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,返回结果值。
cs
/*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;
}
当然我们也可以声明函数先使用放后面
cs
/*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.设计一个函数,统计字符串中大写字母的个数
cs
/*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.编写一个函数,通过参数输入一个整型数,返回该数各位上数字的平方和;
cs
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
cs
/*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.编写一个函数,将数组中的数据首尾互换,要求分别用循环和用递归的方法实现
cs
/*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;
}
碎碎念可能有一些逻辑并不是很完整,我尽力了,若我懂了我会回来修改的