第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
*/
正文完