关机恶搞代码 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { system("shutdown -s -t 60"); char str[50]; while(1) { printf("enter impig,or your computer will shut down\n"); scanf("%s",str); if(strcmp(str,"impig")==0) { system("shutdown -a"); printf("you are right\n"); break; } else { printf("give you more cheese\n"); } } }
扫雷代码
main.c
#include "game.h" //菜单 void mune() { printf("*******************\n"); printf("***1.play 0.exit***\n"); printf("*******************\n"); } //游戏代码 void game() { char inarr[rows][cols]; char outarr[rows][cols]; //定义游戏 intboard(inarr,row,col,'0'); intboard(outarr,row,col,'*'); //显示游戏 display(outarr,row,col); //生成地雷 creat(inarr,row,col); //找到地雷 find(inarr,outarr,row,col); } //检查玩家是否玩游戏 同时 使得游戏循环 void test() { srand((unsigned int ) time(NULL)); mune(); printf("choose 1 or 0\n"); int intput; do { switch (intput) { case 1: printf("let us do it\n"); game(); break; case 0: printf("quit\n"); break; default: printf("please enter 0 or 1\n"); break; } } while (intput); } int main() { test(); return 0; }
game.h
#define row 9 #define col 9 #define rows row+2 #define cols col+2 #define num 10 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> //定义游戏 void intboard(char arr[rows][cols],int row, int col,char set); //显示游戏 void display(char arr[rows][cols],int row,int col); //生成地雷 void creat(char arr[rows][cols],int row,int col); //找到地雷 void find(char inarr,char outarr,int row,int col);
game.c
#include "game.h" //定义游戏 void intboard(char arr[rows][cols],int row, int col,char set) { for(int i=1;i<=row;i++) { for(int j=1;j<=col;j++) { arr[i][j]=set; } } } //显示游戏 void display(char arr[rows][cols],int row,int col); { for(int i=0;i<=row;i++) { printf("%d",i); } printf("\n"); for(int i=1;i<=col;i++) { printf("%d",i); for(int j=1;j<=row;j++) { printf("%c",arr[i][j]); } } } //生成地雷 void creat(char arr[rows][cols],int row,int col) { int count=num; while (count) { int x=rand()%col+1; int y=rand()%row+1; if(arr[x][y]=='0') { arr[x][y]='1'; } count--; } } //雷的数量 int find_count(char inarr[rows][cols],int x,int y) { int count=0; for(int i=1;i<=y+1&&i>=y-1&&i!=y;i++) { for(int j=1;j<=x+1&&j>=x-1&&j!=x;j++) { count +=inarr[i][j]; return count-8*'0'; } //清除空白 void clean(char inarr[rows][cols],char outarr[rows][cols],int x,int y) { int count=0; for(int i=1;i<=y+1&&i>=y-1&&i!=y;i++) { for(int j=1;j<=x+1&&j>=x-1&&j!=x;j++) { count= find_count(inarr,j,i); if (count==0) { outarr[j][i]=' '; if (j>=1&&j<=row&&i>=1&&i<=col) { clean(inarr,outarr,j,i); } } } } } //找到地雷 void find(char inarr[rows][cols],char outarr[rows][cols],int row,int col) { int x,y; while(1) { printf("please enter the position"); scanf("%d,%d",&x,&y); if (x>=1&&x<=col&&y>=1&&y<=row) { if (inarr[y][x]=='1') { printf("game over"); break; } else { char outarr[rows][cols]; //统计雷的数量 int count=find_count(inarr,x,y); outarr[y][x]=count+'0'; //清除空白 clean(inarr,outarr,row,col); display(outarr,row,col); } else { printf("please enter a number of x or y between 1 and row or col"); } } } }
找二进制1的三种解法
法一
#include <stdio.h> int count(unsigned int a) { int count = 0; while(a>0) { if (a&1==1) { count++; } a = a >> 1; } return count; } int main() { unsigned int a; scanf("%d",&a); int num=count(a); printf("%d",num); return 0; } 法二 #include <stdio.h> int count(unsigned int a) { int count = 0; while(a>0) { if (a%2==1) { count++; } a /=2;; } return count; } int main() { unsigned int a; scanf("%d",&a); int num=count(a); printf("%d",num); return 0; }
法三
#include <stdio.h> int count(unsigned int a) { int count = 0; while(a>0) { a=a&(a-1); count++; } return count; } int main() { unsigned int a; scanf("%d",&a); int num=count(a); printf("%d",num); return 0; }
找二进制中的不同位的数量
#include <stdio.h> int count(unsigned int c) { int count = 0; while(c>0) { c=c&(c-1); count++; } return count; } ——>这里的计数函数可以从上面三选一 int compare(int a, int b) { int count = a^b; return count; } int main() { unsigned int a; unsigned int b; scanf("%d %d",&a,&b); int c=compare(a,b); int num=count(c); printf("%d",num); return 0; } 打印二进制的奇数和偶数位 #include <stdio.h> void print (int m) { int i = 0; printf ("奇数位:\n"); for (i = 30; i >= 0; i -= 2) { printf ("% d", (m >> i) & 1); } printf ("\n"); printf ("偶数位:\n"); for (i = 31; i >= 1; i -= 2){ printf ("% d", (m >> i) & 1); } printf ("\n"); } int main() { int n; scanf ("%d", &n); print (n); return 0; } (用移位的方式可以隐形将十进制转二进制,减少操作流程) 用指针打印数组 #include <stdio.h> int main() { int a[]= {1,2,3,4,5}; int len=sizeof(a)/sizeof(int); int *p=&a; for(int i=0;i<len;i++) { printf("%d",p[i]); } printf("\n"); int *q=&a[0];//int *q=a; for(int i=0;i<len;i++) { printf("%d",*(q+i)); } }