C语言—函数

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;
}

碎碎念可能有一些逻辑并不是很完整,我尽力了,若我懂了我会回来修改的

相关推荐
xiaoshiguang33 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
别NULL3 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇3 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
ZSYP-S4 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos4 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习4 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA5 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo5 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc5 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法