C语言编程精解-(4)-函数

  • scanf()和printf()函数的返回值是什么?
  • 除.h之外,其他类型文件可以被#include语句包含吗?
  • 冒泡排序算法,静态函数.

函数

1.重要的面试题

scanf()和printf()函数的返回值是什么?
答:scanf()函数返回传递给函数的变量个数.例如,

scanf("%d%d",&x,&y);    // 返回2.

printf()函数返回显示为输出的字节数.例如,

printf("Hello"); // 返回5

2.程序 函数的形式(此处仅列举一种)

/* sum函数不需要传值也没有返回值*/
#include <stdio.h>
void sum(){
    int x = 10,y = 25;
    int z = x+y;
    printf("Result = %d.\n",z);
}
int main(){
    sum();
}

输出:

Result = 35.

3.程序 函数的定义

/* 用square()函数计算整数的平方*/
#include <stdio.h>
int square(int num){
    int result;
    result = num*num;
    return result;
}
int main(){
    int x,res;
    printf("Enter an integer: ");
    scanf("%d",&x);
    // 调用函数并传递参数x,同时保存返回值
    res = square(x);
    printf("Square value = %d\n",res);
}

输出:

Enter an integer: 16
Square value = 256

4.程序

/* 两个整数的最大公约数*/
#include <stdio.h>
// 函数原型声明
int gcd(int u,int v);
int main(){
    int x,y;
    printf("Type two integer values: ");
    scanf("%d,%d",&x,&y);
    printf("GCD value = %d\n",gcd(x, y));
}

int gcd(int u,int v){
    int r;
    while (v!=0) {
        r = u%v;
        u = v;
        v = r;
    }
    return u;
}

输出:

Type two integer values: 150,35
GCD value = 5

5.程序

/* 判断是否为d素数*/
#include <stdio.h>
int isprime(int n){
    int i,flage = 1;
    for (i=2; i<n; i++) {
        if (n%i == 0) {
            flage = 0;
            break;
        }
    }
    return flage;
}

int main(){
    int num,result;
    printf("Enter number: ");
    scanf("%d",&num);

    result = isprime(num);
    if (result == 1)
        printf("%d is prime\n",num);
    else printf("%d is not prime\n",num);
}

输出:

Enter number: 11
11 is prime

6.程序 向函数传递数组

#include <stdio.h>
// 输入数组存储到一维数组中
void getarr(int arr[],int n){
    int i;
    printf("\n");
    for (i=0; i<n; i++) {
        printf("Enter element: ");
        scanf("%d",&arr[i]);
    }
}

// 显示数组中的元素
void disparr(int arr[],int n){
    int i;
    for (i=0; i<n; i++)
        printf("%d\t",arr[i]);
}

int main(){
    int  x[50];
    int n;
    printf("How many elements? ");
    scanf("%d",&n);
    /*读取数组, 传递h数组名和数据元素个数给函数*/
    getarr(x,n);
    // 显示数组
    disparr(x,n);
}

输出:

How many elements? 5

Enter element: 44
Enter element: 55
Enter element: 66
Enter element: 77
Enter element: 88
44    55    66    77    88

7.程序 冒泡排序算法

/* 冒泡排序*/
#include <stdio.h>
#define MAX 50
void sorting(float arr[],int n){
    float t;
    int i,pass;
    for (pass = 0; pass<=n-2; pass++) {
        for (i = 0; i<=n-2; i++) {
            if (arr[i]>arr[i+1]) {
                //交换元素
                t = arr[i];
                arr[i]>arr[i+1];
                arr[i+1]=t;
            }
        }
    }
}
int main(){
    float x[MAX];
    int i,n;
    printf("How many elements? ");
    scanf("%d",&n);
    // 向数组中存储h数字
    for (i=0; i<n; i++) {
        printf("Enter number: ");
        scanf("%f",&x[i]);
    }
    // 调用排序函数,传递数组参数
    sorting(x, n);
    printf("\nSorted elements:\n");
    for (i=0; i<n; i++) {
        printf("%.2f\t",x[i]);
    }
}

输出:

How many elements? 5
Enter number: 11
Enter number: 23
Enter number: 45
Enter number: 66
Enter number: 37

Sorted elements:
11.00    23.00    45.00    66.00    66.00

8.程序 编写一个函数读取并显示它

#include <stdio.h>
#define ROWS 50
#define COLS 50
void getarr(int arr[ROWS][COLS],int r,int c){
    int i,j;
    for (i=0; i<r; i++) {
        for (j=0; j<c; j++) {
            scanf("%d",&arr[i][j]);
        }
    }
}

void disparr(int arr[ROWS][COLS],int r,int c){
    int i,j;
    for (i=0; i<r; i++) {
        for (j=0; j<c; j++) {
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
}

int main(){
    int x[ROWS][COLS];
    int r,c;
    printf("How many row,cols? ");
    scanf("%d,%d",&r,&c);

    // 使用getarr()函数读取二维数组并制定数组名,列数以及行数
    printf("\nEnter matrix:\n");
    getarr(x, r, c);
    printf("\nYour matrix:\n");
    // 使用disparr()函数显示二维数组传递数组名,行数,列数
    disparr(x, r, c);
}

输出:

How many row,cols? 2, 3

Enter matrix:
1 2 3
4 5 6

Your matrix:
1    2    3    
4    5    6    

9.递归函数

/* 一个计算阶乘的递归函数*/
#include <stdio.h>
long int factorial(int n){
    long int result;
    if (n == 0)
        result = 1;
    else
        result = n*factorial(n-1);
    return result;
}

int main(){
    int j;
    for (j = 0; j<10; j++) {
        printf("Factorial(%d) = %ld\n",j,factorial(j));
    }
}

输出:

Factorial(0) = 1
Factorial(1) = 1
Factorial(2) = 2
Factorial(3) = 6
Factorial(4) = 24
Factorial(5) = 120
Factorial(6) = 720
Factorial(7) = 5040
Factorial(8) = 40320
Factorial(9) = 362880

10.程序 理解函数变量的作用域

/* 演示函数变量的作用域*/
#include <stdio.h>
void funct(){
    /* 块作用域,临时变量*/
    int x = 1;
    /* 块作用域,永久变量*/
    static int y = 1;
    printf("x = %d\ty = %d",x,y);
    x++;
    y++;

}

int main(){
    // 调用四次函数
    funct();
    funct();
    funct();
    funct();
}

输出:

x = 1    y = 1
x = 1    y = 2
x = 1    y = 3
x = 1    y = 4

11.重要的面试题

什么是库;形参和实参有什么区别?
答:对于程序而言,库就是一个语言或者软件对非常有用的内置资源的封装,例如,C标准库包含了许多内置函数.
形参是函数定义中变量,实参表示函数在调用时传递的参数值.

12.重要的面试题

函数声明和函数定义有什么区别?
答:函数的定义指的是函数的具体实现,内存分配,而函数声明或原型表示的是函数的引用,它告诉编辑器函数在程序某处已经被定义,在链接对的时候会被找到,通常,函数声明写在main()函数之前,而函数的定义则在main()之后.

13.重要的面试题

什么是静态函数?
答:静态函数就是其作用域被限定在当前程序文件中的一个函数.静态函数可以被同一个程序文件的代码看见和使用,而不能被文件外的函数使用,静态函数对于解决函数名冲突非常有用.

14.重要的面试题

除.h之外,其他类型文件可以被#include语句包含吗?
答:可以将任意的文件当作头文件来包含.例如,

#include <myfile.txt>

myfile.txt文件可能包含其他头文件或者函数原型.

15.重要的面试题

C里面的函数可以重载吗?
答:编写有相同的名字但是参数列表各不相同的函数叫做函数重载.C语言部分支持函数重载,例如,printf()函数:

printf("%d",x); // 两个参数
printf("%d,%d",x,y); // 三个参数

在C内置函数里面可以这样做函数重载,但是其他地方不支持函数重载,用户自定义函数不可以重载.


 上一篇
放毒-来大一波美食! 放毒-来大一波美食!
余生所求,做有趣的人,交有趣的朋友,去有趣的地方,过有趣的人生,最烈的酒,睡最美的姑娘!!! 余生无所求,做有趣的人,交有趣的朋友,去有趣的地方,过有趣的人生,最烈的酒,睡最美的姑娘!!!
2019-03-15
下一篇 
C语言编程精解-(3)-数组 C语言编程精解-(3)-数组
创建并初始化一个3行5列的二维数组并以矩阵形式显示该数组. 数组在内存中是如何存储的? 数组1.程序 创建一个整型数组,使用多种方式访问数组元素/* 使用多种方式来访问数组元素*/ #include <stdio.h> i
2019-03-13
  目录