服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言函数封装及变量的作用域

C语言函数封装及变量的作用域

2022-11-30 13:36DS小龙哥 C/C++

这篇文章主要介绍了C语言函数封装及变量的作用域,以及分享一些字符串的相关实战练习,字符串转整数、整数转字符串、浮点数转字符串、字符串转浮点数、判断平年闰年、技术字符串长度等等。下文详细内容需要的小伙伴可以

1. for循环示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
    int i,j;
    int len=4;
    for(i=len; i>=1; i--)
    {
        for(j=len; j>i; j--)printf(" "); //打印空格
        for(j=1; j<=i; j++)printf("%d",j); //打印前半部分
        for(j=i-1; j>=1; j--)printf("%d",j); //打印后半部分
        printf("\n");
    }
    return 0;
}

2. 模拟实现投票系统。switch

比如: 有10张票,3个候选人。 进行投票,最终得出票数。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
int main()
{
    int i;
    int val; //获取键盘上输入的值
    int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
    for(i=1; i<=10; i++)
    {
        printf("请输入投票的编号(1~3,4表示无效票) 剩余票数(%d) :",10-i);
        scanf("%d",&val);
        switch(val)
        {
        case 1:
            cnt1++;
            break;
        case 2:
            cnt2++;
            break;
        case 3:
            cnt3++;
            break;
        default:
            cnt4++;
            break;
        }
    }
    printf("1号选手:%d\n",cnt1);
    printf("2号选手:%d\n",cnt2);
    printf("3号选手:%d\n",cnt3);
    printf("无效票数:%d\n",cnt4);
    return 0;
}

3. 计算字符串空格、数字等数据数量

从键盘上输入一个字符串:

计算字符串里有多少个空格、小写字母、大写字母、数字。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
scanf("%s",buff);
    /*
    scanf 函数依靠  \n和空格代表结束符号
    */
#include <stdio.h>
int main()
{
    char buff[100];
    int i=0;
    int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;
    printf("请输入字符串:");
    gets(buff);
 
    while(buff[i]!='\0')
    {
        if(buff[i]==' ')
        {
            cnt1++;
        }
        else if(buff[i]>='a'&& buff[i]<='z')
        {
            cnt2++;
        }
        else if(buff[i]>='A'&& buff[i]<='Z')
        {
            cnt3++;
        }
        else if(buff[i]>='0'&& buff[i]<='9')
        {
            cnt4++;
        }
        else
        {
            cnt5++;
        }
        i++;
    }
    printf("空格:%d\n",cnt1);
    printf("小写:%d\n",cnt2);
    printf("大写:%d\n",cnt3);
    printf("数字:%d\n",cnt4);
    printf("其他:%d\n",cnt5);
    return 0;
}

4. 字符串转整数。

从键盘上输入一个字符串”12345”,  int data=12345;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
//"1234"
int main()
{
    char buff[100];
    int i=0,value=0;
    printf("输入数字字符串(0~9):");
    scanf("%s",buff);
 
    while(buff[i]>='0' && buff[i]<='9'//实现字符串转整数
    {
        value=value*10; //0 10 120 1230
        value=value+(buff[i]-'0'); //1 12 123  1234
        i++;
    }
 
    if(buff[i]!='\0') //转换失败
    {
        printf("警告:转换不完整。 得到的值:%d\n",value);
    }
    else
    {
        printf("转换成功! 正确值=%d\n",value);
    }
    return 0;
}

5. 整数转字符串

整数转字符串:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
//1234
int main()
{
    char buff[100];
    char str[100];
    unsigned int i=0,val=0,j;
    printf("请输入一个整数:");
    scanf("%d",&val);
    
    while(val)
    {
        buff[i]=val%10+'0'; //"4321"
        val=val/10;
        i++;
    }
    for(j=0; j<i; j++)
    {
        str[j]=buff[i-j-1]; //倒序
    }
    str[j]='\0';
 
    printf("转换之后字符串: %s\n",str);
    return 0;
}

6. 浮点数转字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//以下例子代码实现将浮点数分解成两个整数
#include <stdio.h>
//1234
int main()
{
    float data=123.456789;
    int data1,data2;
    data1=data; //得到整数部分
    data2=(data-data1)*1000000;
 
    printf("%d.%d\n",data1,data2);
    return 0;
}

7. 字符串转浮点数

从键盘上输入一个字符串”123.45”,  float data=123.45;

?
1
2
printf("%d\n",0);   //0
printf("%d\n",'0'); //48

8. 函数的特性与用法

C语言是靠函数组成。
函数的特性:

  • 1.函数就相当于封装一个工具。
  • 2.函数可以重复调用。
  • 3.函数的功能尽可能的单一。  比如:判断闰年和平年
  • 4.我们自己的写的函数,(除了main函数之外)  子函数。
  • 5.一般情况下,子函数的代码都在main函数的下面。
  • 6.在调用任何子函数之前,都需要声明。

函数的定义:

<函数返回值类型>  函数的名称(形参1,形参2…….)
{
函数的代码……
return <返回值值>;  //如何函数有返回值才需要返回
}

函数的模型:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void func1(void);  //函数声明
int func1(int data1,int data2 /*,......*/);  //函数声明
 
//函数原型
void func1(void)
{
 
}
 
//函数原型
int func1(int data1,int data2 /*,......*/)
{
    return 100;
}

函数示例(计算和):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int sum(int a,int b);  //函数声明
int main()
{
    int data;
    data=sum(100,200); ///调用sum函数,并且接收返回值
    printf("data=%d\n",data);
 
    data=sum(300,500); ///调用sum函数,并且接收返回值
    printf("data=%d\n",data);
    return 0;
}
 
/*
函数功能: 计算a+b之和
*/
int sum(int a,int b)
{
    int c=a+b;
    return c;
}

9. 判断平年和闰年

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*判断平年和闰年*/
#include <stdio.h>
int GetYear(int year);  //函数声明
int main()
{
    int i;
    for(i=2001; i<2018; i++)
    {
        if(GetYear(i))printf("%d 是闰年.\n",i);
        else printf("%d 是平年.\n",i);
    }
    return 0;
}
 
 
/*
函数功能  : 判断平年和闰年
函数返回值:  0表示平年 1表示闰年
*/
int GetYear(int year)
{
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

10. 将数组当做函数的形参

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
void print(char buff[]);
 
int main()
{
    char buff[]="34534r4gyhtrvfvfdvdf";
    print(buff);
    print(buff);
    print(buff);
    print(buff);
    return 0;
}
 
void print(char buff[])
{
    printf("buff=%s\n",buff);
}

11. 计算字符串长度

函数示例: 封装函数,计算字符串长度

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int my_strlen(char buff[]);
int main()
{
    char buff[100];
    scanf("%s",buff);
 
    printf("字符串长度:%d\n",my_strlen(buff));
    return 0;
}
/*
函数功能: 计算字符串长度
返回值  : 字符串的长度
*/
int my_strlen(char buff[])
{
    int len=0;
    while(buff[len]!='\0')
    {
        len++;
    }
    return len;
}

12. 全局变量、静态变量、局部变量、常量

如何声明常量?  
示例:  常量和变量的区别测试

?
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
    int data1=123; //默认声明为变量
    const int data2=456;//声明为常量
    //区别:  变量可以改变数据  常量不可改变数据
    data1=789;
    //data2=789;  错误赋值方式
    return 0;
}

全局变量和局部变量区别:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
void func(void);
int data=123; //全局变量,定义在函数之外的变量。  公用变量
int main(void)
{
    int data=456; //局部变量,私有变量
    printf("data1=%d\n",data); //当全局变量和局部变量重名的时候,优先使用局部变量
    func(); //调用函数
    return 0;
}
void func(void)
{
    printf("data2=%d\n",data); //使用全局
}

局部变量传参数示例:  (分析局部变量)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
void func(int data);
 
int main(void)
{
    int data=456; //局部变量,私有变量
    func(data);
    printf("data1=%d\n",data);
    return 0;
}
void func(int data)
{
    data=9999;
    printf("data2=%d\n",data);
}

函数形参传递数组和传递变量的区别:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
void func(int buff[],int data);
int main(void)
{
    int buff[10]={456,123,789}; //局部变量,私有变量
    int data=888;
 
    printf("data1的地址=0x%X\n",&data);
    printf("buff1的地址=0x%X\n",buff);
    func(buff,data);                    //传递的是数组的首地址
 
    printf("buff1=%d\n",buff[0]); // 9999 ?
    printf("data=%d\n",data); // 888  ?
    return 0;
}
/*
函数形参传递数组表示是传递地址
函数形参传递变量表示是传递数据
*/
void func(int buff[],int data)
{
    buff[0]=9999;
    data=9999;
 
    printf("data2的地址=0x%X\n",&data);
    printf("buff2的地址=0x%X\n",buff);
}

全局变量和静态变量的生命周期与main函数一样长。局部变量的声明周期与调用的子函数挂钩,子函数调用完毕,内部所有的局部变量全部释放。什么是静态变量?   局部的全局变量
如何声明?    static 关键字。  

示例:

?
1
 static int data;  //表示声明data是静态变量
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int func(void);
int main(void)
{
    int i;
    int sum=0;
    for(i=0; i<5; i++)
    {
        sum+=func(); //累加
    }
    printf("%d\n",sum);  //  ?
    return 0;
}
int func(void)
{
    static int data=0;  //声明静态变量,int data=0 只会执行一次。
    data++;
    return data;
}

13. 字符串进阶练习作业

函数的作业:  

1.时间转换(秒与标准时间的转换) 

(1)函数1:  将秒单位时间转为标准时间。  
        237562867493 -----xxxx年xx月xx日xx时xx分xx秒
(2)函数2:  将标准时间转为秒单位的时间。
       2018年6月1日19点41分23秒----------xxxxxxx秒
  闰年366,平年365。  区分: 每年二月份相差一天

2.将字符串转整数、整数转字符串、浮点数转字符串、字符串转浮点数 封装为函数。

3.封装字符串拼接函数:   函数功能实现将a和b字符串拼接在一起。   
比如: char a[100]=”123”;  char b[]=”456”;    调用函数之后:  a[]=”123456”

4.封装字符串的拷贝函数: 将a字符串拷贝到b字符串。
5.封装字符串的比较函数: 比较a字符串和b字符串是否相等。 通过返回值进行区分。

字符串解析(扩展):

1.分析GPS卫星返回的数据

提取最基本的数据:

  • (1)UTC时间
  • (2)海拔高度
  • (3)经纬度
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char gps_data[]=
{
    "$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F \
    $GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D \
    $GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37 \
    $BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A \
    $GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B \
    $GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C \
    $GPGSV,3,3,10,31,50,287,36,32,66,018,*7F \
    $BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62 \
    $GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D \
    $GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14 \
    $GNZDA,114955.000,06,11,2017,00,00*47 \
    $GPTXT,01,01,01,ANTENNA OK*35"
};

到此这篇关于C语言函数封装及变量的作用域的文章就介绍到这了,更多相关C语言函数封装内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.51cto.com/u_11822586/5286870

延伸 · 阅读

精彩推荐
  • C/C++C++常用字符串分割方法实例汇总

    C++常用字符串分割方法实例汇总

    这篇文章主要介绍了C++常用字符串分割方法实例汇总,包括了strtok函数、STL、Boost等常用的各类字符串分割方法,非常具有实用价值,需要的朋友可以参考下...

    C++教程网4792021-02-04
  • C/C++c++中的基本IO类型详解

    c++中的基本IO类型详解

    IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iostream、fstream、sstream头文件中,本文给大家分享c++中的基本IO类型,感兴趣的...

    HickeyZhang8652021-12-02
  • C/C++C语言数据结构 link 链表反转的实现

    C语言数据结构 link 链表反转的实现

    这篇文章主要介绍了C语言数据结构 link 链表反转的实现的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...

    阳光岛主9202021-06-03
  • C/C++C++编写高性能服务器实例教程

    C++编写高性能服务器实例教程

    这篇文章主要介绍了如何用C++编写高性能服务器,文中通过示例代码介绍的非常详细,对大家学习C++有一定的参考价值,需要的朋友们可以了解下...

    慕神84474895542021-09-09
  • C/C++浅谈Qt信号与槽的各种连接方式

    浅谈Qt信号与槽的各种连接方式

    信号和槽是Qt特有的信息传输机制,本文主要介绍了浅谈Qt信号与槽的各种连接方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小...

    lucky-billy9322021-12-27
  • C/C++带你粗略了解C++流的读写文件

    带你粗略了解C++流的读写文件

    这篇文章主要为大家总结了C++中输入输出流及文件流操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助...

    _Space_10592021-12-20
  • C/C++C++之友元:友元函数和友元类详解

    C++之友元:友元函数和友元类详解

    友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元...

    C++教程网8382020-12-26
  • C/C++c语言求阶乘精确值示例

    c语言求阶乘精确值示例

    这篇文章主要介绍了c语言求阶乘精确值示例,需要的朋友可以参考下...

    C语言程序设计4182021-01-18