//3-1猜拳游戏, 其一 #include<time.h> #include<stdio.h> #include<stdlib.h> int main(){ int human; int comp; int judge; int retry; srand(time(NULL)); printf("猜拳游戏开始!!\n"); do{ comp = rand() % 3; printf("\n\a石头剪刀布...(0)石头(1)剪刀(2)布:"); scanf("%d", &human); printf("我出"); switch(comp){ case 0: printf("石头"); break; case 1: printf("剪刀"); break; case 2: printf("布"); break; } printf("。\n"); judge = (human - comp + 3) % 3; //判断胜负 switch(judge){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } printf("再来一次吗?(0)否(1)是:"); scanf("%d", &retry); } while(retry == 1); return 0; }
//3-2猜拳游戏,其二 显示双方的手势 #include<time.h> #include<stdio.h> #include<stdlib.h> int main(){ int human; int comp; int judge; int retry; srand(time(NULL)); printf("猜拳游戏开始!!\n"); do{ comp = rand() % 3; do{ printf("\n\a石头剪刀布...(0)石头(1)剪刀(2)布:"); scanf("%d", &human); }while(human < 0 || human > 2); printf("我出"); switch(comp){ case 0: printf("石头"); break; case 1: printf("剪刀"); break; case 2: printf("布"); break; } printf(",你出"); switch(human){ case 0: printf("石头"); break; case 1: printf("剪刀"); break; case 2: printf("布"); break; } printf("。\n"); judge = (human - comp + 3) % 3; //判断胜负 switch(judge){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } printf("再来一次吗?(0)否(1)是:"); scanf("%d", &retry); } while(retry == 1); return 0; }
//3-3显示字符和字符编码 #include<ctype.h> #include<stdio.h> #include<limits.h> int main(){ int i; for(i = 0; i <= CHAR_MAX; i++){ switch(i){ case ‘\a‘ : printf("\\a"); break; case ‘\b‘ : printf("\\b"); break; case ‘\f‘ : printf("\\f"); break; case ‘\n‘ : printf("\\n"); break; case ‘\r‘ : printf("\\r"); break; case ‘\t‘ : printf("\\t"); break; case ‘\v‘ : printf("\\v"); break; default : printf(" %c", isprint(i) ? i : ‘ ‘); //ctype.h } printf(" %02x\n", i); } return 0; }
//3-4用十六进制和二进制数显示字符串内的字符 #include<ctype.h> #include<stdio.h> #include<limits.h> void strdump(const char *s){ while(*s){ int i; unsigned char x = (unsigned char)*s; printf("%c ", isprint(x) ? x : ‘ ‘); //字符 printf("%0*X ", (CHAR_BIT + 3) / 4, x); //十六进制数 for(i = CHAR_BIT - 1; i >= 0; i--) putchar(((x >> i) & 1U) ? ‘1‘ : ‘0‘); //二进制数 putchar(‘\n‘); s++; } } int main(){ puts("汉字"); strdump("汉字"); putchar(‘\n‘); puts("12中国话AB"); strdump("12中国话AB"); putchar(‘\n‘); return 0; }
//3-5字符串数组(二维数组) #include<stdio.h> int main(){ int i; char a[][6] = { "Super", "X", "TRY" }; for(i = 0; i < 3; i++) printf("%s\n", a[i]); return 0; }
//3-6字符串数组(指针数组) #include<stdio.h> int main(){ int i; char *p[] = { "Super", "X", "TRY" }; for(i = 0; i < 3; i++) printf("%s\n", p[i]); return 0 ; }
//3-7猜拳游戏三,导入表示手势的字符串 #include<time.h> #include<stdio.h> #include<stdlib.h> int main(){ int i; int human; int comp; int judge; int retry; char *hd[] = {"石头", "剪刀", "布"}; srand(time(NULL)); printf("猜拳游戏开始!!\n"); do{ comp = rand() % 3; do{ printf("\n\a石头剪刀布..."); for(i = 0; i < 3; i++) printf(" (%d)%s", i, hd[i]); printf(" : "); scanf("%d", &human); }while(human < 0 || human > 2); printf("我出%s,你出%s。\n", hd[comp], hd[human]); judge = (human - comp + 3) % 3; switch(judge){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } printf("再来一次吗?(0)否(1)是:"); scanf("%d", &retry); }while(retry == 1); return 0; }
//3c-1宽字符使用示例 #include<wcahr.h> #include<locale.h> #include<stdio.h> int main(){ int i; wchar_t c = L‘a‘; wchar_t *h[3] = {L"石头", L"剪刀", L"布"}; setlocale(LC_ALL, ""); //locale设置地域信息,locale.h wprintf(L"%lc\n", c); for(i = 0; i < 3; i++) wprintf(L"h[%d] = %ls\n", i, h[i]); return 0; }
//3-8将计算机一定赢,计算机后出 #include<time.h> #include<stdio.h> #include<stdlib.h> int main(){ int i; int human; int comp; int judge; int retry; char *hd[] = {"石头", "剪刀", "布"}; srand(time(NULL)); printf("猜拳游戏开始!!\n"); do{ do{ printf("\n\a石头剪刀布..."); for(i = 0; i < 3; i++) printf(" (%d)%s", i, hd[i]); printf(" : "); scanf("%d", &human); }while(human < 0 || human > 2); comp = (human + 2) % 3; //计算机后出 printf("我出%s,你出%s。\n", hd[comp], hd[human]); judge = (human - comp + 3) % 3; switch(judge){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } printf("再来一次吗?(0)否(1)是:"); scanf("%d", &retry); }while(retry == 1); return 0; }
//3-9猜拳游戏,加入函数分割 #include<time.h> #include<stdio.h> #include<stdlib.h> int human; int comp; int win_no; //胜利次数 int lose_no; //失败次数 int draw_no; //平局次数 char *hd[] = {"石头", "剪刀", "布"}; void initialize(){ win_no = 0; lose_no = 0; draw_no = 0; srand(time(NULL)); printf("猜拳游戏开始!!\n"); } //运行猜拳游戏 读取/生成手势 void jyanken(){ int i; comp = rand() % 3; do{ printf("\n\a石头剪刀布..."); for(i = 0; i < 3; i++) printf(" (%d)%s", i, hd[i]); printf(" : "); scanf("%d", &human); }while(human < 0 || human > 2); } //更新胜利失败平局的次数 void count_no(int result){ switch(result){ case 0: draw_no++; break; case 1: lose_no++; break; case 2: win_no++; break; } } //显示判断结果 void disp_result(int result){ switch(result){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } } //确认是否再次挑战 int confirm_retry(){ int x; printf("再来一次吗?(0)否(1)是:"); scanf("%d", &x); return x; } int main(){ int judge; int retry; initialize(); do{ jyanken(); printf("我出%s,你出%s。\n", hd[comp], hd[human]); judge = (human - comp + 3) % 3; count_no(judge); disp_result(judge); retry = confirm_retry(); }while(retry == 1); printf("%d胜%d负%d平。", win_no, lose_no, draw_no); return 0; }
//3-10猜拳游戏,先赢满3局者胜 #include<time.h> #include<stdio.h> #include<stdlib.h> int human; int comp; int win_no; //胜利次数 int lose_no; //失败次数 int draw_no; //平局次数 char *hd[] = {"石头", "剪刀", "布"}; void initialize(){ win_no = 0; lose_no = 0; draw_no = 0; srand(time(NULL)); printf("猜拳游戏开始!!\n"); } //运行猜拳游戏 读取/生成手势 void jyanken(){ int i; comp = rand() % 3; do{ printf("\n\a石头剪刀布..."); for(i = 0; i < 3; i++) printf(" (%d)%s", i, hd[i]); printf(" : "); scanf("%d", &human); }while(human < 0 || human > 2); } //更新胜利失败平局的次数 void count_no(int result){ switch(result){ case 0: draw_no++; break; case 1: lose_no++; break; case 2: win_no++; break; } } //显示判断结果 void disp_result(int result){ switch(result){ case 0: puts("平局。"); break; case 1: puts("你输了。"); break; case 2: puts("你赢了。"); break; } } int main(){ int judge; initialize(); do{ jyanken(); printf("我出%s,你出%s。\n", hd[comp], hd[human]); judge = (human - comp + 3) % 3; count_no(judge); disp_result(judge); }while(win_no < 3 && lose_no < 3); printf(win_no == 3 ? "\n你赢了。\n" : "\n我赢了\n"); printf("%d胜%d负%d平。", win_no, lose_no, draw_no); return 0; }
//3c-2作用域 #include<stdio.h> int x = 77; void print_x(){ printf("x = %d\n", x); } int main(){ int i; int x = 88; print_x(); printf("x = %d\n", x); for(i = 0; i < 5; i++){ int x = i * 11; printf("x = %d\n", x); } printf("x = %d\n", x); return 0; }