C语言03-函数(上)

1.函数介绍

tolower:字母转小写

C语言03-函数(上)


参数:可以传ASCII码值 也可以传字符
复制代码
printf("%c ", tolower('A'));    //a
    printf("%d ", tolower('A'));    //97
    printf("%c ", tolower(65));     //a
// 'A' : 65
// 'a' : 97
复制代码


toupper:字母转大写


C语言03-函数(上)

参数:可以传ASCII码值 也可以传字符
复制代码
printf("%d ", toupper('a'));    //65
printf("%c ", toupper('a'));    //'A'
复制代码

fabs() / abs() :求绝对值

C语言03-函数(上)

C语言03-函数(上)

//注意fabs()函数返回值为double类型 且要引头文件math.h
  printf("%d ", abs(-1.1)); //1
  printf("%.2lf ", fabs(-1.1)); //1.10
复制代码

sqrt:开平方函数

C语言03-函数(上)

printf("%.2lf ", sqrt(4));  //2.00
printf("%.2lf ", sqrt(8));  //2.83
复制代码

pow:求平方函数

C语言03-函数(上)

第一个参数:底数:x  
第二个参数:次幂:y
复制代码
printf("%.2lf ", pow(2,3)); //2的三次方 8
  printf("%.2lf ", pow(3,2));//3的平方 9
复制代码

strcpy函数-字符串拷贝

C语言03-函数(上)


第一个参数:目标位置
第二个参数:要拷贝的字符串---因为不作修改,所以可以加const修饰
   //注意:可以不接收strcpy函数返回值
//strcpy函数返回值为:目标空间的地址
 //要保证目标空间足够大
复制代码
int main()
{
    char arr[20] = { 0 };   //目标空间
    char* arr2 = "hello world";
    char* ret =strcpy(arr, arr2);
    printf("%s\n", arr);    //hello world
    printf("%s\n", ret);    //hello world
    return 0;
}
复制代码

memset函数

C语言03-函数(上)

将dest指向的内存块的前count个字节设置为指定值

第一个参数:指针
第二个参数:要设置的指定值 可以为整数也可以为字符
第三个参数:字节数,可以为变量也可以为常量
    
    注意:以字节为单位进行扩充
    如果要接收返回值,要强制类型转化一下,因为返回类型是void*.不转换也不会出错,但是规范点比较好
    也可以不接收返回值
复制代码
int main()
{
    char arr[20] ="hello world";
    int n = 5;
    char *ret = (char*)memset(arr, 'x', n);
    printf("%s\n", arr); //xxxxx world
    printf("%s\n",ret); //xxxxx world
    return 0;
}
复制代码
//想要将数组前五个元素初始化为1
//错误程序:
int main()
{
    int arr[10] = {0};
    memset(arr,1,5*sizeof(int));
    return 0;
}
复制代码

C语言03-函数(上)


原因:memset是以字节为单位初始化


整形->4个字节 共初始化字节数为5*sizeof(int) =20个字节


所以前5个元素被初始化为0x01010101,而并非0x00000001


2.自定义函数

1.求两个数的较大值

int get_max(int a, int b)
{
    return a > b ? a : b;
}
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    int max = get_max(a, b);//
    printf("%d和%d的较大者为:%d\n",a,b,max);
}
复制代码

2.交换两个数的值

//错误程序
void Swap(int x, int y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
int main()
{
    int a = 10;
    int b = 20;
    printf("before: a = %d,b = %d\n", a, b);    //20 10
    Swap(a, b);
    printf("after:  a = %d,b = %d\n", a, b);    //20 10
    return 0;
}
//原因:传值时,实参a和b传给形参x,y时,形参是实参的一份临时拷贝
//改变形参变量x,y不会影响实参a和b
复制代码
//正解->传址
void Swap(int* x, int* y)
{
    int tmp =*x;
    *x = *y;
    *y = tmp;
}
int main()
{
    int a = 10;
    int b = 20;
    printf("before: a = %d,b = %d\n", a, b);    //20 10
    Swap(&a,&b);
    printf("after:  a = %d,b = %d\n", a, b);    //10 20
    return 0;
}
复制代码

3.写一个函数判断一个数是不是素数

方法1:试除法
//写法1:
//是素数返回1,不是素数返回0
int is_prime(int n)
{
    int i = 0;
    for (i = 2; i < n; i++)
    {
        if (n %i == 0)
        {
            return 0;
        }
    }
    return 1;
}
//写法2
//用布尔类型 ->引用头文件 stdbool.h
bool is_prime(int n)
{
    int i = 0;
        for (i = 2; i < n; i++)
        {
            if (n %i == 0)
            {
                return false;
            }
        }
        return true;
}
复制代码

法2:开平方
int is_prime(int n)
{
    int i = 0;
    for (i = 2; i < sqrt(n); i++)
    {
        if (n %i == 0)
        {
            return 0;
        }
    }
    return 1;
}
复制代码


上一篇:一道2016年nice的笔试题引发的思考


下一篇:从代码角度,带你手把手调试(下)