逗号表达式&字符串逆序(递归实现)&计算一个数的每位之和(递归实现)&递归实现n的k次方

逗号表达式:逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,
如:(3+5,6+8)的值是14;a=(a=3*5,a*4)的值是60,其中(a=3*5,a*4)的值是60,
a的值在逗号表达式里一直是15,最后被逗号表达式赋值为60,a的值最终为60。
(表达式1,表达式2,表达式3,...... ,表达式n)
逗号表达式的要领:
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。
(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
(3) 逗号运算符的优先级别在所有运算符中最低。
#include <stdio.h>
int main()
{
    int x,y,z;
    x=1;
    y=1;
    z=x++,y++,++y;
    printf("%d,%d,%d\n",x,y,z);
    return 0;
}
x和y的值经过自增以后分别为2和3,D可以排除。剩下3个选项选择什么呢?
如果是(x++,y++,++y)实际上可以看成(1,1,3)整个逗号表达式的值应该是3,那么选A。
如果是(x++,++y,y++)实际上可以看成(1,2,2)整个逗号表达式的值应该是2,那么选B。
但这是错的,这儿还有赋值运算符。赋值运算符的优先级是2,而逗号运算符的优先级是1,
也就是说上面的表达式中应该等价于这样的结合:(z=x++),y++,++y;如果这样写的话,则答案很清晰,为:2,3,1
 //打印9*9乘法口诀表 可输入数字,自由计算
#include <stdio.h>
void print(int n)
{
    int i=0;
    for (i=1;i<=n;i++)
    {
        int j=0;
        for (j=1;j<=i;j++)
        {
          printf("%d*%d=%2d  ",i,j,i*j);
        }
        printf("\n");
    }
}
int main()
{
    void print(int n);
    int n=0;//输入的数字为n
    scanf("%d",&n);
    print(n);
    return 0;
}
字符串逆序(递归实现)
编写一个函数
实现:将参数字符串中的字符反向排列不是逆序列打印
要求:不能使用C函数库中的字符串操作函数
#include <stdio.h>
int mystrlen(char *arr)
{
    int number=0;
    while (*arr !='\0')
    {
        arr++;
        number++;
    }
    return number;
}
char Reverse_printf(char*arr)
{
    int left=0;
    int right=mystrlen(arr)-1;//可直接strlen(arr)-1 计算right的值
    int Treasure=0;
    while (left<right)
    {
        /*Treasure=arr[left];
        arr[left]=arr[right];
        arr[right]=Treasure;
Treasure=*(arr+left);//使用指针arr[left]=*(arr+left)
*(arr+left)=*(arr+right);
*(arr+right)=Treasure;
left++;
right--;
}
}
int main()
{
    char arr[]="a b c d e f";
    Reverse_printf(arr);
    printf("%s ",arr);
    return 0;
}
#include <stdio.h>
int mystrlen(char *arr)
{
    int number=0;
    while (*arr !='\0')
    {
        arr++;
        number++;
    }
    return number;
}
char Reverse_printf(char*arr)
{
    int left=0;
    int right=mystrlen(arr)-1;//可直接strlen(arr)-1 计算right的值
    int Treasure=0;
    while (left<right)
    {
        Treasure=arr[left];
        arr[left]=arr[right];
        arr[right]=Treasure;
        Treasure=*(arr+left);//使用指针arr[left]=*(arr+left)
        *(arr+left)=*(arr+right);
        *(arr+right)=Treasure;
        left++;
        right--;
    }
}
int main()
{
    char arr[]="a b c d e f";
    Reverse_printf(arr);
    printf("%s ",arr);
    return 0;
}
 大事化小
 a b c d e f 的逆序=a和f的交换+b c d e 的逆序,
      b c d e的逆序=b和c的交换+c d的逆序
          c d的逆序=c d的交换
#include <stdio.h>
int mystrlen(char *arr)
{
    int number=0;
    while (*arr !='\0')
    {
        arr++;
        number++;
    }
    return number;
}
char Reverse_printf(char*arr)
{
    char Treaasure=0;
    int length=mystrlen(arr);
    Treaasure=*arr;
    *arr=*(arr+length-1);
    *(arr+length-1)='\0';
    if (mystrlen(arr+1)>=2)
    {
        Reverse_printf(arr+1);
    }
    *(arr+length-1)=Treaasure;
}
int main()
{
    char arr[]="a b c d e f";
    Reverse_printf(arr);
    printf("%s ",arr);
    return 0;
}

 

//计算一个数的每位之和(递归实现)题目内容:
//写一个递归函数Digitsum(n),输入一个非负整数,返回组成它的数字之和例如:
//调用DigitSum(1729),则应该返回1+7+2+9,它的和是19输入: 1729,输出:19
int Digitsum(int n)
{
    if (n>=9)
    {
        return Digitsum(n/10)+n%10;
    }
    else
    {
        return n;
    }
}
#include <stdio.h>
int main()
{
    int n=1729;
    printf("%d", Digitsum(n));
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值