C语言基础练习(2)

1.读程序,写出你的分析步骤,得出结果。

typedef int (*FUNC1)(int);/定义函数类型,起名为FUNC1/
typedef int (*FUNC2)(int *, int *, int *);/定义函数类型,并起名为FUNC2/
int inc(int a)
{
    return (++a);/返回到a+1/
}
int multi(int *a, int *b, int *c)
{
    return (*c=*a**b);/返回到c(c=a*b)/

}
void show(FUNC2 fun, int arg1, int *arg2)
{
    FUNC1 p = inc;/定义一个p函数,类型与FANC1相同,内容与inc函数相同。/
    int temp = p(arg1);/定义一个int类型temp,它的数值为调用p函数的返回值,其中p参数是arg1=10,p功能与inc相同。/
    fun(&temp, &arg1, arg2);/调用fun函数,三个参数为temp的地址,arg1的地址,arg2的地址。fun函数的类型是FUNC2,内容与multi相同。/
    printf("%d\n", *arg2);/输出arg2的值,结果为110。/

}
主程序:int a = 0; show(multi, 10, &a);

2.阅读一下程序,找出错误并更改。
PS:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
<所有头文件都已包含>

main()   
{   
char*src="hello,world";   
char* dest=NULL;   
int len=sizeof(src);   
dest=(char*)malloc(len);        
char* s=src[len];           
while(len--!=0)   
dest++=s--;          
printf("%s",dest);   
return 0;   
}

``````
int main()//因为最后return0,所以加上返回值int
{
    char*src = "hello,world";
    char* dest = NULL;
    int len = strlen(src);//获取字符串大小用strlen
    dest = (char*)malloc(len+1);//申请堆空间加上结束符的位置
    char* s = &src[len-1];//s指向src的最后一个字符,位置在[len-1],指向一个地址,应加上取地址符
    while (len-- != 0)
        *dest++ = *s--;//对指针对应的字母赋值
    printf("%s", dest);

    free(dest);//申请的堆空间要释放
    dest=NULL;//避免dest为野指针

    return 0;
}




<div class="se-preview-section-delimiter"></div>

```return 0;
}

3.编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefg”

//pStr是指向以''结尾的字符串的指针
//steps是要求移动的n

void LoopMove ( char * pStr`
int steps )
{

//请填充...
}

void LoopMove(char * pStr, int steps)
{
    char string[100] = { 0 };

    int len = strlen(pStr);//字符串的长度,不包括'\0'
    int n = len - steps;//n为从字符串开始到移动后结尾字符的长度
    steps %= len;//对要求移动的数字取模

    strcpy(string, pStr + n);//拷贝pStr的后steps位
    memcpy(string + steps, pStr, n);//在srting后追加pStr的前n位

    printf("%s\n\n",&string);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值