【CSAPP】程序是如何跑起来的
本文基于《深入理解计算机系统》第一章内容,通过一个简单的 C 程序,深入剖析计算机系统的工作原理。 核心概念:什么是计算机系统? 计算机系统 = 硬件 + 软件 系统中所有信息(代码、数据等)均以比特表示。 由 ASCII 字符构成的人类可读文件称为文本文件,除文本文件外的所有其他文件都称为二进制文件。 从源代码到可执行文件:一个完整的转换过程 以下通过一个简单的C程序 hello.c,展示其通过编译系统转化为可执行文件的过程,揭示从高级语言到机器代码的转换。 示例程序:hello.c(文本) 以下是一个简单的C程序,打印“hello world”并返回0: #include <stdio.h> int main() { printf("hello world\n"); return 0; } 编译系统流程 编译系统将hello.c转化为可执行文件hello.exe,经历以下四个阶段: 预处理:将头文件和宏展开,生成hello.i。 编译:将C代码翻译为汇编代码,生成hello.s。 汇编:将汇编代码转化为机器码,生成hello.o。 链接:将hello.o与库文件(如printf.o)合并,生成可执行文件hello.exe。 第一阶段:预处理 Preprocessing 转换:hello.c → hello.i(文本文件) 核心工作: 处理 #include 指令,将头文件内容插入源文件 展开宏定义(#define) 处理条件编译指令(#ifdef, #ifndef) 删除注释 输出示例: /** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _INC_STDIO #define _INC_STDIO #include <corecrt_stdio_config.h> #pragma pack(push,_CRT_PACKING) #pragma push_macro("snprintf") #undef snprintf #pragma push_macro("vsnprintf") #undef vsnprintf #pragma push_macro("snwprintf") #undef snwprintf #pragma push_macro("vsnwprintf") #undef vsnwprintf #ifdef __cplusplus extern "C" { #endif #define BUFSIZ 512 #define _NFILE _NSTREAM_ #define _NSTREAM_ 512 #define _IOB_ENTRIES 20 #define EOF (-1) #ifndef _FILE_DEFINED struct _iobuf { #ifdef _UCRT void *_Placeholder; #else char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; #endif }; typedef struct _iobuf FILE; #define _FILE_DEFINED #endif #ifdef _POSIX_ #define _P_tmpdir "/" #define _wP_tmpdir L"/" #else #define _P_tmpdir "\\" #define _wP_tmpdir L"\\" #endif #ifdef _UCRT #define L_tmpnam 260 #else #define L_tmpnam (sizeof(_P_tmpdir) + 12) #endif #ifdef _POSIX_ #define L_ctermid 9 #define L_cuserid 32 #endif #define SEEK_CUR 1 #define SEEK_END 2 #define SEEK_SET 0 #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 #define FILENAME_MAX 260 #define FOPEN_MAX 20 #define _SYS_OPEN 20 #ifdef _UCRT #define TMP_MAX 2147483647 #else #define TMP_MAX 32767 #endif #ifndef NULL #ifdef __cplusplus #ifndef _WIN64 #define NULL 0 #else #define NULL 0LL #endif /* W64 */ #else #define NULL ((void *)0) #endif #endif #include <_mingw_off_t.h> _CRTIMP FILE *__cdecl __acrt_iob_func(unsigned index); #ifndef _STDIO_DEFINED _CRTIMP FILE *__cdecl __iob_func(void); #define _iob __iob_func() #endif #ifndef _FPOS_T_DEFINED #define _FPOS_T_DEFINED #undef _FPOSOFF #if (!defined(NO_OLDNAMES) || defined(__GNUC__)) __MINGW_EXTENSION typedef __int64 fpos_t; #define _FPOSOFF(fp) ((long)(fp)) #else __MINGW_EXTENSION typedef long long fpos_t; #define _FPOSOFF(fp) ((long)(fp)) #endif #endif #ifndef _STDSTREAM_DEFINED #define _STDSTREAM_DEFINED #define stdin (__acrt_iob_func(0)) #define stdout (__acrt_iob_func(1)) #define stderr (__acrt_iob_func(2)) #endif #define _IOFBF 0x0000 #define _IOLBF 0x0040 #define _IONBF 0x0004 #ifndef _UCRT #define _IOREAD 0x0001 #define _IOWRT 0x0002 #define _IOMYBUF 0x0008 #define _IOEOF 0x0010 #define _IOERR 0x0020 #define _IOSTRG 0x0040 #define _IORW 0x0080 #ifdef _POSIX_ #define _IOAPPEND 0x0200 #endif #endif /* used with _set_output_format which is not present in ucrt */ #ifndef _UCRT #define _TWO_DIGIT_EXPONENT 0x1 #endif #if __MINGW_FORTIFY_LEVEL > 0 __mingw_bos_declare; #endif #ifndef _STDIO_DEFINED extern __MINGW_GNU_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...); extern __MINGW_GNU_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp); extern __MINGW_GNU_SCANF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_scanf(const char * __restrict__ _Format,...); extern __MINGW_GNU_SCANF(1, 0) __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_vscanf(const char * __restrict__ Format, va_list argp); extern __MINGW_GNU_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...); extern __MINGW_GNU_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp); extern __MINGW_GNU_PRINTF(3, 0) __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_vsnprintf(char * __restrict__ _DstBuf,size_t _MaxCount,const char * __restrict__ _Format, va_list _ArgList); extern __MINGW_GNU_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_snprintf(char * __restrict__ s, size_t n, const char * __restrict__ format, ...); extern __MINGW_GNU_PRINTF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_printf(const char * __restrict__ , ... ) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(1, 0) __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_vprintf (const char * __restrict__ , va_list) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_fprintf (FILE * __restrict__ , const char * __restrict__ , ...) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vfprintf (FILE * __restrict__ , const char * __restrict__ , va_list) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_sprintf (char * __restrict__ , const char * __restrict__ , ...) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vsprintf (char * __restrict__ , const char * __restrict__ , va_list) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 3) __attribute__((nonnull (1,2))) int __cdecl __mingw_asprintf(char ** __restrict__ , const char * __restrict__ , ...) __MINGW_NOTHROW; extern __MINGW_GNU_PRINTF(2, 0) __attribute__((nonnull (1,2))) int __cdecl __mingw_vasprintf(char ** __restrict__ , const char * __restrict__ , va_list) __MINGW_NOTHROW; extern __MINGW_MS_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(sscanf); extern __MINGW_MS_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vsscanf(const char * __restrict__ _Str,const char * __restrict__ _Format,va_list argp) __MINGW_ASM_CALL(vsscanf); extern __MINGW_MS_SCANF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_scanf(const char * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(scanf); extern __MINGW_MS_SCANF(1, 0) __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_vscanf(const char * __restrict__ _Format,va_list argp) __MINGW_ASM_CALL(vscanf); extern __MINGW_MS_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(fscanf); extern __MINGW_MS_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vfscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list argp) __MINGW_ASM_CALL(vfscanf); extern __MINGW_MS_PRINTF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_printf(const char * __restrict__ , ... ) __MINGW_UCRT_ASM_CALL(printf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(1, 0) __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_vprintf (const char * __restrict__ , va_list) __MINGW_UCRT_ASM_CALL(vprintf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_fprintf (FILE * __restrict__ , const char * __restrict__ , ...) __MINGW_UCRT_ASM_CALL(fprintf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vfprintf (FILE * __restrict__ , const char * __restrict__ , va_list) __MINGW_UCRT_ASM_CALL(vfprintf) __MINGW_NOTHROW ; extern __MINGW_MS_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_sprintf (char * __restrict__ , const char * __restrict__ , ...) __MINGW_UCRT_ASM_CALL(sprintf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vsprintf (char * __restrict__ , const char * __restrict__ , va_list) __MINGW_UCRT_ASM_CALL(vsprintf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_snprintf (char * __restrict__ , size_t , const char * __restrict__ , ...) __MINGW_UCRT_ASM_CALL(snprintf) __MINGW_NOTHROW; extern __MINGW_MS_PRINTF(3, 0) __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_vsnprintf (char * __restrict__ , size_t , const char * __restrict__ , va_list) __MINGW_UCRT_ASM_CALL(vsnprintf) __MINGW_NOTHROW; #ifdef _UCRT int __cdecl __stdio_common_vsprintf(unsigned __int64 options, char *str, size_t len, const char *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vfprintf(unsigned __int64 options, FILE *file, const char *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vsscanf(unsigned __int64 options, const char *input, size_t length, const char *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vfscanf(unsigned __int64 options, FILE *file, const char *format, _locale_t locale, va_list valist); #endif #undef __MINGW_PRINTF_FORMAT #undef __MINGW_SCANF_FORMAT #if defined(__clang__) #define __MINGW_PRINTF_FORMAT __printf__ #define __MINGW_SCANF_FORMAT __scanf__ #elif defined(_UCRT) || __USE_MINGW_ANSI_STDIO #define __MINGW_PRINTF_FORMAT __gnu_printf__ #define __MINGW_SCANF_FORMAT __gnu_scanf__ #else #define __MINGW_PRINTF_FORMAT __ms_printf__ #define __MINGW_SCANF_FORMAT __ms_scanf__ #endif #if __USE_MINGW_ANSI_STDIO && !defined(_CRTBLD) /* * User has expressed a preference for C99 conformance... */ #ifdef _GNU_SOURCE __MINGW_GNU_PRINTF(2, 3) __attribute__((nonnull (1,2))) int asprintf(char **__ret, const char *__format, ...) __MINGW_ASM_CALL(__mingw_asprintf); __MINGW_GNU_PRINTF(2, 0) __attribute__((nonnull (1,2))) int vasprintf(char **__ret, const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vasprintf); #endif /* _GNU_SOURCE */ /* There seems to be a bug about builtins and static overrides of them in g++. So we need to do here some trickery. */ #ifdef __cplusplus extern "C++" { #endif __MINGW_GNU_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int sscanf(const char *__source, const char *__format, ...) __MINGW_ASM_CALL(__mingw_sscanf); __MINGW_GNU_SCANF(1, 2) __MINGW_ATTRIB_NONNULL(1) int scanf(const char *__format, ...) __MINGW_ASM_CALL(__mingw_scanf); __MINGW_GNU_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int fscanf(FILE *__stream, const char *__format, ...) __MINGW_ASM_CALL(__mingw_fscanf); #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #endif __MINGW_GNU_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vsscanf (const char *__source, const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vsscanf); __MINGW_GNU_SCANF(1, 0) __MINGW_ATTRIB_NONNULL(1) int vscanf(const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vscanf); __MINGW_GNU_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vfscanf (FILE *__stream, const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vfscanf); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #endif /* __NO_ISOCEXT */ __MINGW_GNU_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int fprintf (FILE *__stream, const char *__format, ...) __MINGW_ASM_CALL(__mingw_fprintf); __MINGW_GNU_PRINTF(1, 2) __MINGW_ATTRIB_NONNULL(1) int printf (const char *__format, ...) __MINGW_ASM_CALL(__mingw_printf); __MINGW_GNU_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int sprintf (char *__stream, const char *__format, ...) __MINGW_ASM_CALL(__mingw_sprintf); #if __MINGW_FORTIFY_VA_ARG __mingw_bos_extern_ovr __MINGW_GNU_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int sprintf (char *__stream, const char *__format, ...) { if (__mingw_bos_known(__stream)) { int __retval = __mingw_snprintf( __stream, __mingw_bos(__stream, 1), __format, __builtin_va_arg_pack() ); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } return __mingw_sprintf( __stream, __format, __builtin_va_arg_pack() ); } #endif /* __MINGW_FORTIFY_VA_ARG */ __MINGW_GNU_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vfprintf (FILE *__stream, const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vfprintf); __MINGW_GNU_PRINTF(1, 0) __MINGW_ATTRIB_NONNULL(1) int vprintf (const char *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vprintf); __mingw_bos_ovr __MINGW_GNU_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vsprintf (char *__stream, const char *__format, __builtin_va_list __local_argv) { #if __MINGW_FORTIFY_LEVEL > 0 if (__mingw_bos_known(__stream)) { int __retval = __mingw_vsnprintf( __stream, __mingw_bos(__stream, 1), __format, __local_argv ); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } #endif return __mingw_vsprintf( __stream, __format, __local_argv ); } /* #ifndef __NO_ISOCEXT */ /* externs in libmingwex.a */ __MINGW_GNU_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int snprintf (char *__stream, size_t __n, const char *__format, ...) __MINGW_ASM_CALL(__mingw_snprintf); #if __MINGW_FORTIFY_VA_ARG __mingw_bos_extern_ovr __MINGW_GNU_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int snprintf (char *__stream, size_t __n, const char *__format, ...) { __mingw_bos_ptr_chk_warn(__stream, __n, 1); return __mingw_snprintf( __stream, __n, __format, __builtin_va_arg_pack() ); } #endif /* __MINGW_FORTIFY_VA_ARG */ __mingw_bos_ovr __MINGW_GNU_PRINTF(3, 0) __MINGW_ATTRIB_NONNULL(3) int vsnprintf (char *__stream, size_t __n, const char *__format, __builtin_va_list __local_argv) { #if __MINGW_FORTIFY_LEVEL > 0 __mingw_bos_ptr_chk_warn(__stream, __n, 1); #endif return __mingw_vsnprintf( __stream, __n, __format, __local_argv ); } /* Override __builtin_printf-routines ... Kludge for libstdc++ ...*/ #define __builtin_vsnprintf __mingw_vsnprintf #define __builtin_vsprintf __mingw_vsprintf /* #endif */ /* __NO_ISOCEXT */ #ifdef __cplusplus } #endif #else /* !__USE_MINGW_ANSI_STDIO */ #undef __builtin_vsnprintf #undef __builtin_vsprintf /* * Default configuration: simply direct all calls to MSVCRT... */ #ifdef _UCRT #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #endif __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 3))) __MINGW_ATTRIB_NONNULL(2) int __cdecl fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...); __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 1, 2))) __MINGW_ATTRIB_NONNULL(1) int __cdecl printf(const char * __restrict__ _Format,...); __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 3))) __MINGW_ATTRIB_NONNULL(2) int __cdecl sprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 0))) __MINGW_ATTRIB_NONNULL(2) int __cdecl vfprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list _ArgList); __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 1, 0))) __MINGW_ATTRIB_NONNULL(1) int __cdecl vprintf(const char * __restrict__ _Format,va_list _ArgList); __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 0))) __MINGW_ATTRIB_NONNULL(2) int __cdecl vsprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_ATTRIB_DEPRECATED_SEC_WARN __attribute__((__format__ (__MINGW_SCANF_FORMAT, 2, 3))) __MINGW_ATTRIB_NONNULL(2) int __cdecl fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...); __MINGW_ATTRIB_DEPRECATED_SEC_WARN __attribute__((__format__ (__MINGW_SCANF_FORMAT, 1, 2))) __MINGW_ATTRIB_NONNULL(1) int __cdecl scanf(const char * __restrict__ _Format,...); __MINGW_ATTRIB_DEPRECATED_SEC_WARN __attribute__((__format__ (__MINGW_SCANF_FORMAT, 2, 3))) __MINGW_ATTRIB_NONNULL(2) int __cdecl sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...); #ifdef _GNU_SOURCE __attribute__ ((__format__ (__MINGW_PRINTF_FORMAT, 2, 0))) int __cdecl vasprintf(char ** __restrict__ _Ret,const char * __restrict__ _Format,va_list _Args); __attribute__ ((__format__ (__MINGW_PRINTF_FORMAT, 2, 3))) int __cdecl asprintf(char ** __restrict__ _Ret,const char * __restrict__ _Format,...); #endif /*_GNU_SOURCE*/ __attribute__((__format__ (__MINGW_SCANF_FORMAT, 2, 0))) __MINGW_ATTRIB_NONNULL(2) int vfscanf (FILE *__stream, const char *__format, __builtin_va_list __local_argv); __attribute__((__format__ (__MINGW_SCANF_FORMAT, 2, 0))) __MINGW_ATTRIB_NONNULL(2) int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv); __attribute__((__format__ (__MINGW_SCANF_FORMAT, 1, 0))) __MINGW_ATTRIB_NONNULL(1) int vscanf(const char *__format, __builtin_va_list __local_argv); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #else __MINGW_MS_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...); __MINGW_MS_PRINTF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl printf(const char * __restrict__ _Format,...); __MINGW_MS_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl sprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_MS_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl vfprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list _ArgList); __MINGW_MS_PRINTF(1, 0) __MINGW_ATTRIB_NONNULL(1) int __cdecl vprintf(const char * __restrict__ _Format,va_list _ArgList); __MINGW_MS_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int __cdecl vsprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_MS_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_MS_SCANF(1, 2) __MINGW_ATTRIB_NONNULL(1) int __cdecl scanf(const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_MS_SCANF(2, 3) __MINGW_ATTRIB_NONNULL(2) int __cdecl sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #ifdef _GNU_SOURCE int __cdecl vasprintf(char ** __restrict__ __ret,const char * __restrict__ __format,va_list __ap) __attribute__ ((format (__MINGW_PRINTF_FORMAT, 2, 0))); int __cdecl asprintf(char ** __restrict__ __ret,const char * __restrict__ __format,...) __attribute__ ((format (__MINGW_PRINTF_FORMAT, 2, 3))); #endif /*_GNU_SOURCE*/ #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #endif __MINGW_MS_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vfscanf (FILE *__stream, const char *__format, __builtin_va_list __local_argv); __MINGW_MS_SCANF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv); __MINGW_MS_SCANF(1, 0) __MINGW_ATTRIB_NONNULL(1) int vscanf(const char *__format, __builtin_va_list __local_argv); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #endif /* __NO_ISOCEXT */ #endif /* _UCRT */ #endif /* __USE_MINGW_ANSI_STDIO */ _CRTIMP int __cdecl _filbuf(FILE *_File); _CRTIMP int __cdecl _flsbuf(int _Ch,FILE *_File); #ifdef _POSIX_ _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode); #else _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode,int _ShFlag); #endif void __cdecl clearerr(FILE *_File); int __cdecl fclose(FILE *_File); _CRTIMP int __cdecl _fcloseall(void); #ifdef _POSIX_ FILE *__cdecl fdopen(int _FileHandle,const char *_Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005; #else _CRTIMP FILE *__cdecl _fdopen(int _FileHandle,const char *_Mode); #endif int __cdecl feof(FILE *_File); int __cdecl ferror(FILE *_File); int __cdecl fflush(FILE *_File); int __cdecl fgetc(FILE *_File); _CRTIMP int __cdecl _fgetchar(void); int __cdecl fgetpos(FILE * __restrict__ _File ,fpos_t * __restrict__ _Pos); /* 64bit only, no 32bit version */ int __cdecl fgetpos64(FILE * __restrict__ _File ,fpos_t * __restrict__ _Pos); /* fgetpos already 64bit */ char *__cdecl fgets(char * __restrict__ _Buf,int _MaxCount,FILE * __restrict__ _File); _CRTIMP int __cdecl _fileno(FILE *_File); #ifdef _POSIX_ int __cdecl fileno(FILE *_File) __MINGW_ATTRIB_DEPRECATED_MSVC2005; #endif #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma push_macro("_tempnam") #undef _tempnam #endif _CRTIMP char *__cdecl _tempnam(const char *_DirName,const char *_FilePrefix); #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma pop_macro("_tempnam") #endif _CRTIMP int __cdecl _flushall(void); FILE *__cdecl fopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; FILE *__cdecl fopen64(const char * __restrict__ filename,const char * __restrict__ mode); int __cdecl fputc(int _Ch,FILE *_File); _CRTIMP int __cdecl _fputchar(int _Ch); int __cdecl fputs(const char * __restrict__ _Str,FILE * __restrict__ _File); size_t __cdecl fread(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File); FILE *__cdecl freopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode,FILE * __restrict__ _File) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; FILE *__cdecl freopen64(const char * __restrict__ _Filename,const char * __restrict__ _Mode,FILE * __restrict__ _File); int __cdecl fsetpos(FILE *_File,const fpos_t *_Pos); int __cdecl fsetpos64(FILE *_File,const fpos_t *_Pos); /* fsetpos already 64bit */ int __cdecl fseek(FILE *_File,long _Offset,int _Origin); long __cdecl ftell(FILE *_File); _CRTIMP int __cdecl _fseeki64(FILE *_File,__int64 _Offset,int _Origin); _CRTIMP __int64 __cdecl _ftelli64(FILE *_File); _CRTIMP int __cdecl fseeko(FILE *_File, _off_t _Offset, int _Origin); _CRTIMP int __cdecl fseeko64(FILE *_File, _off64_t _Offset, int _Origin); _CRTIMP _off_t __cdecl ftello(FILE *_File); _CRTIMP _off64_t __cdecl ftello64(FILE *_File); #ifndef _FILE_OFFSET_BITS_SET_FSEEKO #define _FILE_OFFSET_BITS_SET_FSEEKO #if (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) #define fseeko fseeko64 #endif /* (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) */ #endif /* _FILE_OFFSET_BITS_SET_FSEEKO */ #ifndef _FILE_OFFSET_BITS_SET_FTELLO #define _FILE_OFFSET_BITS_SET_FTELLO #if (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) #define ftello ftello64 #endif /* (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) */ #endif /* _FILE_OFFSET_BITS_SET_FTELLO */ size_t __cdecl fwrite(const void * __restrict__ _Str,size_t _Size,size_t _Count,FILE * __restrict__ _File); int __cdecl getc(FILE *_File); int __cdecl getchar(void); _CRTIMP int __cdecl _getmaxstdio(void); char *__cdecl gets(char *_Buffer) __attribute__((__warning__("Using gets() is always unsafe - use fgets() instead"))); int __cdecl _getw(FILE *_File); #ifndef _CRT_PERROR_DEFINED #define _CRT_PERROR_DEFINED void __cdecl perror(const char *_ErrMsg); #endif #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP _CRTIMP int __cdecl _pclose(FILE *_File); _CRTIMP FILE *__cdecl _popen(const char *_Command,const char *_Mode); #if !defined(NO_OLDNAMES) && !defined(popen) #define popen _popen #define pclose _pclose #endif #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */ int __cdecl putc(int _Ch,FILE *_File); int __cdecl putchar(int _Ch); int __cdecl puts(const char *_Str); _CRTIMP int __cdecl _putw(int _Word,FILE *_File); #ifndef _CRT_DIRECTORY_DEFINED #define _CRT_DIRECTORY_DEFINED int __cdecl remove(const char *_Filename); int __cdecl rename(const char *_OldFilename,const char *_NewFilename); _CRTIMP int __cdecl _unlink(const char *_Filename); #ifndef NO_OLDNAMES int __cdecl unlink(const char *_Filename) __MINGW_ATTRIB_DEPRECATED_MSVC2005; #endif #endif void __cdecl rewind(FILE *_File); _CRTIMP int __cdecl _rmtmp(void); void __cdecl setbuf(FILE * __restrict__ _File,char * __restrict__ _Buffer) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; _CRTIMP int __cdecl _setmaxstdio(int _Max); _CRTIMP unsigned int __cdecl _set_output_format(unsigned int _Format); _CRTIMP unsigned int __cdecl _get_output_format(void); int __cdecl setvbuf(FILE * __restrict__ _File,char * __restrict__ _Buf,int _Mode,size_t _Size); #ifdef _UCRT __MINGW_ATTRIB_PURE __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 1, 2))) __MINGW_ATTRIB_NONNULL(1) int __cdecl _scprintf(const char * __restrict__ _Format,...); __attribute__((__format__ (__MINGW_SCANF_FORMAT, 3, 4))) __MINGW_ATTRIB_NONNULL(3) int __cdecl _snscanf(const char * __restrict__ _Src,size_t _MaxCount,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #else __MINGW_ATTRIB_PURE __MINGW_MS_PRINTF(1, 2) __MINGW_ATTRIB_NONNULL(1) _CRTIMP int __cdecl _scprintf(const char * __restrict__ _Format,...); __MINGW_MS_SCANF(3, 4) __MINGW_ATTRIB_NONNULL(3) _CRTIMP int __cdecl _snscanf(const char * __restrict__ _Src,size_t _MaxCount,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #endif __MINGW_ATTRIB_PURE __MINGW_MS_PRINTF(1, 0) __MINGW_ATTRIB_NONNULL(1) _CRTIMP int __cdecl _vscprintf(const char * __restrict__ _Format,va_list _ArgList); FILE *__cdecl tmpfile(void) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; FILE *__cdecl tmpfile64(void); char *__cdecl tmpnam(char *_Buffer); int __cdecl ungetc(int _Ch,FILE *_File); #ifdef _UCRT __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 0))) __MINGW_ATTRIB_NONNULL(3) int __cdecl _vsnprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 4))) __MINGW_ATTRIB_NONNULL(3) int __cdecl _snprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #else __MINGW_MS_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) _CRTIMP int __cdecl _snprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; __MINGW_MS_PRINTF(3, 0) __MINGW_ATTRIB_NONNULL(3) _CRTIMP int __cdecl _vsnprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #endif #if __MINGW_FORTIFY_LEVEL > 0 char * __cdecl __gets_chk(char *, size_t); char * __cdecl __mingw_call_gets_warn(char *) __MINGW_ASM_CALL(gets) __attribute__((__warning__("Using gets() is always unsafe - use fgets() instead"))); char * __cdecl __mingw_call_fgets(char * __restrict__, int, FILE * __restrict__) __MINGW_ASM_CALL(fgets); size_t __cdecl __mingw_call_fread(void * __restrict__, size_t, size_t, FILE * __restrict__) __MINGW_ASM_CALL(fread); char * __cdecl __mingw_call_tmpnam(char *) __MINGW_ASM_CALL(tmpnam); __mingw_bos_extern_ovr char * gets(char * __dst) { if (__mingw_bos_known(__dst)) return __gets_chk(__dst, __mingw_bos(__dst, 1)); return __mingw_call_gets_warn(__dst); } __mingw_bos_extern_ovr char * fgets(char * __restrict__ __dst, int __n, FILE * __restrict__ __f) { __mingw_bos_ptr_chk_warn(__dst, __n, 1); return __mingw_call_fgets(__dst, __n, __f); } __mingw_bos_extern_ovr size_t fread(void * __restrict__ __dst, size_t __sz, size_t __n, FILE * __restrict__ __f) { __mingw_bos_ptr_chk_warn(__dst, __sz * __n, 0); return __mingw_call_fread(__dst, __sz, __n, __f); } __mingw_bos_extern_ovr char * tmpnam(char * __dst) { __mingw_bos_ptr_chk_warn(__dst, L_tmpnam, 1); return __mingw_call_tmpnam(__dst); } #endif /* __MINGW_FORTIFY_LEVEL > 0 */ #if __USE_MINGW_ANSI_STDIO == 0 #ifdef _UCRT #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #endif __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 0))) __MINGW_ATTRIB_NONNULL(3) int vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv); __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 4))) __MINGW_ATTRIB_NONNULL(3) int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...); #if __MINGW_FORTIFY_LEVEL > 0 int __cdecl __mingw_call_vsprintf (char * __restrict__ __stream, const char * __restrict__ __format, va_list __local_argv) __MINGW_ASM_CALL(vsprintf); int __cdecl __mingw_call_vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv) __MINGW_ASM_CALL(vsnprintf); __mingw_bos_extern_ovr __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 0))) __MINGW_ATTRIB_NONNULL(3) int vsprintf (char * __restrict__ __stream, const char * __restrict__ __format, va_list __local_argv) { if (__mingw_bos_known(__stream)) { int __retval = __mingw_call_vsnprintf (__stream, __mingw_bos(__stream, 1), __format, __local_argv); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } return __mingw_call_vsprintf(__stream, __format, __local_argv); } __mingw_bos_extern_ovr __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 0))) __MINGW_ATTRIB_NONNULL(3) int vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv) { __mingw_bos_ptr_chk_warn(__stream, __n, 1); return __mingw_call_vsnprintf (__stream, __n, __format, __local_argv); } #endif /* __MINGW_FORTIFY_LEVEL > 0 */ #if __MINGW_FORTIFY_VA_ARG int __cdecl __mingw_call_sprintf (char * __restrict__ __stream, const char * __restrict__ __Format, ...) __MINGW_ASM_CALL(sprintf); int __cdecl __mingw_call_snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...) __MINGW_ASM_CALL(snprintf); __mingw_bos_extern_ovr __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 2, 3))) __MINGW_ATTRIB_NONNULL(2) int sprintf (char * __restrict__ __stream, const char * __restrict__ __format, ...) { if (__mingw_bos_known(__stream)) { int __retval = __mingw_call_snprintf (__stream, __mingw_bos(__stream, 1), __format, __builtin_va_arg_pack()); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } return __mingw_call_sprintf (__stream, __format, __builtin_va_arg_pack()); } __mingw_bos_extern_ovr __attribute__((__format__ (__MINGW_PRINTF_FORMAT, 3, 4))) __MINGW_ATTRIB_NONNULL(3) int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...) { __mingw_bos_ptr_chk_warn(__stream, __n, 1); return __mingw_call_snprintf (__stream, __n, __format, __builtin_va_arg_pack()); } #endif /* __MINGW_FORTIFY_VA_ARG */ #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #else /* !_UCRT */ /* this is here to deal with software defining * vsnprintf as _vsnprintf, eg. libxml2. */ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #endif __mingw_bos_ovr __MINGW_MS_PRINTF(3, 0) __MINGW_ATTRIB_NONNULL(3) int vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv) { #if __MINGW_FORTIFY_LEVEL > 0 __mingw_bos_ptr_chk_warn(__stream, __n, 1); #endif if (__builtin_constant_p(__n) && __n == 0) return _vscprintf(__format, __local_argv); return __ms_vsnprintf (__stream, __n, __format, __local_argv); } #ifndef __NO_ISOCEXT #if __MINGW_FORTIFY_VA_ARG int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...) __MINGW_ASM_CALL(__ms_snprintf); __mingw_bos_extern_ovr __MINGW_MS_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...) { __mingw_bos_ptr_chk_warn(__stream, __n, 1); if (__builtin_constant_p(__n) && __n == 0) return _scprintf(__format, __builtin_va_arg_pack()); return __ms_snprintf(__stream, __n, __format, __builtin_va_arg_pack()); } #else /* !__MINGW_FORTIFY_VA_ARG */ __mingw_ovr __MINGW_MS_PRINTF(3, 4) __MINGW_ATTRIB_NONNULL(3) int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...) { int __retval; __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format ); if (__builtin_constant_p(__n) && __n == 0) __retval = _vscprintf(__format, __local_argv); else __retval = __ms_vsnprintf (__stream, __n, __format, __local_argv); __builtin_va_end( __local_argv ); return __retval; } #endif /* !__MINGW_FORTIFY_VA_ARG */ #endif /* !__NO_ISOCEXT */ #if __MINGW_FORTIFY_VA_ARG int __cdecl __mingw_call_ms_sprintf(char * __restrict__, const char * __restrict__, ...) __MINGW_ASM_CALL(sprintf); __mingw_bos_extern_ovr __MINGW_MS_PRINTF(2, 3) __MINGW_ATTRIB_NONNULL(2) int sprintf (char * __restrict__ __stream, const char * __restrict__ __format, ...) { if (__mingw_bos_known(__stream)) { int __retval = __ms_snprintf( __stream, __mingw_bos(__stream, 1), __format, __builtin_va_arg_pack() ); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } return __mingw_call_ms_sprintf( __stream, __format, __builtin_va_arg_pack() ); } #endif /* __MINGW_FORTIFY_VA_ARG */ #if __MINGW_FORTIFY_LEVEL > 0 int __cdecl __mingw_call_ms_vsprintf(char * __restrict__, const char * __restrict__, va_list) __MINGW_ASM_CALL(vsprintf); __mingw_bos_extern_ovr __MINGW_MS_PRINTF(2, 0) __MINGW_ATTRIB_NONNULL(2) int vsprintf (char * __restrict__ __stream, const char * __restrict__ __format, va_list __local_argv) { if (__mingw_bos_known(__stream)) { int __retval = __ms_vsnprintf( __stream, __mingw_bos(__stream, 1), __format, __local_argv ); if (__retval >= 0) __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1, 1); return __retval; } return __mingw_call_ms_vsprintf( __stream, __format, __local_argv ); } #endif /* __MINGW_FORTIFY_LEVEL > 0 */ #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #endif /* _UCRT */ #endif /* __USE_MINGW_ANSI_STDIO */ _CRTIMP int __cdecl _set_printf_count_output(int _Value); _CRTIMP int __cdecl _get_printf_count_output(void); #ifndef _WSTDIO_DEFINED #define _WSTDIO_DEFINED /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...); /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ Format,va_list argp); /* __attribute__((__format__ (gnu_wscanf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_wscanf(const wchar_t * __restrict__ _Format,...); /* __attribute__((__format__ (gnu_wscanf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_vwscanf(const wchar_t * __restrict__ Format, va_list argp); /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vfwscanf (FILE * __restrict__ fp, const wchar_t * __restrict__ Format,va_list argp); /* __attribute__((__format__ (gnu_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); /* __attribute__((__format__ (gnu_wprintf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_wprintf(const wchar_t * __restrict__ _Format,...); /* __attribute__((__format__ (gnu_wprintf, 2, 0))) */__MINGW_ATTRIB_NONNULL(2) int __cdecl __mingw_vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList); /*__attribute__((__format__ (gnu_wprintf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __mingw_vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList); /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...); /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list); /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_swprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , ...); /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __mingw_vswprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ ,va_list); /* __attribute__((__format__ (ms_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(swscanf); /* __attribute__((__format__ (ms_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vswscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,va_list) __MINGW_ASM_CALL(vswscanf); /* __attribute__((__format__ (ms_wscanf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_wscanf(const wchar_t * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(wscanf); /* __attribute__((__format__ (ms_wscanf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_vwscanf(const wchar_t * __restrict__ _Format, va_list) __MINGW_ASM_CALL(vwscanf); /* __attribute__((__format__ (ms_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(fwscanf); /* __attribute__((__format__ (ms_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vfwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list) __MINGW_ASM_CALL(vfwscanf); /* __attribute__((__format__ (ms_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); /* No __MINGW_UCRT_ASM_CALL for __ms_fwprintf; this is provided as an * actual function in the ucrt import libraries. */ /* __attribute__((__format__ (ms_wprintf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_wprintf(const wchar_t * __restrict__ _Format,...) __MINGW_UCRT_ASM_CALL(wprintf); /* __attribute__((__format__ (ms_wprintf, 2, 0))) */__MINGW_ATTRIB_NONNULL(2) int __cdecl __ms_vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList) __MINGW_UCRT_ASM_CALL(vfwprintf); /*__attribute__((__format__ (ms_wprintf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int __cdecl __ms_vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList) __MINGW_UCRT_ASM_CALL(vwprintf); /* __attribute__((__format__ (ms_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_swprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , ...) __MINGW_UCRT_ASM_CALL(swprintf); /* __attribute__((__format__ (ms_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_vswprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ ,va_list) __MINGW_UCRT_ASM_CALL(vswprintf); /* __attribute__((__format__ (ms_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_snwprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , ...) __MINGW_UCRT_ASM_CALL(snwprintf); /* __attribute__((__format__ (ms_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int __cdecl __ms_vsnwprintf(wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list) __MINGW_UCRT_ASM_CALL(vsnwprintf); #ifdef _UCRT int __cdecl __stdio_common_vswprintf(unsigned __int64 options, wchar_t *str, size_t len, const wchar_t *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vfwprintf(unsigned __int64 options, FILE *file, const wchar_t *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vswscanf(unsigned __int64 options, const wchar_t *input, size_t length, const wchar_t *format, _locale_t locale, va_list valist); int __cdecl __stdio_common_vfwscanf(unsigned __int64 options, FILE *file, const wchar_t *format, _locale_t locale, va_list valist); #endif #if __USE_MINGW_ANSI_STDIO && !defined(_CRTBLD) /* * User has expressed a preference for C99 conformance... */ /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int swscanf(const wchar_t *__source, const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_swscanf); /* __attribute__((__format__ (gnu_wscanf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int wscanf(const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_wscanf); /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int fwscanf(FILE *__stream, const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_fwscanf); #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int vswscanf (const wchar_t * __restrict__ __source, const wchar_t * __restrict__ __format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vswscanf); /* __attribute__((__format__ (gnu_wscanf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int vwscanf(const wchar_t *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vwscanf); /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int vfwscanf (FILE *__stream, const wchar_t *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vfwscanf); #endif /* __NO_ISOCEXT */ /* __attribute__((__format__ (gnu_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2) int fwprintf (FILE *__stream, const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_fwprintf); /* __attribute__((__format__ (gnu_wprintf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1) int wprintf (const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_wprintf); /* __attribute__((__format__ (gnu_wprintf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2) int vfwprintf (FILE *__stream, const wchar_t *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vfwprintf); /* __attribute__((__format__ (gnu_wprintf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1) int vwprintf (const wchar_t *__format, __builtin_va_list __local_argv) __MINGW_ASM_CALL(__mingw_vwprintf); /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int swprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_swprintf); #if __MINGW_FORTIFY_VA_ARG __mingw_bos_extern_ovr /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int swprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...) { __mingw_bos_ptr_chk_warn(__stream, __n * sizeof(wchar_t), 1); return __mingw_swprintf( __stream, __n, __format, __builtin_va_arg_pack() ); } #endif /* __MINGW_FORTIFY_VA_ARG */ __mingw_bos_ovr /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int vswprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, __builtin_va_list __local_argv) { #if __MINGW_FORTIFY_LEVEL > 0 __mingw_bos_ptr_chk_warn(__stream, __n * sizeof(wchar_t), 1); #endif return __mingw_vswprintf( __stream, __n, __format, __local_argv ); } #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int snwprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...) __MINGW_ASM_CALL(__mingw_snwprintf); #if __MINGW_FORTIFY_VA_ARG __mingw_bos_extern_ovr /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3) int snwprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...) { __mingw_bos_ptr_chk_warn(__stream, __n * sizeof(wchar_t), 1); return __mingw_snwprintf( __stream, __n, __format, __builtin_va_arg_pack() ); } #endif /* __MINGW_FORTIFY_VA_ARG */ __mingw_bos_ovr /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3) int vsnwprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, __builtin_va_list __local_argv) { #if __MINGW_FORTIFY_LEVEL > 0 __mingw_bos_ptr_chk_warn(__stream, __n * sizeof(wchar_t), 1); #endif return __mingw_vsnwprintf( __stream, __n, __format, __local_argv ); } #endif /* __NO_ISOCEXT */ #else /* !__USE_MINGW_ANSI_STDIO */ #ifdef _UCRT __MINGW_ATTRIB_DEPRECATED_SEC_WARN int __cdecl fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); __MINGW_ATTRIB_DEPRECATED_SEC_WARN int __cdecl swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...); __MINGW_ATTRIB_DEPRECATED_SEC_WARN int __cdecl wscanf(const wchar_t * __restrict__ _Format,...); __MINGW_ATTRIB_NONNULL(2) int __cdecl vfwscanf(FILE *__stream, const wchar_t *__format, va_list __local_argv); __MINGW_ATTRIB_NONNULL(2) int __cdecl vswscanf(const wchar_t * __restrict__ __source, const wchar_t * __restrict__ __format, va_list __local_argv); __MINGW_ATTRIB_NONNULL(1) int __cdecl vwscanf(const wchar_t *__format, va_list __local_argv); int __cdecl fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); int __cdecl wprintf(const wchar_t * __restrict__ _Format,...); int __cdecl vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList); int __cdecl vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList); #else int __cdecl fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; int __cdecl swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; int __cdecl wscanf(const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ __MINGW_ATTRIB_NONNULL(2) int vfwscanf (FILE *__stream, const wchar_t *__format, __builtin_va_list __local_argv); __MINGW_ATTRIB_NONNULL(2) int vswscanf (const wchar_t * __restrict__ __source, const wchar_t * __restrict__ __format, __builtin_va_list __local_argv); __MINGW_ATTRIB_NONNULL(1) int vwscanf(const wchar_t *__format, __builtin_va_list __local_argv); #endif /* __NO_ISOCEXT */ int __cdecl fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...); int __cdecl wprintf(const wchar_t * __restrict__ _Format,...); int __cdecl vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList); int __cdecl vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList); #endif /* _UCRT */ int __cdecl swprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,...); int __cdecl vswprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,va_list _Args); int __cdecl snwprintf(wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...); int __cdecl vsnwprintf(wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, va_list arg); #endif /* __USE_MINGW_ANSI_STDIO */ #ifndef WEOF #define WEOF (wint_t)(0xFFFF) #endif #ifdef _POSIX_ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode); #else _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag); #endif wint_t __cdecl fgetwc(FILE *_File); _CRTIMP wint_t __cdecl _fgetwchar(void); wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File); _CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch); wint_t __cdecl getwc(FILE *_File); wint_t __cdecl getwchar(void); wint_t __cdecl putwc(wchar_t _Ch,FILE *_File); wint_t __cdecl putwchar(wchar_t _Ch); wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File); wchar_t *__cdecl fgetws(wchar_t * __restrict__ _Dst,int _SizeInWords,FILE * __restrict__ _File); int __cdecl fputws(const wchar_t * __restrict__ _Str,FILE * __restrict__ _File); _CRTIMP wchar_t *__cdecl _getws(wchar_t *_String) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; _CRTIMP int __cdecl _putws(const wchar_t *_Str); _CRTIMP int __cdecl _scwprintf(const wchar_t * __restrict__ _Format,...); #ifndef _UCRT _CRTIMP int __cdecl _swprintf_c(wchar_t * __restrict__ _DstBuf,size_t _SizeInWords,const wchar_t * __restrict__ _Format,...); _CRTIMP int __cdecl _vswprintf_c(wchar_t * __restrict__ _DstBuf,size_t _SizeInWords,const wchar_t * __restrict__ _Format,va_list _ArgList); #endif /* _UCRT */ _CRTIMP int __cdecl _snwprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; _CRTIMP int __cdecl _vsnwprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; _CRTIMP int __cdecl _vscwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList); _CRTIMP int __cdecl _swprintf(wchar_t * __restrict__ _Dest,const wchar_t * __restrict__ _Format,...); _CRTIMP int __cdecl _vswprintf(wchar_t * __restrict__ _Dest,const wchar_t * __restrict__ _Format,va_list _Args); #ifndef RC_INVOKED #include <swprintf.inl> #endif #ifdef _CRT_NON_CONFORMING_SWPRINTFS #ifndef __cplusplus #define _swprintf_l __swprintf_l #define _vswprintf_l __vswprintf_l #endif #endif #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma push_macro("_wtempnam") #undef _wtempnam #endif _CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix); #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma pop_macro("_wtempnam") #endif _CRTIMP int __cdecl _snwscanf(const wchar_t * __restrict__ _Src,size_t _MaxCount,const wchar_t * __restrict__ _Format,...); _CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode); _CRTIMP FILE *__cdecl _wfopen(const wchar_t * __restrict__ _Filename,const wchar_t *__restrict__ _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; _CRTIMP FILE *__cdecl _wfreopen(const wchar_t * __restrict__ _Filename,const wchar_t * __restrict__ _Mode,FILE * __restrict__ _OldFile) __MINGW_ATTRIB_DEPRECATED_SEC_WARN; #ifndef _CRT_WPERROR_DEFINED #define _CRT_WPERROR_DEFINED _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg); #endif _CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode); #if !defined(NO_OLDNAMES) && !defined(wpopen) #define wpopen _wpopen #endif _CRTIMP int __cdecl _wremove(const wchar_t *_Filename); _CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer); #if __MSVCRT_VERSION__ >= 0x800 _CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File); _CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File); _CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File); #endif #undef _CRT_GETPUTWCHAR_NOINLINE #if !defined(__cplusplus) || defined(_CRT_GETPUTWCHAR_NOINLINE) || defined (__CRT__NO_INLINE) #define getwchar() fgetwc(stdin) #define putwchar(_c) fputwc((_c),stdout) #else __CRT_INLINE wint_t __cdecl getwchar() {return (fgetwc(stdin)); } __CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) {return (fputwc(_C,stdout)); } #endif #define getwc(_stm) fgetwc(_stm) #define putwc(_c,_stm) fputwc(_c,_stm) #if __MSVCRT_VERSION__ >= 0x800 #define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm) #define _getwc_nolock(_c) _fgetwc_nolock(_c) #endif #endif #define _STDIO_DEFINED #endif #ifdef _UCRT _CRTIMP int __cdecl _fgetc_nolock(FILE *_File); _CRTIMP int __cdecl _fputc_nolock(int _Char, FILE *_File); _CRTIMP int __cdecl _getc_nolock(FILE *_File); _CRTIMP int __cdecl _putc_nolock(int _Char, FILE *_File); #else #define _fgetc_nolock(_stream) (--(_stream)->_cnt >= 0 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) #define _fputc_nolock(_c,_stream) (--(_stream)->_cnt >= 0 ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) : _flsbuf((_c),(_stream))) #define _getc_nolock(_stream) _fgetc_nolock(_stream) #define _putc_nolock(_c,_stream) _fputc_nolock(_c,_stream) #endif #define _getchar_nolock() _getc_nolock(stdin) #define _putchar_nolock(_c) _putc_nolock((_c),stdout) #define _getwchar_nolock() _getwc_nolock(stdin) #define _putwchar_nolock(_c) _putwc_nolock((_c),stdout) _CRTIMP void __cdecl _lock_file(FILE *_File); _CRTIMP void __cdecl _unlock_file(FILE *_File); #if __MSVCRT_VERSION__ >= 0x800 _CRTIMP int __cdecl _fclose_nolock(FILE *_File); _CRTIMP int __cdecl _fflush_nolock(FILE *_File); _CRTIMP size_t __cdecl _fread_nolock(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File); _CRTIMP int __cdecl _fseek_nolock(FILE *_File,long _Offset,int _Origin); _CRTIMP long __cdecl _ftell_nolock(FILE *_File); __MINGW_EXTENSION _CRTIMP int __cdecl _fseeki64_nolock(FILE *_File,__int64 _Offset,int _Origin); __MINGW_EXTENSION _CRTIMP __int64 __cdecl _ftelli64_nolock(FILE *_File); _CRTIMP size_t __cdecl _fwrite_nolock(const void * __restrict__ _DstBuf,size_t _Size,size_t _Count,FILE * __restrict__ _File); _CRTIMP int __cdecl _ungetc_nolock(int _Ch,FILE *_File); #endif #if !defined(NO_OLDNAMES) || !defined(_POSIX) #define P_tmpdir _P_tmpdir #define SYS_OPEN _SYS_OPEN #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma push_macro("tempnam") #undef tempnam #endif char *__cdecl tempnam(const char *_Directory,const char *_FilePrefix) __MINGW_ATTRIB_DEPRECATED_MSVC2005; #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) #pragma pop_macro("tempnam") #endif int __cdecl fcloseall(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005; FILE *__cdecl fdopen(int _FileHandle,const char *_Format) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl fgetchar(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl fileno(FILE *_File) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl flushall(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl fputchar(int _Ch) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl getw(FILE *_File) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl putw(int _Ch,FILE *_File) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl rmtmp(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005; #endif #ifndef __MINGW_MBWC_CONVERT_DEFINED #define __MINGW_MBWC_CONVERT_DEFINED /** * __mingw_str_wide_utf8 * Converts a null terminated UCS-2 string to a multibyte (UTF-8) equivalent. * Caller is supposed to free allocated buffer with __mingw_str_free(). * @param[in] wptr Pointer to wide string. * @param[out] mbptr Pointer to multibyte string. * @param[out] buflen Optional parameter for length of allocated buffer. * @return Number of characters converted, 0 for failure. * * WideCharToMultiByte - http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx */ int __cdecl __mingw_str_wide_utf8 (const wchar_t * const wptr, char **mbptr, size_t * buflen); /** * __mingw_str_utf8_wide * Converts a null terminated UTF-8 string to a UCS-2 equivalent. * Caller is supposed to free allocated buffer with __mingw_str_free(). * @param[out] mbptr Pointer to multibyte string. * @param[in] wptr Pointer to wide string. * @param[out] buflen Optional parameter for length of allocated buffer. * @return Number of characters converted, 0 for failure. * * MultiByteToWideChar - http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx */ int __cdecl __mingw_str_utf8_wide (const char *const mbptr, wchar_t ** wptr, size_t * buflen); /** * __mingw_str_free * Frees buffer create by __mingw_str_wide_utf8 and __mingw_str_utf8_wide. * @param[in] ptr memory block to free. * */ void __cdecl __mingw_str_free(void *ptr); #endif /* __MINGW_MBWC_CONVERT_DEFINED */ #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP #ifndef _WSPAWN_DEFINED #define _WSPAWN_DEFINED _CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); _CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); _CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); _CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); _CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList); _CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); _CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList); _CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); #endif #ifndef _P_WAIT #define _P_WAIT 0 #define _P_NOWAIT 1 #define _OLD_P_OVERLAY 2 #define _P_NOWAITO 3 #define _P_DETACH 4 #define _P_OVERLAY 2 #define _WAIT_CHILD 0 #define _WAIT_GRANDCHILD 1 #endif #ifndef _SPAWNV_DEFINED #define _SPAWNV_DEFINED _CRTIMP intptr_t __cdecl _spawnv(int _Mode,const char *_Filename,const char *const *_ArgList); _CRTIMP intptr_t __cdecl _spawnve(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env); _CRTIMP intptr_t __cdecl _spawnvp(int _Mode,const char *_Filename,const char *const *_ArgList); _CRTIMP intptr_t __cdecl _spawnvpe(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env); #endif #endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */ #ifdef __cplusplus } #endif #pragma pop_macro("snprintf") #pragma pop_macro("vsnprintf") #pragma pop_macro("snwprintf") #pragma pop_macro("vsnwprintf") #pragma pack(pop) #include <sec_api/stdio_s.h> #endif int main() { printf("hello world\n"); return 0; } 第二阶段:编译 Compilation 转换:hello.i → hello.s(文本文件) ...
Github 上的有趣项目
Logoly —— A P***hub Flavour Logo Generator 咳咳,一个很有趣的小项目,可以生成类似某知名sox网站风格的 Logo(懂的都懂)。 EveryoneNobel 很有意思,顾名思义,人人都有诺奖,无需解释。 一本有意思的书的关系网整理 这……谁扔我网站里的???不要害我写不了博客啊! 记得科学上网再看 Spotify Github Profile 可以生成一个这样的标签,在个人主页很有用。 Awesome GitHub Profile README 有很多漂亮的 GitHub 主页的模板,我的主页也是参考这里做的。 yaten.xyz 一个我非常喜欢的个人主页模板,其实是我写的,另外宣传一下他的博客。 The Economist 可以看《经济学人》,好耶! LXGW WenKai 霞鹜文楷 很常见的开源字体,但是我没用过(钟爱宋体)。 Misaka Mikoto 御坂美琴 「你指尖跃动的电光,是我此生不变的信仰,唯我超电磁炮永世长存」 ...
Ubuntu Server 24.04 + Nextcloud 安装食用指北
因为新电脑到手,陪伴了我五年的第一台个人电脑终于从一线退役了。不过退役不等于闲置,正好想起之前折腾过的 Nextcloud。虽然这台电脑性能有点差,但拿来做个私有云服务器还是绰绰有余的。 Step 1:安装 Ubuntu Server 24.04 因为熟悉 Ubuntu,就直接选它了。 首先从 Ubuntu 官网 下载服务器版本镜像。 (我这里用虚拟机重现安装过程) 语言选择英语,无需多言。 键盘布局默认即可。 如果没有特别需求,不建议选“最小安装”。推荐勾选安装第三方驱动,可以省去后续手动装驱动的麻烦。 实体机安装建议使用有线网,或手机通过 USB 共享网络。 代理地址一般不需要配置。 系统会自动查找最近的镜像源。 硬盘选择默认即可,如果有多块硬盘要注意选对目标盘。 建议给根分区(/)多分点空间,不然装东西容易捉襟见肘。 我另外还分了个 /home 分区。 (分区时,输入一个很大的数字即可分配剩余所有空间) 接着继续即可。 设置账户和密码。 这一步……广告时间? 我的 笔记本 服务器长期放角落,所以选上安装 SSH,方便远程登录。 没有特别需要的服务,直接跳过。 耐心等待安装过程结束。 看到提示重启就说明安装完成! Step 2:配置静态 IP 运行以下命令查看网卡配置文件名: ls /etc/netplan 比如我的文件是 50-cloud-init.yaml,接着编辑它: sudo vim /etc/netplan/50-cloud-init.yaml ...
电脑性能到底有多重要?
最近看到华为发布的 HUAWEI MateBook Fold 非凡大师 折叠屏电脑,第一反应就是:哇,好惊艳啊!(指价格) 网上一片“无脑吹”,这里就不挂链接了,免得拉低网站质量。 作为一个从 奔腾双核用到265K,从服务器用到家用机 的人,我觉得有必要对这款 笔记本 折叠电脑聊两句。 一、真便携? 官方数据显示,这款机器重 1.16kg,看上去似乎很轻。但你对比一下: MacBook Air 也才 1.24kg,而且它的性能、散热、续航和生态早已优化成熟。 所以,从重量和体积上说 MateBook Fold 没什么压倒性优势,“折叠”这个形式反而更像是噱头,而非实用功能。 二、性价比? 你知道它卖多少钱吗?23999 元。这价格能干嘛? 配一台台式高性能PC + RTX 5080 Ti 显卡。 或者直接上 MacBook Pro 16 英寸 M4 Pro:14核 CPU + 20核 GPU,48GB 内存,1TB SSD。 而 MateBook Fold: 性能比不上 PC 生产力比不过 MacBook Pro 便携性还不如 MacBook Air 怎么选不是一眼明了?所以它在“性能 vs 实用性”之间陷入了自相矛盾。 这更像是一款技术展示产品,而不是面向普通消费者的实用工具。 三、实际价值? 折叠屏能带来什么? 多任务?——Windows、macOS、Linux 哪个不是多任务? 新体验?——Surface 系列早就玩过“触控+平板形态”,也没掀起多大浪。 而折叠屏却带来了更多的物理厚度、软件适配、成本溢价,却没有带来对应的体验提升。说白了——你折叠个啥? 大多数办公场景真正看重的,是: 屏幕尺寸够不够 键盘手感好不好 接口丰富不丰富 你有见过哪个程序员在写代码时还在意能不能把屏幕折起来? ...
暑假安排
太好了,马上就要放暑假了,这宝贵的两个月时间可不能浪费了,来说说我的安排吧。 OI 刷题 & 看完 CSAPP 这是暑假的重头戏。目标是 J 组一等、S 组二等,同时啃完 CSAPP,打牢系统层的根基。 剪完我的漫剪 之前开了个头,趁假期给它一个完整的收尾。希望剪出一个能打动自己的成品。 持续写博文 把刷题思路、项目记录、生活反思都写下来。写,是一种整理,也是一种成长。 van 游戏 娱乐也是生活的一部分。偶尔放松,适度快乐。 预习功课 不求超前太多,只求打好基础。开学前,至少把新课本翻过一遍。 带上海来的表弟游泉城 他难得来一次,要好好安排泉城一日游: 趵突泉:毕竟上海没有泉; 大明湖:水滴湖就别拿出来说了; 千佛山:上海连山都没有; 山东省博物馆:毕竟上海没有历史。 总之,带他感受一下什么叫“四面荷花三面柳,一城山色半城湖”。 学英语:啃透《旋元佑文法》 系统化梳理语法框架,练习听说,争取让“看原版”成为常态。 学日语 让小李走出机场。 复习生物必修一 & 学习必修二 纯爱好,毕竟生物是为数不多 当然,计划是理想,现实可能会变。我给自己留了一些“缓冲时间”:偶尔发发呆、补补觉、听几首歌,或是在夜晚写点文章。这些看似“无用”的时间,有时才是最真实的成长。 希望这个暑假能充实又高效,每天都比昨天更接近目标。
抱佛脚计划
化学 化合价 背什么化合价?原子结构示意图自己算去。 方程式 B站救命 物质俗名 B站救命 配平方程式 还学什么定一法?自己玩瞪眼法去! 数学 我就赌考手拉手模型。 语文 背两篇作文比啥都管用。 英语 这个不用抱佛脚。 物理 这个也不用抱佛脚。 道法 & 历史 放弃吧。
求助
有没有大佬解答: 学算法,搞OI真的有用吗?(除了升学)
十五岁,以及这一路走来的风景【补充】
过去是可以回忆的美梦,但未来才是活着的理由。 ——斯科特·菲茨杰拉德《了不起的盖茨比》 概述 时间过得真快,转眼马上就十五岁了,初二也快结束了。十五年的人生,不多也不少,算下来大概也就剩下五个十五年左右吧。 回头看这十五年,有开心的,也有难过的,但我不觉得后悔。那些经历都是自己的,都是成长的一部分。 性格 这里就不谈什么 MBTI 了。 我算是个完美主义者,有点强迫症,做事喜欢把细节做到最好,不太能忍受留下瑕疵。领导能力还可以,做事认真负责,习惯把事情安排得井井有条。 平时不太爱说话,不喜欢社交,和陌生人在一起会紧张,属于典型的宅男类型。这样的性格从小学开始就有了,到现在也没怎么变。 有时候会觉得,自己有点像 折木奉太郎——冷静、理智、沉默(当然,并不是刻意模仿他),但其实内心并不像表面看起来那么简单。我更喜欢安静的环境,也愿意花时间做自己感兴趣的事情,比如看书、写代码、或者玩游戏。 虽然如此,身边还是有几个关系不错的朋友。只是我更习惯独处,很多时候也觉得,保持距离其实是一种自我保护。 直到今年三月,在一次县里的活动中,我才第一次遇到一个真正意义上的计算机方面的知己,而前不久,在我发的一条知乎回答下,也有一位志同道合的朋友联系了我,我们相隔一千八百多公里,但那一刻我忽然明白了什么叫“千里共知音”。 世界上总有一些人,在某个你未曾注意的角落,和你一样热爱着某件事。 学业 总体来说,学习还算顺利。虽然我在一个不太出名的小县城,人才流失得厉害,但这里的成绩也不算差。小学时成绩不好,主要是因为学校条件不太好,老师也不够专业。刚上初中时,觉得学习压力挺大,尤其是遇到难题的时候,常常不知该怎么解决。 后来通过努力,考上了县里的直升班,成绩渐渐稳定下来。虽然还不算特别优秀,但至少比以前好多了。现在的目标很明确,就是考上211大学。觉得只要努力,梦想其实没那么遥远。 生活中也学会了给自己找乐子,比如读书、听音乐,玩游戏,都能缓解压力。虽然路还长,但我愿意一步步走下去。 OI(竞赛) 我接触电脑和编程算是比较早的,但真正接触 OI 却非常晚,直到今年二月份才开始了解。刚开始接触时觉得有些难,很多知识和思维方式都不熟悉。 不过我没有放弃,而是下定决心要赶上来。每天都会抽时间学习算法和练习题,慢慢理解其中的逻辑和技巧。虽然起步晚,但我相信只要坚持努力,还是有机会追上别人的。 学习 OI 理由其实很简单,就是为了混个强基计划。毕竟我也清楚,这项竞赛对将来就业或者实际应用来说帮助并不大,更多的是一种考验和挑战而已。 学了很多 这是我至今做过最有意义的一件事。 这里说的不是文化课,也不是OI,而是纯粹的计算机相关知识和技能。 从二年级开始,我接触并学习了很多编程语言,根据掌握程度大致分成几个层次: 十分熟悉的第一批: C++ HTML Markdown 比较熟悉的第二批: Python CSS 没有深入研究的第三批: JavaScript 除了编程语言,我还掌握了不少工具软件: 十分熟悉的第一批: Unreal Engine 5 Office 全家桶 VMware Workstation Pro 比较熟悉的第二批: DaVinci Resolve Adobe Photoshop Adobe Illustrator Adobe Premiere Blender 没有深究的第三批: FL Studio 2024 还有操作系统: ...
【六月月报】新机上阵,算法进阶与「第一桶金」
最近有些忙,一周都没能更新博客。今天来继续回顾一下这个月以来的点滴收获。 一、新电脑! 在我的不断请求 软磨硬泡 下,终于换了新电脑。以下是配置单: CPU Intel Core Ultra 7 265K 主板 ASUS TUF GAMING B860M-PLUS 内存 DDR5 6000MHz 64GB(16GB × 4) GPU NVIDIA GeForce RTX 5070 SSD1 Samsung SSD 990 1TB PRO SSD2 WD BLACK SN770 500GB(闲置) SSD3 SK hynix BC711 512GB(闲置) 散热 利民 PA140 BLAC 电源 海韵 FOCUS 850W ATX3.1 机箱 华硕 A21 追影 总之,这台机器在我的预算和需要之间找到了一个不错的平衡点。至少我库里的游戏都能稳 4K60Hz(显示器只有 4K60Hz),跑 UE5 也无压力了。 并且,我的主力操作系统又回到了 Windows 11。 ...
音乐
以下排名不分先后。 二次元名曲 打上花火(烟花) DAOKO x 米津玄师 我们二次元也有自己的难忘今宵! 伴随着你(天空之城) 久石让最好听的一首歌。 遠い空へ(缘の空) 央视都在用的音乐。 千本桜 初音万岁! 鸟之诗(AIR) 动漫届的国歌,未看其番,先闻其歌。再看其番,人过中年。 ...
感谢支持
就在昨天,我收到了自网站建立以来的第一笔赞助! 这份支持来自 *邦 大哥,对我来说意义非凡。 从搭建网站的第一行代码,到现在慢慢有人愿意浏览、愿意支持,这段路不算容易,但却无比值得。有你们在,我才更有动力继续创作、持续优化、不断前行。 感谢你们的认可和鼓励,未来我会继续更新内容,不负所托。
我掌握的技术栈
🖥️ 操作系统 Windows 系列:Windows XP、Windows 7、Windows 8、Windows 10、Windows 11 macOS Linux 发行版:Ubuntu、Arch Linux、Kali BSD 系列:OpenBSD 💻 编程语言 C++ Python JavaScript HTML / CSS 🛠️ 工具与框架 Adobe Photoshop Blender Adobe Illustrator Hexo Hugo Unreal Engine 4 / 5 ⚙️ 常用开发环境 主力系统:Arch Linux IDE:Visual Studio、VS Code 构建工具:g++ 版本控制:Git、GitHub 终端工具:zsh 🐧 Linux 运维经验 基础操作:系统安装、用户权限、挂载、软件包管理(pacman / apt) 服务管理:使用 systemd、配置 SSH、Nginx 等服务 熟悉基本的日志查看与问题排查方法 🎮 小插曲:做过一款“胎死腹中”的游戏 曾尝试使用 Unreal Engine 5 开发一款游戏,但因为队友太拉,项目草草结束。 但也因此接触到了虚幻引擎的蓝图系统和关卡搭建,对游戏开发产生了一定兴趣。
【MIT 6.006】Lecture 1 Notes
本文件内容源自麻省理工学院开放课程资料平台,根据官方英文讲义翻译而成,由 ChatGPT 初步翻译,并经人工精校润色。打印版参见:https://linmoh.github.io/mit6.006/l1.html 算法导论:6.006 麻省理工学院 讲师:Erik Demaine、Jason Ku 和 Justin Solomon 讲座 1:导论 本课程的目标是教会你如何解决计算问题,并说明你的解决方案是正确且高效的。 问题 问题输入与正确输出之间的二元关系 通常不会为所有输入指定每一个正确输出(太多了!) 提供一个可验证的谓词(属性),正确输出必须满足它 6.006 研究的是大规模、通用输入空间上的问题 非通用:小输入实例 例子:这个房间里是否有两位同生日的学生? 通用:任意大的输入 例子:给定任意 n 位学生,是否存在一对同生日的学生? 若生日只在 365 天中选,对于 n > 365,根据鸽巢原理,答案一定为真 假设生日的精度超过 n(包含年份、时间等) 算法 一个过程:将每个输入映射到一个输出(确定性) 若算法对每个问题输入都返回正确输出,则称其解决了该问题 例子:一个解决同生日问题的算法 保持一个姓名和生日的记录(初始为空) 按某个顺序询问每个学生 ∗ 若生日已在记录中,返回这对学生! ∗ 否则,将姓名和生日加入记录 若全部学生都询问完仍无结果,则返回 None 正确性 程序/算法是有限大小,如何证明其正确? 对于小输入,可使用情况分析 对于任意大的输入,算法必须以某种方式使用递归或循环 必须使用数学归纳法(递归在计算机科学中的关键原因) 例子:生日匹配算法的正确性证明 对 k 归纳:记录中已有的学生数量 假设:若前 k 位中有匹配,算法在询问第 k+1 位前就返回 基础情况:k = 0,前 k 位无匹配 假设归纳假设对 k = k₀ 成立,考虑 k = k₀ + 1 若前 k₀ 位已有匹配,算法已返回(由归纳) 否则,若前 k₀ + 1 位有匹配,匹配一定包含第 k₀ + 1 位 那么算法直接检查第 k₀ + 1 位学生的生日是否已在记录中 效率 算法生成正确输出的速度有多快? ...
【公告】关于以后的打算 & 网站的更新规划
以后的打算 以后我将学习以下几门科目(按优先度排序,不算课内内容) 计算机科学:这是为将来找工作打基础的必修课。 经济学:扩展知识面,也希望能培养点经济头脑。 英语:既是学业需求,也为就业做准备。 生物学(高中部分):主要为了应付现在的考试。 日语:算是兴趣加未来可能的国际发展准备。 总体上,我把学习内容分成两类: 就业导向:计算机科学、经济学、英语、日语,都是为了以后能顺利步入社会。 学业导向:英语和生物学,主要是为了应付眼下的课业和考试。 说实话,现在看来时间真的挺紧的,感觉总是不够用。以后得更加合理规划时间,娱乐时间肯定得压缩点,争取高效学习。 网站的更新规划 因为山东现在实行双休,时间上宽裕了不少,所以我打算给网站多花点时间。具体计划是: 题解:只写那些真有价值、有深度的题目,避免泛滥。 算法笔记 / 教学内容 / 数学相关:暂时先停一停,腾出精力做更重要的事情。 高质量文章:每个月争取写两篇,力求内容有深度、有用。 普通文章:保持频率,每周三篇,主要分享日常感想和一些技术内容,保持网站活跃。 总之,我想通过集中精力产出更优质的内容,让网站更有价值,同时也能兼顾学业和个人规划。希望以后大家多多支持!
【微观经济学】经济学十大原理
引言:我开始学习经济学 我有一个众所周知的小秘密:我希望我的下一代,甚至下下一代,能够进入上流社会,拥有更好的生活。 为了实现这个目标,我决定开始学习经济学,研究怎么搞钱 探索市场的规律和财富增长的奥秘。 经济学十大原理 原理一:人们面临权衡取舍 在资源有限的世界中,我们做每一个选择时,通常都意味着要放弃一些别的东西。这就是所谓的「权衡取舍」。简单说,就是:选择 A,就必须放弃 B。 举例解析 比方说,你是一个初中生,晚上有 2 小时自由时间,你面临三个选项: 做数学作业 看喜欢的动漫(比如《孤独摇滚》) 和朋友语音聊天打游戏 如果你决定用这两个小时做数学作业,那么你就放弃了看动漫和打游戏的机会,这就是一种权衡取舍。 原理二:某种东西的成本是为了得到它所放弃的东西 在经济学中,这个原理强调的是机会成本的概念。 当你做一个选择时,真正的成本不只是你花了多少钱或多少时间,而是你为做这个选择所放弃的「最有价值的其他选择」。 举例解析 比方说,假设你晚上可以: 花 2 小时看《孤独摇滚!》 或者用这 2 小时学习 C++ 和算法 你选择了看动漫,那么你为此所付出的「成本」,并不仅仅是2小时,而是你放弃了这2小时里可能提升编程技能、提高 OI 成绩的机会。所以你看动漫的「经济学成本」是这段时间本来可能带来的知识积累或竞赛得分。 原理三:理性人考虑边际量 在经济学中,「理性人」指的是那些有目的、有逻辑地做决策的人。他们不会轻易浪费资源,会在做决策时考虑「边际变化」。 边际量 「边际」意思是额外的一点点变化。也就是说,理性人不是考虑「全部」或「一刀切」的选择,而是问: 如果我再多做一点,会不会更好? 如果我再少做一点,是不是更节省? 边际分析就是衡量「多做一点」带来的额外收益和额外成本,然后做出最优选择。 举例解析 你明天要考 CSP-J,今天已经学习了 6 小时,考虑是否要再学 1 小时。 你就要考虑: 边际收益:再学 1 小时能不能再提升 5 分? 边际成本:这 1 小时可能让你太疲惫、没时间吃饭或影响睡眠 如果你判断这额外 1 小时学不到什么新东西,还可能影响明天状态,那理性选择就是不再继续学。 理性人的决策方式 if 边际收益 ≥ 边际成本: do it! else if 边际收益 < 边际成本: don't do it! 原理四:人们会对激励做出反应 在经济学中,「激励」指的是能影响人们行为的奖励或惩罚。 人们做出决策时,常常会根据激励来改变自己的选择。激励可以是:金钱、时间、成绩、情绪、声望等。人们不是凭空改变行为,而是因为有「改变行为的理由」,这就是激励。 举例解析 老师说:「谁今天晚上 8 点前交作业,就多加 2 分。」 ...
国产软件,越做越「重」
好的设计是看不见的服务,坏的设计是强迫性的对话。 ——唐纳德·诺曼《设计心理学》 自从几年前开始「科学上网」后,我的手机界面也悄然发生了变化:国内 App 和海外 App 仿佛成了两个不同世界的缩影。 图标设计:两个「审美」体系 最直观的区别,或许就是图标了。 海外 App 的图标普遍追求极简主义:形状规整、配色克制、更新缓慢。比如 Twitter(现𝕏)沿用蓝鸟符号十余年,Telegram的纸飞机、Spotify的声波图标,这些软件的图标几乎从未做过大幅修改。简洁、稳定,是它们传递出的第一印象。 反观国内 App,一年四季「百变造型」:618、双十一、春节、暑期档、开学季……各种节日与营销活动层出不穷,图标就像广告牌,忙得不亦乐乎。银行 App 图标还会直接加上版本号,给人一种“更新=进化”的错觉。美团、阿里、百度系的软件甚至会把品牌 LOGO 直接换成节日口号,一时间让人难以辨认。 ...
我开始记录代码之外的东西了
过去这个站主要是放技术内容,像博客、命令、折腾记录。现在也还是,但好像有点变了。准确说,我的关注点变了。 比如那天晚上写「焦虑的夜」,其实没想太多,就是单纯想把那种感觉写下来。写完后居然挺轻松的,比刷完一道算法题更像「做成了一件事」。 这两年我写了很多代码,建了几个站,刷了一些题,也搬了几次系统(是的,我真的折腾过头了)。但很少去想我自己在这些事中处于什么状态。也许这就是为什么最近我开始写这些「不那么技术」的东西。它们没有那么「有用」,但对我好像挺必要。 以后可能会在这里写点音乐、写作业的内容、写点聊天记录、做梦的内容。或者说,这个站会变得更「人」一点,而不是「作品集」那样的东西。
关于音乐
我一向对娱乐圈的“乱象”持反感态度,因此从不关注相关资讯。我与所谓的“饭圈文化”始终保持着清晰的界限。也正因如此,我更倾向于聆听那些真正触动人心的作品,比如米津玄师的歌。 其中,我最喜欢的一首歌之一,是《Lemon》,这是米津玄师为祖父的去世而作的,讲的是生死的理解。歌词如下: 日文 中文翻译 夢ならばどれほどよかったでしょう 如果这一切都是梦境该有多好 未だにあなたのことを夢にみる 至今还能在梦中寻到你的身影 忘れた物を取りに帰るように 就像归家取回遗忘之物 古びた思い出の埃を払う 打扫尘封的记忆 戻らない幸せがあることを 幸福无可再挽回 最後にあなたが教えてくれた 是你最后告诉了我 言えずに隠してた昏い過去も 那些未对他人提及过的晦暗往事 あなたがいなきゃ永遠に昏いまま 如果没有你它们将永远沉睡在黑暗中 きっともうこれ以上傷つくことなど 明白必定不会再有其他 ありはしないとわかっている 伤心胜过于此 あの日の悲しみさえ 甚至那日的悲伤 あの日の苦しみさえ 甚至那日的痛苦 そのすべてを愛してた あなたとともに 将所有一切,连同深爱的你一起 胸に残り離れない 都化作深深烙印在我心中 苦いレモンの匂い 苦涩柠檬的香气 雨が降り止むまでは帰れない 在雨过天晴前都无法归去 今でもあなたはわたしの光 时至今日 你仍是我的光芒 暗闇であなたの背をなぞった 在黑暗中追寻着你的身影 その輪郭を鮮明に覚えている 那轮廓至今仍鲜明地刻印于心 受け止めきれないものと出会うたび 每当遭遇无法承受的苦痛时 溢れてやまないのは涙だけ 汹涌不停的都只有泪水 何をしていたの 曾经历过什么 何を見ていたの 曾目睹过什么 わたしの知らない横顔で 脸上浮现着我不曾见过的神情 どこかであなたが今 如果你正在什么地方 わたしと同じ様な 与我一样 涙にくれ淋しさの中にいるなら 终日过着以泪洗面的寂寞生活 わたしのことなどどうか忘れてください 就请你将我的一切全部遗忘吧 そんなことを心から願うほどに 我从心底里祈愿 今でもあなたはわたしの光 时至今日 你仍是我的光芒 自分が思うより恋をしていたあなたに 我深深地恋慕着你 甚至超出自己的想象 あれから思うように息ができない 自那以后 再不能随心呼吸 あんなにそばにいたのにまるで嘘みたい 明明曾如此贴近 如今却恍如虚幻 とても忘れられないそれだけが確か 唯一能确定的是 对你难以遗忘 あの日の悲しみさえ 甚至那日的悲伤 あの日の苦しみさえ 甚至那日的痛苦 そのすべてを愛してた あなたとともに 将所有一切,连同深爱的你一起 胸に残り離れない 都化作深深烙印在我心中 苦いレモンの匂い 苦涩柠檬的香气 雨が降り止むまでは帰れない 在雨过天晴前都无法归去 切り分けた果実の片方の様に 如同被切开的半个柠檬一般 今でもあなたはわたしの光 时至今日 你仍是我的光芒 然而,最近在 B 站上偶然刷到一段视频,其中某些团体成员将《Lemon》的情绪深意“创意性”地嫁接到了咀嚼柠檬的体验之上,例如: ...
课本剧剧本《范进中举》
人物: 范进:老实忠厚的穷书生 母亲:年老体弱,慈爱却辛苦操持 胡屠户:范进的岳父,粗鲁泼辣 报录人(邻居):兼任报喜人、邻里、说书者角色 道具: 一瓶酒(可为空瓶) 报帖(写着“范讳高中广东乡试第七名亚元”) 一小桌、一张椅子若干 【一幕】范进中举 (舞台分两边,左为范进家草棚,右为集市,桌椅作背景) 【场景一:家中报喜】 (范进推门而入) 范进:(欢喜地)娘!我中了!中了秀才啦! 母亲:(激动)哎呀!我的儿啊!你可算熬出来啦! (母子相拥,妻子(由母亲客串)也在灶下烧饭) (胡屠户提着“肠子”和“酒”走进) 胡屠户:(甩手坐下)我倒了八辈子血霉,把女儿嫁给你这现世宝。如今不知我哪辈子积了德,你倒中了相公。我带了点酒来贺喜。 范进:(唯唯连声)多谢岳父,多谢岳父! 胡屠户:(训诫)你既中了相公,要立起个体统。你若见着那些扒粪种田的还拱手作揖,岂不是坏了规矩?也丢我的脸! 范进:岳父见教的是。 胡屠户:(一拍桌)你那亲家母也来坐着吃!这些年我闺女跟你吃了多少苦?猪油都不知吃过两三回! (众人吃饭,胡屠户喝酒,吃得醉醺醺) (胡屠户摇摇晃晃退场) 【场景二:借钱不成】 (范进走至胡屠户家,敲门) 范进:(小心翼翼)岳父,我想进乡试……没银子盘缠…… 胡屠户:(怒骂)癞蛤蟆想吃天鹅肉!你以为中个相公就真是你文章好?是宗师瞧你老可怜赏你的!如今还想中举人?我一天杀一个猪的钱,给你去丢水里?滚! (胡屠户啐他一脸) (范进退场,愁眉不展) 范进:(自言自语)宗师说我火候已到,如何甘心不去? 【场景三:卖鸡途中报喜】 (母亲扶墙出来) 母亲:我已饿得眼花……把那只下蛋母鸡卖了,买几升米来熬粥罢…… 范进:(点头)是,娘。 (抱鸡出门) (报录人骑马进场,锣鼓齐鸣) 报录人:快请范老爷出来,恭喜高中举人! 母亲:(吓得躲进屋)哎哟,啥事啊?……中啦?!哎哟我儿哟! (邻居上场,报录人喧哗要喜钱,邻居飞奔去集市找范进) 【场景四:范进听喜】 (集市) 范进:鸡便宜,三文钱……三文! (邻居跑来) 邻居:范相公,快回家!你中了举人啦! 范进:(摇头)高邻别哄我……今日要救命卖鸡,别误我生意。 (邻居夺鸡掼地,拉他) 【场景五:喜疯】 (范进被拉回家) (报帖高悬,众人簇拥) 范进:(看报帖)捷报贵府老爷范讳高中广东乡试第七名亚元…… (拍手,笑) 范进:(狂喜)噫!好了!我中了! (仰面跌倒,牙关紧咬) 母亲:(慌乱)快灌水! (范进醒来,又狂笑) 范进:(乱跑)哈哈!我中了!我中了! (跑出门,一脚跌进塘中,全身是泥) (众邻居愣住) 众人:这新贵人是喜疯了! 【场景六:“妙计救疯”】 母亲:(哭)中了一个举人,就疯啦!这可如何是好…… 邻居甲:莫急,我有法子!他最怕谁?找他怕的人来吓他,说“你没中”就好了! 邻居乙:他最怕胡老爹! (众人鼓掌) 【场景七:胡屠户救疯】 (胡屠户提肉登场) 胡屠户:(兴高采烈)我那女婿中啦?我特来贺喜! 母亲:(大哭)他疯啦…… 胡屠户:(怒)让我来! ...
焦虑的夜。
我很焦虑。 看着一些小学生、初一的同学已经能做出比我还难的算法题,心里忍不住泛起一种深深的失落感。回头看看这几年走过的编程之路,满是绕远与反复——一直在努力,却始终觉得偏离了方向。 四年后就是高考,山东的竞争压力之大不言而喻。而我的成绩,却一次比一次差。无论是文化课还是编程,我都感到自己在一点点落后,仿佛看不清前方的路。 更让我无助的是,无论是在学习还是编程上,我似乎都没有一个真正的引路人。没有人告诉我该怎么学,往哪走;没有人指出我做错了什么,也没有人告诉我哪一步其实并不算失败。 于是我开始反复回顾自己的选择,怀疑自己是不是不够聪明、不够勤奋、甚至不够幸运。那些比我小的孩子,那些更早接触、更早起步的人,就像一道道亮眼的光,而我站在阴影中,被照得无处遁形。 我时常觉得,自己就像站在一条奔流不息的河边,看着别人奋力向前,而我却困在原地,寸步难行。不是不想追赶,而是脚下的土地似乎随时都可能塌陷,我根本不敢迈出下一步。 但夜深人静的时候,我也会逼自己冷静地想一想:我到底是在害怕落后,还是害怕自己根本无法赶上?我是真的走错了路,还是只是还没走到成果显现的那一步? 焦虑也许是成长的副产品。它提醒我:我在意,我不甘心,我还没放弃。 我不知道未来会变成什么样,也不知道自己还能坚持多久。但至少现在,我还想试一试——哪怕没人指引,我也想摸索出自己的路。 谁知道呢,也许某一天,当我再次回头望向此刻的自己,会想说一句:你已经做得很好了,真的。
【五月月报】 算法、建站、焦虑与成长
看了看网站,已经整整一个月没有更新了,连 SSL 证书都悄悄过期了。这段时间,我到底在忙些什么? 一、刷题进度与学习状态 算法类 最近在洛谷持续刷题,目前累计通过了 112 道题目。 其中: 入门:86 题 普及−:23 题 普及/提高−:3 题(包括第一次 AC 的 P1205) 刷题过程中,《算法竞赛入门经典》的一些题让我抓狂得快要怀疑人生,于是我转向口碑不错的《深入浅出程序设计竞赛》寻求“救赎”。目前刚学到第二部分算法——排序章节,讲得确实比我想象中更清晰易懂。 此外,我还参加了 【LGR-226-Div.4】洛谷入门赛 #35,最终排名 518 名,感觉还能接受,但也暴露了不少薄弱环节。 学业 地生一模,地理校第3,生物第一,总分校第一、县第五。 其他的没什么好说的。 二、技能提升与项目积累 除了算法,我也在慢慢完善一些个人积累: GitHub 整理刷题代码 我在 GitHub 上新建了一个代码库,用来记录我在洛谷刷过的题: 👉 algo_code 仓库 同时也开始打理 GitHub 主页,探索 Markdown 的高级用法: 👉 我的 GitHub 主页 三、建站:从兴趣出发的小尝试 我重新拾起了建站这个兴趣,做了一些看似“离谱”、实则有自我风格的项目: 波奇酱非官方同人页:boochi.fans GitHub 仓库地址:boochi.fans 仓库 同时,我还注册了一堆脑洞清奇的域名: bailan.top boochi.fans 玩原神玩的.xyz → 跳转到学校官网 no.neijuan.fun(来自域名 neijuan.fun) pingyinshigao.icu 这些可能现在还“没用”,但对我来说是一种“试错式探索” —— 在技术与兴趣之间寻找乐趣和平衡。 四、心态波动与自我调整 坦白讲,这段时间我有些焦虑。 看着一些小学、初一的同学在洛谷上做出比我更高难度的题,甚至已经在 CSP-J 拿奖,我不止一次怀疑自己是否起步太晚,是否天赋不够。 但转念一想:别人强,只能说明他们开始得早,而我也在进步。 焦虑说明我在乎,进步说明我没放弃。与其沉溺比较,不如专注成长。只要今天的我强于昨天,那就是值得骄傲的成绩。真正重要的是:走自己的路,走稳、走远。 毕竟凉先辈说过: 五、未来计划与行动方向 接下来,我打算: ...
P5725 【深基4.习8】求三角形
题目描述 模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模,不超过 $9$。 输出格式 输出矩形和正方形 输入输出样例 #1 输入 #1 4 输出 #1 01020304 05060708 09101112 13141516 01 0203 040506 07080910 题解 #include<iostream> using namespace std; int main() { int n; cin >> n; int cnt = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (cnt <= 9) cout << 0 << cnt; else cout << cnt; cnt++; } cout << endl; } cout << endl; int count = 1; for (int a = 1; a <= n; a++) { int space = 0; while (space < 10 - 2 * (a + 1)) { cout << " "; space++; } for (int b = 1; b <= a; b++) { if (count <= 9) cout << 0 << count; else cout << count; count++; } cout << endl; } return 0; } 但是 WA 了 经过 debug,问题出在空格的输出上。 原本计算空格的公式为10 - 2 * (a + 1),应该为(n - a) * 2才对。 ...
第一节课讲义:认识 C++ 输入输出与基本变量类型
课程目标 掌握 cin 和 cout 的基本用法 理解 int、float、char 三种变量的用途 能编写简单的输入输出程序 一、C++ 程序的基本结构 1.1 代码框架 所有 C++ 程序都从 main 函数开始执行: #include <iostream> // 引入输入输出库 using namespace std; // 使用标准命名空间 int main() { // 程序入口 // 你的代码写在这里 return 0; // 程序结束 } #include <iostream>:提供 cin 和 cout 功能。 using namespace std;:避免重复写 std::cout,直接使用 cout。 二、输出内容:cout 的用法 2.1 输出文本与变量 语法:cout << 内容1 << 内容2 << endl; 示例:输出 “Hello, World!” #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; // endl 表示换行 return 0; } 练习:输出你的名字 cout << "我的名字是:小蓝" << endl; // 将 "小蓝" 改为你的名字 2.2 输出多个内容 int age = 10; cout << "我今年" << age << "岁!" << endl; // 输出结果:我今年10岁! 三、输入内容:cin 的用法 3.1 基本输入操作 语法:cin >> 变量; 示例:输入年龄并输出 #include <iostream> using namespace std; int main() { int age; // 声明变量 cout << "请输入年龄:"; // 提示用户输入 cin >> age; // 读取输入 cout << "你的年龄是:" << age << "岁!" << endl; return 0; } 3.2 输入不同类型的数据 float height; char initial; cout << "输入身高(米):"; cin >> height; // 输入小数,如 1.75 cout << "输入姓名首字母:"; cin >> initial; // 输入单个字符,如 'A' 四、变量的基本类型 4.1 变量的作用 存储数据:像盒子一样保存程序中需要的数据(如数字、文字)。 4.2 常用变量类型 类型 用途 示例 注意事项 int 存储整数 int age = 15; 不能存储小数 float 存储小数 float pi = 3.14; 精度较低,适合一般计算 char 存储单个字符 char grade = 'A'; 必须用单引号 ' ' 4.3 变量的声明与赋值 int score; // 声明一个整数变量 score = 90; // 赋值 float price = 19.99; // 声明并初始化 char symbol = '$'; 五、综合练习 5.1 任务:输入个人信息并输出 #include <iostream> #include <string> // 必须包含此头文件才能使用 string using namespace std; int main() { int age; float height; cout << "请输入你的年龄:"; cin >> age; cout << "请输入你的身高(米):"; cin >> height; cout << endl << "===== 个人信息 =====" << endl; cout << "年龄:" << age << "岁" << endl; cout << "身高:" << height << "米" << endl; return 0; } 六、常见错误与注意事项 未包含头文件 ...
排列组合
之前做 CSP-J 初赛试题总是不会做排列组合的题,现在就来补坑。 阶乘 n!(读作“n 的阶乘”)表示从1到n的所有整数的乘积,即: n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 2 × 1 并且规定: 0 ! = 1 排列公式 P ( n , k ) = n ! ( n − k ) ! 排列****强调顺序,表示从n个不同元素中取出k个元素并考虑顺序的排列方式总数,即两个排列如果顺序不同就视为不同的情况。 例如: P ( 5 , 3 ) = 5 ! ( 5 − 3 ) ! = 5 ! 2 ! = 5 × 4 × 3 × 2 × 1 2 × 1 = 120 2 = 60 ...
【补】搜索
在这里,汇集了搜索算法,包括线性查找、二分查找等。 线性查找(Linear Search) 代码实现 #include <iostream> using namespace std; int main() { int nums[10]; for (int i = 0; i < 10; i++) { nums[i] = i + 1; // 初始化数组,1~10 } int find; cin >> find; // 线性查找 for (int i = 0; i < 10; i++) { if (nums[i] == find) { cout << i; // 输出找到的索引 return 0; } } cout << "Not found"; // 没找到 } 算法解析 这是最基本的查找算法,也是最简单的一种。 遍历数组 for (int i = 0; i < 10; i++),依次检查 nums[i] 判断是否匹配 if (nums[i] == find),如果找到目标值,就输出索引 i 提前返回 return 0; 避免多余的遍历,提高效率 未找到时输出 “Not found” 遍历结束仍然没找到目标值,则打印 “Not found” 时间复杂度为 O(n),适用于无序数组,或小规模数据 二分查找(Binary Search) 代码实现 #include<iostream> using namespace std; int main() { int nums[10]; for (int i = 0; i <= 9; i++) { nums[i] = i + 1; } int find = 0; // 要查找的元素 int left = 0, right = 9; // 元素下标 int mid = 0; // 元素下标 cin >> find; while (left <= right) { mid = (left + right) / 2; if (nums[mid] > find) { // 要找的元素在中点左边 right = mid - 1; continue; } if (nums[mid] < find) { //要找的元素在中点左边 left = mid + 1; continue; } if (nums[mid] == find) { cout << mid; return 0; } } cout << "Not found"; } 算法解析 初始化 nums 数组被初始化为 {1, 2, 3, …, 10},即 升序排列。 left = 0, right = 9,分别表示搜索范围的 左端 和 右端。 mid = (left + right) / 2,计算当前范围的 中间元素。 查找过程 如果 nums[mid] > find,说明目标在 左半部分,所以更新 right = mid - 1。 如果 nums[mid] < find,说明目标在 右半部分,所以更新 left = mid + 1。 如果 nums[mid] == find,找到目标,输出索引并终止程序。 终止条件 找到目标时,输出其索引并返回。 若 left > right,表示搜索范围为空,目标元素不存在,输出 “Not found”。 时间复杂度 二分查找的时间复杂度是 O(log N),原因是: ...
给朋友的 CS 书单:从入门到放弃(bushi)
最近莫名其妙成了“CS懂王”,每天被问最多的除了“代码跑不通怎么办”,就是“该看什么书”。为了保住人设(和友谊),特此奉上我的私藏书单!声明:所有书都是我亲自读过且成功催眠的,质量有保障! (其实最主要的原因是为了@Susan_2333而写的) 一、新手村装备(看这些不会秃头) 📖《计算机科学概论》 看这本书的目的是对 CS 进行一个简单的了解。但可以当故事书看!很有意思,不用看的太深,厕所读物首选,看到睡着算我输。 📺计算机科学速成课 不可否认的一点是,这不是书。但是,这个系列的视频每集只有10多分钟,从晶体管讲到神经网络,用浅显的语言讲解 CS,非常有趣。我推荐大家先看这个视频,然后再看《计算机科学概论》。 (虽然我只看了前3集就去追番了) 三、Python修仙指南(头发可再生) 📖《Python编程:从入门到实践》 这本书是 Python 的入门书籍,内容非常丰富,适合初学者。这本书的内容比较陡峭,但是,这本书的内容非常实用,能够帮助大家提高编程水平。 看完就能用Python算命!我三年级就开始学了! 📖《笨方法学Python》 这本书我没看过,但是据说很棒(@Susan_2333也这么说)。 说实话,我还是更喜欢学术性强一点的书。 二、C++の试炼(秃头预警) 📖《C++ Primer》 这本书是 C++ 的入门书籍,内容非常丰富,适合初学者。但是,这本书的难度较大,建议有一定编程基础的同学阅读。 C++界的《新华字典》,买前雄心壮志,买后防身利器!建议和编译器拜把子再看。 📖《C++ Primer Plus》 看名字也知道,这本书是 C++ Primer 的补充。这本书的难度较小,适合初学者。并且,这本书内容又多又杂,面面俱到,适合想要具体学习 C++ 的同学。 比楼上那本多了个"Plus",价格也Plus!但确实适合萌新,当年我就是靠它写了第一个"Hello World" Effective C++ 这本书是 C++ 的进阶书籍,内容非常丰富,适合有一定编程基础的同学阅读。这本书的内容比较难,但是,这本书的内容非常实用,能够帮助大家提高编程水平。 More Effective C++ 在 Effective C++ 的基础上进一步补充。 四、算法の奥义(彻底秃头) 🎮《Hello 算法》 这本书不同于其他的所有书籍,这本书一开始是在 Github 上开源的、社区维护的书,这也是我极为推荐这本书的原因。 Github 项目地址 在线网页 📚《算法导论》(CLRS) ...
进制转换
日常生活中我们使用十进制(0-9),但在计算机领域中,二进制(0-1)、八进制(0-7)和十六进制(0-9, A-F)更为常见。进制转换的核心是通过数学运算在不同基数(Base)之间转换数的表示形式。理解这一原理不仅是计算机科学的基础,也是编程、网络通信甚至密码学的必备技能。 为什么学习进制转换? 考试需求 信息学竞赛(如CSP、NOI)中频繁出现进制转换题目。例如,2024年山东CSP-J第一轮测试中便有一道关于二进制与十六进制转换的单选题。 计算机原理基础 计算机硬件基于二进制逻辑运行,而八进制、十六进制常用于简化二进制的表示(如内存地址、机器指令)。 编程实践 编程中常需处理不同进制的数据(如Python的bin()、hex()函数,C/C++的格式化输出)。 实际应用场景 计算机系统:二进制用于硬件设计,十六进制简化调试(如内存地址显示为0x1A3F)。 网络与编码:IPv6地址使用十六进制(如2001:0db8::ff00),ASCII码用十进制或十六进制表示字符。 密码学:大数运算(如RSA密钥)常以十六进制存储。 装逼 进制转换的核心原理 一、进制的基本概念 基数(Base):进制使用的符号数量。 十进制(Base 10):0-9 二进制(Base 2):0-1 十六进制(Base 16):0-9 + A-F(A=10, B=11, …, F=15) 权值(Positional Value) 每一位数字的值由其位置决定,计算公式为: 数值 ...
求和符号∑
1. 数学中的 ∑ ∑ 是数学中的求和符号,用于表示一系列数的累加。它的核心作用是将复杂的加法表达式简化为紧凑的形式。 基本结构 ...
数学专栏总序
当数学渣开始造轮子 “你要写数学专栏?!” ——来自三位好友的夺命连问 澄清一点,这个专栏的数学,是为了计算机科学服务的,而不是为了数学,毕竟我对数学可以说是到了“厌恶”的地步。所以,数学的难度,不会特别高,对于大佬们来说甚至是简单,但会尽量涵盖和 CS 有关的数学知识。 因此,我将题目改为: 为计算机科学而学习的数学知识 作为学校著名的数学渣渣,这个决定确实充满“魔幻现实主义色彩”。但当我第N次被《CLRS》和《CSAPP》中跃动的Σ符号击溃时,终于意识到:计算机科学大厦的裂缝,往往始于数学地基的沉降。 甚至复杂度也看不懂,我都不知道我是怎么学的算法。 本专栏绝非数学系的抽象漫游,而是程序员视角的生存指南: 撕开数学公式的裂口,直击计算机核心算法 毕竟,编写这个专栏的过程,本质上是一个数学渣渣的 debug 日志——那些让我头秃三天的数学路障,都将成为你前进路上的反光警示牌。 (注:本企划存活时长与读者催更力度呈正相关) 特别鸣谢 @Susan_2333 的数学外挂持续在线:他的B站主页(你敢信这只是一个初中生?)
社工初级考试复习资料 & 冲刺计划
声明:本篇文章系AI生成,仅供参考,如有错误,概不负责。 以下是针对 2025年5月25日山东省初级社会工作者考试 的 每日阶段复习计划(3月19日-5月25日,共67天),内容细化到每日任务、重点背诵条目及实操方法,可直接执行: 一、整体阶段划分 基础夯实阶段(3月19日-4月15日,28天):全面覆盖教材知识点 强化突破阶段(4月16日-5月10日,25天):高频考点+真题实战 冲刺提分阶段(5月11日-5月24日,14天):模拟考试+错题复盘 二、基础夯实阶段(3月19日-4月15日) 1. 综合能力(14天) Day 1-3:社会工作基础理论 学习内容: 社会工作的三大功能(治疗、预防、发展)及对应案例(如社区禁毒宣传=预防功能)。 专业伦理冲突处理模板: (1)识别伦理困境(如保密vs生命安全); (2)评估利益相关者(服务对象、家属、机构); (3)选择最小伤害方案(优先保护生命)。 背诵任务:默写伦理原则(保密、尊重、知情同意)并举例说明。 Day 4-7:人类行为与社会环境 学习内容: 埃里克森人生八阶段理论(重点背儿童期、青少年期、老年期): 青少年期(12-18岁):自我同一性 vs 角色混乱。 老年期(65岁以上):自我整合 vs 绝望。 家庭类型对儿童影响:单亲家庭常见心理问题(自卑、安全感缺失)。 实操任务:绘制“儿童发展阶段生理-心理特征对比表”。 Day 8-14:社会工作方法与政策法规 学习内容: 个案工作三大模式对比: 模式 适用场景 核心技巧 心理社会治疗 长期情绪问题 非反思性沟通 危机介入 突发创伤事件 快速评估+即时干预 山东低保政策:申请材料清单(身份证、收入证明、户籍证明)。 2. 实务(14天) Day 15-18:通用流程 学习内容: 接案阶段禁忌: 错误:过度承诺(“保证解决就业问题”); 正确:说明服务范围(“我们会尽力协调资源”)。 预估工具模板: (1)家庭结构图:标注冲突关系(如父子矛盾用虚线+闪电符号); (2)社会生态系统图:圈出可链接资源(社区服务中心、法律援助)。 背诵任务:默写接案会谈的5个核心问题(现状、需求、资源等)。 Day 19-22:儿童与青少年服务 学习内容: 儿童保护强制报告制度: 报告主体:教师、社工、医护人员; 报告时限:发现后24小时内报公安机关。 偏差行为干预策略: 网络成瘾:家庭契约(限制上网时间)+ 替代活动(体育兴趣小组)。 Day 23-28:老年与社区服务 ...
社工初级考试复习大纲
声明:本篇文章系AI生成,仅供参考,如有错误,概不负责。 版本一 以下是为您整理的2025年山东省初级社会工作者考试复习资料大纲,结合最新考试动态和历年重点内容,帮助您高效备考: 一、考试基本信息 报名时间:2025年3月12日9:00—3月24日16:00(已截止) 考试时间:2025年5月24日、25日 考试科目: 社会工作综合能力(初级):客观题,涵盖社会工作理论、方法与伦理等。 社会工作实务(初级):客观题,侧重实务流程与各领域服务技巧。 二、《社会工作综合能力》复习重点 1. 社会工作基础理论 内涵与目标:社会工作的核心功能(支持、预防、发展)、基本原则(如本土化、职业化)。 价值观与伦理:专业伦理内容(保密、尊重)、伦理难题处理原则(生命优先、最小伤害)。 2. 人类行为与社会环境 人生发展阶段:各阶段(儿童、青少年、老年)的生理、心理特征及主要问题。 社会环境构成:家庭、社区、文化等对行为的影响。 3. 社会工作方法 个案工作:心理社会治疗模式、危机介入模式的核心技巧。 小组工作:互动模式与发展模式的实施原则。 社区工作:地区发展、社会策划、社区照顾模式的特点及策略。 4. 政策与法规 重点法规: 社会救助:低保申请流程、医疗救助对象。 劳动权益:劳动合同、工伤保险认定标准。 特殊群体保护:老年人、妇女、未成年人的合法权益。 三、《社会工作实务》复习重点 1. 通用实务流程 接案与预估:接案注意事项、预估目的与步骤。 计划与介入:服务计划制定原则、介入行动分类(直接/间接服务)。 评估与结案:评估方法(过程/结果评估)、结案时服务对象的反应处理。 2. 各领域实务要点 儿童与青少年:需求分析(安全、教育)、服务方法(家庭干预、社区支持)。 老年与残疾人:老年心理支持、残疾人社会融入策略。 社区与家庭:社区资源整合、家庭关系调适技巧。 3. 高频考点 社会救助:最低生活保障的申请条件与流程。 矫正与优抚:矫正对象的心理疏导、优抚安置的资源链接。 四、备考策略与资料推荐 教材与大纲: 参考《社会工作综合能力》《社会工作实务》官方教材,结合2024年考试大纲(与2023年内容基本一致)。 真题与模拟题: 练习《2024年度山东社区工作者复习重点试题》,熟悉客观题答题技巧。 重点笔记: 使用233网校《干货笔记》梳理章节思维导图,强化记忆。 五、注意事项 时间管理:综合能力侧重理论记忆,实务需结合案例分析,建议分配复习时间6:4。 答题规范:客观题填涂需规范,避免因填涂错误失分。 政策更新:关注2025年最新社会救助、劳动法规调整动态。 六、延伸资源 免费题库:233网校提供历年真题解析及高频考点班课程。 政策文件:山东省人事考试中心官网获取最新考务通知。 版本二 以下是针对2025年山东省初级社会工作者考试的 超详细复习大纲,涵盖核心知识点、学习路径及每日计划建议,助您精准掌握考点: 一、考试科目与分值分布 1. 社会工作综合能力(初级) 题型:单选题(60题×1分)+多选题(20题×2分) 分值权重: 社会工作理论(30%) 方法与技术(40%) 政策法规(30%) 2. 社会工作实务(初级) 题型:单选题(60题×1分)+多选题(20题×2分) 分值权重: 通用流程(30%) 各领域实务(50%) 案例分析应用(20%) 二、《社会工作综合能力》逐章细化 第一章 社会工作基础 1.1 社会工作定义与功能 核心概念:社会工作的“助人自助”原则 三大功能:治疗、预防、发展(举例:社区青少年服务中的预防功能) 1.2 价值观与伦理冲突 必背伦理原则:保密性(例外:涉及生命安全时打破保密) 伦理难题处理步骤:识别问题→分析利益相关者→选择最小伤害方案 第二章 人类行为与社会环境 2.1 儿童发展阶段(0-12岁) 关键理论:埃里克森心理社会发展理论(如学龄期“勤奋vs自卑”) 典型问题:校园欺凌的干预策略(结合《未成年人保护法》) 2.2 老年阶段(60岁以上) 生理变化:认知衰退(阿尔茨海默病早期信号) 社会支持网络构建:社区日间照料中心的资源链接 第三章 社会工作方法 3.1 个案工作 心理社会治疗模式: 技巧:直接治疗(非反思性沟通)vs间接治疗(改善环境) 案例:单亲家庭青少年的情绪疏导流程 危机介入模式: 7阶段模型:评估危机→制定即时计划→实施干预 3.2 小组工作 互动模式: 核心:组员平等参与,社工扮演“协调者”角色 实操:设计一次“亲子沟通小组”的破冰活动 第四章 社会政策与法规 4.1 山东省社会救助政策 低保申请流程: 户籍地街道办提交材料(身份证、收入证明) 家庭经济状况核对(最长15个工作日) 公示与审批(公示期7天) 医疗救助对象:特困人员、低保户、低收入家庭(需提供医保结算单) 4.2 《妇女权益保障法》重点 职场性别歧视的界定与维权途径(向劳动监察部门投诉) 三、《社会工作实务》逐章细化 第一章 通用流程 1.1 接案阶段 注意事项: 避免过早承诺(如“一定能解决住房问题”) 紧急情况处理(如家暴受害者需立即启动保护程序) 1.2 预估工具 家庭结构图:符号含义(□男性、○女性、虚线表示关系冲突) 社会生态系统图:标注个人与家庭、社区、政策资源的互动 第二章 儿童与青少年服务 2.1 儿童保护 强制报告制度:教师、社工发现虐待需24小时内报公安机关 服务方案设计: 目标:提升儿童自我保护意识 活动:角色扮演“拒绝陌生人接触” 2.2 青少年偏差行为干预 常见类型:网络成瘾、逃学 介入策略:家庭治疗(改善亲子沟通)+ 学校社工介入(建立朋辈支持小组) 第三章 老年服务 3.1 老年需求评估 身体功能评估工具:ADL量表(评估穿衣、进食等日常能力) 心理支持:老年抑郁量表(PHQ-9)的使用与解读 3.2 社区养老服务 山东地方政策: “幸福食堂”项目申请条件(户籍限制、年龄≥80岁) 居家适老化改造补贴标准(最高3000元/户) 四、每日复习计划(8周冲刺) 第一周:基础理论搭建 Day 1-3:精读《综合能力》第一章,整理思维导图(重点:伦理原则表格对比) Day 4-5:学习《实务》通用流程,完成2套接案阶段案例分析题 第二周:核心方法突破 Day 6-8:掌握个案工作三大模式(心理社会、危机介入、任务中心),每个模式做1道真题 Day 9-10:背诵《社会救助暂行办法》关键条款(结合山东低保案例) 第三周:实务强化 Day 11-13:专项训练儿童/老年领域大题,总结答题模板(问题→需求→介入步骤) Day 14-15:模拟考试(限时完成2024年真题,错题标记) ……(后续每周细化至每日任务) ...
逻辑谬误
班里杠精太多了!像我们这种嘴笨的内向小男生,哪怕讲得再有理,也常常被对方带偏节奏,吵不赢,怎么办? 没关系!今天我们就来学点“逻辑谬误”,让他们无话可说! 什么是逻辑谬误? 不依据逻辑的议论,尤其是指论证中不符合逻辑的推论。逻辑谬误分为形式逻辑谬误与非形式逻辑谬误。非形式逻辑谬误,实质上就是前提错误谬误。 逻辑谬误的类型 以下是针对形式逻辑谬误与非形式逻辑谬误的分类详解,包含定义、示例及反驳方法: 一、形式逻辑谬误 形式逻辑谬误是因推理结构错误导致的无效论证,常见于演绎推理(如三段论、假言推理等)。其核心问题在于逻辑形式不成立。 1. 否定前件谬误(Denying the Antecedent) 定义:在假言命题中,错误地通过否定前件推出否定后件。 逻辑形式:若 P ➛ Q ,则非 P ➛ 非 Q。 示例: 前提:“如果下雨(P),地面会湿(Q)。” 错误推理:“今天没下雨(非 P),所以地面不湿(非 Q)。” 反驳: 指出结构漏洞:“即使不下雨,地面也可能因洒水车或水管漏水而湿。” 2. 肯定后件谬误(Affirming the Consequent) 定义:在假言命题中,错误地通过肯定后件推出肯定前件。 逻辑形式:若 P ➛ Q ,则 Q ➛ P。 示例: 前提:“如果一个人中毒(P),他会呕吐(Q)。” 错误推理:“他呕吐了(Q),所以他中毒了(P)。” 反驳: 列举其他可能性:“呕吐可能由食物过敏、晕车或怀孕引起,未必是中毒。” 3. 假两难推理(False Dilemma) 定义:将复杂问题简化为非此即彼的二元选择,忽略中间选项。 示例: “要么完全禁止社交媒体,要么放任虚假信息泛滥!” 反驳: 提出中间方案:“可以加强内容审核算法或提升用户媒介素养,而非极端选择。” 二、非形式逻辑谬误 非形式逻辑谬误是因论证内容或语境缺陷导致的错误,涉及语义模糊、证据不足或情感操控等。 1. 诉诸无知(Appeal to Ignorance) 定义:以“无法证伪”作为“为真”的依据(或反之)。 示例: “科学无法解释意识起源,所以灵魂一定存在!” 反驳: 明确举证责任:“科学未解释 ≠ 你的假设成立。需提供灵魂存在的直接证据。” 2. 循环论证(Circular Reasoning) 定义:结论被隐含在前提中,实质是同义重复。 示例: ...
P1089 津津的储蓄计划 [NOIP 2004 提高组]
题目 题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 $300$ 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 $20%$ 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 $100$ 元或恰好 $100$ 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如 $11$月初津津手中还有 $83$ 元,妈妈给了津津 $300$ 元。津津预计$11$月的花销是 $180$ 元,那么她就会在妈妈那里存 $200$ 元,自己留下 $183$ 元。到了 $11$ 月月末,津津手中会剩下 $3$ 元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据 $2004$ 年 $1$ 月到 $12$ 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 $2004$ 年年末,妈妈将津津平常存的钱加上 $20%$ 还给津津之后,津津手中会有多少钱。 输入格式 $12$ 行数据,每行包含一个小于 $350$ 的非负整数,分别表示 $1$ 月到 $12$ 月津津的预算。 输出格式 一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 $-X$,$X$ 表示出现这种情况的第一个月;否则输出到 $2004$ 年年末津津手中会有多少钱。 注意,洛谷不需要进行文件输入输出,而是标准输入输出。 输入输出样例 #1 输入 #1 290 230 280 200 300 170 340 50 90 80 200 60 输出 #1 -7 输入输出样例 #2 输入 #2 290 230 280 200 300 170 330 50 90 80 200 60 输出 #2 1580 分析 我们可以直接套模拟,模拟每个月的操作即可。 ...
P2669 金币 [NOIP 2015 普及组]
题目 题目背景 NOIP2015 普及组 T1 题目描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 $n$ 天每天收到 $n$ 枚金币后,骑士会在之后的连续 $n+1$ 天里,每天收到 $n+1$ 枚金币。 请计算在前 $k$ 天里,骑士一共获得了多少金币。 输入格式 一个正整数 $k$,表示发放金币的天数。 输出格式 一个正整数,即骑士收到的金币数。 输入输出样例 #1 输入 #1 6 输出 #1 14 输入输出样例 #2 输入 #2 1000 输出 #2 29820 说明/提示 【样例 1 说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到 $1+2+2+3+3+3=14$ 枚金币。 对于 $100%$ 的数据,$1\le k\le 10^4$。 分析 我们可以采用 按层计算 的方法,在脑海里想象,每一天发的金币数可以列成以下表格: 也就是说: $ 每一层发的金币数 = 层数$ $ i = c $ 由此,我们写出程序: #include<iostream> using namespace std; int main() { int day = 0, glod = 0, tday = 0; cin >> day; for (int c = 1; c <= day; c++) { for (int i = 1; i <= c; i++) { glod += c; tday ++; if (tday == day) { break; } } if (tday == day) { break; } } cout << glod; return 0; } 完美通过! ...
开灯问题
题目 题目描述 有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k≤n≤1000。 样例输入: 7 3 样例输出: 1 5 6 7 解答 #include<iostream> using namespace std; int main() { /* 1:开 0:关 */ int n = 0, k = 0; cin >> n >> k; const int MAX = n; int a[MAX]; for (int z = 0; z <= n - 1; z++) { //生成一个全是1的列表 a[z] = 1; } for (int j = 0; j < n; j++) { for (int i = 1; i <= k; i++) { if (j % i == 0) { if (a[j] == 0) { a[j] = 1; } if (a[j] == 1) { a[j] = 0; } } } if (a[j] == 1) { cout << j << " "; } } return 0; } 这个程序当然不能运行,它存在以下问题: 数组 a[MAX] 未正确初始化,可以改用vector。 a 数组下标从 0 开始,但灯的编号从 1 开始,需要修正数组访问方式。 状态翻转逻辑错误,在翻转灯的状态时,不需要额外判断 a[j] == 0 或 a[j] == 1,直接 a[j] = !a[j]; 即可。 ...
纠错日记
这几天忙着配置网站,总结了一下 debug 过程中遇到的问题和排查流程: 检查权限:确保权限设置为 775。 确认 Node.js 版本:确保版本匹配,避免兼容性问题。 清理浏览器缓存:防止缓存导致的页面异常。 检查域名部署:确保域名已正确解析并部署到服务器上。 每一步看似简单,但往往就是这些小细节决定了最终能否顺利运行。
C++入门:浮点数 & 字符型
为什么0.1+0.2≠0.3?为什么’A’和65竟是孪生兄弟?准备好揭开编程世界最狡诈的伪装者真面目了吗?让我们直击浮点数与字符型的灵魂深处! 引言:当计算机遇上连续世界 浮点数的奇幻漂流 想象用乐高积木拼出圆周率——这就是浮点数的本质!它们用有限精度逼近无限可能,就像用火柴棒拼出蒙娜丽莎的微笑。 float pi = 3.14159; // 在内存中其实是314159×10⁻⁵的二进制版本 字符的七十二变 每个字符都是穿着ASCII外衣的整型间谍: char c = 'A'; // 表面是字母 int secret = c; // 暴露真身:65 一、浮点数的量子世界 1.1 浮点三巨头对比 类型 内存空间 有效数字 典型范围 适用场景 float 4字节 6-7位 ±1.18×10⁻³⁸ ~ ±3.4×10³⁸ 图形坐标 double 8字节 15-16位 ±2.23×10⁻³⁰⁸ ~ ±1.79×10³⁰⁸ 科学计算 long double 16字节 18-19位 ±3.36×10⁻⁴⁹³² ~ ±1.18×10⁴⁹³² 高精度金融 内存结构解密(IEEE 754标准): 符号位 [1] | 指数位 [8/11] | 尾数位 [23/52] 就像科学计数法的二进制版:(-1)^s × 1.m × 2^(e-127) 1.2 浮点数的七大罪 精度丢失案发现场: float a = 0.1f; double b = 0.2; cout << a + b; // 输出0.30000000000000004(不是笔误!) 比较浮点数的正确姿势: bool isEqual(double x, double y) { return fabs(x - y) < 1e-6; // 设置误差容忍度 } 特殊值禁区: ...
C++入门:简单变量 & 整型
开篇寄语:为什么你需要这篇指南? 最近听到不少同学的抱怨:“C++的数据类型怎么这么难?““变量和整型总是分不清怎么办?” 看着大家被各种int、short、unsigned绕得团团转,我决定用最接地气的方式,把这块硬骨头啃碎了喂给你们。相信我,学完这篇,你会拍着大腿说:“原来数据类型还能这么理解!” 引言:从"变量盒子"到数据存储哲学 为什么程序员总在讨论数据类型? 就像快递员要知道包裹是易碎品还是普通货物,程序需要明确数据是整数还是字符。C++的变量系统,本质上是一套精密的"内存货架管理系统”——给每个数据贴上类型标签,分配合适大小的存储空间。 int num = 5; // 给4字节的"货架"贴上"num"标签,存入数字5 一、变量系统全解析(破解初学者三大困惑) 1.1 变量的本质:内存空间的命名艺术 新手常见误区:“声明变量就是创建数据?” 实际上: int num; → 申请4字节内存(32位系统) num = 5; → 在地址0x7ffe…写入00000101 从此"num"成为该地址的永久门牌号 💡 变量三要素记忆口诀: 哪里存(地址)→ 存什么(值)→ 怎么存(类型) 1.2 变量命名规范:代码可读性的第一道防线 血泪教训案例: int a1 = 10; // 烂命名:半年后鬼知道a1是什么 int nStudentCount = 10; // 好命名:一眼看懂用途 命名进阶技巧: // 类型前缀法(匈牙利命名法) char szName[20]; // sz: 以零结尾的字符串 float fPrice; // f: 浮点型 bool bIsValid; // b: 布尔型 // 骆驼命名法 int studentCount; double totalAmount; 二、整型数据类型深度剖析 2.1 整型家族图谱:五兄弟对比 类型 内存空间 数值范围(典型值) 适用场景 char 1字节 -128127 或 0255 ASCII字符/微小整数 short 2字节 -32,768~32,767 节省内存的小数值 int 4字节 -2.1亿~2.1亿 通用整数存储 long 4/8字节 同int或更大 历史遗留系统 long long 8字节 -9×10¹⁸~9×10¹⁸ 天文数字计算 2.2 有符号与无符号的量子世界 二进制视角解密: ...
P1011 车站 [NOIP 1998 提高组]
题目描述 火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第 n−1 站),都满足此规律。现给出的条件是:共有 n 个车站,始发站上车的人数为 a,最后一站下车的人数是 m(全部下车)。试问 x 站开出时车上的人数是多少? 输入格式 输入只有一行四个整数,分别表示始发站上车人数 a,车站数 n,终点站下车人数 m 和所求的站点编号 x。 输出格式 输出一行一个整数表示答案:从 x 站开出时车上的人数。 输入输出样例 #1 输入 #1 5 7 32 4 输出 13 说明/提示 对于全部的测试点,保证 1≤a≤20,1≤x≤n≤20,1≤m≤2×104。 问题分析 + 求解 已知信息: 发站上车人数 a 车站数 n 终点站人数 m 所求的站点编号 x 我们定义 i:表示第二站上车、下车为 i 人 根据已知信息,我们可以列出表格: 站数(x) 上车人数 下车人数 发车时的人数 1 a / a 2 i i a 3 a+i i 2a+i 4 a+2i a+i 2a+i 5 2a+3i a+2i 3a+2i 我们可以找到规律: ...
参赛作品:算法与数据可视化工具集
说明 1. 累加计算器与可视化程序 功能描述: 该程序实现了一个简单的累加计算器,用户可以输入一个最小值和一个最大值,程序会计算从最小值到最大值的累加和并可视化累加过程。程序通过条形图展示每步累加的过程,实时显示累加结果。 主要流程: 用户输入最小值和最大值。 程序判断输入是否有效(最小值小于最大值)。 从最小值到最大值进行累加,并实时更新累加结果。 通过条形图可视化每一步的累加过程,展示当前最小值和当前累加和。 计算完成后,通过弹窗显示最终的累加结果。 使用说明: 在文本框中输入最小值和最大值。 点击“计算并可视化”按钮,程序会计算并显示累加结果。 程序会弹出对话框显示累加结果,并展示累加过程的条形图。 代码注释: entry_min 和 entry_max 是用户输入最小值和最大值的文本框。 plt.bar() 用于绘制条形图,显示累加过程。 messagebox.showinfo() 和 messagebox.showerror() 用于弹窗显示信息。 2. 选择排序与可视化程序 功能描述: 该程序实现了选择排序算法,并通过图形化界面展示每一步的排序过程。用户可以看到选择排序如何通过不断选择最小值并交换位置,逐步将数组排序完成。 主要流程: 随机生成一个包含 50 个元素的数组。 使用选择排序算法对数组进行排序,实时更新数组状态。 每次交换时,通过条形图展示当前数组状态,突出显示当前最小值、遍历元素以及已排序部分。 排序完成后,通过可视化展示排序结果。 使用说明: 程序会自动生成一个随机数组,并进行选择排序。 排序过程中会实时绘制条形图,显示每一步的排序情况。 排序完成后,会显示最终的排序结果。 代码注释: plt.bar() 用于绘制条形图,显示数组的排序过程。 plt.clf() 用于清除之前的绘图,准备更新图表。 plt.pause() 用于控制动画的更新速度,使排序过程可视化。 3. 插入排序与可视化程序 功能描述: 该程序实现了插入排序算法,并通过图形化界面展示每一步的排序过程。用户可以看到插入排序如何通过逐个插入元素到已排序部分,逐步将数组排序完成。 主要流程: 随机生成一个包含 50 个元素的数组。 使用插入排序算法对数组进行排序,实时更新数组状态。 每次插入元素时,通过条形图展示当前数组状态,突出显示当前插入元素及已排序部分。 排序完成后,通过可视化展示排序结果。 使用说明: 程序会自动生成一个随机数组,并进行插入排序。 排序过程中会实时绘制条形图,显示每一步的排序情况。 排序完成后,会显示最终的排序结果。 代码注释: plt.bar() 用于绘制条形图,显示数组的排序过程。 plt.clf() 用于清除之前的绘图,准备更新图表。 plt.pause() 用于控制动画的更新速度,使排序过程可视化。 4. 累加计算器(带最小值和最大值输入) 功能描述: ...
P1421 小玉买文具
题目 题目描述 班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 1 元 9 角,而班主任给小玉的钱是 a 元 b 角,小玉想知道,她最多能买多少只签字笔呢。 输入格式 输入只有一行两个整数,分别表示 a 和 b。 输出格式 输出一行一个整数,表示小玉最多能买多少只签字笔。 输入输出样例 输入 10 3 输出 5 说明/提示 数据规模与约定 对于全部的测试点,保证 0 ≤ a ≤ 10^4,0 ≤ b ≤ 9。 问题分析 无须分析。 解题 #include <iostream> using namespace std; int main() { double DanJia = 1.9; int a = 0, b = 0; cin >> a >> b; double GiveMoney = a + 0.1 * b; int GeShu = GiveMoney / DanJia; cout << GeShu; } AC,完美通过! ...
P5711 【深基3.例3】闰年判断
题目 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 1,否则输出 0。 1582 年以来,闰年的定义: 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004 年、2020 年等就是闰年)。 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900 年不是闰年,2000 年是闰年)。 输入格式 输入一个正整数 n,表示年份。 输出格式 输出一行。如果输入的年份是闰年则输出 1,否则输出 0。 输入输出样例 输入输出样例 #1 输入 #1 1926 输出 #1 0 输入输出样例 #2 输入 #2 1900 输出 #2 0 输入输出样例 #3 输入 #3 2000 输出 #3 1 输入输出样例 #4 输入 #4 1996 输出 #4 1 说明/提示 数据保证,1582 ≤ n ≤ 2020 且年份为自然数。 解题 #include <iostream> using namespace std; int main() { int year; cin >> year; if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { cout << "yes"; return 0; } else { cout << "no"; return 0; } } 完美通过! ...
T392143 水仙花数
题目描述 在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花数。如:153=1+125+27,所以153是一个水仙花数。求所有的水仙花数。 输入格式 无输入 输出格式 若干个空格间隔的由小到大表示的整数,每个表示一个水仙花数。 解题 是不是很熟悉?这道题就是《算法竞赛入门经典》的习题 2-1,改一个输出就行。 #include<iostream> using namespace std; int main() { int a,b,c = 0; for (int num = 100; num <= 999; num++) { a = num / 100; b = (num / 10) % 10; c = num % 10; if (num == (a * a * a) + (b * b * b) + (c * c * c)) { cout << num << " "; } } } 完美通过! 本篇题解到此结束,祝各位读者早日成为神牛牪犇!
算法竞赛入门经典 第二章习题解答
习题 2-1 水仙花数(daffodil) 题目描述 输出 100~999 中的所有水仙花数。若 3 位数 ABC 满足 [ ABC = A^3 + B^3 + C^3 ] 则称其为水仙花数。例如 153= (1^3+5^3+3^3) ,所以 153 是水仙花数。 解答 #include<iostream> using namespace std; int main() { int a, b, c = 0; for (int num = 100; num <= 999; num++) { a = num / 100; b = (num / 10) % 10; c = num % 10; if (num == (a * a * a) + (b * b * b) + (c * c * c)) { cout << num << endl; } } } 没什么可说的。 习题 2-2 韩信点兵(hanxin) 题目描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。 输入包含多组数据,每组数据包含 3 个非负整数 a, b, c,表示每种队形排尾的人数(a < 3, b < 5, c < 7),输出总人数的最小值(或报告无解)。已知总人数不小于 10,不超过 100。输入到文件结束为止。 样例输入 2 1 6 2 1 3 样例输出 Case 1: 41 Case 2: No answer 解答 初版(有 bug) ...
算法入门经典 习题 2-3
题目 输入正整数 n≤20,输出一个 n 层的倒三角形。 例如,n=5 时输出如下: ######### ####### ##### ### # 解答 我们来分析一下: 行号 空格数 符号数 输出内容 0 0 9 ######### 1 1 7 ####### 2 2 5 ##### 3 3 3 ### 4 4 1 # 初版(有 bug) #include<iostream> using namespace std; int triangle(int a) { //a:层数 a = a * 2 - 1; for (int i = 0; i <= a; i = i + 2) { //i:每行个数 int b = 0; //添加空格 int j = 1; while(j <= i) { cout << " "; j++; } while(b <= i) { //b:每行输出次数 cout << "#"; b++; } cout <<endl; } return 0; } int main() { int n; cin >> n; triangle(n); } 输入: ...
算法入门经典 例题 2-4
题目 阶乘之和:输入 n,计算 S=1!+2!+3!+…+n!的末 6 位(不含前导 0)。n≤106 ,n!表示前 n 个正整数之积。 样例输入: 10 样例输出: 37913 解答 这里应该用双层 for 循环,对于每个 i,乘每一个 j(如程序)。 初版(有 bug) #include <iostream> using namespace std; int main() { int n; int sum = 0; cin >> n; for (int i; i <= n; i++) { int a = 1; for (int j; j <= i; j++) { a = i * j; sum = sum + a; } } sum = sum % 1000000; cout << sum; return 0; } 欸?输出是 0? 经过 debug 发现,未初始化循环变量,我在使用循环变量 i 和 j 时没有初始化。 改正版(有 bug) #include <iostream> using namespace std; int main() { int n; int sum = 0; cin >> n; for (int i = 1; i <= n; i++) { int a = 1; for (int j = 1; j <= i; j++) { a = i * j; sum = sum + a; } } sum = sum % 1000000; cout << sum; return 0; } 令人费解的是,程序仍然有 bug。 ...
杂谈 NOI 路线
刷知乎无意间刷到问题如何看待《算法竞赛进阶指南》与《信息学奥赛一本通·提高篇》多页内容雷同,后者疑似抄袭?中,李煜东大佬推荐的学习流程竟然惊人的一致为了能帮助广大和我一样的苦命 OIer,特地转载一下: OI / ICPC 入门到提高的话…… 我的建议是 买一本《C++ Primer Plus》(中文版就行),看前几章学语言(不用看面向对象之后的内容)。 买一本《算法竞赛入门经典》,学入门级别算法,上面也有一些语言的内容,所以 C++ Primer Plus 粗略地读就行了。 买一本《算法竞赛进阶指南》,提高算法和数据结构水平。 UPD:还有评论推荐《挑战程序设计竞赛》,不过我没读过…… 看作者应该还不错 之后就不用看书了,刷 OJ / 读论文 / 做 CF 等 Online Contest 应该都不是难事。 附一个回复: Ircon:请问对于您提到的那些书里面的例题,应该抱着什么态度去刷。是尽量自己做出。还是模仿例题代码写一遍后,搞明白原理,然后去刷习题? 李煜东:可以自己先简单思考一下,然后搞明白怎么做,最后独立写代码实现。不会的话可以学习例题的解法,代码尽量不要模仿,除非看完解法还是不懂…… 版权声明: 本文转载自知乎,“如何看待《算法竞赛进阶指南》与《信息学奥赛一本通·提高篇》多页内容雷同,后者疑似抄袭?”,https://www.zhihu.com/question/292823177/answer/482747918。版权归原作者所有,转载目的仅为分享知识与经验。如有侵权,请联系删除。
算法入门经典 例题 2-2
题目 猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。 经过若干次这样的变换,一定会使n变为1。例如,3→10→5→16→8→4→2→1。 解答 很简单的重复性程序,没什么技术含量。 #include <iostream> using namespace std; int main() { int n; cin >> n; int j = 0; while (n > 1) { if (n % 2 == 1) { j++; n = 3 * n + 1; continue; } else { j++; n = n / 2; continue; } } cout << j; return 0; } 但是,为了防止数据溢出,我们可以把变量改为 long。 #include <iostream> using namespace std; int main() { long n; cin >> n; int j = 0; while (n > 1) { if (n % 2 == 1) { j++; n = 3 * n + 1; continue; } else { j++; n = n / 2; continue; } } cout << j; return 0; } 祝各位读者早日成为神牛牪犇!
算法入门经典 例题 2-1
题目 输出所有形如 aabb 的 4 位完全平方数(即前两位数字相等,后两位数字也相等)。 解答 这个题目乍一看,有两种思路: 列举所有完全平方数,再找其中形如 aabb 的。 列举所有形如 aabb 的数,再找其中的完全平方数。 经过我的抉择,我选择了第一种思路 (绝对不是因为我不会判断一个数是否为完全平方数) 解答 #include<iostream> using namespace std; int main() { for (int i = 1; ; i++) { int allnum = i * i; if (allnum > 9999) { break; } int a1 = allnum / 1000; int a2 = allnum / 100 - a1 * 10; int b1 = allnum / 10 - a1 * 100 - a2 * 10; int b2 = allnum / 1 - a1 * 1000 - a2 * 100 - b1 * 10; if (a1 == a2 && b1 == b2) { cout << allnum << endl; } } return 0; } 程序没有问题,但是判断是否为 aabb 的数的过程未免太不优雅了! 所以,我给出了版本 2: #include<iostream> using namespace std; int main() { for (int i = 1; ; i++) { int allnum = i * i; if (allnum > 9999) { break; } int a1 = allnum / 1000; int a2 = (allnum / 100) % 10; int b1 = (allnum / 10) % 10; int b2 = allnum % 10; if (a1 == a2 && b1 == b2) { cout << allnum << endl; } } return 0; } 这样感觉也挺好。 ...
算法竞赛入门经典 第一章习题解答
习题 1-1 平均数(average) 题目描述 输入3个整数,输出它们的平均值,保留3位小数。 解答 #include <iostream> using namespace std; float average(float a,float b,float c) { float sum,aver; sum = a + b + c; aver = sum / 3; return aver; } int main() { float a,b,c,ans; cin >> a >> b >> c; ans = average(a,b,c); cout << ans; return 0; } 太过于基础,不过多描述。 习题1-2 温度(temperature) 题目描述 输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。 解答 #include <iostream> using namespace std; int main() { int f,c; cin >> f; float c = 5.0 * (f - 32) / 9; cout << c; return 0; } 也是相当简单的。 习题1-3 连续和(sum) 题目描述 输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。 解答 终于是上难度了。 #include <iostream> using namespace std; int sum(int EndNumber) { int sum = 0; for (int i = 0;i <= EndNumber;i++) { sum = sum + i; } return sum; } int main() { int EndNumber,ans; cin >> EndNumber; ans = sum(EndNumber); cout << ans; } 这个题也可以用 等差数列求和公式 来解决。 ...