函数

C语言函数说明

1. 一个C程序的基本结构包括预处理部分和函数部分;

2. 函数是C语言的基本单位;

3. C语言程序开始于主函数,结束于主函数;

4. C语言中没有输入输出语句但有输入输出函数.

函数的定义

类型标志符函数名 (形式参数表)

{

}

函数的调用

函数名 (实际参数表);

*函数的递归

1. 使用条件

a) 可以把问题转化为新问题,并且新问题解决方法与原问题的解决方案相同;

b) 可以提高转化过程,使问题得到解决;

c) 必须有结束条件.

2. 递归的执行过程

#include

int fac(int i)

{

intvalue;

if(i== 0)

{

return1;

}

else

{

value= (i*fac(i-1));

}

return value;

}

void main(void)

{

inti;

scanf("%d",&i);

printf("%d\n",fac(i));

}

递推:fac(5)->5*fac(4)->5*4*fac(3)->5*4*3*fac(2)……

求值:fac(1)=1->fac(2)=2*fac(1)=2->fac(3)=3*fac(2)……

数组

一维数组

1. 数组的定义和初始化

数据类型数组名[数组大小];

int a[10];//定义

scanf (“%d%d……”,&a[0],……);

int a[10]={1,2,3,4,5,6,7,8,9,0};里面的数不是10个的话就用随机数代替,如果希望后面的数都为0的话可以在int前加static,实际上在VC中定义一部分的话,其余的为0.

for(i=0;i<10;i++)

scanf (“%d”,&a[i]);

2.字符数组的初始化

char a[10]={'a',…};

char a[]={'a'…};

char a[10]={97,98,…};//ASCII码值

3.字符串数组的初始化

char a[]={"字符串"};

char a[]="字符串";

char a[10]={'a','b',…‘\0’};

int b = 4;

int a[] = {1,2,3,b};//正确

这样初始化只能在定义的同时初始化,不能写成a[3] ={1,2,3};

4.数组的使用

数组名[下标]

注意:下标从0开始.

5.指针与数组

A[10];

A[0] = *A;

A = &A[0];

*(A+i) = A[i];

二维数组

1.二维数组定义

类型标志符 数组名[数组行个数][数组列个数];

int[X][Y];

数学中的矩阵式为X行Y列.

可以理解为有X个一维数组,每个一维数组有Y个元素.

内存中存放:按行优先.

2.二维数组初始化

int array[3][2] = {{a,b},{c,d},{e,f}};

int array[3][2] = {a,b,c,d,e,f};

int array[][2] = {a,b,c,d,e,f};

for (i = 0; i < 3; i++)

{

for (j = 0; j < 2; j++)

{

scanf("%d",&array[i][j]);

}

printf(“\n”);//一般在这里加换行实现行列形式输出

}

注意在二维数组初始化中每个{}中必须有元素,二维数组中的第一维长度可以省略,第二维不能省略.

通过int Array[3][2] ={{a},{c,d},{e,f}};进行每行部分赋值没有的值为0.

数组名array是数组的首地址.

array[y] = *(array+y);

array[x][y] = *(*(array+x)+y)

x表示行,y表示列.

二位数组名array和一维数组array[i]代表的是数组中行的地址.

array [x]等价与第x+1行首地址也就是第x个数组的首地址.

*(array+y) 内部每行的首地址.

由于二维数组的排列顺序,所以可以设指针变量(与数组类型一样)将二维数组的名字赋给这个指针变量,那么可以按照一维数组类似的格式输出二维数组.

指针

指针变量

1.定义与初始化

数据类型标识符 *指针变量名;

&:取地址运算符

*:指针运算符

二者优先级相同(结合方式从右向左&*p == &(*p))

int a,*p = &a;

scanf (“%d”,&a);

scanf (“%d”,&*p);

scanf (“%d”,p);//三者等价

*p++由于++高于*的优先级故从右相左进行运算等于*(p++).

一个变量的指针:包括存储单元编号表示的地址和指向的存储单元的数据类型.

为什么要指定指针的数据类型,不都是地址吗?

因为不同类型的变量,所占的空间大小不同。指针变量存放的是变量的首地址,那么在取出数据的时候要知道地址的长度(所以一个数据有首地址编号(该类型的指针变量)和长度)例如int型指针变量加1意味着地址移动sizeof(int)个字节.

指针运算

1.指针变量的赋值

变量地址赋给指针则指针指向改变量.

指针变量赋空值(p = NULL).

P = 0;//唯一一个可以赋予的常量

P = NULL;

P = ‘\0’;

局部指针变量刚定义时,它的值是不确定的,这时不能对指针进行操作(可能破坏程序或数据),为了避免问题发生,在定义指针变量时赋予其空值.

全局变量和局部静态变量在定义时未初始化,系统自动初始化为空指针.

2.指针的算术运算

单个指针的加减n增加或减少n*(sizeof(指针类型))

指针与指针之间一般在数组中两个的差值为二者间距,不能加

3.指针的关系运算

相同类型的指针才能进行比较一般在数组中才有实际意义

多级指针

二级指针定义

数据类型 **指针变量;

指向地址变量(指针变量)的地址的变量

指针与函数

1. 指针函数

a) 指针函数的定义

指针函数是指函数的返回值一定为指针(地址)的函数.

b)指针函数的使用

类型标识符 *函数名(形参);

int *fun (int a)

{

return (&变量);

或 return (指针变量);}

2. 函数指针

a)函数指针的使用

函数类型标识符(*指针变量名)(形参列表);

注意:函数类型标识符用于说明函数的返回类型,括号不能省略.

b)指针调用函数

int value;

int (*fun)();

int max(int x,inty);

fun = max;

value = (*fun)(x,y)

c)函数指针存在意义:

1)对函数的封装有很大的帮助.

2)通过间接方式调用函数,函数指针每次指向不同的函数,执行不同的函数完成不同的功能.

3)当被调函数的形参是函数指针时可以用不同的函数名实参与形参对应,实现在不对主函数进行任何修改的前提下调用不同的函数.

4)用函数指针变量作为实参,当给该指针变量赋不同的函数入口地址值时,可实现在主函数中调用不同函数.

指针与数组

1.一维数组与指针

一维数组名 = 首地址常量.

所以array[N]不能写成array++,但是定义指针变量可以.

int array [N];

int *p = array;

*p++== *(p++)//*与++优先级相同,且右结合

(*p)++表示是将p指向的变量加1

*(p+i)= a[i] = p[i];

指针传递数据效率高因为地址只占4个字节,如果数组字节数过多可以考虑传递指针

2.二维数组与指针

二维数组array[x][y]表示x个一维数组,每个一维数组为一个元素.

array[0]表示第一个一维数组的首地址//等价*array.

array[x]表示第x+1个一维数组的首地址//等价*(array+x).

array[0][0]表示第一个数组的第一个元素.

array[x][y]表示第x+1个数组的第y+1个元素,由上知道第一个数组的首地 址所以//等价与*(*(array+x)+y).

若array是二维数组名,则array是二级指针,array[i]是代表一维数组名,只是一个地址,而不是具体元素,不占存储单元.

3.数组的指针

数组指针:指向一维数组 (相当于二维数组中的一行) 的指针

定义形式:类型标识符 (*指针变量名)[元素个数]

int (*p)[5];

int a[3][5];

4.指针的数组

指针数组:数组中元素是地址

定义形式:类型标识符 *数组名[元素个数]

int * a[5];

int* a[4] 指针数组

表示:数组a中的元素都为int型指针

元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*

int (*a)[4] 数组指针

表示:指向数组a的指针

元素表示:(*a)[i]

注意:在实际应用中,对于指针数组,我们经常这样使用:

typedef int* pInt;

pInt a[4];

记忆:主要看后面的词语,如果是指针数组那么首先是个数组,数组有元素,元素是什么呢,是指针;如果是数组指针那么首先是个指针,指针指向什么呢,指向数组。前面的函数指针和指针函数也是一样的。

指针与字符串

1.字符指针

字符指针:指向字符串的指针称为字符指针.

形式:char *指针名.

char * string = “HelloWorld”;

字符串共占11个字节由于是字符串最后多一个’\0’结束符号.

2.字符串数组

字符串数组:数组中每一个每一个元素都存放字符串的数组,可以用二维数组表示string[x][y].

数组的第一个元素表示字符串的个数,第二个元素表示字符串的长度最大为y-1个,与字符指针不同.

字符串

1.字符与字符串的区别

字符:单个的字符加上’’.

字符串:若干有序字符的序列’\0’为字符串的结尾.

2.字符串的初始化

char word[5] = {‘H’,’e’,’l’,’l’,’o’};//没有将结束标记’\0’存入数组

char word[] = {‘H’,’e’,’l’,’l’,’o’};//没有将结束标记’\0’存入数组

char word[] = {“Hello”}//将’\0’存入数组

char word[6] = {“Hello”}//将’\0’存入数组

char word[] = “Hello” //将’\0’存入数组

char word[6] = “Hello” //将’\0’存入数组

3.字符输入输出

a) getchar()用法:

1)等待输入回车,输入后继续下面的语句 输入getchar(),即可.

2)返回一个ASCII码值

b) getchar()和getche()用法:

1)getch()输入任意键不显示后运行下面的语句

2)getche()输入任意键显示出来后运行下面的语句

3)头文件conio.h

c) putchar()用法:

1)输出字符

2)不带换行效果

4. 字符串输入输出

a) gets()用法:

1)与char[10]一起使用至少输入两个字符才能输出,一般越多越好

2)可以接受空格,Tab键而scanf()遇到空格跳过

3)结束条件:回车结束

b) puts()用法:

1)puts(s)输出等价于printf(”%s\n”,s);

2)带换行效果

5. 字符串处理函数

char *string_1 = “Hello”

char * string_2 = “AB”

a)strcpy函数

功能:字符串复制函数

用法:strcpy (string_1,sring_2)//将后面的字符串复制到前面strcpy (string_1,”ABCD”)

注意:后面的字符串不能大于前面的,如果小于的话如上例子复制后string为AB’\0’lo’\0’那么用printf输出为AB

b)strcat函数

功能:将后面的字符串连接到前面,前面的结束标志被覆盖,返回string_1的地址,连接后的串尾自动加’\0’

用法:strcat (string_1,string_2);

c)strcmp函数

功能:字符串比较

如果string_1 = string_2函数返回值为0

如果string_1 >string_2函数返回值大于0

如果string_1< string_2函数返回值小于0

用法:strcmp (string_1,string_2);

d)strlwr函数

功能:大写字母转换为小写,其他的不变

用法:strlwr(string);

e)strupr函数

功能:小写字母转换为大写,其他的不变

用法:strupr(string);

f)strlen函数

功能:计算字符串的长度

用法:strlen (string);

g)strstr函数

功能:在前面的字符串找后一个字符串在前面出现的位置,找到返回该位置的指针否则返回NULL

用法:strstr(string1,string2);

c语言多个大写变小写字母,c语言大写字母转换成小写字母相关推荐

  1. 从键盘输入一个字符,如果是小写字母,则将其转换成大写字母输出;如果是大写字母,则将其转换成小写字母输出;如果是其它字符,则原样输出。

    #include<stdio.h> int main() {     char c1;     printf("请输入一个字符\n");     scanf(" ...

  2. C语言实现字母的大写转换成小写

    C语言实现字母的大写转换成小写 1 问题描述: 2 程序代码: 2.1 代码分析: 3 改进 3.1 程序测试结果 参考资料 1 问题描述: 程序功能:实现字母的大小写转换.输入一个大写字母,接着按下 ...

  3. java 首字母小写_java实现将字符串中首字母转换成大写,其它全部转换成小写的方法示例...

    本文实例讲述了java实现将字符串中首字母转换成大写,其它全部转换成小写的方法.分享给大家供大家参考,具体如下: public class TestSubstring { public static ...

  4. 输入一个字符,判断其是否为大写字母,如果是,将他转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

    输入一个字符,判断其是否为大写字母,如果是,将他转换成小写字母:如果不是,不转换.然后输出最后得到的字符. 代码如下: 1 #include<stdio.h>2 int main()3 { ...

  5. 1、编写一个程序,将一个小写字母(如a)转换成相应的大写字母并显示输出。

    import java.util.Scanner; public class Zuoye1 { /** * 编写一个程序,将一个小写字母(如a) * 转换成相应的大写字母并显示输出. * * * * ...

  6. 将大写字母转换为小写字母(将该字符串中的大写字母转换成小写字母,之后返回新的字符串。)

    将该字符串中的大写字母转换成小写字母,之后返回新的字符串. 示例 1: 输入: "Hello" 输出: "hello" 示例 2: 输入: "here ...

  7. 输入一行字符,将其中的大写字母转换成小写字母,其中的小写字母转换成大写字母C++--tolower、isalpha等函数的使用

    字母大小写转换 [问题描述] 输入一行字符,将其中的大写字母转换成小写字母,其中的小写字母转换成大写字母,然后输出. [输入形式] 输入一行可显示的字符,回车结束. [输出形式] 输出一行字符,其中输 ...

  8. 输入2个大写英文字母,调用函数CharSwap将其转换成小写字母并交换

    要将两个大写英文字母转换成小写字母并交换,可以使用以下代码: def CharSwap(ch1, ch2):ch1 = ch1.lower()ch2 = ch2.lower()ch1, ch2 = c ...

  9. VB 录入字母大写自动转换成小写及小写自动转换成大写

    要自动转换大小写,很多人首先想到的一定是 UCase$ 及 LCase$,但是要使用这二个函数,一定不可以在 Key_Press 事件中使用,否则您若输入<abc>,结果却变成<CB ...

  10. c++ cstring 转换 char_LeetCode 709. 转换成小写字母

    709. 转换成小写字母 Loading...​leetcode-cn.com 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回 ...

最新文章

  1. TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)
  2. linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题
  3. IDEA 设置忽略那些文件不提交到SVN服务器
  4. UltraGrid中实现下拉Grid(UltraDropDown)
  5. Mybatis主线流程源码解析
  6. html中间大两边小轮播代码,vue使用swiper实现中间大两边小的轮播图效果
  7. matplotlib 添加偏移量
  8. Hash哈希(hashCode、HashSet 、HashMap)
  9. DB2 SQLCODE: -407, SQLSTATE: 23502
  10. php导出excel2007实例,PHP导出EXCEL的简单范例 使用phpexcel类库导出excel
  11. 关于mongodb的学习与探索二
  12. 微信公众平台开发资源集锦
  13. android studio Statistic插件不显示
  14. SATA-AHCI规范学习
  15. 【哈佛学习力5:情绪管理】
  16. project(2)
  17. mysql 导出数据 insert_mysql导入导出数据
  18. java char是否为数字_java判断字符是否为数字
  19. 沸腾!华为鸿蒙系统正式登场,手机即日起可升级!万物互联野心曝光,P50也官宣了...
  20. 【热门主题:比加猪爱无止尽xp主题】

热门文章

  1. redis 集群 set key报错CLUSTERDOWN Hash slot not served
  2. Go语言 常用日志记录方法
  3. 2022年来啦!丨新年回馈粉丝丨免费抽奖!
  4. 计算机重启发出响声怎么办,电脑不断响提示音怎么办
  5. 温度对二极管伏安特性的影响
  6. E-day0003:generate
  7. android 移动国家代码,Android-imsi-MCC-MNC-国家码
  8. 几种常用英文信件范文
  9. 计算机画图怎样更改文字,一招教你利用画图工具修改图片上的文字
  10. 华硕笔记本BIOS设置详解