第二章:
- double类型的变量通过scanf函数赋值的时候需要使用格式字符%lf。
- 运算符%只能用于整数之间运算
- %5.1f 显示至少5位浮点数,但小数点只显示1位
第三章: - 条件运算符——三目运算符
第四章:
- 仅在复合语句中使用的变量要在该复合语句中进行声明。
/*4-2读取两个整数,计算他们之间所有整数的和*/
int main(void) {
int n1, n2, sum, min, max;
puts("请输入两个整数");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
sum = 0;
(n1 > n2) ? (max = n1) && (min = n2) : (max = n2) && (min = n1);
do {
sum += min;
min++;
} while (min <= max);
printf("%d", sum);
return 0;
}
- 复合赋值运算符:a @= b和a = a @ b效果一样
int main(void) {
int n, i;
printf("输入一个整数:");
scanf("%d", &n);
i = 1;
while (i <= n) {
if (i % 2)
putchar('+');
else
putchar('-');
i++;
}
return 0;
}
int main(void) {
int no;
printf("金字塔有几层:");
scanf("%d", &no);
for (int i = 0; i < no; i++) {
for (int j = 0; j < i; j++) {
putchar(' ');
}
for (int k = 0; k <2*(no-i)-1; k++) {
printf("%d", (i+1) % 10);
}
printf("\n");
}
return 0;
}
- 执行continue语句后,循环体的剩余部分就会被跳过。
第五章:
#define NUMBER 80
int main(void)
{
int i, j, max;
int num;
int tensu[NUMBER];
int bunpu[11] = { 0 };
printf("请输入学生人数: ");
do {
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("请输入1-%d的数: ", NUMBER);
} while (num < 1 || num > NUMBER);
printf("请输入%d人的分数。\n", num);
for (i = 0; i < num; i++)
{
printf("%2d号: ", i + 1);
do {
scanf("%d", &tensu[i]);
if (tensu[i] < 1 || tensu[i] > 100)
printf("请输入1~100的数: ");
} while (tensu[i] < 1 || tensu[i] > 100);
bunpu[tensu[i] / 10]++;
}
puts("\n---分布图---");
max = bunpu[0];
for (i = 1; i < 11; i++)
{
if (max < bunpu[i]) //找到拥有最多元素的区间max,max决定行数
max = bunpu[i];
}
for (j = max; j > 0; j--)
{
for (i = 0; i < 11; i++)
{
if (bunpu[i] >= j)
printf(" * ");
else
printf(" ");
}
putchar('\n');
}
putchar('\n');
printf("---------------------------------------------\n");
for (j = 0; j <= 100; j += 10)
{
printf(" %d ", j);
}
return 0;
}
- 多维数组是以数组为元素的数组
int main(void) {
int a1[4][3], a2[3][4], i, j, c[4][4];
printf("请输入4行3列矩阵:\n");
for (i = 0; i < 4; i++) {
printf("第%d行:", i + 1);
for (j = 0; j < 3; j++) {
scanf("%d", &a1[i][j]);
}
}
printf("请输入3行4列矩阵:\n");
for (i= 0; i < 3; i++) {
printf("第%d行:", i + 1);
for (j = 0; j < 4; j++) {
scanf("%d", &a2[i][j]);
}
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
c[i][j] = 0;
for (int k = 0; k < 3; k++) {
c[i][j] += (a1[i][k] * a2[k][j]);
}
}
}
printf("矩阵乘积为:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
printf("%2d ",c[i][j]);
}
printf("\n");
}
return 0;
}
- 调用函数时使用的实参既可以是变量,也可以是常量。
- 实参和形参的名字可以相同。
第六章:
- const int v[]——声明不改变所接收的数组的元素的值。
- 如果两个同名变量分别拥有文件作用域和块作用域,块作用域变量“可见”,文件作用域变量会被“隐藏”起来。
第七章:
算数类型:
unsigned set(unsigned x, int pos, int n) {
unsigned i = 0;
for (; n > 0; n--) {
i += pow(2, n - 1);//累加2的n-1次幂,得到n个1
}
return x | (i << pos);
}
unsigned reset(unsigned x, int pos, int n) {
unsigned i = 0;
for (; n > 0; n--) {
i += pow(2, n - 1);//累加2的n-1次幂,得到n个1
}
return x & ~(i << pos);//移位取反后得到n个0
}
unsigned inverse(unsigned x, int pos, int n) {
unsigned i = 0;
for (; n > 0; n--) {
i += pow(2, n - 1);//累加2的n-1次幂,得到n个1
}
return x ^(i << pos);//按位异或,得到取反的效果
}
int main(void) {
unsigned int x;
int pos, n;
printf("请输入无符号整数:");
scanf("%u", &x);
printf("请输入第几位:");
scanf("%d", &pos);
printf("请输入几位:");
scanf("%d", &n);
printf("第%d位设为1后的值:%u\n", pos, set(x, pos, n));
printf("第%d位设为0后的值:%u\n", pos, reset(x, pos, n));
printf("第%d位取反后的值:%u\n", pos, inverse(x, pos, n));
return 0;
}
第八章:
- 如果宏定义中要代换两个以上的表达式,则使用逗号运算符连接,使其在语法上构成一个表达式。