第1章 C语言概述
学习C有助于理解C++和C#。
第2章 C语言基本概念
- int 的最大值一般是 21亿+ ,但有些计算机上是 32767
- float 一般只能存储实际值的近似值
- scanf,printf 中的f都是 format的意思
关键字(41个):
- 数据类型(14个)
- char
- short, int, long
- float, double
- const
- enum
- signed
- struct
- typedef
- union
- unsigned
- volatile
- 控制结构(10个)
- if, else
- for, while,do
- continue,default
- goto
- return
- switch
- 其他(17个)
- extern ,register
- inline
- restrict
- sizeof
- static
- void
- _Alignas(C11)
- _Alignof(C11)
- _Atomic(C11)
- _Bool(C99)
- _Complex(C99)
- Generic(C11)
- _Imaginary(C99)
- _Noreturn(C11)
- _static_assert(C11)
- _Thread_local(C11)
字母顺序关键字:
- auto
- break
- case
- char
- const
- continue
- do
- double
- else
- enum
- extern
- float
- for
- goto
- if
- inline, c99引入,内联函数
- int
- long
- register:声明局部变量的关键字,它建议编译器尽可能将变量存储在CPU的寄存器中,以提高变量的存取速度
- restrict,c99引入
- return
- short
- signed
- sizeof
- static:隐藏、保持变量内容的持久性和默认初始化为0
- struct
- switch
- typedef:为已存在的类型创建一个新的名称
- union
- unsigned
- void
- volatile
- _Alignas(C11)
- _Alignof(C11)
- _Atomic(C11)
- _Bool(C99)
- _Complex(C99)
- Generic(C11)
- _Imaginary(C99)
- _Noreturn(C11)
- _static_assert(C11)
- _Thread_local(C11)
练习1:编写一个程序,使用printf在屏幕上显示下面的图形:
*
*
*
* *
* *
*
代码
#include <stdio.h>
int main() {
int i = -4, j = 8; //i,j 用来控制是否打印星号,i=j的时候只打印i,i和j大于零时打印对应位置的星号
while (i <= j) {
for (int k = 0; k <= j; k++) {
if (k == i) { printf("*"); } else if (k == j) { printf("*\n"); } else { printf(" "); }
}
i++;
j--;
}
printf("\n");
return 0;
}
练习2:编写一个计算球体体积的程序,其中球体半径为10m,参考公式 $v=4/3 \pi r^3$ 。注意,分数4/3应写作4.0f/3.0f。(如果分数写成4/3会产生什么结果?)
#include <stdio.h>
#define PI 3.14159265358979323846
double volume(double r) {
return (4.0 / 3.0) * PI * r * r * r;
}
int main(void) {
double r ;
printf("Enter the radius:\n");
scanf("%lf", &r);
printf("the volume is:%f\n", volume(r));
return 0;
}
/*
Enter the radius:
10
the volume is:4188.790205
*/
第3章 格式化输入/输出
- printf格式用%m.pX
- m表示打印的最小宽度,大于该宽度依然会打印出来
- .p中p为小数位数或有效数字(X为g时)
- X表示在数据显示前进行的转换操作
- d:十进制整数
- e:科学计数法
- f:十进制浮点数
- g:显示为指数或者浮点数
#include <stdio.h>
int main() {
int i=1234567890;
double d = 123456789.123456789;
printf("%20d\n", i);
printf("%-20d\n", i);
printf("%25.8f\n", d);
printf("%-25.8f\n", d);
printf("%25.8g\n", d);
printf("%-25.8g\n", d);
return 0;
}
/*
1234567890
1234567890
123456789.12345679
123456789.12345679
1.2345679e+08
1.2345679e+08
*/
不建议用scanf函数,而是读入字符然后转换
正文完