C语言程序设计:现代方法(7-10章)

第7章 基本类型

sizeof得到size_t类型的字节数,printf用%zu打印。

#include <stdio.h>

int main() {
    printf("char %zu\n",sizeof(char));
    printf("short %zu\n",sizeof(short));
    printf("int %zu\n",sizeof(int));
    printf("long %zu\n",sizeof(long));
    printf("long long %zu\n",sizeof(long long));
    printf("float %zu\n",sizeof(float));
    printf("double %zu\n",sizeof(double));
    printf("long double %zu\n",sizeof(long double));
    return 0;
}

/*
char 1
short 2
int 4
long 4
long long 8
float 4
double 8
long double 16
*/

第8章 数组

c99 支持变长数组(不在编译器指定)

#include <stdio.h>

int main() {
    int rows,columns;
    printf("Enter the number of rows and columns you want to enter:");
    scanf("%d%d",&rows,&columns);
    int arr[rows][columns];
    for(int i=0;i<rows;i++) {
        for(int j=0;j<columns;j++) {
            arr[i][j]=i+j;
        }
    }

    for(int i=0;i<rows;i++) {
        for(int j=0;j<columns;j++) {
            printf("%4d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

/*
Enter the number of rows and columns you want to enter:5 10
   0    1    2    3    4    5    6    7    8    9
   1    2    3    4    5    6    7    8    9   10
   2    3    4    5    6    7    8    9   10   11
   3    4    5    6    7    8    9   10   11   12
   4    5    6    7    8    9   10   11   12   13
*/

第9章 函数

函数不能返回数组。

判断素数/质数(大于1的数,除了1和它本身,没有其他因数)。可以从2 到 平方根挨个判断。

#include <stdio.h>
#include <stdbool.h>

bool isPrime(int n) {
    if (n <= 1) { return false; }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    };
    return true;
}


int main() {
    int n = 1; //默认输入0就不会开始
    while (n != 0) {
        printf("Please input a number or input 0 to exit:");
        scanf("%d", &n);
        if (isPrime(n)) {
            printf("%d is a prime number\n", n);
        } else { printf("%d is not a prime number\n", n); }
    }

    return 0;
}

/*
Please input a number or input 0 to exit:1
1 is not a prime number
Please input a number or input 0 to exit:2
2 is a prime number
Please input a number or input 0 to exit:3
3 is a prime number
Please input a number or input 0 to exit:4
4 is not a prime number
Please input a number or input 0 to exit:5
5 is a prime number
Please input a number or input 0 to exit:6
6 is not a prime number
Please input a number or input 0 to exit:7
7 is a prime number
Please input a number or input 0 to exit:0
0 is not a prime number
*/

数组可以作为函数参数,但一般需要同时传递数据的长度作为参数。

求整数数组的和:

#include <stdio.h>

int sum(int arr[],int len) {
    int sum = 0;
    for (int i = 0; i < len; i++) {sum+=arr[i];}
    return sum;
}


int main() {
    int arr[100];
    for (int i = 0; i < 100; i++) {arr[i] = i+1;}
    printf("sum of 1 to 100 is: %d",sum(arr,100));//sum of 1 to 100 is: 5050
    return 0;
}

当然更合适的方式是这样: int sum(int len,int arr[len])

如果是多维数组:

#include <stdio.h>

int sum(int rows,int columns,int arr[rows][columns]) {
    int sum = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            sum += arr[i][j] ;
        }
    }
    return sum;
}


int main() {
    int rows=4, columns=3;
    int arr[rows][columns];
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            arr[i][j] = i + j;
        }
    }
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            printf("%5d ", arr[i][j]);
        }
        printf("\n");;
    }
    printf("the sum is:%d", sum(rows,columns, arr));
    return 0;
}

/*
    0     1     2
    1     2     3
    2     3     4
    3     4     5
the sum is:30
*/

第10章 程序结构

time.h

  • NULL:空指针常量。
  • time(NULL):从1970年1月1日0时整到此时此刻所持续的秒数,某种类型的整数

stdlib.h

  • srand() — Set Seed for rand() Function
  • rand()来生成随机数。这个函数返回一个从0到RAND_MAX(一个宏,通常是32767)的整数。使用rand()函数可以非常方便地生成随机数。
  • rand_r()函数是:windows系统下rand()函数的线程安全版本,它需要通过传递一个指向种子值的指针来生成随机数。这个种子值会在每次调用后更新,因此可以在多线程环境中安全使用。参考: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/rand-s?view=msvc-170

如果seed是同一个(同一秒),那用rand生成的第一个值也是一个固定的值。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main() {
    for (int i = 0; i < 10; i++) {
        srand((unsigned) time(NULL));
        int randomNumber = rand();
        printf("%d\n", randomNumber);
    }

    return 0;
}

/*
1560
1560
1560
1560
1560
1560
1560
1560
1560
1560
*/

rand_s版本:

#include <stdio.h>
#include <time.h>
#define _CRT_RAND_S   // rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later.
#include <stdlib.h>

int main() {
    unsigned int number;
    for (int i = 0; i < 10; i++) {
        rand_s(&number);
        printf("%u\n", number);
    }

    return 0;
}

/*
2811862165
1790974904
1129791944
4255112506
3516377438
673117823
2318911026
2046185837
1311489463
2093628401
*/

正文完
 0
评论(没有评论)