├── .gitattributes ├── .gitignore ├── 1.11-24点游戏 ├── exit.txt ├── is24.c ├── is24.set ├── menu_1.txt ├── menu_2.txt ├── menu_3.txt ├── menu_4.txt ├── menu_5.txt ├── menu_6.txt ├── test 测试程序 │ ├── keyTest 键值检测.c │ └── simpleCalculator 支持括号的简单计算器.c └── 参考资料 │ ├── 24 点问题的一种简易算法的设计与实现.doc │ ├── 24点 游戏无重解算法的研究与探讨.doc │ ├── 一个简易24点计算器.c │ ├── 一个简易递归计算器.txt │ └── 支持括号的简单计算器.c ├── 2.4- C 语言代码去注释 ├── annotation-processing.c ├── menu_1.txt ├── menu_2.txt └── test.cpp ├── 3.18-单项选择题标准化考试系统 ├── answer.txt ├── info.txt ├── menu_1.txt ├── menu_2.txt ├── menu_3.txt ├── menu_4.txt ├── menu_5.txt ├── menu_6.txt ├── menu_7.txt ├── paper.txt ├── src 源代码 │ ├── admin.cpp │ ├── admin_user.cpp │ ├── all.h │ ├── find_info.cpp │ ├── find_user.cpp │ ├── main.cpp │ ├── question.cpp │ ├── time.cpp │ └── user.cpp ├── user.use └── 使用前必读.txt ├── LICENSE ├── README.md ├── VC++6.0 字体设置插件 ├── MONACO 最好的编程字体.TTF └── VC6.0FontSet.exe ├── 学习 C 语言过程中写的一些渣代码...见笑 ├── 2015-11-28 homework @_@.c ├── 2015-12-09 homework @_@.c ├── 2015-12-10 homework @_@.c ├── C 语言 循环与递归.c ├── C 语言 数组.c ├── C 语言 链表与文件.c ├── Fork 的代码 用来研究清空输入缓存的问题.c └── 一些刷 CQUT Online Judge 的题以及作业答案....c ├── 答辩文档 ├── 11503070234 张晓君.doc ├── 11503070234 张晓君.docx └── 演示用.ppt └── 课程设计题目(20151220).doc /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # For macOS 2 | *.DS_Store 3 | 4 | # Prerequisites 5 | *.d 6 | 7 | # Object files 8 | *.o 9 | *.ko 10 | *.obj 11 | *.elf 12 | 13 | # Linker output 14 | *.ilk 15 | *.map 16 | *.exp 17 | 18 | # Precompiled Headers 19 | *.gch 20 | *.pch 21 | 22 | # Libraries 23 | *.lib 24 | *.a 25 | *.la 26 | *.lo 27 | 28 | # Shared objects (inc. Windows DLLs) 29 | *.dll 30 | *.so 31 | *.so.* 32 | *.dylib 33 | 34 | # Executables 35 | # *.exe 36 | *.out 37 | *.app 38 | *.i*86 39 | *.x86_64 40 | *.hex 41 | 42 | # Debug files 43 | *.dSYM/ 44 | *.su 45 | *.idb 46 | *.pdb 47 | 48 | # Kernel Module Compile Results 49 | *.mod* 50 | *.cmd 51 | modules.order 52 | Module.symvers 53 | Mkfile.old 54 | dkms.conf 55 | -------------------------------------------------------------------------------- /1.11-24点游戏/exit.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/exit.txt -------------------------------------------------------------------------------- /1.11-24点游戏/is24.c: -------------------------------------------------------------------------------- 1 | /* 2 | 1.11-xxx 24点游戏(难度等级:5级) 3 | 【任务描述】 4 | 任意给出4张牌,计算能否用+、-、×、÷将其组合成24。 5 | 输出其可能的组合式。 6 | */ 7 | 8 | //由于调用getch()和fflush(stdin),程序的移植性较差,请尽量在vc++6.0中编译运行. 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | //------------------------------------------全局变量 18 | 19 | struct temp_set 20 | { 21 | int mode; //当前模式 1.帮我计算(容许小数) 2.练习模式(无尽模式) 3.天梯模式 4.双人模式 5.设置 6.帮助 0.exit 22 | //int isPrint;//是否输出结果 1.输出 0.不输出 23 | }; 24 | 25 | struct temp_set settings; 26 | 27 | struct saved_set 28 | { 29 | int low; //下限 30 | int high; //上限 31 | int saveSettings; //是否保存当前设置 32 | }; 33 | 34 | struct saved_set saved; 35 | 36 | int N = 24; 37 | 38 | char op[4] = {'+', '-', '*', '/'}; 39 | 40 | float arr[4] = {0}; //arr用来存放计算结果 41 | float cur[4] = {0}; //cur用来存放当前数组 42 | float con[4] = {0}; //con用来存放原始数据 43 | 44 | //------------------------------------------函数列表 45 | 46 | void main(void); //程序入口 47 | void menuPrint(); //显示菜单并根据settings.mode的值显示光标 48 | int move(); //根据键盘的输入,显示菜单和光标,如果点击回车或数字则进入相应下一级函数 49 | void exitGame(void); //退出程序 50 | void userGet(); //与userGetIn()配合使用,直到用户正确输入四张牌才退出死循环 51 | void exercise(); //练习模式核心函数 52 | void tianti(); //天梯模式核心函数 53 | void pk(); //pk模式核心函数 54 | void print_settings(); //设置界面核心函数 55 | void help(); //帮助界面核心函数 56 | void change_settings(int num); //设置界面二级函数,传入要修改设置的内容序号,修改相应的设置 57 | void save_settings(); //保存设置到本地文件 58 | void initSettings_temp(); //初始化菜单光标 指向 1.帮我计算 59 | void resetting(); //重置所有设置 60 | void read_settings(); //读取上次保存的设置.第一次打开游戏时显示帮助界面 61 | char *number_to_poker(float number, char *temp); //把读入的数字变成扑克(字符数组) 62 | float poker_to_number(char *poker); //把扑克(字符数组)变成浮点数 63 | void initAllFromCon(); //恢复堆栈数组(从原始数组中) 64 | void initArrFromCur(); //恢复临时数组 65 | float calc(float n1, float n2, char o); //传入数字n1.n2.和操作符(+-*/),返回一个浮点数 66 | void randomGet(); //随机得到四个能计算出24点的扑克牌 67 | void printResult_1(int a, int b, int c); //传来三个操作符 读取数组cur[4]的四个数据 打印出来 68 | void printResult_2(int a, int b, int c); //等同于printResult_1 69 | int s_first(int isPrint); //模拟平衡二叉树之单挂 传入参数为1时输出正解 0则不输出 70 | int s_second(int isPrint); //模拟平衡二叉树之双链 这两个函数是核心算法 返回1时则是可以算出 返回0就是算不出24点 71 | int userGetIn(); //帮我计算核心函数 72 | char *keyControl_to_charPointer(int key); //逗比函数 未完成的函数 多半是废了 73 | char key_to_char(int key); //读取键盘输入 返回字符型 多半也是废了 74 | int test(void); //测试函数 75 | void translate(char str[], char exp[]); //对堆栈的细节处理 76 | float cal_value(char exp[]); //一个使用堆栈的计算器 支持() + - * / 77 | int zhabi(); //调用translate和cal_value函数 78 | void goto_pos(int x, int y); //光标移动函数 79 | 80 | //------------------------------------------主函数及菜单函数 81 | 82 | void main(void) 83 | { 84 | 85 | system("color 3E"); 86 | resetting(); 87 | read_settings(); 88 | initSettings_temp(); 89 | srand((unsigned)time(NULL)); 90 | int a; 91 | 92 | while (1) 93 | { 94 | 95 | system("mode con cols=67 lines=29"); 96 | menuPrint(); 97 | a = move(); 98 | switch (a) 99 | { 100 | //1.帮我计算 2.练习模式 3.天梯模式 4.双人模式 5.设置 6.帮助 0.exit 101 | case 1: 102 | system("mode con cols=50 lines=30"); 103 | userGet(); 104 | continue; 105 | case 2: 106 | system("mode con cols=50 lines=17"); 107 | exercise(); 108 | continue; 109 | case 3: 110 | system("mode con cols=50 lines=17"); 111 | tianti(); 112 | continue; 113 | case 4: 114 | system("mode con cols=50 lines=17"); 115 | pk(); 116 | continue; 117 | case 5: 118 | system("mode con cols=67 lines=17"); 119 | print_settings(); 120 | continue; 121 | case 6: 122 | help(); 123 | continue; 124 | default: 125 | break; 126 | } 127 | } 128 | } 129 | 130 | void menuPrint() 131 | { 132 | 133 | system("cls"); 134 | char name[10][sizeof(char) * 15] = { 135 | "exit.txt", 136 | "menu_1.txt", 137 | "menu_2.txt", 138 | "menu_3.txt", 139 | "menu_4.txt", 140 | "menu_5.txt", 141 | "menu_6.txt", 142 | }; 143 | 144 | char arr[1000]; //这里1000最为合适~2333 145 | memset(arr, 0, sizeof(char) * 1000); 146 | FILE *fp; 147 | fp = fopen(name[settings.mode], "r"); 148 | 149 | if (fp == NULL) 150 | { 151 | printf("cannot open %s\n", name[settings.mode]); 152 | exit(0); 153 | } 154 | /* 155 | char ch; 156 | while(!feof(fp)) { 157 | ch=fgetc(fp); 158 | putchar(ch); 159 | } 160 | 由于闪屏,所以不采用本段代码 161 | */ 162 | int h = 0; 163 | while (!feof(fp)) 164 | { 165 | fread(arr + h, sizeof(char), 1, fp); 166 | h++; 167 | } 168 | printf("%s", arr); //本段代码优化于2015-12-28 11:24:45 169 | //光标移动2015-12-31 15:28:56 170 | 171 | int a = (settings.mode == 0 ? 7 : settings.mode); 172 | goto_pos(52, 3 + a * 3); 173 | fclose(fp); 174 | } 175 | 176 | int move() 177 | { 178 | 179 | char key = 0; 180 | 181 | while (1) 182 | { 183 | 184 | fflush(stdin); //清除缓存数据 185 | key = getch(); 186 | if (key == 0 || key == -32 || key == 224) 187 | key = getch(); 188 | if (key == 72) 189 | settings.mode--; //... 190 | else if (key == 80) 191 | settings.mode++; 192 | else if (key >= 49 && key <= 54) 193 | return key - 48; 194 | else if (key == 48 || key == 27) 195 | exitGame(); 196 | else if (key == 13) 197 | if (settings.mode) 198 | return settings.mode; 199 | else 200 | exitGame(); 201 | else 202 | key = 0; 203 | 204 | if (settings.mode < 0) 205 | settings.mode = settings.mode + 7; 206 | if (settings.mode > 6) 207 | settings.mode = settings.mode - 7; 208 | 209 | menuPrint(); 210 | } 211 | 212 | return settings.mode; 213 | } 214 | 215 | void exitGame(void) 216 | { 217 | 218 | system("cls"); 219 | goto_pos(25, 13); 220 | printf("正在退出游戏...\n\t\t "); 221 | if (saved.saveSettings) 222 | save_settings(); 223 | Sleep(700); 224 | exit(0); 225 | } 226 | 227 | //------------------------------------------一级函数 228 | 229 | void userGet() 230 | { 231 | 232 | int a = 1; 233 | //如果userGetIn()的返回值为0则返回主菜单,否则继续执行userGetIn() 234 | while (a) 235 | { 236 | printf("计算%d点\n", N); 237 | a = userGetIn(); 238 | //system("pause"); 239 | } 240 | } 241 | 242 | void exercise() 243 | { 244 | 245 | int key = 10; 246 | system("cls"); 247 | printf("请通过4张牌之间的+-*/和(),计算出%d点\n", N); 248 | printf("按空格(Space键)继续,按其他键返回主菜单\n"); 249 | fflush(stdin); 250 | if ((key = getch()) == 32) 251 | ; 252 | else 253 | return; 254 | 255 | while (1) 256 | { 257 | 258 | system("cls"); 259 | randomGet(); 260 | printf("请输入算式: "); 261 | if (zhabi()) 262 | { 263 | printf("计算成功!\n"); 264 | printf("按空格(Space键)继续练习,按其他键返回主菜单\n"); 265 | fflush(stdin); 266 | if ((key = getch()) == 32) 267 | ; 268 | else 269 | return; 270 | } 271 | else 272 | { 273 | printf("计算失败!\n"); 274 | printf("按空格(Space键)正确结果,按其他键返回主菜单\n"); 275 | fflush(stdin); 276 | if ((key = getch()) == 32) 277 | { 278 | s_first(1); 279 | s_second(1); 280 | } 281 | else 282 | return; 283 | 284 | printf("按空格(Space键)继续练习,按其他键返回主菜单"); 285 | fflush(stdin); 286 | if ((key = getch()) == 32) 287 | ; 288 | else 289 | return; 290 | } 291 | //这里有个控制菜单 292 | } 293 | } 294 | 295 | void tianti() 296 | { 297 | 298 | int lever = 0; 299 | int key = 10; 300 | system("cls"); 301 | printf("请通过4张牌之间的+-*/和(),计算出%d点\n", N); 302 | printf("按空格(Space键)开始挑战,按其他键返回主菜单\n"); 303 | fflush(stdin); 304 | if ((key = getch()) == 32) 305 | ; 306 | else 307 | return; 308 | 309 | while (1) 310 | { 311 | 312 | system("cls"); 313 | printf("当前关卡: lever %d\n", lever); 314 | randomGet(); 315 | printf("请输入算式: "); 316 | if (zhabi()) 317 | { 318 | printf("计算成功!\n"); 319 | lever++; 320 | printf("按空格(Space键)继续挑战下一关,按其他键返回主菜单\n"); 321 | fflush(stdin); 322 | if ((key = getch()) == 32) 323 | ; 324 | else 325 | return; 326 | } 327 | else 328 | { 329 | printf("计算失败!\n"); 330 | printf("按空格(Space键)正确结果\n"); 331 | fflush(stdin); 332 | if ((key = getch()) == 32) 333 | { 334 | s_first(1); 335 | s_second(1); 336 | printf("\n按任意键返回主菜单..."); 337 | key = getch(); 338 | } 339 | else 340 | return; 341 | 342 | printf("按空格(Space键)继续练习,按其他键返回主菜单"); 343 | fflush(stdin); 344 | if ((key = getch()) == 32) 345 | ; 346 | else 347 | return; 348 | } 349 | //这里有个控制菜单 350 | } 351 | } 352 | 353 | void pk() 354 | { 355 | 356 | system("cls"); 357 | int a = 0, b = 0, key, sign; 358 | char A[20] = {0}; 359 | char B[20] = {0}; 360 | printf("pk模式!\n"); 361 | 362 | printf("请输入用户A的名字:"); 363 | fflush(stdin); 364 | scanf("%s", A); 365 | printf("请输入用户B的名字:"); 366 | fflush(stdin); 367 | scanf("%s", B); 368 | printf("按任意键开始 P K !!!\n"); 369 | key = getch(); 370 | 371 | while (1) 372 | { 373 | 374 | system("cls"); 375 | printf(" ------------------\n"); 376 | printf("当前分数 %s:%d %s:%d\n", A, a, B, b); 377 | printf(" ------------------\n"); 378 | 379 | randomGet(); 380 | fflush(stdin); 381 | printf("\n%s先算出来请按空格,\n%s先算出来请按回车,\n跳过此题请按其他任意键\n", A, B); 382 | if ((key = getch()) == 32) 383 | sign = 1; 384 | else if (key == 13) 385 | sign = 2; 386 | else 387 | sign = 0; 388 | 389 | if (sign == 1) 390 | { 391 | printf("请%s输入算式: ", A); 392 | if (zhabi()) 393 | a++; 394 | else 395 | { 396 | printf("不为%d点!计算失败,要扣%s 1分哦\n", N, A); 397 | a--; 398 | } 399 | } 400 | else if (sign == 2) 401 | { 402 | printf("请%s输入算式: ", B); 403 | if (zhabi()) 404 | b++; 405 | else 406 | { 407 | printf("不为%d点!计算失败,要扣%s 1分哦\n", N, B); 408 | b--; 409 | } 410 | } 411 | else 412 | ; 413 | 414 | printf(" ------------------\n"); 415 | printf("当前分数 %s:%d %s:%d\n", A, a, B, b); 416 | printf(" ------------------\n"); 417 | printf("要继续PK吗?继续请按空格或回车,结束PK请按其他键\n"); 418 | key = getch(); 419 | if (key == 13 || key == 32) 420 | ; 421 | else 422 | { 423 | if (a > b) 424 | printf("恭喜%s获胜\n", A); 425 | else if (a == b) 426 | printf("平局哦!\n"); 427 | else 428 | printf("恭喜%s获胜\n", B); 429 | system("pause"); 430 | break; 431 | } 432 | } 433 | } 434 | 435 | void print_settings() 436 | { 437 | 438 | char temp[4]; //临时记录扑克牌 439 | char isSave[2][10] = {"否", "是"}; 440 | 441 | int key = 0; 442 | while (1) 443 | { 444 | 445 | system("cls"); 446 | printf("\n\n"); 447 | printf("\t由于 C 语言 写出界面比较繁琐\n"); 448 | printf("\t这个设置界面暂时不支持上下滑动及回车选中\n"); 449 | printf("\t也不支持更改当前主题\n"); 450 | printf("\t请输入1~9修改设置项,输入0即可回到主菜单\n\n"); 451 | printf("\t1.当前下限(最小的扑克牌):%s\n", number_to_poker(float(saved.low), temp)); 452 | printf("\t2.当前上限(最大的扑克牌):%s\n", number_to_poker(float(saved.high), temp)); 453 | printf("\t3.is %d点(该项设置不会在下次游戏开启时载入...)\n", N); 454 | printf("\t8.重置所有设置(程序有bug时也可以重置)\n"); 455 | printf("\t9.下次运行游戏是否载入当前设置:%s\n", isSave[saved.saveSettings]); 456 | printf("\t0.返回菜单\n\n\t"); 457 | 458 | fflush(stdin); 459 | key = getch(); 460 | if (key >= 49 && key <= 59) 461 | change_settings(key - 48); 462 | else if (key == 48 || key == 27) 463 | { 464 | settings.mode = 1; //退出设置界面时光标移动到 1.帮我计算 465 | return; 466 | } 467 | else 468 | ; 469 | } 470 | } 471 | 472 | void help() 473 | { 474 | 475 | system("cls"); 476 | printf("\n"); 477 | printf(" - 4\n"); 478 | printf(" 22222 44\n"); 479 | printf(" 22 222 44 44\n"); 480 | printf(" 22 22 44 44\n"); 481 | printf(" 22 44 44\n"); 482 | printf(" 22 44 44\n"); 483 | printf(" 22 44 44\n"); 484 | printf(" 22 44 44\n"); 485 | printf(" 22 4444444444444444444444444\n"); 486 | printf(" 22 44\n"); 487 | printf(" 22 44\n"); 488 | printf(" 22 44\n"); 489 | printf(" 222222222222222222222 44\n"); 490 | 491 | printf("\n"); 492 | printf("\tHello,This is a little game written by Reigning.\n"); 493 | printf("\tIf you want to have a look on source code,\n"); 494 | printf("\tPlease invite https://Reigning.GitHub.io\n"); 495 | printf("\t原来c语言写界面这么..."); 496 | printf("\t好了,不吐槽了~2333\n"); 497 | printf("\t1.菜单界面既可以支持方向键(上下)+回车\n\t\t\t 也可以直接输入1.2.3.4.5.6.\n"); 498 | printf("\t2.其实不仅可以按 0 退出,而且可以按ESC退出\n"); 499 | printf("\t3.帮我计算可是支持小数的哦~亲\n"); 500 | printf("\t4.这个游戏不仅仅是计算24点,其他点数也可以哦,\n\t\t\t 不过其他点数不能是小数撒\n"); 501 | printf("\t5.程序还有些许隐藏Bug,由于课程设计时间紧迫,\n\t\t\t 没有时间一一测试修复,以后会持续更新\n"); 502 | printf("\t请按任意键继续..."); 503 | fflush(stdin); 504 | int key; 505 | key = getch(); 506 | } 507 | 508 | //------------------------------------------二级函数 509 | 510 | void change_settings(int num) 511 | { 512 | 513 | char poker[5]; 514 | memset(poker, 0, sizeof(char) * 5); 515 | fflush(stdin); 516 | switch (num) 517 | { 518 | case 1: 519 | printf("请输入当前下限(最小的扑克牌):"); 520 | scanf("%s", poker); 521 | saved.low = (int)(poker_to_number(poker)); 522 | break; 523 | case 2: 524 | printf("请输入当前上限(最大的扑克牌):"); 525 | scanf("%s", poker); 526 | saved.high = (int)(poker_to_number(poker)); 527 | break; 528 | case 3: 529 | printf("请输入当前点数(默认为24):"); 530 | scanf("%d", &N); 531 | break; 532 | case 8: 533 | resetting(); 534 | save_settings(); 535 | break; 536 | case 9: 537 | if (saved.saveSettings) 538 | saved.saveSettings = 0; 539 | else 540 | saved.saveSettings = 1; 541 | break; 542 | default: 543 | break; 544 | } 545 | } 546 | 547 | void save_settings() 548 | { 549 | 550 | FILE *fp; 551 | if ((fp = fopen("is24.set", "w")) != NULL) 552 | fwrite(&saved, sizeof(struct saved_set), 1, fp); 553 | } 554 | 555 | void initSettings_temp() 556 | { 557 | 558 | settings.mode = 1; 559 | } 560 | 561 | void resetting() 562 | { 563 | 564 | settings.mode = 1; //模式 帮我计算 565 | saved.low = 1; //下限为1 566 | saved.high = 13; //上限为13 567 | saved.saveSettings = 0; //是否保存当前设置 568 | N = 24; 569 | } 570 | 571 | void read_settings() 572 | { 573 | 574 | FILE *fp; 575 | resetting(); 576 | if ((fp = fopen("is24.set", "r")) == NULL) 577 | { 578 | system("mode con cols=67 lines=29"); 579 | save_settings(); 580 | help(); //第一次打开游戏时显示帮助界面 581 | } 582 | else 583 | { 584 | if ((fread(&saved, sizeof(saved_set), 1, fp)) != 1) 585 | resetting(); 586 | } 587 | } 588 | 589 | char *number_to_poker(float number, char *temp) 590 | { 591 | 592 | memset(temp, 0, sizeof(char) * 4); 593 | 594 | if (number == 1) 595 | return "A"; 596 | else if (number == 11) 597 | return "J"; 598 | else if (number == 12) 599 | return "Q"; 600 | else if (number == 13) 601 | return "K"; 602 | else if (number == 10) 603 | return "10"; 604 | else if (number > 1 && number < 10) 605 | { 606 | temp[0] = '0' + (int)number; 607 | return temp; 608 | } 609 | else 610 | return NULL; 611 | } 612 | 613 | float poker_to_number(char *poker) 614 | { 615 | 616 | if (*poker == 'j' || *poker == 'J') 617 | return 11; 618 | else if (*poker == 'q' || *poker == 'Q') 619 | return 12; 620 | else if (*poker == 'k' || *poker == 'K') 621 | return 13; 622 | else if (*poker == 'a' || *poker == 'A') 623 | return 1; 624 | else 625 | return (float)(atof(poker)); 626 | } 627 | 628 | void initAllFromCon() 629 | { 630 | 631 | int i; 632 | for (i = 0; i < 4; i++) 633 | { 634 | arr[i] = con[i]; 635 | cur[i] = con[i]; 636 | } 637 | } 638 | 639 | void initArrFromCur() 640 | { 641 | 642 | int g; 643 | for (g = 0; g < 4; g++) 644 | arr[g] = cur[g]; 645 | } 646 | 647 | float calc(float n1, float n2, char o) 648 | { 649 | 650 | switch (o) 651 | { 652 | case '+': 653 | return (n1 + n2); 654 | case '-': 655 | return (n1 - n2); 656 | case '*': 657 | return (n1 * n2); 658 | case '/': 659 | if (n2 == 0) 660 | return -30000; 661 | else 662 | return (n1 / n2); 663 | default: 664 | exit(-1); 665 | } 666 | } 667 | 668 | void randomGet() 669 | { 670 | 671 | int i; 672 | while (1) 673 | { 674 | 675 | for (i = 0; i < 4; i++) 676 | con[i] = (float)(rand() % saved.high + saved.low); 677 | if (s_first(0) || s_second(0)) 678 | { 679 | for (i = 0; i < 4; i++) 680 | printf("%g ", con[i]); 681 | break; 682 | } 683 | else 684 | continue; 685 | } 686 | } 687 | 688 | void printResult_1(int a, int b, int c) 689 | { 690 | 691 | if ((a == 0 || a == 1) && (b == 2 || b == 3)) 692 | printf("(%g%c%g)%c%g%c%g=%d\n", cur[0], op[a], cur[1], op[b], cur[2], op[c], cur[3], N); 693 | else if ((b == 0 || b == 1) && (c == 2 || c == 3)) 694 | printf("(%g%c%g%c%g)%c%g=%d\n", cur[0], op[a], cur[1], op[b], cur[2], op[c], cur[3], N); 695 | else 696 | printf("%g%c%g%c%g%c%g=%d\n", cur[0], op[a], cur[1], op[b], cur[2], op[c], cur[3], N); 697 | } 698 | 699 | void printResult_2(int a, int b, int c) 700 | { 701 | 702 | printf("(%g%c%g)%c(%g%c%g)=%d\n", cur[0], op[a], cur[1], op[c], cur[2], op[b], cur[3], N); 703 | } 704 | 705 | //模拟平衡二叉树之单挂 706 | 707 | int s_first(int isPrint) 708 | { 709 | 710 | int result = 0; 711 | 712 | int a, b, c; 713 | int j, k; 714 | 715 | int sort[4][4] = { 716 | {1, 2, 3, 4}, 717 | {2, 3, 4, 1}, 718 | {2, 3, 1, 4}, 719 | {3, 4, 2, 1}, 720 | }; 721 | 722 | for (j = 0; j < 4; j++) 723 | { 724 | 725 | for (k = 0; k < 4; k++) 726 | cur[k] = con[sort[j][k] - 1]; 727 | 728 | for (a = 0; a < 4; a++) 729 | { 730 | for (b = 0; b < 4; b++) 731 | { 732 | for (c = 0; c < 4; c++) 733 | { 734 | 735 | initArrFromCur(); 736 | 737 | arr[1] = calc(arr[0], arr[1], op[a]); 738 | arr[2] = calc(arr[1], arr[2], op[b]); 739 | arr[3] = calc(arr[2], arr[3], op[c]); 740 | if (fabs(arr[3] - N) <= 0.1) 741 | { 742 | result = 1; 743 | if (isPrint) 744 | printResult_1(a, b, c); 745 | else 746 | return result; 747 | } 748 | } 749 | } 750 | } 751 | } 752 | 753 | initAllFromCon(); 754 | return result; 755 | } 756 | 757 | //模拟平衡二叉树之双链 758 | 759 | int s_second(int isPrint) 760 | { 761 | 762 | int result = 0; 763 | 764 | int a, b, c; 765 | int j, k; 766 | 767 | int sort[3][4] = { 768 | {1, 2, 3, 4}, 769 | {1, 3, 2, 4}, 770 | {1, 4, 2, 3}, 771 | }; 772 | 773 | for (j = 0; j < 3; j++) 774 | { 775 | 776 | for (k = 0; k < 4; k++) 777 | cur[k] = con[sort[j][k] - 1]; 778 | 779 | for (a = 0; a < 2; a++) 780 | { 781 | for (b = 0; b < 2; b++) 782 | { 783 | for (c = 2; c < 4; c++) 784 | { 785 | 786 | initArrFromCur(); 787 | 788 | arr[1] = calc(arr[0], arr[1], op[a]); 789 | arr[2] = calc(arr[2], arr[3], op[b]); 790 | arr[3] = calc(arr[1], arr[2], op[c]); 791 | if (fabs(arr[3] - N) <= 0.1) 792 | { 793 | result = 1; 794 | if (isPrint) 795 | printResult_2(a, b, c); 796 | else 797 | return result; 798 | } 799 | } 800 | } 801 | } 802 | } 803 | 804 | initAllFromCon(); 805 | return result; 806 | } 807 | 808 | int userGetIn() 809 | { 810 | 811 | system("cls"); 812 | int i; 813 | int key = 0; 814 | int sign = 0; 815 | char input[4][10]; 816 | for (i = 0; i < 4; i++) 817 | memset(input[i], 0, sizeof(char) * 10); 818 | //雕虫小技,下面有个 可以识别 JQKA jqka space enter 的函数,让使用着随心输入 819 | fflush(stdin); //清除缓存数据 820 | printf("请输入四张牌,并用空格隔开."); 821 | printf("请输入: "); 822 | for (i = 0; i < 4; i++) 823 | { 824 | scanf("%10s", input[i]); 825 | } 826 | for (i = 0; i < 4; i++) 827 | { 828 | con[i] = poker_to_number(input[i]); 829 | if (con[i] < saved.low || con[i] > saved.high) 830 | { 831 | printf("第%d组数据输入失败!请重新输入四张牌\n", i + 1); 832 | system("pause"); 833 | return -1; 834 | } 835 | } 836 | 837 | initAllFromCon(); 838 | if (s_first(1)) 839 | sign = 1; 840 | if (s_second(1)) 841 | sign = 1; 842 | if (sign) 843 | printf("计算完成!\n"); 844 | else 845 | printf("噫,算不出来哦\n"); 846 | printf("是否继续帮我计算%d点?\n", N); 847 | printf("按ESC或0返回主菜单,按其他键继续\n"); 848 | fflush(stdin); 849 | key = getch(); 850 | if (key == 27 || key == 48) 851 | return 0; 852 | else 853 | userGetIn(); 854 | 855 | //这里使用了递归 未做负载测试 856 | return 0; 857 | } 858 | 859 | //------------------------------------------逗比函数 860 | 861 | char *keyControl_to_charPointer(int key) 862 | { 863 | 864 | int key_2 = 0; 865 | if (key == 224) 866 | key_2 = getch(); 867 | return NULL; //未完成 868 | } 869 | 870 | char key_to_char(int key) 871 | { 872 | 873 | if (key >= 48 && key <= 57) 874 | return '0' + key - 48; //键盘数字0->9 875 | else if (key >= 96 && key <= 105) 876 | return '0' + key - 96; //小键盘数字0->9 877 | else if (key >= 65 && key <= 90) 878 | return 'A' + key - 65; //小键盘数字0->9 879 | else if (key >= 97 && key <= 122) 880 | return 'a' + key - 97; //小键盘数字0->9 881 | else if (key == 43) 882 | return '+'; 883 | else if (key == 45) 884 | return '-'; 885 | else if (key == 42) 886 | return '*'; 887 | else if (key == 47) 888 | return '/'; 889 | else if (key == 61) 890 | return '='; 891 | else if (key == 40) 892 | return '('; 893 | else if (key == 41) 894 | return ')'; 895 | else 896 | return NULL; 897 | } 898 | 899 | //------------------------------------------测试函数 900 | 901 | int test(void) 902 | { 903 | 904 | randomGet(); 905 | 906 | initAllFromCon(); 907 | 908 | s_first(1); 909 | s_second(1); 910 | system("pause"); 911 | 912 | return 0; 913 | } 914 | 915 | //------------------------------------------渣比函数 916 | 917 | void translate(char str[], char exp[]) 918 | { 919 | struct 920 | { 921 | char data[100]; 922 | int top; 923 | } op; 924 | char ch; 925 | int i = 0, t = 0; 926 | op.top = -1; 927 | ch = str[i]; 928 | i++; 929 | while (ch != '\0') 930 | { 931 | switch (ch) 932 | { 933 | case '(': 934 | op.top++; 935 | op.data[op.top] = ch; 936 | break; 937 | case ')': 938 | while (op.data[op.top] != '(') 939 | { 940 | exp[t] = op.data[op.top]; 941 | op.top--; 942 | t++; 943 | } 944 | op.top--; 945 | break; 946 | case '+': 947 | case '-': 948 | while (op.top != -1 && op.data[op.top] != '(') 949 | { 950 | exp[t] = op.data[op.top]; 951 | op.top--; 952 | t++; 953 | } 954 | op.top++; 955 | op.data[op.top] = ch; 956 | break; 957 | case '*': 958 | case '/': 959 | while (op.top == '/' || op.top == '*') 960 | { 961 | exp[t] = op.data[op.top]; 962 | op.top--; 963 | t++; 964 | } 965 | op.top++; 966 | op.data[op.top] = ch; 967 | break; 968 | case ' ': 969 | break; 970 | default: 971 | while (ch >= '0' && ch <= '9') 972 | { 973 | exp[t] = ch; 974 | t++; 975 | ch = str[i]; 976 | i++; 977 | } 978 | i--; 979 | exp[t] = '#'; 980 | t++; 981 | } 982 | ch = str[i]; 983 | i++; 984 | } 985 | while (op.top != -1) 986 | { 987 | exp[t] = op.data[op.top]; 988 | t++; 989 | op.top--; 990 | } 991 | exp[t] = '\0'; 992 | } 993 | float cal_value(char exp[]) 994 | { 995 | struct 996 | { 997 | float data[100]; 998 | int top; 999 | } st; 1000 | float d; 1001 | char ch; 1002 | int t = 0; 1003 | st.top = -1; 1004 | ch = exp[t]; 1005 | t++; 1006 | while (ch != '\0') 1007 | { 1008 | switch (ch) 1009 | { 1010 | case '+': 1011 | st.data[st.top - 1] = st.data[st.top - 1] + st.data[st.top]; 1012 | st.top--; 1013 | break; 1014 | case '-': 1015 | st.data[st.top - 1] = st.data[st.top - 1] - st.data[st.top]; 1016 | st.top--; 1017 | break; 1018 | case '*': 1019 | st.data[st.top - 1] = st.data[st.top - 1] * st.data[st.top]; 1020 | st.top--; 1021 | break; 1022 | case '/': 1023 | if (st.data[st.top] != 0) 1024 | st.data[st.top - 1] = st.data[st.top - 1] / st.data[st.top]; 1025 | else 1026 | { 1027 | printf("\n\t除0是错误的"); 1028 | st.data[st.top - 1] = -3000; 1029 | } 1030 | st.top--; 1031 | break; 1032 | default: 1033 | d = 0; 1034 | while (ch >= '0' && ch <= '9') 1035 | { 1036 | d = 10 * d + ch - '0'; 1037 | ch = exp[t]; 1038 | t++; 1039 | } 1040 | st.top++; 1041 | st.data[st.top] = d; 1042 | } 1043 | ch = exp[t]; 1044 | t++; 1045 | } 1046 | return st.data[st.top]; 1047 | } 1048 | 1049 | int zhabi() 1050 | { 1051 | char str[100], exp[100]; 1052 | fflush(stdin); 1053 | memset(str, 0, sizeof(char) * 100); 1054 | scanf("%99s", str); 1055 | char *p = str; 1056 | while (*p != '\0') 1057 | { 1058 | if (*p == '=') 1059 | *p = '\0'; 1060 | p++; 1061 | } 1062 | translate(str, exp); 1063 | float a = cal_value(exp); 1064 | printf("计算结果:%g\n", a); 1065 | //system("pause"); 1066 | if (a == N) 1067 | return 1; 1068 | return 0; 1069 | } 1070 | 1071 | void goto_pos(int x, int y) 1072 | { 1073 | 1074 | COORD coord = {x, y}; 1075 | SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 1076 | } -------------------------------------------------------------------------------- /1.11-24点游戏/is24.set: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/is24.set -------------------------------------------------------------------------------- /1.11-24点游戏/menu_1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_1.txt -------------------------------------------------------------------------------- /1.11-24点游戏/menu_2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_2.txt -------------------------------------------------------------------------------- /1.11-24点游戏/menu_3.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_3.txt -------------------------------------------------------------------------------- /1.11-24点游戏/menu_4.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_4.txt -------------------------------------------------------------------------------- /1.11-24点游戏/menu_5.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_5.txt -------------------------------------------------------------------------------- /1.11-24点游戏/menu_6.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/menu_6.txt -------------------------------------------------------------------------------- /1.11-24点游戏/test 测试程序/keyTest 键值检测.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | int main(void) 4 | { 5 | printf("\n\t\t\t死循环,退出时请直接叉掉\n\n\t\t\t\t"); 6 | int key = 0; 7 | while (1) 8 | { 9 | key = getch(); 10 | printf("%d\n\t\t\t\t", key); 11 | } 12 | return 0; 13 | } -------------------------------------------------------------------------------- /1.11-24点游戏/test 测试程序/simpleCalculator 支持括号的简单计算器.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | char op[4] = {'+', '-', '*', '/'}; 6 | 7 | float calc(float n1, float n2, char o) 8 | { 9 | 10 | switch (o) 11 | { 12 | case '+': 13 | return (n1 + n2); 14 | case '-': 15 | return (n1 - n2); 16 | case '*': 17 | return (n1 * n2); 18 | case '/': 19 | if (n2 == 0) 20 | return -30000; 21 | else 22 | return (n1 / n2); 23 | default: 24 | exit(-1); 25 | } 26 | } 27 | 28 | int find(char *p) 29 | { 30 | 31 | int i = 0; 32 | while (*p != '\0' && *p != '=' && i < 2) 33 | if (*p == '(') 34 | return 1; 35 | else if (*p == '+' || *p == '-' || *p == '*' || *p == '/' || *p == ')') 36 | i++, p++; 37 | else 38 | p++; 39 | return 0; 40 | } 41 | 42 | float sum(char *p, float result) 43 | { 44 | 45 | //9*(3+6*(7+8))= 46 | float a, b; 47 | do 48 | { 49 | if (*p == '(') 50 | { 51 | if (*(++p) == '(') 52 | { 53 | result = sum(p + 1, result); 54 | while (*p != ')') 55 | p++; 56 | p++; 57 | } 58 | else 59 | { 60 | result = sum(p, result); 61 | while (*p != ')') 62 | p++; 63 | p++; 64 | } 65 | } 66 | else if (*p >= '0' && *p <= '9') 67 | { 68 | 69 | a = (float)atof(p); 70 | while ((*p >= '0' && *p <= '9') || *p == '.') 71 | p++; 72 | if (*(p + 1) == '(') 73 | { 74 | result = calc(a, sum(p + 2, result), *p); 75 | return result; 76 | } 77 | else 78 | { 79 | b = (float)atof(p); 80 | result = calc(a, b, *p); 81 | return result; 82 | } 83 | } 84 | else if (*p == '+' || *p == '-' || *p == '*' || *p == '/' || *p == ')') 85 | { 86 | 87 | if (*p == ')') 88 | p++; 89 | 90 | if (find(p)) 91 | { //后面有'(' 92 | char ch = *p; 93 | while (*p != '(') 94 | p++; //p指向下一个'(' 95 | result = calc(result, sum(p, 0), ch); 96 | while (*p != ')') 97 | p++; 98 | p++; //p跳到下一个')' 99 | } 100 | else 101 | { 102 | b = (float)atof(p + 1); 103 | result = calc(result, b, *p); 104 | p++; 105 | while ((*p >= '0' && *p <= '9') || *p == '.') 106 | p++; 107 | } 108 | } 109 | else 110 | return result; 111 | } while (*p != '='); 112 | 113 | return result; 114 | } 115 | 116 | int main(void) 117 | { 118 | 119 | char arr[30]; 120 | memset(arr, 0, sizeof(char) * 30); 121 | scanf("%s", arr); 122 | 123 | float b; 124 | b = sum(arr, 0); 125 | printf("%g\n", b); 126 | 127 | return 0; 128 | } 129 | -------------------------------------------------------------------------------- /1.11-24点游戏/参考资料/24 点问题的一种简易算法的设计与实现.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/参考资料/24 点问题的一种简易算法的设计与实现.doc -------------------------------------------------------------------------------- /1.11-24点游戏/参考资料/24点 游戏无重解算法的研究与探讨.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/参考资料/24点 游戏无重解算法的研究与探讨.doc -------------------------------------------------------------------------------- /1.11-24点游戏/参考资料/一个简易24点计算器.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | char op[3], o[5] = "+-*/"; 6 | float n[4], on[10]; 7 | int used[4] = {0}, top = 0, tp = 0, x; 8 | 9 | void chk(float k); 10 | void search24(int d); 11 | float calc(float n1, float n2, char o); 12 | void make(int i, float p, float q, char o, int d); 13 | 14 | int main(void) 15 | { 16 | printf("please input 4 card number:\n"); 17 | scanf("%f%f%f%f", &n[0], &n[1], &n[2], &n[3]); 18 | 19 | search24(0); 20 | printf("No answer.\n"); 21 | 22 | return 0; 23 | } 24 | 25 | void chk(float k) 26 | { 27 | if ((tp != 3) || (fabs(k - 24.0) > 0.000001)) //没有用完3个运算符或者结果不为24就退出. 28 | return; 29 | for (x = 0; x < 5; x += 2) //这样设计是为了使3个选中的符号都可以得到输出. 30 | printf("%g%c%g=%g\n", on[x], op[x / 2], on[x + 1], //分析得到的. 31 | calc(on[x], on[x + 1], op[x / 2])); 32 | system("pause"); 33 | exit(0); 34 | } 35 | float calc(float n1, float n2, char o) 36 | { 37 | 38 | switch (o) 39 | { 40 | case '+': 41 | return (n1 + n2); 42 | case '-': 43 | return (n1 - n2); 44 | case '*': 45 | return (n1 * n2); 46 | case '/': 47 | return (n1 / n2); 48 | default: 49 | exit(0); 50 | } 51 | } 52 | void make(int i, float p, float q, char o, int d) 53 | { 54 | if (fabs(q) > 0.000001 || o != '/') //除数不为0,或者为0的时候不能为除数. 55 | n[i] = calc(p, q, o); 56 | op[tp++] = o; 57 | 58 | chk(n[i]); 59 | search24(d + 1); 60 | tp--; //因为是全是全局变量,所以在做试验性的循环递归问题时,如果失败,要在递归函数后面重新恢复回原来的值 61 | } 62 | 63 | void search24(int d) 64 | { 65 | int i, j, k; 66 | float p, q; 67 | if (d >= 3) //控制递归深度,就是运算符的输出个数. 68 | return; 69 | for (i = 0; i < 4; i++) 70 | for (j = 0; j < 4; j++) 71 | if ((i != j) && (used[i] + used[j] == 0)) //i!=j是防止重复,(used[i]+used[j] == 0)是防止又再匹配已经用过的j, 72 | //但是i可以新来. 73 | { 74 | used[j] = 1; //j得到匹配之后,赋值为1,表示已经使用 75 | p = n[i]; 76 | q = n[j]; 77 | on[top++] = p; 78 | on[top++] = q; 79 | for (k = 0; k < 4; k++) //运算符的循环试用. 80 | make(i, p, q, o[k], d); 81 | n[i] = p; //因为是全是全局变量,所以在做试验性的循环递归问题时, 82 | used[j] = 0; //如果失败,要在递归函数后面重新恢复回原来的值 83 | top -= 2; // 84 | } 85 | } -------------------------------------------------------------------------------- /1.11-24点游戏/参考资料/一个简易递归计算器.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/1.11-24点游戏/参考资料/一个简易递归计算器.txt -------------------------------------------------------------------------------- /1.11-24点游戏/参考资料/支持括号的简单计算器.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #define MaxSize 99 4 | void translate(char str[], char exp[]) 5 | { 6 | struct 7 | { 8 | char data[MaxSize]; 9 | int top; 10 | } op; 11 | char ch; 12 | int i = 0, t = 0; 13 | op.top = -1; 14 | ch = str[i]; 15 | i++; 16 | while (ch != '\0') 17 | { 18 | switch (ch) 19 | { 20 | case '(': 21 | op.top++; 22 | op.data[op.top] = ch; 23 | break; 24 | case ')': 25 | while (op.data[op.top] != '(') 26 | { 27 | exp[t] = op.data[op.top]; 28 | op.top--; 29 | t++; 30 | } 31 | op.top--; 32 | break; 33 | case '+': 34 | case '-': 35 | while (op.top != -1 && op.data[op.top] != '(') 36 | { 37 | exp[t] = op.data[op.top]; 38 | op.top--; 39 | t++; 40 | } 41 | op.top++; 42 | op.data[op.top] = ch; 43 | break; 44 | case '*': 45 | case '/': 46 | while (op.top == '/' || op.top == '*') 47 | { 48 | exp[t] = op.data[op.top]; 49 | op.top--; 50 | t++; 51 | } 52 | op.top++; 53 | op.data[op.top] = ch; 54 | break; 55 | case ' ': 56 | break; 57 | default: 58 | while (ch >= '0' && ch <= '9') 59 | { 60 | exp[t] = ch; 61 | t++; 62 | ch = str[i]; 63 | i++; 64 | } 65 | i--; 66 | exp[t] = '#'; 67 | t++; 68 | } 69 | ch = str[i]; 70 | i++; 71 | } 72 | while (op.top != -1) 73 | { 74 | exp[t] = op.data[op.top]; 75 | t++; 76 | op.top--; 77 | } 78 | exp[t] = '\0'; 79 | } 80 | float cal_value(char exp[]) 81 | { 82 | struct 83 | { 84 | float data[MaxSize]; 85 | int top; 86 | } st; 87 | float d; 88 | char ch; 89 | int t = 0; 90 | st.top = -1; 91 | ch = exp[t]; 92 | t++; 93 | while (ch != '\0') 94 | { 95 | switch (ch) 96 | { 97 | case '+': 98 | st.data[st.top - 1] = st.data[st.top - 1] + st.data[st.top]; 99 | st.top--; 100 | break; 101 | case '-': 102 | st.data[st.top - 1] = st.data[st.top - 1] - st.data[st.top]; 103 | st.top--; 104 | break; 105 | case '*': 106 | st.data[st.top - 1] = st.data[st.top - 1] * st.data[st.top]; 107 | st.top--; 108 | break; 109 | case '/': 110 | if (st.data[st.top] != 0) 111 | st.data[st.top - 1] = st.data[st.top - 1] / st.data[st.top]; 112 | else 113 | { 114 | printf("\n\t除0是错误的"); 115 | st.data[st.top - 1] = -3000; 116 | } 117 | st.top--; 118 | break; 119 | default: 120 | d = 0; 121 | while (ch >= '0' && ch <= '9') 122 | { 123 | d = 10 * d + ch - '0'; 124 | ch = exp[t]; 125 | t++; 126 | } 127 | st.top++; 128 | st.data[st.top] = d; 129 | } 130 | ch = exp[t]; 131 | t++; 132 | } 133 | return st.data[st.top]; 134 | } 135 | int main() 136 | { 137 | char str[MaxSize], exp[MaxSize]; 138 | printf("请输入一个求值表达式\n"); 139 | printf("表达式:"); 140 | gets(str); 141 | translate(str, exp); 142 | printf("计算结果:%g\n", cal_value(exp)); 143 | system("pause"); 144 | return 0; 145 | } -------------------------------------------------------------------------------- /2.4- C 语言代码去注释/annotation-processing.c: -------------------------------------------------------------------------------- 1 | /* 2 | 2.4-xxx 高级语言源程序注释部分的处理(难度系数:4级) 3 | 【任务描述】 4 | 将C语言程序中的所有注释都去掉,并将去掉注释的文件和注释分别放入一个新的文件中。 5 | 6 | 【功能描述】 7 | (1)读取用户指定名字的源程序,例如,用户输入:exercise.cpp,程序能读取该文件进行处理。 8 | (2)将文件中的注释 9 | (3)将去掉的注释部分和删除注释后的C语言程序,分别保存到两个不同的文件中,文件名允许用户指定。 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #define MAX_READ 30000 19 | 20 | //---------------------------------------------------函数列表 21 | 22 | int first(void); //读取本地文件进行代码与注释分离 23 | int second(void); //在框框里面输入代码分离注释 24 | void menuPrint(int i); //根据光标的位置打印出对应的菜单 25 | int move(); //移动光标 26 | int main(void); //主函数 27 | 28 | //--------------------------------------------------- 29 | 30 | int first(void) 31 | { 32 | 33 | //输入文件名称 34 | 35 | FILE *fp = NULL; 36 | 37 | int i, j; 38 | int quit = 1; 39 | char ch; 40 | char name[70]; 41 | memset(name, 0, sizeof(char) * 70); 42 | 43 | while (quit) 44 | { 45 | 46 | printf("请输入文件名称...默认后缀: *.cpp\n"); 47 | scanf("%50s", name); 48 | 49 | printf("您输入的是: "); 50 | j = printf("%s", name); 51 | printf("\n"); 52 | if (j == 0) 53 | { 54 | printf("输入为空,请重新输入!\n"); 55 | continue; 56 | } 57 | for (i = 0; i < j; i++) 58 | if (name[i] == '.') 59 | break; 60 | if (i == j) 61 | strcpy(&name[i], ".cpp"); 62 | 63 | if ((fp = fopen(name, "r")) == NULL) 64 | { 65 | 66 | printf("文件没有找到 %s ,读取文件失败\n", name); 67 | printf("是否重新输入文件名? y/n ? "); 68 | fflush(stdin); 69 | if ((ch = getchar()) == 124) 70 | continue; 71 | else 72 | quit = 0; 73 | } 74 | 75 | quit = 0; //读取成功了...下次不再进行死循环 76 | } 77 | 78 | char first[MAX_READ]; //first用来存放文件数据 79 | memset(first, 0, sizeof(char) * MAX_READ); 80 | 81 | printf("正在读取 %s ...\n", name); 82 | 83 | for (i = 0; (!feof(fp)) && i < MAX_READ; i++) 84 | { 85 | 86 | if (fread(first + i, sizeof(char), 1, fp) != 1) 87 | { 88 | printf("共计读取%d个字符\n", i + 1); 89 | } 90 | } 91 | fclose(fp); 92 | 93 | FILE *second = NULL; //second用来存放源代码 94 | 95 | quit = 1; 96 | char name_1[70]; 97 | memset(name_1, 0, sizeof(char) * 70); 98 | 99 | while (quit) 100 | { 101 | 102 | printf("请输入要存放源代码的文件名...默认后缀: *.cpp\n"); 103 | scanf("%50s", name_1); 104 | 105 | printf("您输入的是: "); 106 | j = printf("%s", name_1); 107 | printf("\n"); 108 | if (j == 0) 109 | { 110 | printf("输入为空,请重新输入!\n"); 111 | continue; 112 | } 113 | for (i = 0; i < j; i++) 114 | if (name_1[i] == '.') 115 | break; 116 | if (i == j) 117 | strcpy(&name_1[i], ".cpp"); 118 | 119 | if ((second = fopen(name_1, "w")) == NULL) 120 | { 121 | 122 | printf("文件 %s 创建或读取文件失败\n请检查当前用户权限!\n", name_1); 123 | exit(-2); 124 | } 125 | 126 | quit = 0; 127 | } 128 | 129 | FILE *third = NULL; //third用来存放注释部分 130 | 131 | quit = 1; 132 | char name_2[70]; 133 | memset(name_2, 0, sizeof(char) * 70); 134 | 135 | while (quit) 136 | { 137 | 138 | printf("请输入要存放注释的文件名...默认后缀: *.txt\n"); 139 | scanf("%50s", name_2); 140 | 141 | printf("您输入的是: "); 142 | j = printf("%s", name_2); 143 | printf("\n"); 144 | if (j == 0) 145 | { 146 | printf("输入为空,请重新输入!\n"); 147 | continue; 148 | } 149 | for (i = 0; i < j; i++) 150 | if (name_2[i] == '.') 151 | break; 152 | if (i == j) 153 | strcpy(&name_2[i], ".txt"); 154 | 155 | if ((third = fopen(name_2, "w")) == NULL) 156 | { 157 | 158 | printf("文件 %s 创建或读取文件失败\n请检查当前用户权限!\n", name_2); 159 | exit(-2); 160 | } 161 | 162 | quit = 0; 163 | } 164 | 165 | //开始输出源代码到name_1.cpp 166 | 167 | int sign = 0; 168 | int count = 0; 169 | char *p = NULL; 170 | char *q = NULL; 171 | p = first; 172 | q = first + 1; 173 | 174 | while (*p != '\0') 175 | { 176 | 177 | if (*p == '/' && *q == '/') 178 | { 179 | 180 | for (;; p++, q++, count++) 181 | { 182 | 183 | //fwrite(p,sizeof(char),1,third); 184 | fputc(*p, third); 185 | if (*p == '\n' || *p == '\0') 186 | break; 187 | } 188 | } 189 | else if (*p == '/' && *q == '*') 190 | { 191 | 192 | for (; *p != '\0'; p++, q++, count++) 193 | { 194 | 195 | fputc(*p, third); 196 | 197 | if (*p == '*' && *q == '/') 198 | { 199 | 200 | //fwrite(p,sizeof(char),1,third); 201 | //fwrite(q,sizeof(char),1,third); 202 | fputc(*q, third); 203 | fputc('\n', third); 204 | p++; 205 | q = p + 1; 206 | break; 207 | } 208 | } 209 | } 210 | else 211 | //fprintf(second,"%c",p); 212 | fputc(*p, second); 213 | 214 | p++; 215 | q++; 216 | } 217 | 218 | printf("操作成功!正在返回主菜单...\n"); 219 | fclose(second); 220 | fclose(third); 221 | 222 | Sleep(1500); 223 | return 0; 224 | } 225 | 226 | int second(void) 227 | { 228 | 229 | //输入代码 230 | 231 | system("mode con cols=100 lines=3000"); 232 | int i, j; 233 | int quit = 1; 234 | char ch = ' '; 235 | 236 | char first[MAX_READ]; //first用来存放文件数据 237 | memset(first, 0, sizeof(char) * MAX_READ); 238 | 239 | i = 0; 240 | printf("请输入程序代码...按@键结束输入\n"); 241 | while (1) 242 | { 243 | 244 | ch = getchar(); 245 | if (ch != '@') 246 | first[i++] = ch; 247 | else 248 | break; 249 | } 250 | 251 | printf("正在读取...\n"); 252 | 253 | /****************************************************************/ 254 | 255 | FILE *second; //second用来存放源代码 256 | 257 | quit = 1; 258 | char name_1[70]; 259 | memset(name_1, 0, sizeof(char) * 70); 260 | 261 | while (quit) 262 | { 263 | 264 | printf("请输入要存放源代码的文件名...默认后缀: *.cpp\n"); 265 | scanf("%50s", name_1); 266 | 267 | printf("您输入的是: "); 268 | j = printf("%s", name_1); 269 | printf("\n"); 270 | if (j == 0) 271 | { 272 | printf("输入为空,请重新输入!\n"); 273 | continue; 274 | } 275 | for (i = 0; i < j; i++) 276 | if (name_1[i] == '.') 277 | break; 278 | if (i == j) 279 | strcpy(&name_1[i], ".cpp"); 280 | 281 | if ((second = fopen(name_1, "w")) == NULL) 282 | { 283 | 284 | printf("文件 %s 创建或读取文件失败\n请检查当前用户权限!\n", name_1); 285 | exit(-2); 286 | } 287 | 288 | quit = 0; 289 | } 290 | 291 | /****************************************************************/ 292 | 293 | FILE *third; //third用来存放注释部分 294 | 295 | quit = 1; 296 | char name_2[70]; 297 | memset(name_2, 0, sizeof(char) * 70); 298 | 299 | while (quit) 300 | { 301 | 302 | printf("请输入要存放注释的文件名...默认后缀: *.txt\n"); 303 | scanf("%50s", name_2); 304 | 305 | printf("您输入的是: "); 306 | j = printf("%s", name_2); 307 | printf("\n"); 308 | if (j == 0) 309 | { 310 | printf("输入为空,请重新输入!\n"); 311 | continue; 312 | } 313 | for (i = 0; i < j; i++) 314 | if (name_2[i] == '.') 315 | break; 316 | if (i == j) 317 | strcpy(&name_2[i], ".txt"); 318 | 319 | if ((third = fopen(name_2, "w")) == NULL) 320 | { 321 | 322 | printf("文件 %s 创建或读取文件失败\n请检查当前用户权限!\n", name_2); 323 | exit(-2); 324 | } 325 | 326 | quit = 0; 327 | } 328 | 329 | /****************************************************************/ 330 | 331 | //开始输出源代码到name_1.cpp 332 | 333 | int sign = 0; 334 | int count = 0; 335 | char *p = NULL; 336 | char *q = NULL; 337 | p = first; 338 | q = first + 1; 339 | 340 | while (*p != '\0') 341 | { 342 | 343 | if (*p == '/' && *q == '/') 344 | { 345 | 346 | for (;; p++, q++, count++) 347 | { 348 | 349 | //fwrite(p,sizeof(char),1,third); 350 | fputc(*p, third); 351 | if (*p == '\n' || *p == '\0') 352 | break; 353 | } 354 | } 355 | else if (*p == '/' && *q == '*') 356 | { 357 | 358 | for (; *p != '\0'; p++, q++, count++) 359 | { 360 | 361 | fputc(*p, third); 362 | 363 | if (*p == '*' && *q == '/') 364 | { 365 | 366 | //fwrite(p,sizeof(char),1,third); 367 | //fwrite(q,sizeof(char),1,third); 368 | fputc(*q, third); 369 | fputc('\n', third); 370 | p++; 371 | q = p + 1; 372 | break; 373 | } 374 | } 375 | } 376 | else 377 | //fprintf(second,"%c",p); 378 | fputc(*p, second); 379 | 380 | p++; 381 | q++; 382 | } 383 | 384 | printf("操作成功!正在返回主菜单...\n"); 385 | fclose(second); 386 | fclose(third); 387 | 388 | Sleep(1500); 389 | return 0; 390 | } 391 | ///////////////////////////////////////////////// 392 | 393 | void menuPrint(int i) 394 | { 395 | 396 | system("cls"); 397 | char name[5][sizeof(char) * 15] = { 398 | "", 399 | "menu_1.txt", 400 | "menu_2.txt", 401 | }; 402 | 403 | char arr[1000]; //这里1000最为合适~2333 404 | memset(arr, 0, sizeof(char) * 1000); 405 | FILE *fp; 406 | fp = fopen(name[i], "r"); 407 | 408 | if (fp == NULL) 409 | { 410 | printf("cannot open %s\n", name[i]); 411 | exit(0); 412 | } 413 | int h = 0; 414 | while (!feof(fp)) 415 | { 416 | fread(arr + h, sizeof(char), 1, fp); 417 | h++; 418 | } 419 | printf("%s", arr); //本段代码优化于2015-12-28 11:24:45 420 | fclose(fp); 421 | } 422 | 423 | int move() 424 | { 425 | 426 | char key = 0; 427 | int i = 1; 428 | 429 | while (1) 430 | { 431 | 432 | fflush(stdin); //清除缓存数据 433 | key = getch(); 434 | if (key == 0 || key == -32) 435 | key = getch(); 436 | if (key == 72) 437 | i--; 438 | else if (key == 80) 439 | i++; 440 | else if (key >= 49 && key <= 50) 441 | return key - 48; 442 | else if (key == 48 || key == 27) 443 | return 0; 444 | else if (key == 13) 445 | if (i) 446 | return i; 447 | else 448 | return 0; 449 | else 450 | key = 0; 451 | 452 | if (i < 1) 453 | i = i + 2; 454 | if (i > 2) 455 | i = i - 2; 456 | 457 | menuPrint(i); 458 | } 459 | 460 | return 0; 461 | } 462 | 463 | int main(void) 464 | { 465 | 466 | system("color 0A"); 467 | int i = 1; 468 | 469 | while (1) 470 | { 471 | system("mode con cols=49 lines=17"); 472 | menuPrint(i); 473 | i = move(); 474 | if (i == 1) 475 | first(); 476 | if (i == 2) 477 | second(); 478 | } 479 | 480 | return 0; 481 | } -------------------------------------------------------------------------------- /2.4- C 语言代码去注释/menu_1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/2.4- C 语言代码去注释/menu_1.txt -------------------------------------------------------------------------------- /2.4- C 语言代码去注释/menu_2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/2.4- C 语言代码去注释/menu_2.txt -------------------------------------------------------------------------------- /2.4- C 语言代码去注释/test.cpp: -------------------------------------------------------------------------------- 1 | // C_playground6_LinkedList main.c 2 | // 链表与文件 3 | // Created by Reign on 15/12/16. 4 | // 本文件采用utf-8编码 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | struct birthday 11 | { 12 | unsigned int year; 13 | unsigned int month; 14 | unsigned int day; 15 | }; 16 | 17 | struct info 18 | { 19 | char name[20]; 20 | char no[10]; 21 | struct birthday date; 22 | struct info *next; 23 | }; 24 | 25 | //solo -> 单个初始化(申请内存) 26 | 27 | struct info *solo() 28 | { 29 | struct info *node = NULL; 30 | node = (struct info *)malloc(sizeof(struct info)); 31 | memset(node, 0, sizeof(struct info)); 32 | if (node == NULL) 33 | { 34 | printf("申请内存失败!"); 35 | exit(-1); 36 | } 37 | return node; 38 | } 39 | 40 | //initialization -> 初始化(申请内存) 暂不使用 仅作参照 41 | 42 | struct info *initialization(int len) 43 | { 44 | struct info *head = NULL; 45 | struct info *node = NULL; 46 | int i; 47 | for (i = 0; i < len; i++) 48 | { 49 | node = solo(); 50 | node->next = head; 51 | head = node; 52 | } 53 | printf("初始化链表完毕!\n"); 54 | return head; 55 | } 56 | 57 | //traversal -> 遍历(不含头结点的头插法) 58 | 59 | struct info *traversal() 60 | { 61 | 62 | struct info *head = NULL; 63 | struct info *node = NULL; 64 | 65 | int i, len; 66 | char ch = 'c'; 67 | printf("学生的个数是: "); 68 | scanf("%300d", &len); 69 | for (i = 0; i < len; i++) 70 | { 71 | node = solo(); 72 | while ((ch = getchar()) != '\n' && ch != ' ') 73 | ; //使用ch大法吃回车和空格... 74 | printf("请输入名字: "); 75 | scanf("%20s", node->name); 76 | printf("请输入学号: "); 77 | scanf("%10s", node->no); 78 | printf("请输入生日: 如 1666 06 06\n"); 79 | scanf("%d%d%d", &node->date.year, &node->date.month, &node->date.day); 80 | node->next = head; 81 | head = node; 82 | } 83 | return head; 84 | } 85 | 86 | //traversal_1 -> 遍历(不含头结点的尾插法) 87 | 88 | struct info *traversal_1() 89 | { 90 | 91 | struct info *tail = NULL; 92 | struct info *head = NULL; 93 | struct info *node = NULL; 94 | 95 | int i, len; 96 | char ch = 'c'; 97 | printf("学生的个数是: "); 98 | scanf("%300d", &len); 99 | for (i = 0; i < len; i++) 100 | { 101 | 102 | node = solo(); 103 | 104 | while ((ch = getchar()) != '\n' && ch != ' ') 105 | ; //使用ch大法吃回车和空格... 106 | printf("请输入名字: "); 107 | scanf("%20s", node->name); 108 | printf("请输入学号: "); 109 | scanf("%10s", node->no); 110 | printf("请输入生日: 如 1666 06 06\n"); 111 | scanf("%d%d%d", &node->date.year, &node->date.month, &node->date.day); 112 | 113 | if (i == 0) 114 | head = tail = node; 115 | else 116 | { 117 | tail->next = node; 118 | tail = node; 119 | } 120 | } 121 | return head; 122 | } 123 | 124 | //print -> 输出到屏幕 125 | 126 | void print(struct info *head) 127 | { 128 | 129 | while (head != NULL) 130 | { 131 | printf("%s\t", head->name); 132 | printf("%s\t", head->no); 133 | printf("%d-%d-%d\n", head->date.year, head->date.month, head->date.day); 134 | head = head->next; 135 | } 136 | printf("输出完毕\n"); 137 | } 138 | 139 | //output -> 输出到文件 140 | 141 | void output(struct info *head) 142 | { 143 | FILE *fp; 144 | if ((fp = fopen("test.txt", "w")) == NULL) 145 | { 146 | printf("打开文件失败"); 147 | exit(-2); 148 | } 149 | printf("写入文件中"); 150 | while (head != NULL) 151 | { 152 | printf("."); 153 | if (fwrite(head, sizeof(struct info), 1, fp) != 1) 154 | { 155 | printf("写入文件失败"); 156 | exit(-2); 157 | } 158 | head = head->next; 159 | } 160 | printf("写入完成\n"); 161 | fclose(fp); 162 | } 163 | 164 | //readFromFile -> 从文件中读取(不含头结点的头插法) 165 | 166 | struct info *readFromFile() 167 | { 168 | struct info *head = NULL; 169 | struct info *node = NULL; 170 | 171 | FILE *fp; 172 | 173 | int temp = 0; 174 | int i; 175 | if ((fp = fopen("test.txt", "r")) == NULL) 176 | { 177 | printf("读取文件失败"); 178 | exit(-3); 179 | } 180 | 181 | printf("读取的数目: "); 182 | scanf("%4d", &temp); 183 | 184 | for (i = 0; i < temp && (!feof(fp)); i++) 185 | { 186 | 187 | printf("读取文件中...\n"); 188 | node = solo(); 189 | 190 | if (fread(node, sizeof(struct info), 1, fp) != 1) 191 | { 192 | printf("第%d->%d组数据存放链表失败\n", i + 1, temp); 193 | free(NULL); 194 | node = NULL; 195 | } 196 | 197 | node->next = head; 198 | head = node; 199 | } 200 | fclose(fp); 201 | return head; 202 | } 203 | 204 | //readFromFile_1 -> 从文件中读取(不含头结点的尾插法) 205 | 206 | struct info *readFromFile_1() 207 | { 208 | struct info *head = NULL; 209 | struct info *tail = NULL; 210 | struct info *node = NULL; 211 | 212 | FILE *fp; 213 | 214 | int temp = 0; 215 | int i; 216 | if ((fp = fopen("test.txt", "r")) == NULL) 217 | { 218 | printf("读取文件失败"); 219 | exit(-3); 220 | } 221 | 222 | printf("读取的数目: "); 223 | scanf("%d", &temp); 224 | 225 | for (i = 0; i < temp && (!feof(fp)); i++) 226 | { 227 | 228 | printf("读取文件中...\n"); 229 | node = solo(); 230 | 231 | if (fread(node, sizeof(struct info), 1, fp) != 1) 232 | { 233 | printf("第%d->%d组数据存放链表失败\n", i + 1, temp); 234 | free(NULL); 235 | node = NULL; 236 | } 237 | if (i == 0) 238 | head = tail = node; 239 | else 240 | { 241 | tail->next = node; 242 | tail = node; 243 | } 244 | } 245 | fclose(fp); 246 | return head; 247 | } 248 | 249 | //deleteWithNo -> 通过学号删除指定链表 250 | 251 | void deleteWithNo(struct info *head) 252 | { 253 | 254 | int i; 255 | char ch; 256 | char *p = (char *)malloc(sizeof(char) * 30); 257 | memset(p, 0, sizeof(char) * 30); 258 | struct info *node = head; 259 | struct info *temp = NULL; 260 | 261 | printf("请输入要删除学生的学号: "); 262 | fflush(stdin); 263 | // while ((ch = getchar()) != '\n' && ch !=' ');//使用ch大法吃回车和空格... 264 | scanf("%s", p); 265 | printf("要删除学生的学号是: %s\n", p); 266 | for (i = 0;; i++) 267 | { 268 | 269 | if (head != NULL && head->next != NULL && strcmp(node->next->no, p) == 0) 270 | { 271 | temp = node->next; 272 | node->next = node->next->next; 273 | free(temp); 274 | printf("删除完毕,累计查找%d次\n", i + 1); 275 | return; 276 | } 277 | else 278 | node = node->next; 279 | } 280 | printf("对不起,查找了%d次后,依然没有查找到该学生.\n", i + 1); 281 | return; 282 | } 283 | 284 | //freeAll -> 释放当前链表内存 285 | 286 | void freeAll(struct info *head) 287 | { 288 | 289 | struct info *p = NULL; 290 | while (head != NULL) 291 | { 292 | p = head->next; 293 | free(head); 294 | head = p; 295 | } 296 | printf("释放内存完毕\n"); 297 | } 298 | 299 | int main() 300 | { 301 | 302 | struct info *p = NULL; 303 | 304 | int s = 2; 305 | while (s != 0) 306 | { 307 | 308 | printf("0.exit -> 退出程序\n"); 309 | 310 | printf("1.traversal -> 遍历(不含头结点的头插法)\n"); 311 | printf("2.traversal_1 -> 遍历(不含头结点的尾插法)\n"); 312 | 313 | printf("3.readFromFile -> 从文件中读取(不含头结点的头插法)\n"); 314 | printf("4.readFromFile_1 -> 从文件中读取(不含头结点的尾插法)\n"); 315 | 316 | printf("5.print -> 输出到屏幕\n"); 317 | printf("6.output -> 输出到文件\n"); 318 | 319 | printf("8.deleteWithNo -> 通过学号删除指定链表\n"); 320 | 321 | printf("9.freeAll -> 释放当前链表内存\n"); 322 | 323 | scanf("%d", &s); 324 | switch (s) 325 | { 326 | case 1: 327 | p = traversal(); 328 | break; 329 | case 2: 330 | p = traversal_1(); 331 | break; 332 | case 3: 333 | p = readFromFile(); 334 | break; 335 | case 4: 336 | p = readFromFile_1(); 337 | break; 338 | case 5: 339 | print(p); 340 | break; 341 | case 6: 342 | output(p); 343 | break; 344 | case 8: 345 | deleteWithNo(p); 346 | break; 347 | case 9: 348 | freeAll(p); 349 | p = NULL; 350 | break; 351 | default: 352 | break; 353 | } 354 | } 355 | 356 | return 0; 357 | } 358 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/answer.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/answer.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/info.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/info.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_1.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_2.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_3.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_3.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_4.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_4.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_5.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_5.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_6.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_6.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/menu_7.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/menu_7.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/paper.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/paper.txt -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/admin.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | (1) 管理员功能 3 | 4 | 试题管理:每个试题包括题干、4个备选答案、标准答案等信息。 5 | 可进行试题添加、删除、修改、查询、保存、浏览等操作。 6 | 7 | 组卷功能:指定题目数、题目总分,生成试卷。 8 | 将试卷输出到文件,将答案输出到另一个文件。 9 | 10 | 用户管理:对用户信息进行添加、删除、修改、查询、保存、浏览等操作。 11 | 12 | 用户答题情况管理:指定用户,统计其做试卷的总次数,以及每次所得的总分。 13 | */ 14 | 15 | //admin.cpp created time 2016-1-3 17:58:13 16 | 17 | #include "all.h" 18 | 19 | int sign_in() 20 | { 21 | 22 | system("mode con cols=30 lines=22"); 23 | system("color 3A"); 24 | 25 | int i; 26 | //char name[10]={"admin"},password[10]={"admin"}; 27 | char name[10] = {"admin"}, password[10] = {"1"}; 28 | 29 | FILE *fp; 30 | fp = fopen("password", "r"); 31 | 32 | if (fp == NULL) 33 | strcpy(password, "admin"); 34 | else 35 | { 36 | fread(password, sizeof(char) * 10, 1, fp); 37 | fclose(fp); 38 | } 39 | 40 | char get_1[10], get_2[10]; 41 | for (i = 0; i < 3; i++) 42 | { 43 | system("cls"); 44 | printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 45 | printf(" 管理员登录界面\n\n"); 46 | printf(" ---------------------\n"); 47 | printf(" |登录名:| |\n"); 48 | printf(" ---------------------\n"); 49 | printf("\n"); 50 | printf(" ---------------------\n"); 51 | printf(" | 密码: | |\n"); 52 | printf(" ---------------------\n"); 53 | printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 54 | fflush(stdin); 55 | goto_pos(16, 7); 56 | scanf("%10s", get_1); 57 | fflush(stdin); 58 | goto_pos(16, 11); 59 | scanf("%10s", get_2); 60 | 61 | if (strcmp(name, get_1) == 0 && strcmp(password, get_2) == 0) 62 | { 63 | goto_pos(11, 17); 64 | printf("登录成功!"); 65 | Sleep(800); 66 | return 0; 67 | } 68 | else 69 | { 70 | goto_pos(11, 17); 71 | printf("密码错误\n 请重新输入 (剩余次数:%d)", 2 - i); 72 | Sleep(1300); 73 | } 74 | } 75 | exit(-1); 76 | } 77 | 78 | /* 79 | 管理员控制界面 admin 80 | 81 | 82 | 1.试题管理(增删改查) 83 | 84 | 2.组卷功能 85 | 86 | 3.用户账号及答题情况管理 87 | 88 | 4.修改管理员密码 89 | 90 | --------------- 91 | 92 | 0.注销登录 93 | */ 94 | 95 | void admin() 96 | { 97 | 98 | if (sign_in() == -1) //如果登录失败则退出 99 | return; 100 | 101 | int a; 102 | 103 | while (1) 104 | { 105 | 106 | system("mode con cols=57 lines=20"); 107 | system("color 47"); 108 | 109 | a = move_1(5, menuPrint_2); 110 | switch (a) 111 | { 112 | //1. 113 | case 1: 114 | question_admin(); 115 | continue; 116 | case 2: 117 | auto_paper(); 118 | continue; 119 | case 3: 120 | user_admin(); 121 | continue; 122 | case 4: 123 | change_admin_password(); 124 | continue; 125 | case 6:; 126 | continue; 127 | case 0: 128 | default: 129 | break; 130 | } 131 | break; 132 | } 133 | } 134 | 135 | void menuPrint_2(int a) 136 | { 137 | 138 | system("cls"); 139 | char name[15] = {"menu_2.txt"}; 140 | 141 | char arr[1500]; //这里1000最为合适~2333 142 | memset(arr, 0, sizeof(char) * 1500); 143 | FILE *fp; 144 | fp = fopen(name, "r"); 145 | 146 | if (fp == NULL) 147 | { 148 | printf("cannot open %s\n", name); 149 | exit(0); 150 | } 151 | 152 | int h = 0; 153 | while (!feof(fp)) 154 | { 155 | fread(arr + h, sizeof(char), 1, fp); 156 | h++; 157 | } 158 | printf("%s", arr); 159 | 160 | fclose(fp); 161 | 162 | switch (a) 163 | { 164 | //显示光标 165 | case 1: 166 | printLaugh(40, 6); 167 | break; 168 | case 2: 169 | printLaugh(40, 8); 170 | break; 171 | case 3: 172 | printLaugh(40, 10); 173 | break; 174 | case 4: 175 | printLaugh(40, 12); 176 | break; 177 | case 5: 178 | printLaugh(40, 14); 179 | break; 180 | case 0: 181 | printLaugh(40, 16); 182 | break; 183 | default: 184 | break; 185 | } 186 | } 187 | 188 | //------------------------------------------ 189 | 190 | void question_admin() 191 | { 192 | 193 | question(); // ->question.cpp 194 | } 195 | 196 | void auto_paper() 197 | { 198 | 199 | system("mode con cols=30 lines=12"); 200 | system("color 0F"); 201 | 202 | struct info *head = NULL; 203 | head = read_info(); 204 | 205 | struct info *temp = NULL; 206 | if (head == NULL) 207 | { 208 | printf("当前题库为空!"); 209 | return; 210 | } 211 | 212 | fflush(stdin); 213 | int num, score; 214 | int i, j, count; 215 | int *no; 216 | 217 | printf("请输入题目数:"); 218 | scanf("%2d", &num); 219 | no = (int *)malloc(sizeof(int) * num); 220 | if (no == NULL) 221 | exit(-1); 222 | 223 | printf("请输入总分:"); 224 | scanf("%3d", &score); 225 | float solo = (float)((score + 0.0) / num); 226 | 227 | for (i = 0, j = 0, count = 0; i < num;) 228 | { 229 | count++; 230 | if (rand() % 2 == 0) 231 | if ((temp = find_info_num(head, count)) != NULL && temp->no != 0) 232 | no[i++] = temp->no; 233 | else 234 | j++; 235 | if (j > 10000) 236 | break; 237 | } 238 | 239 | if (i == num) 240 | { 241 | printf("出卷成功!正在保存为本地文件..."); 242 | FILE *fp; 243 | fp = fopen("paper.txt", "w"); 244 | if (fp == NULL) 245 | { 246 | printf("cannot write %s\n", "paper.txt"); 247 | exit(0); 248 | } 249 | FILE *fq; 250 | fq = fopen("answer.txt", "w"); 251 | if (fq == NULL) 252 | { 253 | printf("cannot write %s\n", "answer.txt"); 254 | exit(0); 255 | } 256 | for (i = 0; i < num; i++) 257 | { 258 | temp = find_info_num(head, no[i]); 259 | temp = temp->next; 260 | if (temp == NULL) 261 | continue; 262 | fprintf(fp, "\n\n---%s ", "题号"); 263 | fprintf(fp, "%3d---\n", i + 1); 264 | fprintf(fp, "%s", temp->statement); 265 | fprintf(fp, "%.1f", solo); 266 | fprintf(fp, "%s\n", "分"); 267 | for (j = 0; j < 4; j++) 268 | { 269 | fprintf(fp, "%c", j + 'A'); 270 | fprintf(fp, "%s", ":"); 271 | fprintf(fp, "%s\t", temp->options[j]); 272 | if (j == 1) 273 | fprintf(fp, "\n"); 274 | } 275 | 276 | fprintf(fq, "\n---%s", "题号"); 277 | fprintf(fq, "%3d---\n", i + 1); 278 | fprintf(fq, "%s", " 正确的选项是"); 279 | fprintf(fq, "%c\n", temp->rightAnswer + 'A'); 280 | for (j = 0; j < 4; j++) 281 | { 282 | fprintf(fq, "%c", j + 'A'); 283 | fprintf(fq, "%s", ":"); 284 | fprintf(fq, "%s\n", temp->answers[j]); 285 | } 286 | fprintf(fq, "%s", "\n"); 287 | } 288 | fclose(fp); 289 | fclose(fq); 290 | } 291 | else 292 | { 293 | printf("题目数量不足以完成出卷任务...出卷失败!\n"); 294 | printf("正在返回主菜单..."); 295 | Sleep(1500); 296 | } 297 | } 298 | 299 | void user_admin() 300 | { 301 | 302 | admin_user(); 303 | } 304 | 305 | void change_admin_password() 306 | { 307 | 308 | system("mode con cols=30 lines=22"); 309 | system("color 3A"); 310 | 311 | int i; 312 | char name[20] = {"1"}, password[20] = {"1"}; 313 | 314 | FILE *fp; 315 | fp = fopen("password", "r"); 316 | 317 | if (fp == NULL) 318 | strcpy(password, "admin"); 319 | else 320 | { 321 | fread(password, sizeof(char) * 10, 1, fp); 322 | fclose(fp); 323 | } 324 | 325 | char get_2[10]; 326 | for (i = 0; i < 3; i++) 327 | { 328 | system("cls"); 329 | printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 330 | printf(" 管理员密码修改界面\n\n"); 331 | printf(" ---------------------\n"); 332 | printf(" |原密码:| |\n"); 333 | printf(" ---------------------\n"); 334 | printf("\n"); 335 | printf(" ---------------------\n"); 336 | printf(" |新密码:| |\n"); 337 | printf(" ---------------------\n"); 338 | printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 339 | goto_pos(16, 7); 340 | printf("%s", password); 341 | fflush(stdin); 342 | goto_pos(16, 11); 343 | scanf("%10s", get_2); 344 | if (strlen(get_2) > 6) 345 | { 346 | goto_pos(11, 17); 347 | strcpy(password, get_2); 348 | fp = fopen("password", "w"); 349 | fwrite(password, sizeof(char) * 10, 1, fp); 350 | fclose(fp); 351 | printf("修改成功!"); 352 | Sleep(800); 353 | return; 354 | } 355 | else 356 | { 357 | goto_pos(9, 17); 358 | printf("密码过于简单\n 请重新输入 (剩余次数:%d)", 2 - i); 359 | Sleep(1300); 360 | } 361 | } 362 | exit(-1); 363 | } 364 | 365 | //------------------------------------------ 366 | 367 | struct info *find_info_num(struct info *head, int num) 368 | { 369 | 370 | struct info *node = head; 371 | 372 | while (node->next != NULL) 373 | { 374 | if (node->next->no == num) 375 | return node; 376 | node = node->next; 377 | } 378 | return NULL; 379 | } 380 | 381 | struct info *find_info_score_num(struct info *head, int lev) 382 | { 383 | 384 | struct info *node = head; 385 | 386 | while (node->next != NULL) 387 | { 388 | if (node->next->score == lev) 389 | return node->next; 390 | node = node->next; 391 | } 392 | return NULL; 393 | } -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/admin_user.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | (1) 管理员功能 3 | 4 | 用户管理:对用户信息进行添加、删除、修改、查询、保存、浏览等操作。 5 | 6 | (用户答题情况管理:指定用户,统计其做试卷的总次数,以及每次所得的总分。) 7 | */ 8 | 9 | //admin_user.cpp created time 2016-1-8 10:06:12 10 | 11 | #include "all.h" 12 | 13 | void admin_user() 14 | { 15 | 16 | int a; 17 | struct user *head = NULL; 18 | head = read_user(); 19 | 20 | while (1) 21 | { 22 | 23 | system("mode con cols=57 lines=20"); 24 | system("color 3F"); 25 | 26 | a = move_1(6, menuPrint_5); 27 | switch (a) 28 | { 29 | case 1: 30 | find_user(head); 31 | continue; 32 | case 2: 33 | input_user(head); 34 | continue; 35 | case 3: 36 | find_user(head); 37 | continue; 38 | case 4: 39 | find_user(head); 40 | continue; 41 | case 5: 42 | system("cls"); 43 | print_user(head->next); 44 | system("pause"); 45 | continue; 46 | case 0: 47 | default: 48 | break; 49 | } 50 | break; 51 | } 52 | write_user(head); 53 | free_user(head); //save 54 | } 55 | 56 | /* 57 | 58 | 学生信息管理界面 admin 59 | 60 | 61 | 1.查找学生 62 | 63 | 2.添加学生 64 | 65 | 3.移除学生信息(请先查找) 66 | 67 | 4.修改学生信息(请先查找) 68 | 69 | 5.浏览学生信息 70 | 71 | 0.保存并退出 72 | 73 | */ 74 | 75 | void menuPrint_5(int a) 76 | { 77 | 78 | system("cls"); 79 | char name[15] = {"menu_5.txt"}; 80 | 81 | char arr[1500]; //这里1000最为合适~2333 82 | memset(arr, 0, sizeof(char) * 1500); 83 | FILE *fp; 84 | fp = fopen(name, "r"); 85 | 86 | if (fp == NULL) 87 | { 88 | printf("cannot open %s\n", name); 89 | exit(0); 90 | } 91 | 92 | int h = 0; 93 | while (!feof(fp)) 94 | { 95 | fread(arr + h, sizeof(char), 1, fp); 96 | h++; 97 | } 98 | printf("%s", arr); 99 | 100 | fclose(fp); 101 | 102 | switch (a) 103 | { 104 | //显示光标 105 | case 1: 106 | printLaugh(40, 6); 107 | break; 108 | case 2: 109 | printLaugh(40, 8); 110 | break; 111 | case 3: 112 | printLaugh(40, 10); 113 | break; 114 | case 4: 115 | printLaugh(40, 12); 116 | break; 117 | case 5: 118 | printLaugh(40, 14); 119 | break; 120 | case 0: 121 | printLaugh(40, 16); 122 | break; 123 | default: 124 | break; 125 | } 126 | } 127 | 128 | //不带头结点的尾插法 129 | 130 | struct user *solo_user() 131 | { 132 | 133 | struct user *node = NULL; 134 | node = (struct user *)malloc(sizeof(struct user)); 135 | memset(node, 0, sizeof(struct user)); 136 | if (node == NULL) 137 | { 138 | printf("申请内存失败!"); 139 | exit(-1); 140 | } 141 | else 142 | { 143 | node->next = NULL; 144 | } 145 | return node; 146 | } 147 | 148 | void input_user(struct user *head) 149 | { 150 | 151 | int i; 152 | struct user *node = NULL; 153 | struct user *tail = head; 154 | 155 | node = solo_user(); 156 | while (tail->next != NULL) 157 | tail = tail->next; 158 | tail->next = node; 159 | 160 | system("mode con cols=37 lines=27"); 161 | system("color 3A"); 162 | 163 | //char name[10]={"admin"},password[10]={"admin"}; 164 | 165 | for (i = 0; i < 3; i++) 166 | { 167 | system("cls"); 168 | printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 169 | printf(" 学生注册\n\n"); 170 | printf(" --------------------------\n"); 171 | printf(" | 学号: | |\n"); 172 | printf(" --------------------------\n"); 173 | printf(" | 姓名: | |\n"); 174 | printf(" --------------------------\n"); 175 | printf(" | 密码: | |\n"); 176 | printf(" --------------------------\n"); 177 | printf("\n"); 178 | printf(" --------------------------\n"); 179 | printf(" | 学号必须是10位数字|\n"); 180 | printf(" | 密码之间不能有空格|\n"); 181 | printf(" | 按回车键完成输入..|\n"); 182 | printf(" --------------------------\n"); 183 | printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 184 | fflush(stdin); 185 | goto_pos(16, 6); 186 | scanf("%20s", node->no); 187 | fflush(stdin); 188 | goto_pos(16, 8); 189 | scanf("%20s", node->name); 190 | fflush(stdin); 191 | goto_pos(16, 10); 192 | scanf("%30s", node->password); 193 | 194 | if (strlen(node->no) == 11 && strlen(node->password) >= 6) 195 | { 196 | goto_pos(11, 21); 197 | printf("注册成功!"); 198 | { 199 | //开始初始化学生个人信息 200 | node->timeAdd = time(NULL); 201 | node->timeLogin = node->timeAdd; 202 | node->timeLogout = node->timeAdd; 203 | } 204 | Sleep(1800); 205 | return; 206 | } 207 | else 208 | { 209 | goto_pos(13, 21); 210 | printf("注册失败\n 请重新注册 (剩余次数:%d)", 2 - i); 211 | goto_pos(9, 23); 212 | if (strlen(node->no) != 11) 213 | printf("学号不是11位,无效!"); 214 | else 215 | printf("密码过于简单!"); 216 | Sleep(2100); 217 | } 218 | } 219 | free(node); 220 | } 221 | 222 | void write_user(struct user *head) 223 | { 224 | 225 | FILE *fp; 226 | if ((fp = fopen("user.use", "w")) == NULL) 227 | { 228 | printf("打开文件失败"); 229 | exit(-2); 230 | } 231 | printf("写入文件中"); 232 | while (head->next != NULL) 233 | { 234 | printf("."); 235 | head = head->next; 236 | if (fwrite(head, sizeof(struct user), 1, fp) != 1) 237 | { 238 | printf("写入文件失败"); 239 | exit(-2); 240 | } 241 | } 242 | //printf("写入完成\n"); 243 | fclose(fp); 244 | } 245 | 246 | struct user *read_user() 247 | { 248 | 249 | int i = 0; 250 | FILE *fp; 251 | struct user *head = NULL; 252 | struct user *node = NULL; 253 | struct user *tail = NULL; 254 | 255 | //head=solo_user(); 256 | 257 | if ((fp = fopen("user.use", "r")) == NULL) 258 | { 259 | system("cls"); 260 | printf("读取文件失败"); 261 | exit(-3); 262 | } 263 | tail = head = solo_user(); 264 | while (!feof(fp)) 265 | { 266 | 267 | node = solo_user(); 268 | if (fread(node, sizeof(struct user), 1, fp) == 1) 269 | { 270 | tail->next = node; 271 | tail = node; 272 | } 273 | } 274 | 275 | //!@#$%^&*()_)(*&^%$#@!@#$%^&*())(*&^%$#@!#$%^&*()(*&^%$#@ 276 | 277 | fclose(fp); 278 | return head; 279 | } 280 | 281 | void free_user(struct user *head) 282 | { 283 | 284 | struct user *p = NULL; 285 | while (head != NULL) 286 | { 287 | p = head->next; 288 | free(head); 289 | head = p; 290 | } 291 | return; 292 | } 293 | 294 | void print_user(struct user *node) 295 | { 296 | 297 | system("mode con cols=80 lines=1000"); 298 | 299 | printf("正在读取数据...\n"); 300 | if (node == NULL) 301 | { 302 | printf("没有任何学生信息!"); 303 | } 304 | else 305 | { 306 | struct user *p = node; 307 | while (p != NULL) 308 | { 309 | print_user_solo(p); 310 | p = p->next; 311 | } 312 | } 313 | } 314 | 315 | void print_user_solo(struct user *node) 316 | { 317 | 318 | if (node == NULL) 319 | { 320 | printf("当前结点为空!"); 321 | } 322 | else 323 | { 324 | int i; 325 | struct user *p = node; 326 | { //基本信息 327 | printf("\n"); 328 | printf("---------------------"); 329 | printf("|学号:%s\t", p->no); 330 | printf("---------------------"); 331 | printf("\n"); 332 | printf("---------------------"); 333 | printf("|姓名:%s\t", p->name); 334 | printf("---------------------"); 335 | //printf(" password:%s ",p->password); 336 | printf("\n\n"); 337 | } 338 | { //练习信息 339 | printf("练习次数:%d\t", p->exerciseTime); 340 | printf("总计练习题目数量:%d\t", p->exercise); 341 | printf("正确数量:%d\t", p->exerciseRight); 342 | printf("正确率:%.f%%\n", ((p->exerciseRight + 0.0) / (p->exercise + 0.00001)) * 100); 343 | } 344 | { //考试信息 345 | printf("考试次数:%d\t", p->examTime); 346 | printf("总计考试题目数量:%d\t", p->exam); 347 | 348 | int right; 349 | for (i = 0, right = 0; i < p->examTime; i++) 350 | right += p->examRight[i][0]; 351 | 352 | printf("正确数量:%d\t", right); 353 | printf("正确率:%.f%%\n", ((right + 0.0) / (p->exam + 0.00001)) * 100); 354 | 355 | printf("历次考试分数:\n"); 356 | for (i = 0; i < p->examTime; i++) 357 | { 358 | printf("%g\t", p->examScore[i]); 359 | if (i != 0 && i % 10 == 0) 360 | printf("\n"); 361 | } 362 | if (i == 0) 363 | printf("暂无考试历史...\n"); 364 | } 365 | { 366 | printf("\n注册时间:"); 367 | print_time(p->timeAdd); 368 | printf("最后登录时间:"); 369 | print_time(p->timeLogin); 370 | printf("最后登出时间:"); 371 | print_time(p->timeLogout); 372 | switch (p->last) 373 | { 374 | case 1: 375 | printf("上次访问:练习系统\n"); 376 | break; 377 | case 2: 378 | printf("上次访问:考试系统\n"); 379 | break; 380 | default: 381 | printf("暂无上次访问数据...\n"); 382 | break; 383 | } 384 | printf("---累计在线时间:%.f s---", p->timeOnline); 385 | } 386 | { 387 | printf("\n---历史错误题号---:\n"); 388 | for (i = 0; (p->errorHistory[i] + p->errorHistory[i] + p->errorHistory[i]) != 0; i++) 389 | { 390 | printf("%d\t", p->errorHistory[i]); 391 | if (i != 0 && i % 10 == 0) 392 | printf("\n"); 393 | } 394 | printf("\n---易错点及错误次数---:\n"); 395 | for (i = 0; p->error[i][0] != '\0'; i++) 396 | { 397 | printf("%s %d次 ", p->error[i], p->errorTime[i]); 398 | if (i != 0 && i % 10 == 0) 399 | printf("\n"); 400 | } 401 | } 402 | printf("\n\n"); 403 | } 404 | } 405 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/all.h: -------------------------------------------------------------------------------- 1 | 2 | //all.h created time 2016-1-3 18:08:44 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | //------------------------------------------ 12 | 13 | struct info 14 | { 15 | 16 | int no; //题目编号 17 | int lever; //题目难度1-10 18 | int score; //题目分数1-5 19 | int rightAnswer; //正确选项 20 | time_t timeAdd; //题目添加的时间 21 | time_t timeModify; //最后修改时间 22 | 23 | char keyWords[5][40]; //每道题有5个关键字 24 | char options[4][100]; //题目的四个选项 25 | char answers[4][300]; //每个选项的错误原因 26 | char statement[1000]; //题目描述 27 | 28 | struct info *next; 29 | }; 30 | 31 | struct user 32 | { 33 | 34 | char no[15]; //用户学号 35 | char name[30]; //用户名 36 | char password[30]; //用户密码 37 | 38 | int exercise; //用户练习题数目 39 | int exerciseTime; //用户练习次数 40 | int exerciseRight; //用户练习题正确数目 41 | 42 | int exam; //用户考试题数目 43 | int examTime; //用户考试次数 44 | float examScore[300]; //用户考试每次考试分数 45 | int examRight[300][2]; //用户考试正确/错误数目 46 | 47 | time_t timeAdd; //用户注册时间 48 | time_t timeOnline; //用户在线时间 49 | time_t timeLogin; //用户最后登录时间 50 | time_t timeLogout; //用户最后登出时间 51 | int last; //最后一次访问的是练习系统还是考试系统,练习为1,考试为2 52 | 53 | int errorHistory[300]; //错误历史题号 54 | int errorTime[300]; //易错点栽了几次跟头 55 | char error[300][40]; //每错一道题,题目的几个关键字会自动算入用户易错点 56 | 57 | struct user *next; 58 | }; 59 | 60 | //main.cpp 61 | void main(void); //程序入口 62 | int move_1(int num, void (*p)(int)); //集大成的move_1函数 传入菜单选项的个数已经相应的void menuPrint_x(int a); 即可打印各种菜单 63 | void menuPrint(int a); //菜单显示函数 64 | void printLaugh(int x, int y); //打印(*^_^*)并把光标移动至笑脸的中央 65 | void goto_pos(int x, int y); //光标移动函数 66 | int fuzzy_search(char str[], char str2[]); //模糊查找函数,char str[]为源字符串,char str2[]为查找的关键字 67 | 68 | //admin.cpp 69 | int sign_in(); //管理员登录界面 70 | void admin(); //管理员控制界面 1.试题管理(增删改查) 2.组卷功能 3.用户账号及答题情况管理 4.修改管理员密码 0.注销登录 71 | void menuPrint_2(int a); //显示菜单~~管理员登录界面 72 | void question_admin(); //question() -> question.cpp 73 | void auto_paper(); //自动出卷 74 | void user_admin(); //进入函数admin_user() 75 | void change_admin_password(); //修改管理员密码 76 | struct info *find_info_num(struct info *head, int num); //根据题号查找试题 77 | struct info *find_info_score_num(struct info *head, int lev); //根据分数查找试题 多半是废了 78 | 79 | //question.cpp 80 | void question(); //试题管理界面 81 | void menuPrint_3(int a); //显示菜单~~试题管理界面 82 | struct info *solo_info(); //申请malloc单个题目 83 | void input_info(struct info *head); //新建一个题目并初始化题目信息带头结点的尾插法 84 | void write_info(struct info *head); //把题库写入到文件info.txt中 85 | struct info *read_info(); //从本地文件info.txt读入题库 86 | void free_info(struct info *head); //释放链表 87 | void print_info(struct info *node); //输出所有题目的信息 88 | void print_info_solo(struct info *node); //输出一个题目全部信息到屏幕 89 | void fprint_info_solo(FILE *fp, struct info *node); //输出一个题目全部信息到文件fp 90 | 91 | //time.cpp 92 | void print_time(long lt); //输出当前时间到屏幕 93 | void sprint_time(char *buf); //输出当前时间到字符数组 94 | 95 | //find_info.cpp 96 | struct info *find_info(struct info *head); //查找试题界面 97 | void menuPrint_4(int a); //显示菜单~~查找试题界面 98 | struct info *find_info_key(struct info *head); //按照关键字查找题目,返回题目的上一个指针 99 | void delete_info_no(struct info *find); //删除题目信息 100 | struct info *find_info_no(struct info *head); //按照题目编号查找题目,返回题目的上一个指针 101 | void change_info(struct info *node); //修改题目详细信息 102 | void find_info_next(struct info *node); //选择修改题目信息或删除题目,传来的是题目的上一个节点 103 | struct info *find_info_lever(struct info *head); //按题目难度查找 104 | struct info *find_info_score(struct info *head); //按题目分值查找 105 | struct info *find_info_time(struct info *head); //按最近添加/修改题目 106 | 107 | //admin_user.cpp 108 | void admin_user(); //学生信息管理界面 109 | void menuPrint_5(int a); //显示菜单~~学生信息管理界面 110 | struct user *solo_user(); //申请内存 111 | void input_user(struct user *head); //学生注册不~带头结点的尾插法 112 | void write_user(struct user *head); //把学生信息写入文件中 113 | struct user *read_user(); //从文件中读入学生信息 114 | void free_user(struct user *head); //释放内存 115 | void print_user(struct user *node); //输出所有学生信息 116 | void print_user_solo(struct user *node); //单个输出学生信息 117 | 118 | //find_user.cpp 119 | struct user *find_user(struct user *head); //查找学生界面 120 | void menuPrint_6(int a); //显示菜单~~查找学生界面 121 | struct user *find_user_name_key(struct user *head); //按学生姓名(模糊)查找 122 | struct user *find_user_no_key(struct user *head); //按学生学号(模糊)查找 123 | void delete_user_no(struct user *find); //按照学号删除用户信息 124 | struct user *find_user_no(struct user *head); //按照学号查找用户 125 | struct user *find_user_name(struct user *head); //按照姓名查找用户 126 | void change_user(struct user *node); //修改用户学号和密码 127 | void find_user_next(struct user *node); //修改用户信息或删除用户 128 | struct user *find_user_time(struct user *head); //最近登录的用户 129 | 130 | //user.cpp 131 | void user(); //学生登录界面 132 | void user_login(struct user *head, struct user *node); //用户登录后 133 | void menuPrint_7(int a); //显示菜单~~单项选择题标准化考试系统 134 | void printRectangle(int x, int y); //在指定位置输出黄色矩形 135 | void color(const unsigned short color1); //改变颜色--- 136 | void exam(struct user *node); //考试 137 | int isQusetion(struct info *node, char *p); //题目是否满足要求 138 | int errorsNum(struct user *node); //计算用户错了多少题 139 | void answerWrong(struct user *node, struct info *temp); //用户答题错误之后... 140 | void execrise(struct user *node); //练习 141 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/find_info.cpp: -------------------------------------------------------------------------------- 1 | //find_info.cpp created time 2016-1-6 14:33:22 2 | 3 | #include "all.h" 4 | 5 | struct info *find_info(struct info *head) 6 | { 7 | 8 | int a; 9 | struct info *find = NULL; 10 | 11 | while (1) 12 | { 13 | 14 | system("mode con cols=57 lines=20"); 15 | system("color 47"); 16 | 17 | a = move_1(3, menuPrint_4); 18 | system("cls"); 19 | switch (a) 20 | { 21 | //1. 22 | case 1: 23 | find = find_info_key(head); 24 | break; 25 | case 2: 26 | find = find_info_no(head); 27 | break; 28 | case 3: 29 | find = find_info_lever(head); 30 | break; 31 | case 4: 32 | find = find_info_score(head); 33 | break; 34 | case 5: 35 | find = find_info_time(head); 36 | break; 37 | case 0: 38 | default: 39 | break; 40 | } 41 | if (find != NULL) 42 | find_info_next(find); 43 | break; 44 | } 45 | return find; 46 | } 47 | 48 | /* 49 | 查找试题界面 admin 50 | 51 | 52 | 1.按关键字查找 53 | 54 | 2.按题号查找 55 | 56 | 3.按难度查找 57 | 58 | 4.按分值查找 59 | 60 | 5.最近添加/修改 61 | 62 | 0.返回上一层 63 | */ 64 | 65 | void menuPrint_4(int a) 66 | { 67 | 68 | system("cls"); 69 | char name[15] = {"menu_4.txt"}; 70 | 71 | char arr[1500]; //这里1000最为合适~2333 72 | memset(arr, 0, sizeof(char) * 1500); 73 | FILE *fp; 74 | fp = fopen(name, "r"); 75 | 76 | if (fp == NULL) 77 | { 78 | printf("cannot open %s\n", name); 79 | exit(0); 80 | } 81 | 82 | int h = 0; 83 | while (!feof(fp)) 84 | { 85 | fread(arr + h, sizeof(char), 1, fp); 86 | h++; 87 | } 88 | printf("%s", arr); 89 | 90 | fclose(fp); 91 | 92 | switch (a) 93 | { 94 | //显示光标 95 | case 1: 96 | printLaugh(40, 6); 97 | break; 98 | case 2: 99 | printLaugh(40, 8); 100 | break; 101 | case 3: 102 | printLaugh(40, 10); 103 | break; 104 | case 4: 105 | printLaugh(40, 12); 106 | break; 107 | case 5: 108 | printLaugh(40, 14); 109 | break; 110 | case 0: 111 | printLaugh(40, 16); 112 | break; 113 | default: 114 | break; 115 | } 116 | } 117 | 118 | struct info *find_info_key(struct info *head) 119 | { 120 | 121 | int count = 0, sign = 0; 122 | struct info *node = head; 123 | struct info *find = NULL; 124 | char key[20]; 125 | memset(key, 0, sizeof(char) * 20); 126 | 127 | system("cls"); 128 | printf(" 请输入关键字:\n"); 129 | fflush(stdin); 130 | scanf("%19s", key); 131 | printf(" 正在查找...\n"); 132 | system("mode con cols=80 lines=1000"); 133 | while (node->next != NULL) 134 | { 135 | if (fuzzy_search(node->next->statement, key)) 136 | { 137 | print_info_solo(node->next); 138 | find = node; 139 | sign++; 140 | } 141 | count++; 142 | node = node->next; 143 | } 144 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 145 | if (sign == 1) 146 | return find; 147 | else if (sign > 1) 148 | return find_info_no(head); 149 | else 150 | { 151 | printf(" 没有找到结果,正在返回上一级菜单..."); 152 | Sleep(3000); 153 | return NULL; 154 | } 155 | return NULL; 156 | } 157 | 158 | void delete_info_no(struct info *find) 159 | { 160 | 161 | int num; 162 | struct info *node = find->next; 163 | num = node->no; 164 | find->next = node->next; 165 | free(node); 166 | node = NULL; 167 | printf(" 删除题目%d成功!\n", num); 168 | } 169 | 170 | struct info *find_info_no(struct info *head) 171 | { 172 | 173 | int num; 174 | struct info *node = head; 175 | 176 | printf(" 请输入题号(输入0则退出):\n"); 177 | scanf("%4d", &num); 178 | printf(" 正在定位...\n"); 179 | system("mode con cols=80 lines=30"); 180 | while (node->next != NULL) 181 | { 182 | if (node->next->no == num) 183 | { 184 | print_info_solo(node->next); 185 | return node; 186 | } 187 | node = node->next; 188 | } 189 | return NULL; 190 | } 191 | 192 | void change_info(struct info *node) 193 | { 194 | 195 | int j; 196 | int s = 2; 197 | char ch, ch1; 198 | node = node->next; 199 | while (s != 0) 200 | { 201 | 202 | printf("\n 请输入相应的数字,按回车结束...\n"); 203 | printf(" 1.lever -> 修改题目难度\n"); 204 | printf(" 2.score -> 修改题目分数\n"); 205 | printf(" 3.rightAnswer -> 修改题目正确答案\n"); 206 | printf(" 4.options -> 修改题目选项\n"); 207 | printf(" 5.answers -> 修改选项答案错误/正确原因\n"); 208 | printf(" 6.statement -> 修改题目描述\n"); 209 | 210 | printf(" 0.return -> 返回菜单\n\t\t"); 211 | 212 | fflush(stdin); 213 | scanf("%d", &s); 214 | fflush(stdin); 215 | switch (s) 216 | { 217 | case 1: 218 | printf("请输入题目难度: "); 219 | scanf("%2d", &node->lever); 220 | break; 221 | case 2: 222 | printf("请输入题目分数: "); 223 | scanf("%2d", &node->score); 224 | break; 225 | case 3: 226 | printf("请输入题目正确答案: "); 227 | ch = getchar(); 228 | node->rightAnswer = ch - 'A'; 229 | break; 230 | case 4: 231 | printf("请输入选项: "); 232 | ch = getchar(); 233 | fflush(stdin); 234 | printf("您输入的选项是%c,请输入新的内容:", ch); 235 | for (j = 0; j < 100; j++) 236 | { 237 | ch1 = getchar(); 238 | if (ch1 != '\n') 239 | node->options[ch - 'A'][j] = ch1; 240 | else 241 | break; 242 | } 243 | break; 244 | case 5: 245 | printf("请输入选项: "); 246 | ch = getchar(); 247 | fflush(stdin); 248 | printf("您输入的选项是%c,请输入新的正确/错误原因:", ch); 249 | for (j = 0; j < 300; j++) 250 | { 251 | ch1 = getchar(); 252 | if (ch1 != '\n') 253 | node->answers[ch - 'A'][j] = ch1; 254 | else 255 | break; 256 | } 257 | break; 258 | case 6: 259 | printf("请输入题目描述: "); 260 | for (j = 0; j < 1000; j++) 261 | { 262 | ch = getchar(); 263 | if (ch != '\n') 264 | node->statement[j] = ch; 265 | else 266 | break; 267 | } 268 | break; 269 | default: 270 | break; 271 | } 272 | 273 | node->timeModify = time(NULL); 274 | print_info_solo(node); 275 | } 276 | } 277 | 278 | void find_info_next(struct info *node) 279 | { 280 | 281 | int s = 2; 282 | while (s != 0) 283 | { 284 | 285 | printf("\n 请输入相应的数字,按回车结束...\n"); 286 | printf(" 1.change -> 修改\n"); 287 | printf(" 2.delete -> 删除\n"); 288 | printf(" 0.return -> 返回菜单\n\t\t"); 289 | 290 | fflush(stdin); 291 | scanf("%d", &s); 292 | switch (s) 293 | { 294 | case 1: 295 | change_info(node); 296 | break; 297 | case 2: 298 | delete_info_no(node); 299 | break; 300 | default: 301 | break; 302 | } 303 | } 304 | } 305 | 306 | struct info *find_info_lever(struct info *head) 307 | { 308 | 309 | int count = 0, sign = 0; 310 | struct info *node = head; 311 | struct info *find = NULL; 312 | int lev; 313 | 314 | system("cls"); 315 | printf(" 请输入题目难度:\n"); 316 | fflush(stdin); 317 | scanf("%2d", &lev); 318 | printf(" 正在查找...\n"); 319 | system("mode con cols=80 lines=1000"); 320 | while (node->next != NULL) 321 | { 322 | if (node->next->lever == lev) 323 | { 324 | print_info_solo(node->next); 325 | find = node; 326 | sign++; 327 | } 328 | count++; 329 | node = node->next; 330 | } 331 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 332 | if (sign == 1) 333 | return find; 334 | else if (sign > 1) 335 | return find_info_no(head); 336 | else 337 | { 338 | printf(" 没有找到结果,正在返回上一级菜单..."); 339 | Sleep(3000); 340 | return NULL; 341 | } 342 | return NULL; 343 | } 344 | 345 | struct info *find_info_score(struct info *head) 346 | { 347 | 348 | int count = 0, sign = 0; 349 | struct info *node = head; 350 | struct info *find = NULL; 351 | int lev; 352 | 353 | system("cls"); 354 | printf(" 请输入题目分值:\n"); 355 | fflush(stdin); 356 | scanf("%2d", &lev); 357 | printf(" 正在查找...\n"); 358 | system("mode con cols=80 lines=1000"); 359 | while (node->next != NULL) 360 | { 361 | if (node->next->score == lev) 362 | { 363 | print_info_solo(node->next); 364 | find = node; 365 | sign++; 366 | } 367 | count++; 368 | node = node->next; 369 | } 370 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 371 | if (sign == 1) 372 | return find; 373 | else if (sign > 1) 374 | return find_info_no(head); 375 | else 376 | { 377 | printf(" 没有找到结果,正在返回上一级菜单..."); 378 | Sleep(3000); 379 | return NULL; 380 | } 381 | return NULL; 382 | } 383 | 384 | struct info *find_info_time(struct info *head) 385 | { 386 | 387 | int count = 0, sign = 0; 388 | struct info *node = head; 389 | struct info *find = NULL; 390 | 391 | system("cls"); 392 | printf(" 正在查找...\n"); 393 | system("mode con cols=80 lines=1000"); 394 | while (node->next != NULL) 395 | { 396 | if ((time(NULL) - node->next->timeModify) <= 250942) 397 | { 398 | print_info_solo(node->next); 399 | find = node; 400 | sign++; 401 | } 402 | count++; 403 | node = node->next; 404 | } 405 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 406 | if (sign == 1) 407 | return find; 408 | else if (sign > 1) 409 | return find_info_no(head); 410 | else 411 | { 412 | printf(" 没有找到结果,正在返回上一级菜单..."); 413 | Sleep(3000); 414 | return NULL; 415 | } 416 | return NULL; 417 | } 418 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/find_user.cpp: -------------------------------------------------------------------------------- 1 | //find_user.cpp created time 2016-1-9 11:01:10 2 | 3 | #include "all.h" 4 | 5 | struct user *find_user(struct user *head) 6 | { 7 | 8 | int a; 9 | struct user *find = NULL; 10 | 11 | while (1) 12 | { 13 | 14 | system("mode con cols=57 lines=20"); 15 | system("color 4E"); 16 | 17 | a = move_1(3, menuPrint_6); 18 | system("cls"); 19 | switch (a) 20 | { 21 | //1. 22 | case 1: 23 | find = find_user_name_key(head); 24 | break; 25 | case 2: 26 | find = find_user_no_key(head); 27 | break; 28 | case 3: 29 | find = find_user_name(head); 30 | break; 31 | case 4: 32 | find = find_user_no(head); 33 | break; 34 | case 5: 35 | find = find_user_time(head); 36 | break; 37 | case 0: 38 | default: 39 | break; 40 | } 41 | if (find != NULL) 42 | find_user_next(find); 43 | break; 44 | } 45 | return find; 46 | } 47 | 48 | /* 49 | 查找学生界面 admin 50 | 51 | 52 | 1.按名字(模糊)查找 53 | 54 | 2.按学号(模糊)查找 55 | 56 | 3.按名字(精确)查找 57 | 58 | 4.按学号(精确)查找 59 | 60 | 5.最近登录的学生 61 | 62 | 0.返回上一层 63 | */ 64 | 65 | void menuPrint_6(int a) 66 | { 67 | 68 | system("cls"); 69 | char name[15] = {"menu_6.txt"}; 70 | 71 | char arr[1500]; //这里1000最为合适~2333 72 | memset(arr, 0, sizeof(char) * 1500); 73 | FILE *fp; 74 | fp = fopen(name, "r"); 75 | 76 | if (fp == NULL) 77 | { 78 | printf("cannot open %s\n", name); 79 | exit(0); 80 | } 81 | 82 | int h = 0; 83 | while (!feof(fp)) 84 | { 85 | fread(arr + h, sizeof(char), 1, fp); 86 | h++; 87 | } 88 | printf("%s", arr); 89 | 90 | fclose(fp); 91 | 92 | switch (a) 93 | { 94 | //显示光标 95 | case 1: 96 | printLaugh(40, 6); 97 | break; 98 | case 2: 99 | printLaugh(40, 8); 100 | break; 101 | case 3: 102 | printLaugh(40, 10); 103 | break; 104 | case 4: 105 | printLaugh(40, 12); 106 | break; 107 | case 5: 108 | printLaugh(40, 14); 109 | break; 110 | case 0: 111 | printLaugh(40, 16); 112 | break; 113 | default: 114 | break; 115 | } 116 | } 117 | 118 | struct user *find_user_name_key(struct user *head) 119 | { 120 | 121 | int count = 0, sign = 0; 122 | struct user *node = head; 123 | struct user *find = NULL; 124 | char key[20]; 125 | memset(key, 0, sizeof(char) * 20); 126 | 127 | system("cls"); 128 | printf(" ---按学生姓名(模糊)查找---\n 请输入关键字:\n"); 129 | fflush(stdin); 130 | scanf("%19s", key); 131 | printf(" 正在查找...\n"); 132 | system("mode con cols=80 lines=1000"); 133 | while (node->next != NULL) 134 | { 135 | if (fuzzy_search(node->next->name, key)) 136 | { 137 | print_user_solo(node->next); 138 | find = node; 139 | sign++; 140 | } 141 | count++; 142 | node = node->next; 143 | } 144 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 145 | if (sign == 1) 146 | return find; 147 | else if (sign > 1) 148 | return find_user_no(head); 149 | else 150 | { 151 | printf(" 没有找到结果,正在返回上一级菜单..."); 152 | Sleep(3000); 153 | return NULL; 154 | } 155 | return NULL; 156 | } 157 | 158 | struct user *find_user_no_key(struct user *head) 159 | { 160 | 161 | int count = 0, sign = 0; 162 | struct user *node = head; 163 | struct user *find = NULL; 164 | char key[20]; 165 | memset(key, 0, sizeof(char) * 20); 166 | 167 | system("cls"); 168 | printf(" ---按学生学号(模糊)查找---\n 请输入关键字:\n"); 169 | fflush(stdin); 170 | scanf("%19s", key); 171 | printf(" 正在查找...\n"); 172 | system("mode con cols=80 lines=1000"); 173 | while (node->next != NULL) 174 | { 175 | if (fuzzy_search(node->next->no, key)) 176 | { 177 | print_user_solo(node->next); 178 | find = node; 179 | sign++; 180 | } 181 | count++; 182 | node = node->next; 183 | } 184 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 185 | if (sign == 1) 186 | return find; 187 | else if (sign > 1) 188 | return find_user_no(head); 189 | else 190 | { 191 | printf(" 没有找到结果,正在返回上一级菜单..."); 192 | Sleep(3000); 193 | return NULL; 194 | } 195 | return NULL; 196 | } 197 | 198 | void delete_user_no(struct user *find) 199 | { 200 | 201 | struct user *node = find->next; 202 | printf(" 删除学生 %s %s 成功!\n", node->no, node->name); 203 | find->next = node->next; 204 | free(node); 205 | node = NULL; 206 | } 207 | 208 | struct user *find_user_no(struct user *head) 209 | { 210 | 211 | char num[11]; 212 | struct user *node = head; 213 | 214 | printf(" 请输入学号以选择单个学生(输入0则退出):\n"); 215 | fflush(stdin); 216 | scanf("%s", num); 217 | printf(" 正在定位...\n"); 218 | system("mode con cols=80 lines=30"); 219 | while (node->next != NULL) 220 | { 221 | if (strcmp(node->next->no, num) == 0) 222 | { 223 | print_user_solo(node->next); 224 | return node; 225 | } 226 | node = node->next; 227 | } 228 | printf(" 没有找到结果,正在返回上一级菜单..."); 229 | Sleep(3000); 230 | return NULL; 231 | } 232 | 233 | struct user *find_user_name(struct user *head) 234 | { 235 | 236 | char num[11]; 237 | struct user *node = head; 238 | 239 | printf(" 请输入名字以查找单个学生(输入0则退出):\n"); 240 | fflush(stdin); 241 | scanf("%s", num); 242 | printf(" 正在定位...\n"); 243 | system("mode con cols=80 lines=30"); 244 | while (node->next != NULL) 245 | { 246 | if (strcmp(node->next->name, num) == 0) 247 | { 248 | print_user_solo(node->next); 249 | return node; 250 | } 251 | node = node->next; 252 | } 253 | printf(" 没有找到结果,正在返回上一级菜单..."); 254 | Sleep(3000); 255 | return NULL; 256 | } 257 | 258 | void change_user(struct user *node) 259 | { 260 | 261 | int s = 2; 262 | char ch[30]; 263 | while (s != 0) 264 | { 265 | 266 | printf("\n 请输入相应的数字,按回车结束...\n"); 267 | printf(" 1.no -> 修改学号\n"); 268 | printf(" 2.password -> 修改密码\n"); 269 | printf(" 3.name -> 修改名字\n"); 270 | 271 | printf(" 0.return -> 返回菜单\n\t\t"); 272 | 273 | fflush(stdin); 274 | scanf("%d", &s); 275 | fflush(stdin); 276 | 277 | switch (s) 278 | { 279 | case 1: 280 | printf("请输入新的学号: "); 281 | scanf("%20s", ch); 282 | if (strlen(ch) == 11) 283 | { 284 | strcpy(node->no, ch); 285 | printf("---修改成功!\n"); 286 | s = 0; 287 | } 288 | else 289 | { 290 | printf("---修改失败! 原因:输入的学号不是10位\n"); 291 | Sleep(1300); 292 | s = 0; 293 | } 294 | break; 295 | case 2: 296 | printf("请输入新的密码: "); 297 | scanf("%20s", ch); 298 | if (strlen(ch) >= 6) 299 | { 300 | strcpy(node->password, ch); 301 | printf("---修改成功!\n"); 302 | s = 0; 303 | } 304 | else 305 | { 306 | printf("---修改失败! 原因:密码过于简单\n"); 307 | Sleep(1300); 308 | s = 0; 309 | } 310 | break; 311 | case 3: 312 | printf("请输入新的名字: "); 313 | scanf("%20s", node->name); 314 | printf("---修改成功!\n"); 315 | s = 0; 316 | break; 317 | default: 318 | break; 319 | } //匹配switch 320 | } //匹配while 321 | 322 | print_user_solo(node); 323 | } 324 | 325 | void find_user_next(struct user *node) 326 | { 327 | 328 | int s = 2; 329 | while (s != 0) 330 | { 331 | 332 | printf("\n 请输入相应的数字,按回车结束...\n"); 333 | printf(" 1.change -> 修改\n"); 334 | printf(" 2.delete -> 删除\n"); //小bug 用户自己删除自己~~~2333 335 | printf(" 0.return -> 返回菜单\n\t\t"); 336 | 337 | fflush(stdin); 338 | scanf("%d", &s); 339 | switch (s) 340 | { 341 | case 1: 342 | change_user(node->next); 343 | break; 344 | case 2: 345 | delete_user_no(node); 346 | break; 347 | default: 348 | break; 349 | } 350 | } 351 | } 352 | 353 | /* 354 | 355 | struct user * find_user_lever(struct user * head) { 356 | 357 | int count=0,sign=0; 358 | struct user * node = head; 359 | struct user * find = NULL; 360 | int lev; 361 | 362 | system("cls"); 363 | printf(" 请输入题目难度:\n"); 364 | fflush(stdin); 365 | scanf("%2d",&lev); 366 | printf(" 正在查找...\n"); 367 | system("mode con cols=80 lines=1000"); 368 | while(node->next!=NULL){ 369 | if(node->next->lever==lev){ 370 | print_user_solo(node->next); 371 | find=node; 372 | sign++; 373 | } 374 | count++; 375 | node=node->next; 376 | } 377 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n",count,sign); 378 | if(sign==1) 379 | return find; 380 | else if(sign>1) 381 | return find_user_no(head); 382 | else{ 383 | printf(" 没有找到结果,正在返回上一级菜单..."); 384 | Sleep(3000); 385 | return NULL; 386 | } 387 | return NULL; 388 | } 389 | 390 | 391 | struct user * find_user_score(struct user * head) { 392 | 393 | int count=0,sign=0; 394 | struct user * node = head; 395 | struct user * find = NULL; 396 | int lev; 397 | 398 | system("cls"); 399 | printf(" 请输入题目难度:\n"); 400 | fflush(stdin); 401 | scanf("%2d",&lev); 402 | printf(" 正在查找...\n"); 403 | system("mode con cols=80 lines=1000"); 404 | while(node->next!=NULL){ 405 | if(node->next->score==lev){ 406 | print_user_solo(node->next); 407 | find=node; 408 | sign++; 409 | } 410 | count++; 411 | node=node->next; 412 | } 413 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n",count,sign); 414 | if(sign==1) 415 | return find; 416 | else if(sign>1) 417 | return find_user_no(head); 418 | else{ 419 | printf(" 没有找到结果,正在返回上一级菜单..."); 420 | Sleep(3000); 421 | return NULL; 422 | } 423 | return NULL; 424 | } 425 | 426 | */ 427 | 428 | struct user *find_user_time(struct user *head) 429 | { 430 | 431 | int count = 0, sign = 0; 432 | struct user *node = head; 433 | struct user *find = NULL; 434 | 435 | system("cls"); 436 | printf(" 正在查找...\n"); 437 | system("mode con cols=80 lines=1000"); 438 | while (node->next != NULL) 439 | { 440 | if ((time(NULL) - node->next->timeLogin) <= 250942) 441 | { 442 | print_user_solo(node->next); 443 | find = node; 444 | sign++; 445 | } 446 | count++; 447 | node = node->next; 448 | } 449 | printf("\n 查找完毕!累计查找%d次,查找结果%d条\n", count, sign); 450 | if (sign == 1) 451 | return find; 452 | else if (sign > 1) 453 | return find_user_no(head); 454 | else 455 | { 456 | printf(" 没有找到结果,正在返回上一级菜单..."); 457 | Sleep(3000); 458 | return NULL; 459 | } 460 | return NULL; 461 | } 462 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3.18-xxx 单项选择题标准化考试系统(难度系数:5级) 3 | 【任务描述】 4 | 设计一个单项选择题的考试系统,可实现自动组卷功能。 5 | 【功能描述】 6 | (1)管理员功能 7 | 试题管理:每个试题包括题干、4个备选答案、标准答案等信息。可进行试题添加、删除、修改、查询、保存、浏览等操作。 8 | 组卷功能:指定题目数、题目总分,生成试卷。将试卷输出到文件,将答案输出到另一个文件。 9 | 用户管理:对用户信息进行添加、删除、修改、查询、保存、浏览等操作。 10 | 用户答题情况管理:指定用户,统计其做试卷的总次数,以及每次所得的总分。 11 | (2)用户功能 12 | 练习功能:用户指定题目数,随机选题。对用户的答案与标准答案进行对比,并最终给出成绩。对错误题目,要能给出正确答案。 13 | 考试功能:用户指定题目数,随机生成总分100分的试卷,系统可根据用户答案与标准答案的对比实现判卷,并给出成绩。并将用户所答试卷、用户的答案、用户所得总分,输出到磁盘文件保存。进行基本试题分析。 14 | (3)设计提示 15 | 管理员和用户分别通过密码登录,进行题目维护和答题操作。用户产生的答题文件,应以用户名+系统时间.txt的形式存储,以便于进行管理。 16 | */ 17 | 18 | #include "all.h" 19 | 20 | void main(void) 21 | { 22 | 23 | printf("正在载入程序,请稍候..."); 24 | 25 | srand((unsigned)time(NULL)); 26 | int a; 27 | struct user *head = NULL; 28 | 29 | while (1) 30 | { 31 | 32 | system("mode con cols=57 lines=20"); 33 | system("color 0A"); 34 | 35 | a = move_1(6, menuPrint); 36 | switch (a) 37 | { 38 | //1. 39 | case 1: 40 | admin(); 41 | continue; 42 | case 2: 43 | user(); 44 | continue; 45 | case 3: 46 | head = read_user(); 47 | input_user(head); 48 | write_user(head); 49 | free_user(head); 50 | continue; 51 | case 4: 52 | system("cls"); 53 | printf("上下键控制光标移动\n输入序号或回车可进入相应选项\n一定要切成英文输入法!!!\n"); 54 | system("pause"); 55 | continue; 56 | case 5: 57 | ShellExecute(NULL, "open", "http://reigning.github.io/", NULL, NULL, SW_MAXIMIZE); 58 | ; 59 | continue; 60 | case 0: 61 | exit(0); 62 | default: 63 | break; 64 | } 65 | } 66 | } 67 | 68 | int move_1(int num, void (*p)(int)) 69 | { 70 | 71 | int a = 1; 72 | int key = 1; 73 | 74 | while (1) 75 | { 76 | 77 | (*p)(a); 78 | fflush(stdin); 79 | key = getch(); 80 | if (key == 244 || key == 0) 81 | key = getch(); 82 | if (key == 72) 83 | a--; //up 84 | else if (key == 80) 85 | a++; 86 | else if (key >= 48 && key <= 57) 87 | return key - 48; 88 | else if (key == 27) 89 | return 0; //Esc 90 | else if (key == 13) 91 | return a; 92 | else 93 | ; 94 | 95 | if (a == num) 96 | a = 0; 97 | if (a == -1) 98 | a = num - 1; 99 | } 100 | } 101 | 102 | void menuPrint(int a) 103 | { 104 | 105 | system("cls"); 106 | char name[15] = {"menu_1.txt"}; 107 | 108 | char arr[1500]; //这里1000最为合适~2333 109 | memset(arr, 0, sizeof(char) * 1500); 110 | FILE *fp; 111 | fp = fopen(name, "r"); 112 | 113 | if (fp == NULL) 114 | { 115 | printf("cannot open %s\n", name); 116 | exit(0); 117 | } 118 | 119 | int h = 0; 120 | while (!feof(fp)) 121 | { 122 | fread(arr + h, sizeof(char), 1, fp); 123 | h++; 124 | } 125 | printf("%s", arr); 126 | 127 | fclose(fp); 128 | 129 | switch (a) 130 | { 131 | //显示光标 132 | case 1: 133 | printLaugh(32, 6); 134 | break; 135 | case 2: 136 | printLaugh(32, 8); 137 | break; 138 | case 3: 139 | printLaugh(32, 10); 140 | break; 141 | case 4: 142 | printLaugh(32, 12); 143 | break; 144 | case 5: 145 | printLaugh(32, 14); 146 | break; 147 | case 0: 148 | printLaugh(32, 16); 149 | break; 150 | default: 151 | break; 152 | } 153 | } 154 | 155 | void printLaugh(int x, int y) 156 | { 157 | 158 | goto_pos(x, y); 159 | printf("(*^_^*)"); 160 | goto_pos(x + 3, y); 161 | } 162 | 163 | void goto_pos(int x, int y) 164 | { 165 | //(列,行) 166 | COORD coord = {x, y}; 167 | SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 168 | } 169 | 170 | int fuzzy_search(char str[], char str2[]) 171 | { 172 | 173 | //char str[]为源字符串 174 | //char str2[]为查找的关键字 175 | char *res; 176 | res = (char *)memchr(str, str2[0], strlen(str)); 177 | //根据要查找的字符串第一个字符,切割源字符串 178 | if (res == NULL) 179 | return 0; 180 | //如果连被查找字符串的第一个字符都没有找到... 181 | 182 | int n; 183 | while (1) 184 | { 185 | n = memcmp(res, str2, strlen(str2) - 1); //比较 186 | if (n != 0) 187 | { 188 | if (strlen(res) <= strlen(str2)) //切割出的字符串小于要查找字符串的长度 189 | return 0; 190 | else 191 | { 192 | //根据要查找的第一个字符继续切割 193 | res = (char *)memchr(res + 1, str2[0], strlen(res)); 194 | if (res == NULL) 195 | return 0; 196 | } 197 | } 198 | else //如果n = 0,找到 199 | return 1; 200 | } 201 | } -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/question.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | (1) 管理员功能 3 | 4 | 试题管理:每个试题包括题干、4个备选答案、标准答案等信息。 5 | 可进行试题添加、删除、修改、查询、保存、浏览等操作。 6 | 7 | */ 8 | 9 | //question.cpp created time 2016-1-3 23:45:41 10 | 11 | #include "all.h" 12 | 13 | void question() 14 | { 15 | 16 | int a; 17 | struct info *head = NULL; 18 | head = read_info(); 19 | 20 | while (1) 21 | { 22 | 23 | system("mode con cols=57 lines=20"); 24 | system("color 3F"); 25 | 26 | a = move_1(6, menuPrint_3); 27 | switch (a) 28 | { 29 | //1. 30 | case 1: 31 | find_info(head); 32 | continue; 33 | case 2: 34 | input_info(head); 35 | continue; 36 | case 3: 37 | find_info(head); 38 | continue; 39 | case 4: 40 | find_info(head); 41 | continue; 42 | case 5: 43 | system("cls"); 44 | print_info(head->next); 45 | system("pause"); 46 | continue; 47 | case 0: 48 | default: 49 | break; 50 | } 51 | break; 52 | } 53 | write_info(head); 54 | free_info(head); //save 55 | } 56 | 57 | /* 58 | 试题管理界面 admin 59 | 60 | 61 | 1.查找试题 62 | 63 | 2.添加试题 64 | 65 | 3.删除试题 66 | 67 | 4.修改试题 68 | 69 | 5.浏览试题 70 | 71 | 0.保存并退出 72 | */ 73 | 74 | void menuPrint_3(int a) 75 | { 76 | 77 | system("cls"); 78 | char name[15] = {"menu_3.txt"}; 79 | 80 | char arr[1500]; //这里1000最为合适~2333 81 | memset(arr, 0, sizeof(char) * 1500); 82 | FILE *fp; 83 | fp = fopen(name, "r"); 84 | 85 | if (fp == NULL) 86 | { 87 | printf("cannot open %s\n", name); 88 | exit(0); 89 | } 90 | 91 | int h = 0; 92 | while (!feof(fp)) 93 | { 94 | fread(arr + h, sizeof(char), 1, fp); 95 | h++; 96 | } 97 | printf("%s", arr); 98 | 99 | fclose(fp); 100 | 101 | switch (a) 102 | { 103 | //显示光标 104 | case 1: 105 | printLaugh(40, 6); 106 | break; 107 | case 2: 108 | printLaugh(40, 8); 109 | break; 110 | case 3: 111 | printLaugh(40, 10); 112 | break; 113 | case 4: 114 | printLaugh(40, 12); 115 | break; 116 | case 5: 117 | printLaugh(40, 14); 118 | break; 119 | case 0: 120 | printLaugh(40, 16); 121 | break; 122 | default: 123 | break; 124 | } 125 | } 126 | 127 | //不带头结点的尾插法 128 | 129 | struct info *solo_info() 130 | { 131 | 132 | struct info *node = NULL; 133 | node = (struct info *)malloc(sizeof(struct info)); 134 | memset(node, 0, sizeof(struct info)); 135 | if (node == NULL) 136 | { 137 | printf("申请内存失败!"); 138 | exit(-1); 139 | } 140 | else 141 | { 142 | node->next = NULL; 143 | } 144 | return node; 145 | } 146 | 147 | void input_info(struct info *head) 148 | { 149 | 150 | int i, j; 151 | char ch; 152 | struct info *node = NULL; 153 | struct info *tail = head; 154 | 155 | node = solo_info(); 156 | while (tail->next != NULL) 157 | tail = tail->next; 158 | tail->next = node; 159 | 160 | system("mode con cols=30 lines=20"); 161 | system("color 0F"); 162 | 163 | printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 164 | printf(" 输入题目信息\n\n"); 165 | printf(" ---------------------\n"); 166 | printf(" | 难度(1-10): | |\n"); 167 | printf(" ---------------------\n"); 168 | printf("\n"); 169 | printf(" ---------------------\n"); 170 | printf(" | 分值 (1-5): | |\n"); 171 | printf(" ---------------------\n"); 172 | printf("\n"); 173 | printf(" ---------------------\n"); 174 | printf(" | 正确选项: | |\n"); 175 | printf(" | A---D | |\n"); 176 | printf(" ---------------------\n"); 177 | printf("\n"); 178 | 179 | node->no = tail->no + 1; 180 | 181 | fflush(stdin); 182 | goto_pos(22, 7); 183 | scanf("%2d", &node->lever); 184 | 185 | fflush(stdin); 186 | goto_pos(22, 11); 187 | scanf("%2d", &node->score); 188 | 189 | fflush(stdin); 190 | goto_pos(22, 15); 191 | ch = getchar(); 192 | node->rightAnswer = ch - 'A'; 193 | 194 | system("cls"); 195 | system("mode con cols=50 lines=40"); 196 | printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 197 | printf(" 输入题目信息\n\n"); 198 | printf(" ---------------------\n\n"); 199 | printf("请输入题目描述(支持换行,请用@结束输入):\n"); 200 | fflush(stdin); 201 | for (j = 0; j < 1000; j++) 202 | { 203 | ch = getchar(); 204 | if (ch != '@') 205 | node->statement[j] = ch; 206 | else 207 | break; 208 | } 209 | 210 | for (i = 0; i < 4; i++) 211 | { 212 | printf("请输入%c选项内容", 'A' + i); 213 | fflush(stdin); 214 | for (j = 0; j < 100; j++) 215 | { 216 | ch = getchar(); 217 | if (ch != '\n') 218 | node->options[i][j] = ch; 219 | else 220 | break; 221 | } 222 | } 223 | 224 | printf("请输入5个关键字,并用空格隔开,或以 @+回车 结束关键字的输入.\n"); 225 | fflush(stdin); 226 | for (i = 0; i < 5; i++) 227 | { 228 | for (j = 0; j < 40; j++) 229 | { 230 | ch = getchar(); 231 | if (ch != '\n' && ch != ' ') 232 | node->keyWords[i][j] = ch; 233 | else 234 | break; 235 | } 236 | if (node->keyWords[i][0] == '@') 237 | break; 238 | } 239 | 240 | printf("请输入%c选项的正确原因:\n", 'A' + node->rightAnswer); 241 | fflush(stdin); 242 | scanf("%300s", node->answers[node->rightAnswer]); 243 | 244 | for (i = 0; i < 4; i++) 245 | { 246 | if (i == node->rightAnswer) 247 | continue; 248 | printf("请输入%c选项的错误原因:\n", 'A' + i); 249 | fflush(stdin); 250 | scanf("%300s", node->answers[i]); 251 | } 252 | 253 | node->timeAdd = node->timeModify = time(NULL); 254 | node->next = NULL; 255 | 256 | printf("添加试题成功!正在返回主菜单..."); 257 | Sleep(1300); 258 | } 259 | 260 | void write_info(struct info *head) 261 | { 262 | 263 | FILE *fp; 264 | if ((fp = fopen("info.txt", "w")) == NULL) 265 | { 266 | printf("打开文件失败"); 267 | exit(-2); 268 | } 269 | printf("写入文件中"); 270 | while (head->next != NULL) 271 | { 272 | printf("."); 273 | head = head->next; 274 | if (fwrite(head, sizeof(struct info), 1, fp) != 1) 275 | { 276 | printf("写入文件失败"); 277 | exit(-2); 278 | } 279 | } 280 | //printf("写入完成\n"); 281 | fclose(fp); 282 | } 283 | 284 | struct info *read_info() 285 | { 286 | 287 | int i = 0; 288 | FILE *fp; 289 | struct info *head = NULL; 290 | struct info *node = NULL; 291 | struct info *tail = NULL; 292 | 293 | //head=solo_info(); 294 | 295 | if ((fp = fopen("info.txt", "r")) == NULL) 296 | { 297 | system("cls"); 298 | printf("读取文件失败"); 299 | exit(-3); 300 | } 301 | tail = head = solo_info(); 302 | while (!feof(fp)) 303 | { 304 | 305 | node = solo_info(); 306 | if (fread(node, sizeof(struct info), 1, fp) == 1) 307 | { 308 | tail->next = node; 309 | tail = node; 310 | } 311 | } 312 | 313 | //!@#$%^&*()_)(*&^%$#@!@#$%^&*())(*&^%$#@!#$%^&*()(*&^%$#@ 314 | 315 | fclose(fp); 316 | return head; 317 | } 318 | 319 | void free_info(struct info *head) 320 | { 321 | 322 | struct info *p = NULL; 323 | while (head != NULL) 324 | { 325 | p = head->next; 326 | free(head); 327 | head = p; 328 | } 329 | return; 330 | } 331 | 332 | void print_info(struct info *node) 333 | { 334 | 335 | int i; 336 | system("mode con cols=80 lines=1000"); 337 | 338 | printf("正在读取数据...\n"); 339 | if (node == NULL) 340 | { 341 | printf("当前题库为空!"); 342 | } 343 | else 344 | { 345 | struct info *p = node; 346 | while (p != NULL) 347 | { 348 | printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 349 | printf(" no:%3d ", p->no); 350 | printf(" lever:%2d ", p->lever); 351 | printf(" score:%d ", p->score); 352 | printf("\n statement:\n\t%s\n\n", p->statement); 353 | 354 | printf(" keyWords:"); 355 | for (i = 0; i < 5; i++) 356 | if (p->keyWords[i][0] != '@') 357 | printf("%s ", p->keyWords[i]); 358 | else 359 | break; 360 | printf("\n"); 361 | 362 | printf(" A:%s\t", p->options[0]); 363 | printf(" B:%s\n", p->options[1]); 364 | printf(" C:%s\t", p->options[2]); 365 | printf(" D:%s\n", p->options[3]); 366 | //printf("rightAnswer:%c",'A'+p->rightAnswer); 367 | printf(" %c right,because %s\n", 'A' + p->rightAnswer, p->answers[p->rightAnswer]); 368 | for (i = 0; i < 4; i++) 369 | { 370 | if (i == p->rightAnswer) 371 | continue; 372 | printf(" %c wrong,because %s\n", 'A' + i, p->answers[i]); 373 | } 374 | printf(" timeAdd: "); 375 | print_time(p->timeAdd); 376 | printf(" timeModify:"); 377 | print_time(p->timeModify); 378 | 379 | p = p->next; 380 | } 381 | } 382 | } 383 | 384 | void print_info_solo(struct info *node) 385 | { 386 | 387 | int i; 388 | 389 | if (node == NULL) 390 | { 391 | printf("当前结点为空!"); 392 | } 393 | else 394 | { 395 | struct info *p = node; 396 | 397 | printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 398 | printf(" no:%3d ", p->no); 399 | printf(" lever:%2d ", p->lever); 400 | printf(" score:%d ", p->score); 401 | printf("\n statement:\n\t%s\n\n", p->statement); 402 | 403 | printf(" keyWords:"); 404 | for (i = 0; i < 5; i++) 405 | if (p->keyWords[i][0] != '@') 406 | printf("%s ", p->keyWords[i]); 407 | else 408 | break; 409 | printf("\n"); 410 | 411 | printf(" A:%s\t", p->options[0]); 412 | printf(" B:%s\n", p->options[1]); 413 | printf(" C:%s\t", p->options[2]); 414 | printf(" D:%s\n", p->options[3]); 415 | //printf("rightAnswer:%c",'A'+p->rightAnswer); 416 | printf(" %c right,because %s\n", 'A' + p->rightAnswer, p->answers[p->rightAnswer]); 417 | for (i = 0; i < 4; i++) 418 | { 419 | if (i == p->rightAnswer) 420 | continue; 421 | printf(" %c wrong,because %s\n", 'A' + i, p->answers[i]); 422 | } 423 | printf(" timeAdd: "); 424 | print_time(p->timeAdd); 425 | printf(" timeModify:"); 426 | print_time(p->timeModify); 427 | } 428 | } 429 | 430 | void fprint_info_solo(FILE *fp, struct info *node) 431 | { 432 | 433 | int i; 434 | 435 | if (node == NULL) 436 | { 437 | printf("当前结点为空!"); 438 | } 439 | else 440 | { 441 | struct info *p = node; 442 | 443 | fprintf(fp, "%s", "\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 444 | fprintf(fp, " no:%3d ", p->no); 445 | fprintf(fp, " lever:%2d ", p->lever); 446 | fprintf(fp, " score:%d ", p->score); 447 | fprintf(fp, "\n statement:\n\t%s\n\n", p->statement); 448 | 449 | fprintf(fp, "%s", " keyWords:"); 450 | for (i = 0; i < 5; i++) 451 | if (p->keyWords[i][0] != '@') 452 | fprintf(fp, "%s ", p->keyWords[i]); 453 | else 454 | break; 455 | fprintf(fp, "%s", "\n"); 456 | 457 | fprintf(fp, " A:%s\t", p->options[0]); 458 | fprintf(fp, " B:%s\n", p->options[1]); 459 | fprintf(fp, " C:%s\t", p->options[2]); 460 | fprintf(fp, " D:%s\n", p->options[3]); 461 | 462 | fprintf(fp, " %c right,because %s\n", 'A' + p->rightAnswer, p->answers[p->rightAnswer]); 463 | for (i = 0; i < 4; i++) 464 | { 465 | if (i == p->rightAnswer) 466 | continue; 467 | fprintf(fp, " %c wrong,because %s\n", 'A' + i, p->answers[i]); 468 | } 469 | } 470 | } 471 | -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/time.cpp: -------------------------------------------------------------------------------- 1 | //time.cpp created time 2016-1-6 14:02:55 2 | 3 | #include "all.h" 4 | 5 | void print_time(long lt) 6 | { 7 | struct tm *t; 8 | t = localtime(<); 9 | printf("%4d年%02d月%02d日 %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); 10 | } 11 | 12 | void sprint_time(char *buf) 13 | { 14 | struct tm *t; 15 | long lt = time(NULL); 16 | t = localtime(<); 17 | sprintf(buf, "_%4d-%02d-%02d_%02d-%02d-%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); 18 | } -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/src 源代码/user.cpp: -------------------------------------------------------------------------------- 1 | //user.cpp created time 2016-1-9 17:57:32 2 | 3 | #include "all.h" 4 | 5 | void user() 6 | { 7 | 8 | system("mode con cols=34 lines=22"); 9 | system("color 3A"); 10 | 11 | int i; 12 | struct user *head = NULL; 13 | head = read_user(); 14 | struct user *temp = NULL; 15 | 16 | char get_1[10], get_2[10]; 17 | for (i = 0; i < 3; i++) 18 | { 19 | system("cls"); 20 | printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); 21 | printf(" 学生登录界面\n\n"); 22 | printf(" -------------------------\n"); 23 | printf(" | 学号: | |\n"); 24 | printf(" -------------------------\n"); 25 | printf("\n"); 26 | printf(" -------------------------\n"); 27 | printf(" | 密码: | |\n"); 28 | printf(" -------------------------\n"); 29 | printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 30 | fflush(stdin); 31 | goto_pos(16, 7); 32 | scanf("%20s", get_1); 33 | fflush(stdin); 34 | goto_pos(16, 11); 35 | scanf("%20s", get_2); 36 | 37 | temp = head; 38 | while (temp != NULL) 39 | { 40 | if (strcmp(temp->no, get_1) == 0 && strcmp(temp->password, get_2) == 0) 41 | { 42 | goto_pos(11, 17); 43 | printf("登录成功!"); 44 | Sleep(800); 45 | user_login(head, temp); 46 | //->登录成功后进入user_login函数 47 | return; 48 | } 49 | else 50 | temp = temp->next; 51 | } 52 | goto_pos(11, 17); 53 | printf("密码错误\n 请重新输入 (剩余次数:%d)", 2 - i); 54 | Sleep(1300); 55 | } 56 | exit(-1); 57 | } 58 | 59 | void user_login(struct user *head, struct user *node) 60 | { 61 | 62 | int a; 63 | time_t in, out; 64 | in = time(NULL); 65 | system("color 07"); 66 | while (1) 67 | { 68 | 69 | system("mode con cols=70 lines=22"); 70 | a = move_1(5, menuPrint_7); 71 | 72 | switch (a) 73 | { 74 | case 1: 75 | exam(node); 76 | continue; 77 | case 2: 78 | execrise(node); 79 | continue; 80 | case 3: 81 | system("cls"); 82 | print_user_solo(node); 83 | system("pause"); 84 | continue; 85 | case 4: 86 | system("cls"); 87 | print_user_solo(node); 88 | change_user(node); 89 | system("pause"); 90 | continue; 91 | case 0: 92 | default: 93 | break; 94 | } 95 | break; 96 | } 97 | out = time(NULL); 98 | node->timeOnline += (out - in); 99 | write_user(head); 100 | free_user(head); //save 101 | } 102 | 103 | /* 104 | 105 | ******************************************************* 106 | 107 | 单项选择题标准化考试系统 108 | 109 | 欢迎您, 110 | ------------------- 111 | ------------------- | 1 开始考试 | 112 | | 2 开始练习 | ------------------- 113 | ------------------- 114 | -------------------- 115 | | 3 查看信息 | 116 | -------------------- 117 | -------------------- 118 | | 4 修改密码 | 119 | -------------------- -------------------- 120 | | 0 退出登录 | 121 | -------------------- 122 | 2016-1-9 coded by Reigning... 123 | */ 124 | 125 | void menuPrint_7(int a) 126 | { 127 | 128 | system("cls"); 129 | 130 | char name[15] = {"menu_7.txt"}; 131 | 132 | char arr[1500]; //这里1000最为合适~2333 133 | memset(arr, 0, sizeof(char) * 1500); 134 | FILE *fp; 135 | fp = fopen(name, "r"); 136 | 137 | if (fp == NULL) 138 | { 139 | printf("cannot open %s\n", name); 140 | exit(0); 141 | } 142 | 143 | int h = 0; 144 | while (!feof(fp)) 145 | { 146 | fread(arr + h, sizeof(char), 1, fp); 147 | h++; 148 | } 149 | printf("%s", arr); 150 | 151 | fclose(fp); 152 | 153 | switch (a) 154 | { 155 | //显示光标 156 | case 1: 157 | printRectangle(42, 6); 158 | break; 159 | case 2: 160 | printRectangle(13, 7); 161 | break; 162 | case 3: 163 | printRectangle(30, 10); 164 | break; 165 | case 4: 166 | printRectangle(16, 13); 167 | break; 168 | case 0: 169 | printRectangle(50, 15); 170 | break; 171 | default: 172 | break; 173 | } 174 | } 175 | 176 | void printRectangle(int x, int y) 177 | { 178 | 179 | color(14); 180 | goto_pos(x, y); 181 | printf("---------------"); 182 | goto_pos(x, y + 1); 183 | printf("|"); 184 | goto_pos(x + 14, y + 1); 185 | printf("|"); 186 | goto_pos(x, y + 2); 187 | printf("---------------"); 188 | goto_pos(x + 2, y + 1); 189 | color(7); 190 | } 191 | 192 | /*颜色对应值: 193 |   0=黑色 8=灰色   194 |   1=蓝色 9=淡蓝色    195 |   2=绿色 10=淡绿色 0xa    196 |   3=湖蓝色 11=淡浅绿色 0xb  197 |   4=红色 12=淡红色 0xc   198 |   5=紫色 13=淡紫色 0xd    199 |   6=黄色 14=淡黄色 0xe    200 |   7=白色 15=亮白色 0xf 201 |   也可以吧这些值设置成常量。 202 | */ 203 | void color(const unsigned short color1) 204 | { 205 | /*仅限改变0-15的颜色;如果在0-15那么实现他的颜色 因为如果超过15后面的改变的是文本背景色。*/ 206 | if (color1 >= 0 && color1 <= 15) 207 | SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1); 208 | /*如果不在0-15的范围颜色,那么改为默认的颜色白色;*/ 209 | else 210 | SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); 211 | } 212 | 213 | void exam(struct user *node) 214 | { 215 | 216 | int key, num, a, b; 217 | int i = 0, lever = 100, right = 0; 218 | float score = 0; 219 | time_t begin, temp, end; 220 | char ch[100]; 221 | 222 | FILE *fp = NULL; 223 | char n[100]; 224 | memset(n, 0, sizeof(char) * 100); 225 | strcpy(n, node->name); 226 | a = strlen(n); 227 | sprint_time(&n[a]); 228 | b = strlen(n); 229 | strcpy(&n[b], ".txt"); 230 | 231 | fp = fopen(n, "a+"); 232 | if (fp == NULL) 233 | { 234 | printf("cannot attach %s\n", n); 235 | exit(0); 236 | } 237 | 238 | system("mode con cols=80 lines=300"); 239 | printf("---------考试---------\n"); 240 | printf("请输入题目数量: "); 241 | fflush(stdin); 242 | scanf("%d", &num); 243 | printf("请输入考试内容(如基础,拔高,数组,指针.无要求请直接按@+回车): "); 244 | fflush(stdin); 245 | scanf("%20s", ch); 246 | 247 | struct info *head = read_info(); 248 | struct info *p = head->next; 249 | 250 | printf("考生须知:在作答过程中,按 0 放弃作答当前题目,按Esc则放弃剩余所有题目并交卷!\n"); 251 | printf("按任意键考试开始!\n"); 252 | 253 | node->examTime++; //用户考试次数++ 254 | begin = time(NULL); 255 | key = getch(); 256 | if (key == 0 || key == 224 || key == -32) 257 | key = getch(); 258 | //开始 259 | while (i < num) 260 | { 261 | if (p == NULL) 262 | { 263 | i = -1; 264 | break; 265 | } 266 | if (isQusetion(p, ch)) 267 | { 268 | temp = time(NULL); 269 | printf("\n---------当前分数:%g 分---经过时间:%ld 秒------\n", score, temp - begin); 270 | printf("\n---第%d题:", i + 1); 271 | printf("\n statement:\n\t%s\n\n", p->statement); 272 | printf(" A:%s\t", p->options[0]); 273 | printf(" B:%s\n", p->options[1]); 274 | printf(" C:%s\t", p->options[2]); 275 | printf(" D:%s\n", p->options[3]); 276 | fprint_info_solo(fp, p); 277 | printf("***请作答: "); 278 | fprintf(fp, "%s", "我的答案是: "); 279 | fflush(stdin); 280 | key = getch(); 281 | if (key == 0 || key == 224 || key == -32) 282 | key = getch(); 283 | else if (key >= 97 && key <= 100) 284 | { 285 | printf(" %c ", 'A' + key - 97); 286 | fprintf(fp, " %c \n", 'A' + key - 97); 287 | if ((key - 97) == p->rightAnswer) 288 | { 289 | right++; 290 | node->examRight[node->examTime - 1][0]++; //用户考试正确数目 291 | score += (float)(100.0 / num); 292 | printf("答案正确!\n"); 293 | } 294 | else 295 | { 296 | node->errorHistory[errorsNum(node)] = p->no; 297 | node->examRight[node->examTime - 1][1]++; //用户考试错误数目 298 | answerWrong(node, p); 299 | printf("答案错误!\n"); 300 | } 301 | } 302 | else if (key == 27) 303 | break; //结算 304 | else 305 | { 306 | node->errorHistory[errorsNum(node)] = p->no; 307 | node->examRight[node->examTime - 1][1]++; //用户考试错误数目 308 | printf("答案错误!\n"); 309 | } 310 | i++; 311 | node->exam++; //用户考试题数目++ 312 | } 313 | p = p->next; 314 | } //while 315 | if (i == -1) 316 | printf("当前题库数量有限,敬请谅解\n"); 317 | else 318 | { 319 | end = time(NULL); 320 | printf("考试完成!\n"); 321 | printf("你的分数是:%g\n", score); 322 | node->examScore[node->examTime - 1] = score; //用户考试每次考试分数 323 | printf("你答对题目%d道,正确率为%g%%\n", right, right * 100.0 / num); 324 | node->examRight[node->examTime - 1][0] = right; //用户考试正确数目 325 | node->examRight[node->examTime - 1][1] = num - right; //用户考试错误数目 326 | printf("总计用时间 %ld minutes %ld seconds", (end - begin) / 60, (end - begin) % 60); 327 | } 328 | printf("\n"); 329 | system("pause"); 330 | } 331 | 332 | int isQusetion(struct info *node, char *p) 333 | { 334 | 335 | int i; 336 | if (strcmp(p, "基础") == 0) 337 | if (node->lever >= 5) 338 | return 0; 339 | else if (strcmp(p, "拔高") == 0) 340 | if (node->lever <= 5) 341 | return 0; 342 | else if (*p != '@') 343 | { 344 | for (i = 0; i < 4; i++) 345 | if (fuzzy_search(node->keyWords[i], p) == 1) 346 | return 1; 347 | return 0; 348 | } 349 | else if (rand() % 2 == 0) 350 | return 0; 351 | return 1; 352 | } 353 | 354 | int errorsNum(struct user *node) 355 | { 356 | int i, sum = 0; 357 | for (i = 0; i < 300; i++) 358 | sum += node->examRight[i][1]; 359 | return node->exercise - node->exerciseRight + sum; 360 | } 361 | 362 | void answerWrong(struct user *node, struct info *temp) 363 | { 364 | 365 | int i, j, max; 366 | for (i = 0; i < 300; i++) 367 | if (node->error[i][0] == '\0') 368 | { 369 | max = i + 1; 370 | break; 371 | } 372 | for (i = 0; i < 5; i++) 373 | { 374 | if (temp->keyWords[i][0] != '@' && temp->keyWords[i][0] != '\0') 375 | { 376 | 377 | for (j = 0; j < max; j++) 378 | { 379 | if (strcmp(node->error[j], temp->answers[i]) == 0) 380 | { 381 | node->errorTime[j]++; 382 | break; 383 | } 384 | } 385 | 386 | if (j == max) 387 | { 388 | strcpy(node->error[max - 1], temp->keyWords[i]); 389 | node->errorTime[max - 1]++; 390 | } 391 | } 392 | else 393 | break; 394 | } //for 395 | } 396 | 397 | void execrise(struct user *node) 398 | { 399 | 400 | int key; 401 | int i = 0, lever = 100, right = 0, a = 1; 402 | float score = 0; 403 | char ch[20]; 404 | 405 | system("mode con cols=80 lines=300"); 406 | printf("---------练习---------\n"); 407 | printf("请输入练习内容(如基础,拔高,数组,指针.无要求请直接按@+回车): "); 408 | fflush(stdin); 409 | scanf("%20s", ch); 410 | 411 | struct info *head = read_info(); 412 | struct info *p = head->next; 413 | 414 | printf("练习提升:在作答过程中,按 0 放弃作答当前题目并查看当前题目答案,按Esc则返回主菜单!\n"); 415 | printf("按任意键练习开始!\n"); 416 | 417 | node->exerciseTime++; //用户练习次数++ 418 | key = getch(); 419 | if (key == 0 || key == 224 || key == -32) 420 | key = getch(); 421 | //开始 422 | while (a) 423 | { 424 | if (p == NULL) 425 | { 426 | a = -1; 427 | break; 428 | } 429 | if (isQusetion(p, ch)) 430 | { 431 | printf("\n---第%d题---:", i + 1); 432 | printf("\n statement:\n\t%s\n\n", p->statement); 433 | printf(" A:%s\t", p->options[0]); 434 | printf(" B:%s\n", p->options[1]); 435 | printf(" C:%s\t", p->options[2]); 436 | printf(" D:%s\n", p->options[3]); 437 | printf("***请作答: "); 438 | fflush(stdin); 439 | key = getch(); 440 | if (key == 0 || key == 224 || key == -32) 441 | key = getch(); 442 | else if (key >= 97 && key <= 100) 443 | { 444 | printf(" %c ", 'A' + key - 97); 445 | if ((key - 97) == p->rightAnswer) 446 | { 447 | node->exerciseRight++; 448 | printf("答案正确!\n"); 449 | } 450 | else 451 | { 452 | answerWrong(node, p); 453 | printf("答案错误!\n"); 454 | printf(" %c right,because %s\n", 'A' + p->rightAnswer, p->answers[p->rightAnswer]); 455 | for (i = 0; i < 4; i++) 456 | { 457 | if (i == p->rightAnswer) 458 | continue; 459 | printf(" %c wrong,because %s\n", 'A' + i, p->answers[i]); 460 | } 461 | } 462 | } 463 | else if (key == 27) 464 | break; //结算 465 | else 466 | printf("输入有误\n"); 467 | i++; 468 | node->exercise++; //用户考试题数目++ 469 | } 470 | p = p->next; 471 | } //while 472 | if (a == -1) 473 | printf("当前题库数量有限,敬请谅解\n"); 474 | else 475 | printf("总计练习%d道题~,继续努力"); 476 | printf("\n"); 477 | system("pause"); 478 | } -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/user.use: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/user.use -------------------------------------------------------------------------------- /3.18-单项选择题标准化考试系统/使用前必读.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/3.18-单项选择题标准化考试系统/使用前必读.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # C-language-curriculum-design 2 | #### 2015-12-20 C语言之课程设计 3 | 4 | 装比遭雷劈 5 | 远离学渣君 6 | 7 | 为了您的生命健康 8 | 请不要点击download 9 | 10 | 我的QQ 6109 就不让你加 11 | 我的博客 http://acbetter.github.io/ 或 http://acbetter.com 12 | 13 | 下载地址 14 | https://pan.baidu.com/s/1hsz9qok 15 | 16 | #### 番外篇: 17 | 小君_程序设计 答辩 001 大一上半学期期末 现场视频 现在已经不能看了被和谐了。。。 18 | http://v.qq.com/pa不ge/让q/x/q你/q0180看s3p7xq.html 19 | 2016-1-10 早晨 Reigning(我)在1教202现场装比 虽然中间有个小bug 但是人类已经停不下来我装比的节奏了 20 | 由于有点紧张 好多时候不知道该说些什么好 所以有好多停顿 浪费了不少时间 21 | 还有1个程序没有演示 还有几个功能没有演示 555 22 | 学长学姐老师教授博士都是大神 莫嘲笑我嘛 23 | 24 | #### License 25 | 2015-12-20 C语言之课程设计 is made available under the terms of the [GPLv3](http://www.gnu.org/licenses/gpl.html). 26 | 27 | 28 | #### 更新: 29 | 代码格式 utf-8... 30 | txt格式 gb2312... 31 | 去除大量临时无用的文件... 32 | -------------------------------------------------------------------------------- /VC++6.0 字体设置插件/MONACO 最好的编程字体.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/VC++6.0 字体设置插件/MONACO 最好的编程字体.TTF -------------------------------------------------------------------------------- /VC++6.0 字体设置插件/VC6.0FontSet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/VC++6.0 字体设置插件/VC6.0FontSet.exe -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/2015-11-28 homework @_@.c: -------------------------------------------------------------------------------- 1 | // 2 | // main.c 3 | // C_playground5_homework_7_8 4 | // 5 | // Created by Reign on 15/11/27. 6 | // Copyright © 2015年 Reign. All rights reserved. 7 | // 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | 14 | 15 | void exe_1() 16 | { 17 | printf("8.2.1 编写一个程序,求一个整形数组中存储的最大数值。\n"); 18 | int array_int[5]={5,8,90,-4,2}; 19 | int max=array_int[0]; 20 | for (int i=1; i<5; i++) 21 | { 22 | if (array_int[i]>max) 23 | max=array_int[i]; 24 | } 25 | printf("max=%d\n",max); 26 | } 27 | 28 | void exe_2() 29 | { 30 | printf("8.2.2 编写一个程序,求一个double型数组中存储的最大数值的下标。\n"); 31 | double array_double[5]={59.3,-9.07,78,5,0.3}; 32 | int sign=0; 33 | double currentMax=array_double[0]; 34 | for (int i=1; i<5; i++) 35 | { 36 | if (array_double[i]>currentMax) 37 | { 38 | sign=i; 39 | currentMax=array_double[i]; 40 | } 41 | } 42 | printf("sign=%d\n",sign); 43 | } 44 | 45 | void exe_3() 46 | { 47 | printf("8.2.3 编写一个程序,计算一个整形数组中最大的和最小的数之间的差值。\n"); 48 | int array_int[5]={5,8,90,-4,2}; 49 | int currentMax=array_int[0]; 50 | int currentMin=currentMax; 51 | for (int i=1; i<5; i++) 52 | { 53 | if (array_int[i]>currentMax) 54 | currentMax=array_int[i]; 55 | else 56 | currentMin=array_int[i]; 57 | } 58 | printf("Max=%d,Min=%d\n",currentMax,currentMin); 59 | } 60 | 61 | void exe_4() 62 | { 63 | printf("8.2.4 编写一个程序,把两个数组内的相应元素相加,结果存储到第三个数组内。\n"); 64 | int array_1[5]={5,8,90,-4,2}; 65 | int array_2[5]={1235,87,-4860,4,0}; 66 | int array_3[100]; 67 | memset(array_3, 0, sizeof(int)*100); 68 | for (int i=0; i<5; i++) 69 | { 70 | array_3[i]=array_1[i]+array_2[i]; 71 | printf("array_3[%d]=%d\n",i,array_3[i]); 72 | } 73 | 74 | } 75 | 76 | int IsPrimeNumber(int num) 77 | { 78 | int i; 79 | if (num==1) 80 | return 0; 81 | for (i=2; i<=sqrt(num); i++) 82 | { 83 | if (num%i==0) 84 | return 0; 85 | } 86 | return 1; 87 | } 88 | 89 | void exe_5() 90 | { 91 | printf("8.2.5 在一个数组中存放20个整数,统计并数次该数组中素数的个数。\n"); 92 | printf("初始化数组为 1,2,3 ... 19,20.\n"); 93 | int array_int[20]; 94 | int i; 95 | int num=0; 96 | for (i=0; i<20; i++) 97 | array_int[i]=i+1; 98 | for (i=0; i<20; i++) 99 | if (IsPrimeNumber(array_int[i])==1) 100 | num++; 101 | 102 | printf("num=%d\n",num); 103 | } 104 | 105 | void InputIntArray(int array[],int length) 106 | { 107 | printf("当前整形数组长度为:%d\n",length); 108 | memset(array, 0, sizeof(int)*length); 109 | printf("请初始化数组:\n"); 110 | int temp; 111 | for (int i=0; i\t%d\n",*p); 441 | printf("*(++p)\t->\t%d\n",*(++p)); 442 | printf("*++p\t->\t%d\n",*++p); 443 | printf("*(p--)\t->\t%d\n",*(p--)); 444 | printf("*p--\t->\t%d\n",*p--); 445 | printf("*p++\t->\t%d\n",*p++); 446 | printf("++(*p)\t->\t%d\n",++(*p)); 447 | printf("*p\t->\t%d\n",*p); 448 | printf("(*p)++\t->\t%d\n",(*p)++); 449 | printf("*p\t->\t%d\n\n",*p); 450 | 451 | p=&a[2]; 452 | printf("p=&a[2]\n"); 453 | printf("*p\t->\t%d\n",*p); 454 | printf("*(++p)\t->\t%d\n神越界,哈哈!\n",*(++p)); 455 | p++; 456 | printf("p++\n"); 457 | printf("*p\t->\t%d\n",*p); 458 | 459 | } 460 | 461 | #define FIFTEEN 15 462 | 463 | void exe_14() 464 | { 465 | printf("8.3.1 用冒泡排序法对15个整数由大到小进行排序\n"); 466 | int array[FIFTEEN]; 467 | int *p; 468 | p=array; 469 | InputIntArray_Pointer(array, FIFTEEN); 470 | 471 | for (int i=0; iarray[k+1][0]) 496 | { 497 | SwapInt(&array[k][0], &array[k+1][0]); 498 | SwapInt(&array[k][1], &array[k+1][1]); 499 | } 500 | } 501 | } 502 | for (i=0; iarray[i]) 542 | { 543 | sign=i; 544 | break; 545 | } 546 | } 547 | } 548 | for(int j=8;j>sign;j--) 549 | array[j]=array[j-1]; 550 | 551 | 552 | array[sign]=input; 553 | 554 | OutputIntArray_Pointer(array, 8); 555 | } 556 | 557 | void exe_18() 558 | { 559 | printf("8.3.5 已知5个学生的3门功课的成绩。计算每一个学生的总分及平均分,统计平均成绩低于60分的学生人数。\n"); 560 | float arr[5][5]={{70,53.5,90},{34.5,78,94},{98,99,100},{45,85.5,34}}; 561 | int sum=0; 562 | for (int i=0; i<5; i++) 563 | { 564 | arr[i][3]=arr[i][0]+arr[i][1]+arr[i][2]; 565 | arr[i][4]=arr[i][3]/3.0; 566 | if (arr[i][4]<60) 567 | sum++; 568 | } 569 | printf("sum=%d\n",sum); 570 | } 571 | 572 | void InputIntTwoDArray_5(int array[][5],int line,int column) 573 | { 574 | 575 | for (int i=0; imax) 635 | max=a[row][col]; 636 | if (row==0) 637 | min=max; 638 | else if(min>max) 639 | min=max; 640 | } 641 | printf("The min of max numbers is %d\n",min); 642 | } 643 | 644 | void BubbleSort(int arr[],int len) 645 | { 646 | int sign; 647 | for (int i=0; iarr[j+1]) 653 | { 654 | SwapInt(&arr[j], &arr[j+1]); 655 | sign=0; 656 | } 657 | } 658 | if (sign) 659 | break; 660 | } 661 | } 662 | 663 | void SelectionSort(int arr[],int len) 664 | { 665 | int sign,temp; 666 | for (int i=0; iarr[temp]) 673 | { 674 | temp=j; 675 | sign=0; 676 | } 677 | } 678 | if (sign) 679 | break; 680 | SwapInt(&arr[i], &arr[temp]); 681 | } 682 | } 683 | 684 | void exe_21() 685 | { 686 | printf("8.3.8 输入a1,a2, ... ,a10\n1.将它们从小到大排序输出:用改进的冒泡排序完成\n2.将它们从大到小排序输出:用选择排序和改进的选择排序完成(哭)\n"); 687 | int arr_1[10]={47,-8,92,0,7,42,-74,89,-34,3}; 688 | BubbleSort(arr_1,10); 689 | OutputIntArray(arr_1, 10); 690 | int arr_2[10]={47,-8,92,0,7,42,-74,89,-34,3}; 691 | SelectionSort(arr_2, 10); 692 | OutputIntArray(arr_2, 10); 693 | } 694 | 695 | void exe_22() 696 | { 697 | printf("8.3.9 编写程序,将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。(晕)\n"); 698 | int a=45,b=12; 699 | int c=a/10*10+a%10*1000+b/10+b%10*100; 700 | printf("a=%d\tb=%d\tc=%d\n",a,b,c); 701 | } 702 | 703 | int IsPrime(int *data,int *primes,int len) 704 | { 705 | //data数组存放素数,primes数组存放素数在data中的下标,len表示data数组长度 706 | int i,a,num,sign; 707 | int count=0; 708 | for (i=0; i*pMax) 780 | *pMax=maxtrix[i][j]; 781 | if (maxtrix[i][j]<*pMin) 782 | *pMin=maxtrix[i][j]; 783 | } 784 | } 785 | } 786 | 787 | void exe_24() 788 | { 789 | printf("8.3.11 编写函数,求n阶矩阵中最大元素与最小元素的值。(哭)\n"); 790 | double max,min; 791 | double *pMax,*pMin; 792 | pMax=&max,pMin=&min; 793 | double arr[N][N]; 794 | InputDoubleTwoDArray_N_N(arr,N,N); 795 | MatrixSearch(arr,pMax,pMin,N); 796 | printf("Max=%g,Min=%g\n",*pMax,*pMin); 797 | } 798 | 799 | #include 800 | #include 801 | 802 | void Sort(int intArray[],int intLength) 803 | { 804 | for (int i=0; iintArray[j+1]) 807 | SwapInt(&intArray[j], &intArray[j+1]); 808 | } 809 | 810 | void exe_25() 811 | { 812 | printf("8.3.12 写一个函数,用“冒泡排序法”对n个整数从小到大排序。编写主函数main,使用随机函数产生大小处于100-350之间的20个随机整数,调用该函数进行排序并输出排序后的结果(随机函数是啥子?能吃吗?)\n"); 813 | int arr[20]; 814 | srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样 815 | printf("下面输出产生的随机数...\n"); 816 | for (int i=0; i<20; i++) 817 | { 818 | int number = rand() % 250 + 100; //产生100-350的随机数 819 | printf("%d ", number); 820 | arr[i]=number; 821 | } 822 | printf("输出完毕\n"); 823 | Sort(arr, 20); 824 | OutputIntArray(arr, 20); 825 | } 826 | 827 | int search(char *list,char c,int len) 828 | { 829 | int low=0,high=len-1,k; 830 | //printf("%c ",*list+1); 831 | while (high>=low) 832 | { 833 | k=(low+high)/2; 834 | //printf("high=%d,low=%d,k=%d ",high,low,k); 835 | if (*list+k ==c) 836 | return k; 837 | else if (*list+k >c) 838 | high=k-1; 839 | else 840 | low=k+1; 841 | } 842 | return -1; 843 | } 844 | 845 | void exe_26() 846 | { 847 | printf("8.3.13 在已按字母次序...二分法是啥子?能分我一半吗?\n"); 848 | char arr[26]; 849 | for (int i=0; i<26; i++) 850 | { 851 | arr[i]='a'+i; 852 | printf("%c ",arr[i]); 853 | } 854 | printf("初始化完毕\n请输入要查找的元素...\n"); 855 | char temp; 856 | do 857 | { 858 | scanf("%c",&temp); 859 | 860 | }while (temp=='\n'); 861 | printf("Finding %c,please wait...\n",temp); 862 | printf("%d\n",search(arr, temp, 26)); 863 | 864 | } 865 | 866 | // 下面是 demo 函数 867 | 868 | void demo() 869 | { 870 | int sum; 871 | while (1) 872 | { 873 | printf("Please input num :\n"); 874 | scanf("%d",&sum); 875 | switch (sum) 876 | { 877 | case 1:exe_1();continue; 878 | case 2:exe_2();continue; 879 | case 3:exe_3();continue; 880 | case 4:exe_4();continue; 881 | case 5:exe_5();continue; 882 | case 6:exe_6();continue; 883 | case 7:exe_7();continue; 884 | case 8:exe_8();continue; 885 | case 9:exe_9();continue; 886 | case 10:exe_10();continue; 887 | case 11:exe_11();continue; 888 | case 12:exe_12();continue; 889 | case 13:exe_13();continue; 890 | case 14:exe_14();continue; 891 | case 15:exe_15();continue; 892 | case 16:exe_16();continue; 893 | case 17:exe_17();continue; 894 | case 18:exe_18();continue; 895 | case 19:exe_19();continue; 896 | case 20:exe_20();continue; 897 | case 21:exe_21();continue; 898 | case 22:exe_22();continue; 899 | case 23:exe_23();continue; 900 | case 24:exe_24();continue; 901 | case 25:exe_25();continue; 902 | case 26:exe_26();continue; 903 | default:break; 904 | } 905 | break; 906 | } 907 | } 908 | 909 | // 下面是 main 函数 910 | 911 | int main() 912 | { 913 | demo(); 914 | //TestIntArray(); 915 | //TestDoubleArray(); 916 | 917 | return 0; 918 | } -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/2015-12-09 homework @_@.c: -------------------------------------------------------------------------------- 1 | // 2 | // main.c 3 | // C_playground5_homework_10 4 | // 5 | // Created by Reign on 15/12/9. 6 | // Copyright © 2015年 Reign. All rights reserved. 7 | // 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | void printfIntArray(int *p,int len,int newline) { 14 | printf("当前调用函数:输出长度为%d的整形数组...\n",len); 15 | if(newline) 16 | printf("当前格式:每输出%d个数据换一行\n",newline); 17 | int i; 18 | int c=1; 19 | for (i=0;i *(p+1+j) ) { 60 | judge=1; 61 | sign=j+1; 62 | } 63 | } 64 | 65 | //if(!judge) 66 | // break; 67 | 68 | temp=*(p+i); 69 | *(p+i)=*(p+sign); 70 | *(p+sign)=temp; 71 | 72 | for (int o=0;o 10 | #include 11 | #include 12 | 13 | void stringContact(char *str1,char *str) 14 | { 15 | //void exe_11() 16 | int a=0; 17 | while (1) 18 | { 19 | if (*(str1+a)=='\0') 20 | break; 21 | a++; 22 | } 23 | int b=0; 24 | while (1) 25 | { 26 | *(str1+a+b)=*(str+b); 27 | if (*(str+b)=='\0') 28 | break; 29 | b++; 30 | } 31 | 32 | 33 | } 34 | #define ELEVEN 100 35 | void exe_11() 36 | { 37 | printf("9.3.2 编写一个函数,将两个字符串连接起来.\n"); 38 | unsigned long M = 100; 39 | char *p = NULL; 40 | p=(char *)malloc(sizeof(char)* M); 41 | char *q = NULL; 42 | q=(char *)malloc(sizeof(char)* M); 43 | 44 | printf("请输入第一个字符串: "); 45 | scanf("%99s",p); 46 | printf("请输入第二个字符串: "); 47 | scanf("%99s",q); 48 | printf("第一个字符串是: %s\n第二个字符串是: %s\n",p,q); 49 | stringContact(p,q); 50 | printf("连接之后是: %s\n",p); 51 | 52 | free(p); 53 | p = NULL; 54 | free(q); 55 | q = NULL; 56 | 57 | } 58 | 59 | void charSwap(char *p,char *q) 60 | { 61 | //void exe_12() 62 | char c; 63 | char *r=&c; 64 | *r=*q; 65 | *q=*p; 66 | *p=*r; 67 | } 68 | 69 | void stringInvert(char *str) 70 | { 71 | //void exe_12() 72 | unsigned long a=strlen(str); 73 | int i; 74 | for (i=0; i<(a/2); i++) 75 | { 76 | charSwap(str+i,str+a-i-1); 77 | } 78 | } 79 | 80 | void exe_12() 81 | { 82 | printf("9.3.3 编写一个函数,使字符串反序.\n"); 83 | unsigned long M = 100; 84 | char *p=NULL; 85 | p=(char *)malloc(sizeof(char)* M); 86 | printf("请输入字符串: "); 87 | scanf("%99s",p); 88 | printf("反序之前是: %s\n",p); 89 | stringInvert(p); 90 | printf("反序之后是: %s\n",p); 91 | } 92 | 93 | void exe_13() 94 | { 95 | printf("9.3.4 编写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出.\n"); 96 | unsigned long M = 100; 97 | char *p=NULL; 98 | p=(char *)malloc(sizeof(char)* M); 99 | char *q=NULL; 100 | q=(char *)malloc(sizeof(char)* M); 101 | 102 | printf("请输入字符串: "); 103 | scanf("%99s",p); 104 | int i,j; 105 | 106 | for(i=0,j=0;*(p+i)!='\0';i++) 107 | { 108 | switch (*(p+i)) 109 | { 110 | case 'a': 111 | case 'e': 112 | case 'i': 113 | case 'o': 114 | case 'u': 115 | *(q+j)=*(p+i); 116 | j++; 117 | break; 118 | default:break; 119 | } 120 | } 121 | printf("输出的字符串是: %s\n",q); 122 | free(p); 123 | p = NULL; 124 | free(q); 125 | q = NULL; 126 | } 127 | 128 | void strStatistics(char strings[],int pNum[]) 129 | { 130 | int i; 131 | printf("正在初始化计数数组...\n"); 132 | for (i=0; i<4; i++) 133 | { 134 | *(pNum+i)=0; 135 | } 136 | printf("正在统计字符串中字母 数字 空格和其它字符的个数...\n"); 137 | for (i=0; strings[i]!='\0'; i++) 138 | { 139 | if ( (strings[i]>='A'&&strings[i]<='Z') || (strings[i]>='a'&&strings[i]<='z') ) 140 | pNum[0]++; 141 | else if (strings[i]>='0'&&strings[i]<='9') 142 | pNum[1]++; 143 | else if (strings[i]==' ') 144 | pNum[2]++; 145 | else 146 | pNum[3]++; 147 | } 148 | printf("统计完毕!\n"); 149 | } 150 | 151 | void exe_14() 152 | { 153 | printf("9.3.5 编写一个函数,由实参传来一个字符串,统计该字符串中字母 数字 空格和其它字符的个数.\n"); 154 | unsigned long M = 100; 155 | char *p=NULL; 156 | p=(char *)malloc(sizeof(char)* M); 157 | 158 | printf("请输入字符串: "); 159 | int len; 160 | char ch; 161 | //由于fflush(stdio)无法清空"输入缓冲区",所以使用吃回车大法! 162 | while((ch=getchar())!='\n'&&ch!=EOF); 163 | for (len=0;len='a'&&p[i]<='z') 208 | { 209 | temp=(int)(p[i]-'a'); 210 | sum[temp]++; 211 | } 212 | 213 | } 214 | //下面开始输出各字母出现的次数 215 | 216 | int max,sign; 217 | int j; 218 | for(i=0;i<26;i++) 219 | { 220 | max=0; 221 | sign=0; 222 | for(j=0;j<26;j++) 223 | { 224 | if(max 9.3.2 编写一个函数,将两个字符串连接起来.\n"); 250 | printf("12 -> 9.3.3 编写一个函数,使字符串反序.\n"); 251 | printf("13 -> 9.3.4 编写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出.\n"); 252 | printf("14 -> 9.3.5 编写一个函数,由实参传来一个字符串,统计该字符串中字母 数字 空格和其它字符的个数.\n"); 253 | printf("15 -> 9.3.6 输入一个字符串,统计各字母出现的次数,并按字母出现的多少输出(先输出字母出现多的,次数想同的按字母表顺序输出,不出现的字母不输出).\n"); 254 | printf("请输入运行的题号: "); 255 | scanf("%d",&a); 256 | switch (a) 257 | { 258 | case 11:exe_11();continue; 259 | case 12:exe_12();continue; 260 | case 13:exe_13();continue; 261 | case 14:exe_14();continue; 262 | case 15:exe_15();continue; 263 | default:break; 264 | } 265 | break; 266 | } 267 | } 268 | 269 | int main() 270 | { 271 | demo(); 272 | return 0; 273 | } 274 | -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/C 语言 循环与递归.c: -------------------------------------------------------------------------------- 1 | // 2 | // main.c 3 | // C_playground2_xh_dg 4 | // 5 | // Created by Reign on 15/11/10. 6 | // Copyright © 2015年 Reign. All rights reserved. 7 | // 此工程用来研究循环与函数递归 8 | 9 | 10 | #include 11 | 12 | 13 | //下面是四个输出乘法表的函数。 14 | void multiplicantion_1(); 15 | void multiplicantion_2(); 16 | void multiplicantion_3(); 17 | void multiplicantion_4(); 18 | 19 | //下面是对递归的研究。 20 | 21 | 22 | //递归计算 n! 23 | double factorial_1(double n); 24 | double factorial_2(double n); 25 | 26 | //递归求两个数最大公约数 27 | long maxDivisor(long a,long b); 28 | 29 | //递归之汉诺塔游戏 30 | void moveStep(int a,int b); 31 | void hanoi(int n,int a,int b,i 32 | 33 | int main(int argc, const char * argv[]) { 34 | 35 | // multiplicantion_1(); 36 | // multiplicantion_2(); 37 | // multiplicantion_3(); 38 | // multiplicantion_4(); 39 | 40 | 41 | // printf("%lf",factorial_1(5)); 42 | // printf("%ld",maxDivisor(2424,3333)); 43 | startHanoi(); 44 | return 0; 45 | } 46 | 47 | //下面是四个输出乘法表的函数。如果A*B=C,那么A=num_1,B=num_2。 48 | 49 | //这是一个输出乘法表的函数,左下直角。市面上大部分乘法表都是如下格式。 50 | //下面是输出样例。 51 | /* 52 | 1*1=1 53 | 1*2=2 2*2=4 54 | 1*3=3 2*3=6 3*3=9 55 | 1*4=4 2*4=8 3*4=12 4*4=16 56 | 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 57 | 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 58 | 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 59 | 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 60 | 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 61 | */ 62 | void multiplicantion_1() 63 | { 64 | int num_1=1,num_2=1; 65 | //printf("%d %d\n",num_1,num_2); 66 | //num_2为行数,所以在外层循环。 67 | for(;num_2<=9;num_2++) 68 | { 69 | for(;num_1<=num_2;num_1++) 70 | printf("%d*%d=%d\t",num_1,num_2,num_1*num_2); 71 | printf("\n"); 72 | num_1=1; 73 | } 74 | } 75 | 76 | //这是一个输出乘法表的函数,右下直角。下面是输出样例。总感觉这个乘法表怪怪的。 77 | /* 78 | 1*1=1 79 | 1*2=2 2*2=4 80 | 1*3=3 2*3=6 3*3=9 81 | 1*4=4 2*4=8 3*4=12 4*4=16 82 | 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 83 | 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 84 | 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 85 | 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 86 | 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 87 | */ 88 | void multiplicantion_2() 89 | { 90 | int num_1=1,num_2=1; 91 | //printf("%d %d\n",num_1,num_2); 92 | //num_2为行数,所以在外层循环。 93 | for(;num_2<=9;num_2++) 94 | { 95 | for(int i=9-num_2;i>0;i--) 96 | printf(" "); 97 | for(;num_1<=num_2;num_1++) 98 | printf("%d*%d=%d\t",num_1,num_2,num_1*num_2); 99 | 100 | printf("\n"); 101 | num_1=1; 102 | 103 | } 104 | } 105 | 106 | //这是一个输出乘法表的函数,左上直角。下面没有输出样例。因为 107 | 108 | void multiplicantion_3() 109 | { 110 | 111 | //我居然画不出来左上直角的乘法表。。。醉了。 112 | 113 | } 114 | 115 | 116 | //这是一个输出乘法表的函数,右上直角。 117 | //下面是输出样例。 118 | /* 119 | 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 120 | 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 121 | 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 122 | 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 123 | 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 124 | 6*6=36 6*7=42 6*8=48 6*9=54 125 | 7*7=49 7*8=56 7*9=63 126 | 8*8=64 8*9=72 127 | 9*9=81 128 | */ 129 | void multiplicantion_4() 130 | { 131 | int num_1=1,num_2=1; 132 | for(;num_1<=9;num_1++) 133 | { 134 | //num_1为行数,所以在外层循环。 135 | for(int i=num_1-1;i>0;i--) 136 | printf(" "); 137 | for(num_2=num_1;num_2<=9;num_2++) 138 | printf("%d*%d=%d\t",num_1,num_2,num_1*num_2); 139 | printf("\n"); 140 | num_2=1; 141 | } 142 | 143 | } 144 | 145 | //下面是对递归的研究。 146 | 147 | //递归计算 n! 148 | 149 | double factorial_1(double n) 150 | { 151 | double result=1; 152 | if(n==0) 153 | return result; 154 | else 155 | return n*factorial_1(n-1); 156 | } 157 | 158 | double factorial_2(double n) 159 | { 160 | if(n==1) 161 | return 1; 162 | else 163 | return n*factorial_2(n-1); 164 | } 165 | 166 | //递归求两个数最大公约数 167 | 168 | long maxDivisor(long a,long b) 169 | { 170 | if(a%b==0) 171 | return b; 172 | else 173 | return maxDivisor(b,a%b); 174 | } 175 | 176 | /* 177 | 1. 输入 2424, 3333 178 | 2. (2424%3333=2424)!=0 , maxDivison(3333,2424%3333=2424) 179 | 3. 递归 3333, 2424 180 | 4. 递归 (2424, 909) - (909, 606) - (606, 303) 181 | 5. 返回 303 182 | */ 183 | 184 | //递归之汉诺塔游戏 185 | 186 | void moveStep(int a,int b) 187 | { 188 | printf("%d -> %d\n",a,b); 189 | } 190 | void hanoi(int n,int a,int b,int c) 191 | { 192 | if(n==1) 193 | moveStep(a,c); 194 | else 195 | { 196 | hanoi(n-1,a,c,b); 197 | moveStep(a,c); 198 | hanoi(n-1,b,a,c); 199 | } 200 | } 201 | void startHanoi() 202 | { 203 | int n; 204 | scanf("%d",&n); 205 | hanoi(n,1,2,3); 206 | //1.源 2.中间 3.目的 207 | } 208 | /* 209 | 1 -> 3 210 | 1 -> 2 211 | 3 -> 2 212 | 1 -> 3 213 | 2 -> 1 214 | 2 -> 3 215 | 1 -> 3 216 | 217 | input 3 218 | -> hanoi(3,1,2,3) n3a1b2c3 219 | -> hanoi(2,1,3,2) n2a1b3c2 220 | -> hanoi(1,3,1,2) (3->2) 221 | 222 | 223 | 224 | 225 | 好吧,我承认自己还是没搞懂汉诺塔递归。。。 226 | */ 227 | 228 | 229 | 230 | 231 | 232 | 233 | -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/C 语言 数组.c: -------------------------------------------------------------------------------- 1 | // 2 | // main.c 3 | // C_playground4_array 4 | // 5 | // Created by Reign on 15/11/20. 6 | // Copyright © 2015年 Reign. All rights reserved. 7 | // 此工程用来研究数组。。。 8 | 9 | #include 10 | 11 | #include 12 | 13 | #define Len 5 14 | 15 | #define Len_100 100 16 | 17 | void arrayInt_1() 18 | { 19 | int i; 20 | int arr[Len]; 21 | memset(arr,0,sizeof(int)*Len); 22 | for(i=0;ia[j]) 139 | record=j+1; 140 | if(record!=i) 141 | { 142 | temp=a[i]; 143 | a[i]=a[record]; 144 | a[record]=temp; 145 | } 146 | } 147 | for(i=0;i 7 | #include 8 | #include 9 | 10 | struct birthday { 11 | unsigned int year; 12 | unsigned int month; 13 | unsigned int day; 14 | }; 15 | 16 | struct info { 17 | char name[20]; 18 | char no[10]; 19 | struct birthday date; 20 | struct info * next; 21 | }; 22 | 23 | //solo -> 单个初始化(申请内存) 24 | 25 | struct info * solo() { 26 | struct info * node=NULL; 27 | node = (struct info *)malloc(sizeof(struct info)); 28 | memset(node, 0, sizeof(struct info)); 29 | if (node == NULL) { 30 | printf("申请内存失败!"); 31 | exit(-1); 32 | } 33 | return node; 34 | } 35 | 36 | //initialization -> 初始化(申请内存) 暂不使用 仅作参照 37 | 38 | struct info * initialization(int len) { 39 | struct info * head = NULL; 40 | struct info * node = NULL; 41 | int i; 42 | for (i = 0; inext = head; 45 | head = node; 46 | } 47 | printf("初始化链表完毕!\n"); 48 | return head; 49 | } 50 | 51 | //traversal -> 遍历 52 | 53 | struct info * traversal() { 54 | 55 | struct info * head = NULL; 56 | struct info * node = NULL; 57 | 58 | int i,len; 59 | char ch='c'; 60 | printf("学生的个数是: "); 61 | scanf("%d",&len); 62 | for (i = 0; iname); 67 | printf("请输入学号: "); 68 | scanf("%10s",node->no); 69 | printf("请输入生日: 如 1666 06 06\n"); 70 | scanf("%d%d%d", &node->date.year, &node->date.month, &node->date.day); 71 | node->next = head; 72 | head = node; 73 | 74 | } 75 | return head; 76 | } 77 | 78 | //print -> 输出到屏幕 79 | 80 | void print(struct info * head) { 81 | 82 | while(head!=NULL) 83 | { 84 | printf("%s\t",head->name); 85 | printf("%s\t",head->no); 86 | printf("%d-%d-%d\n", head->date.year, head->date.month, head->date.day); 87 | head = head->next; 88 | } 89 | printf("输出完毕\n"); 90 | } 91 | 92 | //output -> 输出到文件 93 | 94 | void output(struct info * head) { 95 | FILE * fp; 96 | if ((fp = fopen("test.txt", "w")) == NULL) { 97 | printf("打开文件失败"); 98 | exit(-2); 99 | } 100 | printf("写入文件中"); 101 | while(head!=NULL) 102 | { 103 | printf("."); 104 | if(fwrite(head, sizeof(struct info), 1, fp)!=1) { 105 | printf("写入文件失败"); 106 | exit(-2); 107 | } 108 | head = head->next; 109 | } 110 | printf("写入完成\n"); 111 | fclose(fp); 112 | } 113 | 114 | //readFromFile -> 从文件中读取 115 | 116 | struct info * readFromFile() { 117 | struct info * head = NULL; 118 | struct info * node = NULL; 119 | 120 | FILE * fp; 121 | 122 | if ((fp = fopen("test.txt", "r")) == NULL) { 123 | printf("读取文件失败"); 124 | exit(-3); 125 | } 126 | int temp = 0; 127 | int i; 128 | printf("读取的数目: "); 129 | scanf("%d", &temp); 130 | 131 | for (i = 0; i%d组数据存放链表失败\n",i+1,temp); 138 | 139 | node->next = head; 140 | head = node; 141 | } 142 | fclose(fp); 143 | return head; 144 | } 145 | 146 | //freeAll -> 释放当前链表内存 147 | 148 | void freeAll(struct info * head) { 149 | 150 | struct info * p = NULL; 151 | while (head!=NULL) { 152 | p = head->next; 153 | free(head); 154 | head = p; 155 | } 156 | printf("释放内存完毕\n"); 157 | } 158 | 159 | int main() { 160 | 161 | struct info * p = NULL; 162 | 163 | int s = 1; 164 | while (s != 0) { 165 | 166 | printf("0.exit -> 退出程序\n"); 167 | printf("1.traversal -> 遍历\n"); 168 | printf("2.print -> 输出到屏幕\n"); 169 | printf("3.output -> 输出到文件\n"); 170 | printf("4.readFromFile -> 从文件中读取\n"); 171 | printf("5.freeAll -> 释放当前链表内存\n"); 172 | scanf("%d", &s); 173 | switch (s) { 174 | case 1:p=traversal(); break; 175 | case 2:print(p); break; 176 | case 3:output(p); break; 177 | case 4:p=readFromFile(); break; 178 | case 5:freeAll(p);p=NULL; break; 179 | default:break; 180 | } 181 | } 182 | 183 | return 0; 184 | } 185 | 186 | -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/Fork 的代码 用来研究清空输入缓存的问题.c: -------------------------------------------------------------------------------- 1 | /* C 版本 */ 2 | #include 3 | 4 | 5 | int main( void ) 6 | { 7 | int i, c; 8 | for ( ; ; ) 9 | { 10 | fputs("Please input an integer: ", stdout); 11 | scanf("%d", &i); 12 | 13 | if ( feof(stdin) || ferror(stdin) ) 14 | { 15 | /* 如果用户输入文件结束标志(或文件已被读完), */ 16 | /* 或者发生读写错误,则退出循环 */ 17 | 18 | /* do something */ 19 | break; 20 | } 21 | /* 没有发生错误,清空输入流。 */ 22 | /* 通过 while 循环把输入流中的余留数据“吃”掉 */ 23 | while ( (c = getchar()) != '\n' && c != EOF ) ; 24 | /* 使用 scanf("%*[^\n]"); 也可以清空输入流, */ 25 | 26 | /* 不过会残留 \n 字符。 */ 27 | 28 | printf("%d\n", i); 29 | } 30 | 31 | return 0; 32 | } -------------------------------------------------------------------------------- /学习 C 语言过程中写的一些渣代码...见笑/一些刷 CQUT Online Judge 的题以及作业答案....c: -------------------------------------------------------------------------------- 1 | // 2 | // main.c 3 | // C_playground1 4 | // 5 | // Created by Reign on 15/10/16. 6 | // Copyright © 2015年 Reign. All rights reserved. 7 | // 8 | 9 | /* A1 printf hello world 10 | #include 11 | 12 | int main(int argc, const char * argv[]) { 13 | // insert code here... 14 | printf("Hello, World!\n"); 15 | return 0; 16 | } 17 | */ 18 | 19 | 20 | /* A2 定义为局部性质的数组 不理解 21 | #include 22 | void main() 23 | { 24 | int a[5]; //定义局部性质的数组 25 | int i; 26 | for(i=0;i<5;i++) 27 | { 28 | printf("%2d",a[i]); 29 | } 30 | printf("\n"); 31 | } 32 | */ 33 | 34 | 35 | 36 | /* A3 coj.cqut.edu.cn 1019 37 | #include 38 | #define Pi 3.14 39 | float volume(float a, float b) 40 | { 41 | return(Pi*a*a*b); 42 | } 43 | float area(float c, float d) 44 | { 45 | return(c*c*Pi*2+2*c*Pi*d); 46 | } 47 | int main(void) 48 | { 49 | float r,h; 50 | printf("Please input the r and h.\n"); 51 | scanf("%f%f",&r,&h); 52 | float vo ; 53 | vo = volume(r,h); 54 | float ar; 55 | ar = area(r,h); 56 | printf("%.3f %.3f",vo,ar); 57 | return 0; 58 | } 59 | 60 | */ 61 | 62 | /* A4 coj.cqut.edu.cn 1020 63 | 64 | #include 65 | float hehe(int a,int b) 66 | { 67 | ; 68 | } 69 | int main() 70 | { 71 | int c, d; 72 | scanf("%d %d",&c,&d); 73 | int e; 74 | //e = hehe(c,d); 75 | printf("%d",e); 76 | return 0; 77 | } 78 | 79 | */ 80 | 81 | /* A5 coj.cqut.edu.cn 1021 failed...but last , succeed... 82 | 83 | #include 84 | #include 85 | float jieFC(int a ,int b ) 86 | { 87 | float h, i; 88 | h = (float)a ,i = (float)b; 89 | return( (5-3*b)/(2*a)); 90 | } 91 | int main(void) 92 | { 93 | float a,b; 94 | float e; 95 | scanf("%f%f",&a,&b); 96 | //e = jieFC(c, d); 97 | e = (5-3*b)/(2*a); 98 | printf("%.1f",e); 99 | return 0; 100 | } 101 | 102 | */ 103 | 104 | /* A5 coj.cqut.edu.cn 1030 105 | 106 | #include 107 | int main() 108 | { 109 | int x; 110 | int y; 111 | scanf("%d",&x); 112 | if (x <= 160) 113 | y = 10*x; 114 | else 115 | y = 1600+(x-160)*30; 116 | 117 | printf("%d",y); 118 | return 0; 119 | } 120 | 121 | */ 122 | 123 | /* A6 coj.cqut.edu.cn 1028 124 | 125 | #include 126 | int main() 127 | { 128 | int x , y; 129 | scanf("%d",&x); 130 | if (x<=5) 131 | y = x*x+3*x-4; 132 | else 133 | y = x*x-5*x+7; 134 | printf("%d",y); 135 | return 0; 136 | } 137 | 138 | */ 139 | 140 | /* A7 coj.cqut.edu.cn 1032 141 | 142 | #include 143 | int main(void) 144 | { 145 | int x; 146 | scanf("%d",&x); 147 | if(x>=90) 148 | printf("A"); 149 | else if(x>=80 && x<90) 150 | printf("B"); 151 | else if(x>=70 && x<80) 152 | printf("C"); 153 | else if(x>=60 && x<70) 154 | printf("D"); 155 | else 156 | printf("E"); 157 | return 0; 158 | } 159 | 160 | */ 161 | 162 | /* A8 coj.cqut.edu.cn 1031 163 | 164 | #include 165 | #include 166 | float pf(float a,float b) 167 | { 168 | return(pow(a,2)+pow(b,2)); 169 | } 170 | int main(void) 171 | { 172 | float x,y; 173 | scanf("%f%f",&x,&y); 174 | float c; 175 | c= pf(x,y); 176 | if( c == 20.25) 177 | printf("on"); 178 | else if (c < 20.25) 179 | printf("in"); 180 | else 181 | printf("out"); 182 | return 0; 183 | 184 | } 185 | 186 | */ 187 | 188 | /* A9 coj.cqut.edu.cn 1022 189 | 190 | #include 191 | int main() 192 | { 193 | char x; 194 | scanf("%c",&x); 195 | x = x+32; 196 | printf("%c",x); 197 | return 0; 198 | } 199 | 200 | */ 201 | 202 | /* A10 coj.cqut.edu.cn 1023 203 | 204 | #include 205 | int main() 206 | { 207 | float a,b,c; 208 | scanf("%f%f%f",&a,&b,&c); 209 | printf("%.2f",(a+b+c)/3); 210 | return 0; 211 | } 212 | 213 | */ 214 | 215 | /* A11 coj.cqut.edu.cn 1024 216 | 217 | #include 218 | int main() 219 | { 220 | int a,b; 221 | scanf("%d%d",&a,&b); 222 | printf("%d %d",a/b,a%b); 223 | return 0; 224 | } 225 | 226 | */ 227 | 228 | /* A12 coj. 1025 229 | 230 | #include 231 | int main() 232 | { 233 | float a,b,c; 234 | scanf("%f%f",&a,&b); 235 | printf("%g %g\n",a,b); 236 | c=b,b=a,a=c; 237 | printf("%g %g",a,b); 238 | return 0; 239 | } 240 | 241 | */ 242 | 243 | /* A13 coj. 1026 244 | 245 | #include 246 | #include 247 | int hehe(int a1, int a2, int a3) 248 | { 249 | return(pow(a2*a2-4*a1*a3,2)); 250 | } 251 | int main() 252 | { 253 | int a,b,c; 254 | scanf("%d%d%d",&a,&b,&c); 255 | printf("%d %d",(-b+hehe(a,b,c))/(2*a),(-b-hehe(a,b,c))/(2*a)); 256 | return 0; 257 | } 258 | 259 | */ 260 | 261 | /* A14 coj. 1027 262 | 263 | #include 264 | int main() 265 | { 266 | float money,year,rate; 267 | scanf("%f%f%f",&money,&year,&rate); 268 | printf("%.1f",money*pow((1+rate),year)); 269 | return 0; 270 | } 271 | 272 | */ 273 | 274 | /* A15 coj. 1034 275 | 276 | #include 277 | int main() 278 | { 279 | int i,n,sum; 280 | sum=0,i=1; 281 | scanf("%d",&n); 282 | while (i<=n) 283 | { 284 | sum = sum+(3*i-1); 285 | i=i+1; 286 | } 287 | printf("%d",sum); 288 | } 289 | 290 | */ 291 | 292 | /* A16 P58 3.11 2 Ti 293 | 294 | #include 295 | int main() 296 | { 297 | char a ; 298 | scanf("%d",&a); 299 | printf("%c",a); 300 | } 301 | 302 | */ 303 | 304 | /* A17 coj. 1035 305 | 306 | #include 307 | int main() 308 | { 309 | int i,n,x,max; 310 | i = 0,max = 0; 311 | scanf("%d",&n); 312 | while(n>0) 313 | { 314 | scanf("%d",&x); 315 | if(x >= max) 316 | max=x; 317 | else 318 | max=max; 319 | n=n-1; 320 | } 321 | printf("%d",max); 322 | return 0; 323 | } 324 | 325 | */ 326 | 327 | /* A18 code[vs] 1201 328 | 329 | #include 330 | #include 331 | int main() 332 | { 333 | int n; 334 | long a,max,min; 335 | max=-pow(2,31),min=pow(2,31)-1; 336 | scanf("%d",&n); 337 | while(n>0) 338 | { 339 | scanf("%ld",&a); 340 | if(a>max) 341 | max=a; 342 | if(a 355 | int main() 356 | { 357 | int n; 358 | long a,sum; 359 | sum=0; 360 | scanf("%d",&n); 361 | while(n>0) 362 | { 363 | scanf("%ld",&a); 364 | sum = sum+a; 365 | n=n-1; 366 | } 367 | printf("%ld",sum); 368 | return 0; 369 | } 370 | 371 | */ 372 | 373 | /* A20 code[vs] 1206 374 | 375 | #include 376 | int main() 377 | { 378 | double a; 379 | scanf("%lf",&a); 380 | printf("%.2lf",a); 381 | return 0; 382 | } 383 | 384 | */ 385 | 386 | /* A21 code[vs] 1203 || 387 | 388 | #include 389 | int main() 390 | { 391 | double a,b; 392 | scanf("%lf%lf",&a,&b); 393 | if((a-b)>0.00000001 || (b-a)>0.00000001) 394 | printf("no"); 395 | else 396 | printf("yes"); 397 | return 0; 398 | } 399 | 400 | */ 401 | 402 | /* A22 code[vs] 2235 403 | 404 | #include 405 | 406 | int main() 407 | { 408 | int price; 409 | float cost,a; 410 | scanf("%d%f",&price,&cost); 411 | int c,d; 412 | a=price*cost*0.01; 413 | c=price*cost*0.01; 414 | if((a-c)>=0.5) 415 | c=c+1; 416 | 417 | d=c*10; 418 | printf("%d",d); 419 | return 0; 420 | } 421 | 422 | */ 423 | 424 | /* A23 code[vs] 1023 425 | 426 | #include 427 | 428 | int main() 429 | { 430 | int a,i; 431 | float xia,shang,b,c; 432 | xia=0,shang=0; 433 | scanf("%d",&a); 434 | for(i=0;i 449 | #include 450 | int main() 451 | { 452 | unsigned int a,b,i; 453 | float c=0.0; 454 | scanf("%d",&a); 455 | b=sqrt(a); 456 | //printf("%d",b); 457 | for(i=2;i<=b;i++) 458 | { 459 | c=a%i; 460 | if(c==0) 461 | goto case1; 462 | } 463 | goto case3; 464 | case1:printf("\\n"); 465 | goto case2; 466 | case3:printf("\\t"); 467 | case2:; 468 | return 0; 469 | } 470 | 471 | */ 472 | 473 | /* A25 shuben P13 474 | 475 | #include 476 | int main(){ 477 | char c1,c2; 478 | c1=97;c2=98; 479 | printf("c1=%c c2=%c\n",c1,c2); 480 | printf("c1=%d c2=%d\n",c1,c2); 481 | c1=c1-32;c2=c2-32; 482 | printf("c1=%c c2=%c\n",c1,c2); 483 | printf("c1=%d c2=%d\n",c1,c2); 484 | 485 | } 486 | 487 | */ 488 | 489 | /* A26 coj 1033 zuoye A 2815 490 | 491 | #include 492 | int main() 493 | { 494 | int a,b,c; 495 | scanf("%d%d%d",&a,&b,&c); 496 | printf("%d%d%d",a,b,c); 497 | return 0; 498 | } 499 | 500 | */ 501 | 502 | /* A27 coj 1033 zuoye B 2816 503 | 504 | #include 505 | int main(){ 506 | int a,b,c; 507 | scanf("%d",&a); 508 | b=a%7; 509 | c=(a-b)/7; 510 | printf("%d days are %d weeks and %d days.",a,c,b); 511 | return 0; 512 | } 513 | 514 | */ 515 | 516 | /* A28 coj 1033 zuoye C 2817 wrong 517 | 518 | #include 519 | #include 520 | int main(){ 521 | double a,b; 522 | scanf("%lf",&a); 523 | b=pow(a,3); 524 | printf("%.2f\n",b); 525 | return 0; 526 | } 527 | 528 | */ 529 | 530 | /* A29 coj 1033 zuoye D 2818 531 | 532 | #include 533 | int main() 534 | { 535 | char a,b,c,d,e; 536 | scanf("%c%c%c%c%c",&a,&b,&c,&d,&e); 537 | a=a+4;b=b+4;c=c+4;d=d+4;e=e+4; 538 | printf("%c%c%c%c%c",a,b,c,d,e); 539 | return 0; 540 | } 541 | 542 | */ 543 | 544 | /* A30 coj 1033 zuoye E 2819 545 | 546 | #include 547 | int main() 548 | { 549 | char x; 550 | scanf("%c",&x); 551 | x = x+32; 552 | printf("%c\n",x); 553 | return 0; 554 | } 555 | 556 | */ 557 | 558 | /* A31 coj 1033 zuoye F 2820 559 | 560 | #include 561 | int main() 562 | { 563 | long int a,b,sum,max,min,c,d; 564 | scanf("%ld%ld",&a,&b); 565 | sum=a+b; 566 | a>b?(max=a,min=b):(max=b,min=a); 567 | c=max%min; 568 | d=(max-c)/min; 569 | printf("%ld %ld",sum,d); 570 | return 0; 571 | } 572 | 573 | */ 574 | 575 | /* A32 coj 1033 zuoye G 2821 576 | 577 | #include 578 | #define PI 3.14 579 | int main() 580 | { 581 | double r,c; 582 | scanf("%lf",&r); 583 | c=2*PI*r; 584 | printf("%.2lf %.2lf\n",c,r*r*PI); 585 | } 586 | 587 | */ 588 | 589 | /* A33 实验五 三个数由小到大排列 590 | 591 | #include 592 | int main() 593 | { 594 | int a,b,c,max,min; 595 | scanf("%d%d%d",&a,&b,&c); 596 | if(a>b) 597 | max=a,min=b; 598 | else 599 | max=b,min=a; 600 | if(c>max) 601 | printf("%d %d %d",min,max,c); 602 | else if(c>min) 603 | printf("%d %d %d",min,c,max); 604 | else 605 | printf("%d %d %d",c,min,max); 606 | return 0; 607 | } 608 | 609 | */ 610 | 611 | /* A34 1382 Problem C 612 | 613 | #include 614 | int main() 615 | { 616 | long int n; 617 | long int sum=0; 618 | long int temp=1; 619 | scanf("%ld",&n); 620 | for(int i=1;i<=n;i++) 621 | { 622 | for(int a=1;a<=i;a++) 623 | { 624 | temp=temp*a; 625 | } 626 | sum=sum+temp; 627 | temp=1; 628 | } 629 | printf("%ld",sum); 630 | return 0; 631 | } 632 | 633 | */ 634 | 635 | /* A35 E 636 | 637 | #include 638 | int main() 639 | { 640 | double k,i; 641 | double sum=0; 642 | double n=0; 643 | scanf("%lf",&k); 644 | for(i=1.0;;i++) 645 | { 646 | sum=sum+1.0/i; 647 | n=n+1; 648 | if(sum>k) 649 | { 650 | printf("%.lf",n); 651 | break; 652 | } 653 | } 654 | return 0; 655 | } 656 | 657 | */ 658 | 659 | /* A36 G 660 | 661 | #include 662 | int main() 663 | { 664 | int taozi,tianshu; 665 | taozi=1; 666 | scanf("%d",&tianshu); 667 | for(;tianshu>1;tianshu--) 668 | { 669 | taozi=(taozi+1)*2; 670 | } 671 | printf("%d",taozi); 672 | 673 | } 674 | 675 | */ 676 | 677 | /* A37 B 678 | 679 | #include 680 | #include 681 | int main() 682 | { 683 | double a,b,c; 684 | double sum=0; 685 | scanf("%lf%lf%lf",&a,&b,&c); 686 | for(int i=1.0;i<=a;i++) 687 | { 688 | sum=sum+i; 689 | } 690 | for(int i=1.0;i<=b;i++) 691 | { 692 | sum=sum+pow(i,2); 693 | } 694 | for(int i=1.0;i<=c;i++) 695 | { 696 | sum=sum+1.0/i; 697 | } 698 | printf("%.2lf",sum); 699 | } 700 | 701 | */ 702 | 703 | /* A38 D 704 | 705 | #include 706 | int main() 707 | { 708 | int a; 709 | long int b,sum; 710 | sum=0; 711 | scanf("%d",&a); 712 | int i=0; 713 | while(i 730 | 731 | void exe_12() 732 | { 733 | printf("请输入表的上限和下限。\n"); 734 | int a,b; 735 | scanf("%d%d",&a,&b); 736 | for(;a<=b;a++) 737 | printf("%d %d %d\n",a,a*a,a*a*a); 738 | } 739 | 740 | void exe_13() 741 | { 742 | 743 | char inp; 744 | printf("请输入一个大写字母:\n"); 745 | 746 | fflush(stdin); 747 | 748 | scanf("%c",&inp); 749 | int line=inp-'A'+1; 750 | int oup=0; 751 | int currentLine=1; 752 | while(1) 753 | { 754 | for(int i=1;i1000) 793 | break; 794 | } 795 | } 796 | 797 | void exe_20() 798 | { 799 | float a,b,c; 800 | for(a=0;a<=34;a++) 801 | { 802 | for(b=0;b<=50;b++) 803 | { 804 | for(c=0;c<=100;c++) 805 | { 806 | if( (a+b+c)==100&&(3*a+2*b+0.5*c)==100 ) 807 | printf("大马%.f,中马%.f,小马%.f\n",a,b,c); 808 | } 809 | } 810 | } 811 | } 812 | 813 | void exe_28() 814 | { 815 | int a,b; 816 | for(a=1;a<=9;a++) 817 | { 818 | for(b=a;b<=9;b++) 819 | { 820 | printf("%d*%d=%d\t",a,b,a*b); 821 | } 822 | printf("\n"); 823 | } 824 | 825 | } 826 | 827 | int main() 828 | { 829 | while(1) 830 | { 831 | int a; 832 | scanf("%d",&a); 833 | switch(a) 834 | { 835 | case 12:exe_12();break; 836 | case 13:exe_13();break; 837 | case 17:exe_17();break; 838 | case 20:exe_20();break; 839 | case 28:exe_28();break; 840 | default:printf("Error!\n"); 841 | } 842 | } 843 | } 844 | 845 | */ 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | -------------------------------------------------------------------------------- /答辩文档/11503070234 张晓君.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/答辩文档/11503070234 张晓君.doc -------------------------------------------------------------------------------- /答辩文档/11503070234 张晓君.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/答辩文档/11503070234 张晓君.docx -------------------------------------------------------------------------------- /答辩文档/演示用.ppt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/答辩文档/演示用.ppt -------------------------------------------------------------------------------- /课程设计题目(20151220).doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acbetter/C-language-curriculum-design/9bf1aac095eaa52b7a18f2f81a35fe515a7fc018/课程设计题目(20151220).doc --------------------------------------------------------------------------------