Weekly Diary 2(week 9,2020 fall)

it2026-01-04  7

#define和const(C Primer Plus P65)

#define叫宏,可以用来代替常数值,表达式,甚至是代码段。(功能强大,但不做类型检查也,容易出错) 宏的语法为: #define 宏名称 宏值(宏定义不是C或C++严格意义上的语句,所以其行末不用加分号结束) 作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母

>>这是正确的使用方法>>const int a = 1; >>这样写是错误的>> const int a; > a = 1;

而const定义的常量具有数据类型,它的原理是限定一个变量只读。你可以把它理解成,在原有的数据类型前面加上const后,这个变量不允许修改。(我是这么理解的)

缓冲区

个人认为缓冲区十分高深,目前还在研究,透彻了之后会继续写。今天先举几个例子:

#include<stdio.h> int main() { int count = 1; printf("I can count!\n%d\n",count); printf("If you want me to continue, respond with a c.\n"); printf("If you don't want me to continue, respond with an f.\n"); while (getchar() != 'f') printf("%d\n",++count); return 0; }

这个代码,当你每次输入c,并按下return,会数两个数字,这就是因为程序再缓冲区读取了一个换行符。

它可以这样修改:

#include<stdio.h> int main() { int count = 1; printf("I can count!\n%d\n",count); printf("If you want me to continue, respond with a c.\n"); printf("If you don't want me to continue, respond with an f.\n"); while (getchar() != 'f') { printf("%d\n",++count); while (getchar() != '\n') continue; } return 0; }

周记

这里说一下,VS中会因为安全性的报错,在加上第一行宏后就可以正常运行啦! 但是一定是第一行哦!

最大公约数和最小公倍数:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a, b, min_2; printf("请输入两个数字,我会求他们的最大公约数和最小公倍数:\n"); scanf("%d%d", &a, &b); printf("这两个数字是%d,%d\n", a, b); if (a >= b) min_2 = b; else min_2 = a; int i = 1; for (i = 2; (i % a != 0 || i % b != 0); i += 1) { //printf("%d 不是\t",i); } printf("%d 和 %d 的最小公倍数是 %d. \n", a, b, i); for (i = min_2; (a % i != 0 || b % i != 0); i -= 1) { //printf("%d 不是\t", i); } printf("%d 和 %d 的最大公约数是 %d. \n", a, b, i); return 0; }

学校的oj,记录一下,其中m=n错在那里卡了好久,注意C语言判断两个数相等要用“==”,一个“=”是赋值哦!!!

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int calculate(int m, int n); int fuck(int m, int n); int main() { int m, n; scanf("%d%d",&m,&n); printf("%d",fuck(m,n)); } int fuck(int m,int n) { if (m < n && m>0 && n > 0) return 0; else if (m == n && m > 0 && n > 0) return 1; else if (m > n && m > 0 && n > 0) { int duck = calculate(m, n); return duck; } else return -1; } int calculate(int m, int n) { int s=1; int m_ = m,n_=n; for (int i = 0; i < m; i++) { s *= m_; m_-=1; } m_ = m-n; for (int i1 = 0; i1 < m - n; i1++) { s /= m_; m_ -= 1; } for (int i2 = 0; i2< n; i2++) { s /= n_; n_ -= 1; } return s; }
最新回复(0)