现在的位置: 首页 > 综合 > 正文

C语言—-函数和应用

2013年03月21日 ⁄ 综合 ⁄ 共 2621字 ⁄ 字号 评论关闭

         区分:函数定义--->函数原型说明--->函数调用

         函数的嵌套:一个函数调用另一个函数,称为函数的嵌套调用;

         函数的递归调用:一个函数直接或间接的调用自己,成为函数的递归调用;

         ========================================================================================

几道小的测试题:

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);

}

抱歉!评论已关闭.