区分:函数定义--->函数原型说明--->函数调用
函数的嵌套:一个函数调用另一个函数,称为函数的嵌套调用;
函数的递归调用:一个函数直接或间接的调用自己,成为函数的递归调用;
========================================================================================
几道小的测试题:
1、编写一个程序,计算x的n次方;
#include<stdio.h>
int nci(int x,int n)
{
int i;
int a=1;
for(i=0;i<n;i++)
a=a*x;
return a;}
int main(){
int x,n,s;
s=nci(2,3);
printf("x de n ci fang is %d\n",s);
}
2、编写一个函数,计算对角线上元素的和;
#include<stdio.h>
int xn(int a[3][3])
{
int s=0,i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
if(i==j)
s=s+a[i][j];
}
return s;}
int main(){
int sum;
int a[3][3]={{1,2,3},{4,5,6 },{7,8,9}};
sum = xn(a);
printf("sum is %d",sum);
}
3、编写一个函数,int invert(char str[ ]),将一个字符串的内容颠倒起来;
#include<stdio.h>
int invert(char str[]){
int i;
int temp;
int n=strlen(str);
for(i=0;i<((n+1)/2);i++){
temp=str[i];
str[i]=str[n-i-1];
str[n-i-1]=temp;
}
puts(str);}
int main(){
char str[100];
gets(str);
invert(str);
}
4、编写函数,删除字符串从指定位置m开始的n个字符。若删除成功,函数范围被删除字符串,否则,返回空的值;
#include<stdio.h>
int delete(char str[],int m,int n)
{
int i;
int u;
u=strlen(str);for(i=0;i<n;i++)
{
str[m+i-1]=str[m+i+n-1];
}
str[u-n]='\0';
puts(str);
}int main(){
int m=3;
int n=4;
char str[100];
gets(str);
delete(str,m,n);}
5、编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出;
#include<stdio.h>
#include<string.h>
int delete_change(char str[])
{
int i,res=0;
for(i=0;str[i]!='\n';i++){
if(str[i]>='0'&&str[i]<='9')
res = res*10+str[i]-'0';
}
return res;
}int main(){
int i=0;
char str[100];
while(1){
str[i]= getchar();
if(str[i]=='\n')
break;
else i++;
}
printf("delete_change number is %d", delete_change(str));
return 0;
}
6、用递归的方法编写一个函数sum(int n),求1~n的累加和;
way1:非递归方式:
#include<stdio.h>
#include<string.h>
int add(int n){
int sum=0;
int i;
for(i=1;i<=n;i++)
{
sum=sum+i;
}
return sum;
}int main(){
int x;
x = 5;
printf("1~n add is %d",add(x));
}
way2:递归方式
#include<stdio.h>
#include<string.h>
int add(int n){
int sum=0;
if(n<=1)
sum=1;
else
sum=n+add(n-1);return sum;
}int main(){
int x;
x = 4;
printf("1~n add is %d",add(x));
}
7、编写一个程序,测试字符串s1中第一次出现的字符串s2中字符的位置,要求定义一个函数,返回出现这个字符的位置;若s1中不含s2的字符,则返回-1。(待定)
#include<stdio.h>
#include<string.h>
int length(char str1[],char str2[]){
int i,j;
int n;
n=strlen(str1);
for(i=0;str2[i];i++)
for(j=0;str1[i+j]==str2[j];j++)
if(j+1==n)
return i+1;return -1;
}int main(){
char s1[100];
char s2[100];
int len;
printf("str1 is :\n");
scanf("%s",s1);
printf("str2 is :\n");
scanf("%s",s2);
len = length(s1,s2);
printf("str2 in str1 location is %d:\n",len);
}