函数作业:
1.输出一维数组的回文数字
void Palindrome(int arr[],int n)
#include<stdio.h>
#include<string.h>
void Palindrome(int arr[],int n)
{
int lnversion,i,t;
for(i=0;i<n;i++)
{
t=arr[i];
lnversion=0;
while(arr[i]>0)
{
lnversion=lnversion*10+arr[i]%10;
arr[i]/=10;
}
if(t==lnversion)
printf("%d是回文\n",t);
}
}
int main(int argc, const char *argv[])
{
int arr[]={121,123,262,789,567};
int n=sizeof(arr)/sizeof(arr[0]);
Palindrome(arr,n);
return 0;
}
2.实现字符串匹配
例如:char str[]=”ababcabcdabcde” char str1[]=”abca”
输出子串在主串的下标2出现
void BF(char str[],char str1[]) //str是主串 str1是子串
#include<stdio.h>
#include<string.h>
void BF(char str[],char str1[])
{
int i=0,j=0;
while(i<strlen(str) && j<strlen(str1))
{
if(str[i]==str1[j])
{
i++;j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j==strlen(str1))
printf("在下标%d匹配成功\n",i-j);
else
printf("匹配失败\n");
}
int main(int argc, const char *argv[])
{
char str[]="ababcabcdabcde";
char str1[]="abca";
BF(str,str1);
return 0;
}
3.实现字符串逆置
void MyStrrev( char str[] )
#include<stdio.h>
#include<string.h>
void MyStrrev( char str[] )
{
char t;
int i=0;
int j=strlen(str)-1;
while(i<j)
{
t=str[i];str[i]=str[j];str[j]=t;
i++;j--;
}
puts(str);
}
int main(int argc, const char *argv[])
{
char str[]="helloworld";
MyStrrev(str);
return 0;
}
有参函数的练习:
1.自定义函数,实现计算器
+-*/ 1+2: int a,b;char c;
//定义四个函数,要求传参
#include<stdio.h>
void add(int num1,int num2)
{
printf("%d+%d=%d\n",num1,num2,num1+num2);
}
void sub(int num1,int num2)
{
printf("%d-%d=%d\n",num1,num2,num1-num2);
}
void mul(int num1,int num2)
{
printf("%d*%d=%d\n",num1,num2,num1*num2);
}
void div(int num1,int num2)
{
if(num2==0)
printf("除数不能为0\n");
else
printf("%d/%d=%.2f\n",num1,num2,(float)num1/num2);
}
int main(int argc, const char *argv[])
{
int num1,num2;
char ch;
printf("请输入一个表达式:");
scanf("%d%c%d",&num1,&ch,&num2);
switch(ch)
{
case '+':add(num1,num2); break;
case '-':sub(num1,num2); break;
case '*':mul(num1,num2); break;
case '/':div(num1,num2); break;
}
return 0;
}
2.实现字符串拷贝函数的封装【非函数】
void MyStrcpy(char str[],char str1[])
#include<stdio.h>
void MyStrcpy(char str[],char str1[])
{
int i;
for( i=0;str1[i]!='\0';i++)
{
str[i]=str1[i];
}
str[i]='\0';
puts(str);
}
int main(int argc, const char *argv[])
{
char str[10]="";
char str1[10]="";
gets(str1);
MyStrcpy(str,str1);
return 0;
}
3.使用函数实现排序【在自定义函数中排序】
void Sort(float arr[],int n)
#include<stdio.h>
void Sort(float arr[],int n)
{
int i,j;
float 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;
}
}
}
}
void Show(float arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%.1f\n",arr[i]);
}
}
int main(int argc, const char *argv[])
{
float arr[]={8.3,4.2,9,24.3,23};
int n=sizeof(arr)/sizeof(arr[0]);
Sort(arr,n);
Show(arr,n);
return 0;
}
4.计算二维字符数组的最大值【自己封装函数】
void StrMax(char str[][20],int n,char max[])
#include<stdio.h>
#include<string.h>
void StrMax(char str[][20],int n,char max[])
{
int i;
for(i=0;i<n;i++)
{
if(i==0)
strcpy(max,str[i]);
if(strcmp(max,str[i])<0)
strcpy(max,str[i]);
}
}
int main(int argc, const char *argv[])
{
char str[][20]={"hello","hi","world"};
int n=sizeof(str)/sizeof(str[0]);
char max[20];
StrMax(str,n,max);
puts(max);
return 0;
}
5.计算二维数组中素数的个数
void Prime(int arr[][3],int line,int row)
素数:只能被1和本身整除
#include<stdio.h>
#include<string.h>
void Prime(int arr[][3],int line,int row)
{
int i,j,k,count;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
count=0;
for(k=1;k<=arr[i][j];k++)
{
if(arr[i][j]%k==0)
{
count++;
}
}
if(count==2)
printf("%d是素数\n",arr[i][j]);
}
}
}
int main(int argc, const char *argv[])
{
int arr[][3]={3,6,11};
int line=sizeof(arr)/sizeof(arr[0]);
int row=sizeof(arr[0])/sizeof(int);
Prime(arr,line,row);
return 0;
}