目录
2.7 my_strlen计算字符串长度、my_strcmp比较字符串大小【有参无返】
2.8 用size_t strlen计算字符串长度【有参有返】
2.9 my_strcmp比较字符串大小,并返回差值【有参有返】
一、总思维导图(函数)
1.1 函数分类
1.2 全局变量和局部变量
1.3 无参无返函数、有参函数
1.4 有返回值函数
二、课上练习
2.1 定义函数
2.1.1 在main上定义)(在main下定义)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*在main上定义
void Sum()
{
int a=100,b=10;
printf("a+b=%d\n",a+b);
}
int main(int argc, const char *argv[])
{
Sum();
printf("你好\n");
return 0;
}
*/
//在main下定义
void Sum();//声明函数
int main(int argc, const char *argv[])
{
Sum(); //调用
printf("你好\n");
return 0;
}
void Sum()
{
int a=100,b=10;
printf("a+b=%d\n",a+b);
}
2.1.2 引用自定义库
进入底行模式输入:vsp 1.h创建1.h文件声明函数
void sum();
主函数+自定义函数(1.c)
在头文件引用1.h文件
#include <stdio.h>
#include "1.h"//引用自定义库
int main(int argc, const char *argv[])
{
Sum();
printf("你好\n");
return 0;
}
void Sum()
{
int a=100,b=10;
printf("a+b=%d\n",a+b);
}
2.3 计算器【有参无返函数】
#include <stdio.h>
int Sum();//和
int Dec();//差
int Mul();//积
int Dev();//商
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 '-':Dec(a,b);break;
case '*':Mul(a,b);break;
case '/':Dev(a,b);break;
}
return 0;
}
void Sum(int a,int b)
{
printf("a+b=%d\n",a+b);
}
void Dec(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 Dev(int a,int b)
{
if(b==0)
printf("除数不能为0!\n");
else
printf("a/b=%d\n",a/b);
}
2.4 计算器【有参有返函数】
#include <stdio.h>
int Sum();//和
int Dec();//差
int Mul();//积
int Dev();//商
int main(int argc, const char *argv[])
{
int a,b;
char ch;
printf("请输入一个表达式:");
scanf("%d%c%d",&a,&ch,&b);
switch(ch)
{
case '+':printf("a+b=%d\n",Sum(a,b));break;
case '-':printf("a-b=%d\n",Dec(a,b));break;
case '*':printf("a*b=%d\n",Mul(a,b));break;
case '/':printf("a/b=%d\n",Dev(a,b));break;
}
return 0;
}
int Sum(int a,int b)
{
return a+b;
}
int Dec(int a,int b)
{
return a+b;
}
int Mul(int a,int b)
{
return a+b;
}
int Dev(int a,int b)
{
if(b==0)
printf("除数不能为0!\n");
else
{return a+b;}
}
2.5 数组冒泡排序、计算数组和【有参无返】
#include <stdio.h>
#include "1.h"
int main(int argc, const char *argv[])
{
int a[] ={9,1,3,15,6};
int len=sizeof(a)/sizeof(a[0]);
Sum(a,len);
Bubble(a,len);
return 0;
}
void Sum(int a[],int len)
{
int sum=0;
for(int i=0;i<len;i++)
{
sum+=a[i];
}
printf("sum=%d\n",sum);
}
void Bubble(int a[],int len)
{
int i,j,count,t;
for(i=1;i<len;i++)//循环轮数
{
count=0;
for(j=0;j<len-i;j++)//比较几次
{
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
count++;
}
}
if(count==0)
break;
}
for(i=0;i<len;i++)
{
printf("%d\t",a[i]);
}
}
2.6 杨辉三角【有参无返】
#include <stdio.h>
void Yanghui(int n,int a[n][n]);
int main(int argc, const char *argv[])
{
//定义函数Yanghuui,计算杨辉三角
int n;
printf("n=");
scanf("%d",&n);
int a[n][n];
/*int row=sizeof(a)/sizeof(a[0]);
int line=sizeof(a[0])/sizeof(a[0][0]);*/
Yanghui(n,a);
return 0;
}
void Yanghui(int n,int a[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)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
printf("%4d",a[i][j]);
}
printf("\n");
}
}
2.7 my_strlen计算字符串长度、my_strcmp比较字符串大小【有参无返】
#include <stdio.h>
void my_strlen(char str[])
{
int i=0;
while(str[i]!='\0')
{
i++;
}
printf("字符串长度是:%d\n",i);
}
void my_strcmp(char str[],char str1[]) //比较str和str1的大小
{
int i=0;
while(str[i]!='\0'||str1[i]!='\0')
{
if(str[i]=='\0')
{
break;
}
if(str[i]==str1[i])
{
i++;
}
}
if(str[i]>str1[i])
{
printf("str > str1\n");
}
else if(str[i]<str1[i])
printf("str < str1\n");
else
printf("str = str1\n");
}
int main(int argc, const char *argv[])
{
char str[20]="";
printf("please enter str:");
gets(str);
my_strlen(str);
char str1[20]="";
printf("please enter str1:");
gets(str1);
my_strcmp(str,str1);
return 0;
}
2.8 用size_t strlen计算字符串长度【有参有返】
#include <stdio.h>
size_t my_strlen(char str[])
{
int i=0;
while(str[i]!='\0')
{
i++;
}
return i;
}
int main(int argc, const char *argv[])
{
//计算size_t strlen(char str[])
char str[20]="";
gets(str);
size_t l=my_strlen(str);
printf("l=%ld\n",l);
return 0;
}
2.9 my_strcmp比较字符串大小,并返回差值【有参有返】
#include <stdio.h>
int my_strcmp(char s1[],char s2[])
{
int i;
while(s1[i]!='\0'||s2[i]!='\0')
{
if(s1[i]=='\0')
{
break;
}
if(s1[i]==s2[i])
{
i++;
}
}
return s1-s2;
}
int main(int argc, const char *argv[])
{
//my_strcmp
char s1[20]="123";
char s2[20]="1234";
int k=my_strcmp(s1,s2);
if(k>0)
{
printf("s1>s2,k=%d\n",k);
}
else if(k<0)
{
printf("s2>s1,k=%d\n",k);
}
else
printf("s1=s2");
return 0;
}
三、作业
3.1 计算数组的最大和,以及最大差
要求:①定义函数实现返回最大差值
②定义函数实现返回最小和
#include <stdio.h>
#include <string.h>
int Max_difference(int a[],int n)//最大差
{
return a[n-1]-a[0];
}
int Min_add(int a[],int n)//最小和
{
return a[0]+a[1];
}
int main(int argc, const char *argv[])
{
int a[5]={5,99,100,3,1};
int n=sizeof(a)/sizeof(a[0]);
//冒泡排序
int i,j,count,t;
for(i=1;i<n;i++)
{
count=0;
for(j=0;j<=n-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
count++;
}
}
if(count==0)
{
break;
}
}
for(i=0;i<n;i++)
{printf("%d\t",a[i]);}
printf("\n");
printf("最大和是:%d\n",a[n-1]+a[n-2]);
int max_difference=Max_difference(a,n);
int min_add=Min_add(a,n);
printf("最大差是:%d\n",max_difference);
printf("最小和是:%d\n",min_add);
return 0;
}