一、Xmind整理:
二、课上练习:
练习1:基本类型参数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//传参:被调函数需要使用主调函数的局部变量,传参
void Sum(char a,char b);//被调函数
int main(int argc, const char *argv[])//主调函数
{
int a=128,b=129;//局部变量:在main函数使用
Sum(a,b);//实际参数:实参:变量 常量 表达式
return 0;
}
//m=a n=b;
void Sum(char m,char n)//被调函数 形式参数:形参:变量
{
printf("m+n=%d\n",m+n);
}
//实参和形参
//1.实参和形参的个数必须一致,否则报错
//2.一一对应
//3,实参和形参的类型可以不一致,以形参为主,发生自动或强制转换
//4,实参和形参变量名可以不一致
练习2:基本类型做参数,实现计算器, 定义四个函数,实现加减乘除
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Sum(int a,int b);
void Sub(int a,int b);
void Mul(int a,int b);
void Div(int a,int b);
int main(int argc, const char *argv[])
{
int a,b;
char ch;
printf("请输入一个表达式:");
scanf("%d%c%d",&a,&ch,&b);
switch(ch)
{
case'+':Sum(a,b);break;
case'-':Sub(a,b);break;
case'*':Mul(a,b);break;
case'/':Div(a,b);break;
}
return 0;
}
void Sum(int a,int b)
{
printf("a+b=%d\n",a+b);
}
void Sub(int a,int b)
{
printf("a-b=%d\n",a-b);
}
void Mul(int a,int b)
{
printf("a*b=%d\n",a*b);
}
void Div(int a,int b)
{
if(b==0)
printf("除数不能为0!\n");
else
printf("a/b=%d\n",a/b);
}
练习3:定义数组,在自定义函数中实现就和
定义数组,在自定义函数中实现就和
/*
* function: 实现数组求和
* @param [ in]
* @param [out]
* @return
*/
//形参数组arr看似是数组,实则是指针
void Sum(int arr[],int len)//当传递数组是,形参的数组长度可以省略不写,默认是实际实参的元素个数
{
int sum=0;
printf("形参=%ld\n",sizeof(arr));
for(int i=0;i<len;i++)
{
sum+=arr[i];
}
printf("sum=%d\n",sum);
}
练习4: 写一个自定义函数Bubble,实现冒泡排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Bubble(int arr[],int n)
{
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入你要参与冒泡的个数:");
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&arr[i]);
}
Bubble(arr,n);
return 0;
}
练习5:二维数组做参数,传递数组名,因为数组名表示整个二维数组
/*
* function: 计算二维数组的和
* @param [ in] 数组
* @param [out]
* @return
*/
//形参二维数组看似是二维,实则是指针
void Sum(int line,int row,int arr[][row])
{
int sum=0;
// printf("形参sizeof(arr)=%ld\n",sizeof(arr));
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
sum+=arr[i][j];
}
}
printf("sum=%d\n",sum);
}
练习6:定义函数YangHui,计算杨辉三角
void YangHui(int n,int arr[n][n])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf(" ");
}
for(j=0;j<=i;j++)
{
if(j==0 || i==j)
{
arr[i][j]=1;
}
else
{
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
printf("%4d",arr[i][j]);
}
printf("\n");
}
}
int main(int argc, const char *argv[])
{
int n;
printf("请问您要输入一个几行几列的杨辉三角:");
scanf("%d",&n);
int arr[n][n];
YangHui(n,arr);
return 0;
}
练习7:字符串做参数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void my_strlen(char str[])
{
// printf("%ld\n",strlen(str));
int i=0;
while(str[i]!='\0')
{
i++;
}
printf("字符串长度是:%d\n",i);
}
练习8: 自定义一个函数实现字符串比较
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void MyStrcmp(char str[],char str1[])
{
int i=0,j=0;
while(str[i]==str1[j])
{
if(str[i]=='\0')
{
break;
}
i++;j++;
}
if(str[i]>str1[j])
printf("str>str1\n");
else if(str[i]<str1[j])
printf("str<str1\n");
else
printf("str=str1\n");
}
int main(int argc, const char *argv[])
{
char str[100]="";
char str1[100]="";
printf("请输入第一个字符串:");
scanf("%s",str);
printf("请输入第二个字符串:");
scanf("%s",str1);
MyStrcmp(str,str1);
return 0;
}
练习9:二维字符数组做参数
void print(char str[][5],int line)
{
for(int i=0;i<line;i++)
{
printf("%s\n",str[i]);
}
}
int main(int argc, const char *argv[])
{
char str[3][5]={"abcd","ASDF","1234"};
print(str,sizeof(str)/sizeof(str[0]));
return 0;
}
练习10: 自定义函数Sum计算一维数组的和,返回和
int Sum(int arr[],int len)
{
int sum=0;
for(int i=0;i<len;i++)
{
sum+=arr[i];
}
return sum;
size_t count=0;
}
int main(int argc, const char *argv[])
{
int arr[]={1,2,3,4,5};
int s=Sum(arr,sizeof(arr)/sizeof(arr[0]));
printf("s=%d\n",s);
return 0;
}
练习11:返回字符串长度
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned long my_strlen(char str[])
{
int i=0,count=0;
while(str[i++])
count++;
return count;
}
int main(int argc, const char *argv[])
{
char str[100]="";
printf("请输入字符串:");
scanf("%s",str);
size_t len=my_strlen(str);
printf("字符串长度为:%lu\n",len);
return 0;
}
练习12:字符串比较,返回str和str1的差值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int MyStrcmp(char str[],char str1[])
{
int i=0,j=0;
int cha=0;
while(str[i]==str1[j])
{
if(str[i]=='\0')
{
break;
}
else
{
i++;j++;
}
}
cha =str[i]-str1[j];
return cha;
}
int main(int argc, const char *argv[])
{
char str[100]="";
char str1[100]="";
printf("请输入第一个字符串:");
scanf("%s",str);
printf("请输入第二个字符串:");
scanf("%s",str1);
int n=MyStrcmp(str,str1);
if(n==0)
printf("str=str\n");
else if(n>0)
printf("str>str1\n");
else
printf("str<str1\n");
return 0;
}
三、课后作业:
1.计算数组的最大和,以及最大差
定义函数实现返回最大差值 定义函数实现返回最大和
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Bubble(int arr[],int n)
{
int i,j;
int t;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(arr[j]>arr[j+1])
{
t=arr[j];arr[j]=arr[j+1];arr[j+1]=t;
}
}
}
}
int MaxSub(int arr[],int n)
{
return arr[n-1]-arr[0];
}
int MaxSum(int arr[],int n)
{
return arr[n-1]+arr[n-2];
}
int main(int argc, const char *argv[])
{
int m,n;
printf("请问你要输入一个几位数组:");
scanf("%d",&n);
int arr[n];
for(m=0;m<n;m++)
{
printf("请输入第%d个数:",m+1);
scanf("%d",&arr[m]);
}
Bubble(arr,n);
int sub=MaxSub(arr,n);
int sum=MaxSum(arr,n);
printf("最大差:%d 最大和是:%d\n",sub,sum);
return 0;
}