开发成长之路(2)-- C语言从入门到开发(函数与定制输入输出控制函数)

在这里插入图片描述

函数

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

return_type function_name( parameter list )
{
   body of the function
}

在C语言中,一个函数的组成部分有如下:

返回类型:return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 可以是关键字 void。

函数名称:这是函数的实际名称(function_name)。函数名和参数列表一起构成了函数签名。

参数:当函数被调用时,有时候需要向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
参数中也存在默认参数,默认参数即在函数签名中赋予了某个参数默认值,如果在调用函数的时候不指定该参数值,则该参数取值为默认。
默认参数置于参数列表的最右端、
在给默认参数赋值的时候,最好指定参数名对应数据。

函数主体:函数主体包含一组定义函数执行任务的语句。

实现一个比大小的函数:

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

调用这个函数:

int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}

传值调用与引用调用

调用类型描述
传值调用该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
引用调用通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

上面那就是传值调用,至于引用调用,等我讲指针了再说吧。现在讲也捋不清楚啊。


作用域

这个其实应该再编码规范的时候写的,但是那会儿给忘了,现在补上。

全局变量:在所有函数外部的全局变量,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的。记住这点,我们以后会为这点做出重大举措的!!!
局部变量:在函数或块内部的局部变量(这里的块指的是:函数、结构体、分支、循环、异常等),局部变量在函数外部是不可知的。


数组

在这里插入图片描述

在 C 中要声明一个数组,需要指定元素的类型和元素的数量:

type arrayName [ arraySize ]; //这里的大小也可以不设置,能设置就设置

示例:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

访问数组元素:下标访问法

#include <stdio.h>
 
int main ()
{
   int n[ 10 ]; /* n 是一个包含 10 个整数的数组 */
   int i,j;
 
   /* 初始化数组元素 */         
   for ( i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; /* 设置元素 i 为 i + 100 */
   }
   
   /* 输出数组中每个元素的值 */
   for (j = 0; j < 10; j++ )
   {
      printf("Element[%d] = %d\n", j, n[j] );
   }
 
   return 0;
}

多维数组

一般就开到两维,再高也少见。

type name[size1][size2]...[sizeN];
int threedim[5][4];	//第一个大小不能放空

初始化示例:

int a[3][4] = {  
 {0, 1, 2, 3} , 
 {4, 5, 6, 7} ,  
 {8, 9, 10, 11} 
};

也可以这样:

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

访问二维数组依旧可以用下标取值法。


数组作为函数参数


void myFunction(int *param)	//不懂指针先不急
{
···	
}


void myFunction(int param[10])
{
···
}


void myFunction(int param[])
{
···
}

那具体使用该当如何呢?

#include <stdio.h>
 
double getAverage(int arr[], int size)
{
  int    i;
  double avg;
  double sum=0;
 
  for (i = 0; i < size; ++i)
  {
    sum += arr[i];
  }
 
  avg = sum / size;
 
  return avg;
}
 
int main ()
{
   /* 带有 5 个元素的整型数组 */
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;
 
   /* 传递一个指向数组的指针作为参数 */
   avg = getAverage( balance, 5 ) ;
 
   /* 输出返回值 */
   printf( "平均值是: %f ", avg );
    
   return 0;
}

由于还没有涉及到指针,有些操作也不太方便现在写。

定制输入输出函数

我初学C语言的时候写的代码,献丑了。

那时候还不知道写文档的重要性,现在这个函数怎么用我还得看看

这个函数有什么用呢?为什么我要特地的放在这里?

函数功能:

实现一个用于控制输入输出的函数,可控范围包括:
注入长度、接收输入类型、是否明文输出等
支持回删,回车结束,esc退出

在我们后面用C语言写项目的时候会经常用到这个函数,而不是取用默认的scanf,scanf时不时的还会暴雷!!!
所以希望各位小伙伴看完之后可以自行实现一遍,加深印象。

/输入函数///
void getstr(char str[],int maxLen,int type,int isplainText)
/*
这是一个用于控制输入输出的函数,可控范围包括:
注入长度、接收输入类型、是否明文输出
支持回删,回车结束,esc退出

参数释义:
str[]:用于接收输入
maxLen:最大输入长度+1
type:接收输入类型:0(无所谓)、1(仅数字)、2(仅英文)
isplainText:是否明文输出:0是1否
*/
{
	char ch;
	int iLen = 0;
	while(1)
	{	
		ch = getch();
		
		if(ch == '\b')
		{
			if(iLen>0)
			{
				printf("\b \b");
				iLen--;
			}			
		}
		if(ch == '\r')
		{
			str[iLen] = '\0';
			break;	
		}

		if (ch == 27)
		{
			system("cls");
			printf("退出成功\n");
			exit(1);
		}
		
		if(iLen<maxLen-1)
		{
			switch(type)
			{
			case 0:
				{
					if(ch !='\b')
					{
						if(isplainText == 0)
						{
							putchar(ch);
						}
						else
						{
							putchar('*');
						}
						str[iLen] = ch;
						iLen++;
					}
				}
				break;
			case 1:
				{
					if(ch >= '0' && ch <= '9')
					{
						if(isplainText == 0)
						{
							putchar(ch);
						}
						else
						{
							putchar('*');
						}
						str[iLen] = ch;
						iLen++;
					}	
				}
				break;
			case 2:
				{
					if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
					{
						if(isplainText == 0)
						{
							putchar(ch);
						}
						else
						{
							putchar('*');
						}
						str[iLen] = ch;
						iLen++;
					}	
				}
				break;
			}
		}
	}
}

其实不难看懂,诸位就看文档吧。

已标记关键词 清除标记
相关推荐
<p> <span style="color:#333333;"> </span> </p> <p style="font-family:"color:#3D3D3D;font-size:16px;background-color:#FFFFFF;"> 您观看课程学习后<br /> 免费入群领取【超全Python资料包+17本学习电子书】 </p> <p style="font-family:"color:#3D3D3D;font-size:16px;background-color:#FFFFFF;"> <img src="https://img-bss.csdn.net/201909261013197021.jpg" alt="" /> </p> <br /> <p> <br /> </p> <p> <span style="color:#333333;">python编程入门,针对0基础就python语言基础语法的各个点逐步讲解,由浅入深,通俗易懂,层层深入。</span> </p> <p> <span style="color:#333333;"> </span> </p> <p style="font-size:14px;color:#333333;"> 课程亮点: </p> <p style="font-size:14px;color:#333333;"> 1,对于编程0基础的同学或者想把python作为第二门编程语言的同学十分适合。 </p> <p style="font-size:14px;color:#333333;"> 2,生动形象,浅显易懂,清晰明了。 </p> <p style="font-size:14px;color:#333333;"> 3,针对基础语法详细讲解,构建python编程的基础能力。 </p> <p style="font-size:14px;color:#333333;"> <br /> </p> <p style="font-size:14px;color:#333333;"> 课程内容: </p> <p style="font-size:14px;color:#333333;"> python基础学习课程,从搭建环境到判断语句,再到基础的数据类型,之后对函数进行学习掌握,熟悉文件操作,初步构建面向对象的编程思想,最后以一个案例带领同学进入python的编程殿堂 </p> <p style="font-size:14px;color:#333333;"> <br /> </p> <p style="font-size:14px;color:#333333;"> 适用人群: </p> <p style="font-size:14px;color:#333333;"> 1、希望未来从事IT行业编程方向工作的小伙伴进行入门学习。 </p> <p style="font-size:14px;color:#333333;"> 2、希望以后从事人工智能方向工作需要掌握python编程语言的人群。 </p> <p style="font-size:14px;color:#333333;"> <br /> </p> <p style="font-size:14px;color:#333333;"> 课程目录介绍: </p> <p style="font-size:14px;color:#333333;"> 1. python入门-环境搭建和第一个python程序 </p> <p style="font-size:14px;color:#333333;"> 2. python入门-数据类型、输入输出以及运算符 </p> <p style="font-size:14px;color:#333333;"> 3. 流程控制-判断语句 </p> <p style="font-size:14px;color:#333333;"> 4. 流程控制-循环 </p> <p style="font-size:14px;color:#333333;"> 5. 数据序列-字符串 </p> <p style="font-size:14px;color:#333333;"> 6. 数据序列-列表和元祖 </p> <p style="font-size:14px;color:#333333;"> 7. 数据序列-字典和集合 </p> <p style="font-size:14px;color:#333333;"> 8. 数据序列-公共操作以及推导式 </p> <p style="font-size:14px;color:#333333;"> 9. 函数上 </p> <p style="font-size:14px;color:#333333;"> 10. 函数下 </p> <p style="font-size:14px;color:#333333;"> 11. 函数进阶上 </p> <p style="font-size:14px;color:#333333;"> 12. 函数进阶下 </p> <p style="font-size:14px;color:#333333;"> 13. 文件操作 </p> <p style="font-size:14px;color:#333333;"> 14. 面向对象-基础 </p> <p style="font-size:14px;color:#333333;"> 15. 面向对象-继承 </p> <p style="font-size:14px;color:#333333;"> 16. 面向对象-其他 </p> <p style="font-size:14px;color:#333333;"> 17. 异常处理 </p> <p style="font-size:14px;color:#333333;"> 18. 模块和包 </p> <p style="font-size:14px;color:#333333;"> 19. 综合案例 </p> <br />
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值