用switch语句来实现选择,选择1开始游戏,选择为0我们退出游戏,并且相应的勇printf给出提示。　·代码　下面是我们所有的代码:　#include　#include　#include　　void　...　·void　menu()　void　menu(){　printf(猜数字游戏　n");　printf(1.开始　n");　printf(0.退出　n");}　·简单的一个菜单用于显示。　·void　game()　void　game(){　int　a=0;　int　b=0;　b=rand()%100;　while(1)　{　printf("请输入你想要猜的数字\n");　scanf("%d",&a);　if(a>b)　{　printf("猜大了\n");　}　else　if(a#include　　·int　main()　int　main(){　int　input=0;　do　{　menu();　printf("请选择");　scanf("%d",&input);　switch(input)　{　case　1:　printf("开始玩游戏\n");　game();　break;　case　0:　printf("退出游戏\n");　break;　default:　printf("选择错误\n");　break;　}　}while(input);　return　0;}　·通过do　whie来实现我们菜单的循环。用switch语句来实现选择,选择1开始游戏,选择为0我们退出游戏,并且相应的勇printf给出提示。　·代码　下面是我们所有的代码:　#include#include　#include　　void　menu(){　printf(猜数字游戏　n");　printf(1.开始　n");　printf(0.退出　n");}void　game(){　int　a=0;　int　b=0;　b=rand()%100;　while(1)　{　printf("请输入你想要猜的数字\n");　scanf("%d",&a);　if(a>b)　{　printf("猜大了\n");　}　else　if(a　(s　-　n));　同理右移n位位:　(x　>>　n)　|　(x　实际编程中可以用宏定义实现　循环　移位:　#...　C语言中没有提供循环移位的操作符,但可以通过简洁的方式实现循环移位　设一个操作数x有s位则循环左移n位的操作为:　(x　<<　n)　|　(x　>>　(s　-　n));　同理右移n位位:　(x　>>　n)　|　(x　<<　(s　-　n));　实际编程中可以用宏定义实现循环移位:　#define　ROTATE_LEFT(x,　s,　n)　((x)　<<　(n))　|　((x)　>>　((s)　-　(n)))　#define　ROTATE_RIGHT(x,　s,　n)　((x)　>>　(n))　|　((x)　<<　((s)　-　(n)))　例如:　#include　　#define　ROTATE_LEFT(x,　s,　n)　((x)　<<　(n))　|　((x)　>>　((s)　-　(n)))　#define　ROTATE_RIGHT(x,　s,　n)　((x)　>>　(n))　|　((x)　<<　((s)　-　(n)))　int　main()　{　unsigned　int　a;　scanf("%x",　&a);　printf("%08x\n",　a);　printf("%08x\n",　ROTATE_LEFT(a,　8　*　sizeof(int),　4));　printf("%08x\n",　ROTATE_RIGHT(a,　8　*　sizeof(int),　8));　return　0;　}　运行结果:　12345678　//原数　23456781　//移1位后　具体样例:　设有数据　a=01111011,循环左移2位　正确结果:　11101101　分步实现:　b=a>>(8-2)　;//用来得到正常左移丢失的位和循环移位后其正确位置　b="00000001";　a="a"<<2;//左移　a="11101100"　a=a|b;　//a=11101101　如果不是用中间变量一步实现:　a=(a>>(8-2))|(a<<2);　总长度N(8　16　32)　循环左移n　(a>>(N-n))|(a>>n)　循环右移n　(a<<(N-n))|(a>>n)　C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。　其他对位进行操作的还有位域法;　几个对位操作的样例如下:　#define　SETBIT(REG,N)　REG|=(1<　#include　void　rightloop(char　*a,　int　n);　main()　{　char　a[100];　int　n;　printf("请输入要循环的字符串:/n");　scanf("%s",a);　printf("请输入要循环字符串的位数:/n");　scanf("%d",&n);　//以上代码也可以直接赋初值,我考虑的是一般情况//　void　rightloop(a,n);　//本例以a[]="abcdefghijk",　n=3为例讲解//　printf("输出循环右移的字符串:%s/n",a);　}　void　rightloop(char　*a,　int　n)　{　char　b[100];　//数组b要做的够大即可//　int　m;　m=strlen(a)-n;　//求出除去要循环右移之后剩下的字符的个数//　strcpy(b,a+n);　//　a+n,a代表a[0]的地址再加上n,表示要把a[n]之后的字符串(即那些不用循环右移的字符,共有m个)复制到数组b中。这时b[]="defghijk"。　//　strcpy(b+m,a);　//　b+m,　因为上面已经把没有循环的m个字符赋给了b,所以b[m]之前的不能在赋值了,只能把a的全部字符串赋给b[m]之后的空间了。这时b[]="defghijkabcdefghijk"。//　*(b+strlen(a))='/0';　//这里是问题的关键,要根据a字符串的长度来舍弃b数组中多余的字符串,并给数　组b加结束符。这时b[]="defghijkabc";//　strcpy(a,b);　//把数组b中调整好的字符串重新赋给数组a。//　}　方法二:就是用简单的c语句;　#include　void　rightloop(char　,　int　)　main()　{　char　a[100];　int　n;　printf("请输入要循环的字符串:/n");　scanf("%s",a);　printf("请输入要循环字符串的位数:/n");　scanf("%d",&n);　//以上代码也可以直接赋初值,我考虑的是一般情况//　void　rightloop(a,n);　//本例以a[]="abcdefghijk",　n=3为例讲解//　printf("输出循环右移的字符串:%s/n",a);　}　void　rightloop(char　a[　],　int　n)　{　int　i=0,j=0,k=0;　int　m;　char　b[100];　while(a[i]!='/0')　{　i++;　}　//这里用i来计算数组a中字符串的大小;//　while(a[n]!='/0')　{　b[j]=a[n];　j++;　n+这里是把不需要循环右移的字符串赋值到数组b中;b[　]="defghijk"。//　while(a[k]!='/0')　{　b[j]=a[k];　j++;　k+因为上一个while循环中,数组b已经赋值到b[j]了。所以这里直接从b[j]开始把数组a中的字符串全部赋值到数组b[j]以后的空间中;b　[　]="defghijkabcdefghijk";//　b[i]='/0';　//通过用数组a中字符串的长度i来调整数组b的长度,删去数组b中多余的字符串　,b[]="defghijklabc"。　for(i=0;b[i]!='/0';i++)　{　a[i]=b[i];　}　//把数组b中调整好的字符串重新赋给数组a。//　}　再次我们来解决字符串循环左移的问题　方法一:调用已经有的字符串函数。　#include　#include　void　leftloop(char　*a,　int　n);　main()　{　char　a[100];　int　n;　printf("请输入要循环的字符串:/n");　scanf("%s",a);　printf("请输入要循环字符串的位数:/n");　scanf("%d",&n);　//以上代码也可以直接赋初值,我考虑的是一般情况//　void　leftloop(a,n);　//本例以a[]="abcdefghijk",　n=3为例讲解//　printf("输出已经循环左移的字符串:%s/n",a);　}　void　leftloop(char*a,int　n)　{char　b[100];　//数组b要做的够大即可//　int　m;　m=strlen(a)-n;　//求出除去要循环右移之后剩下的字符的个数//　strcpy(b,a+m);　//　a+m,a代表a[0]的地址再加上m,表示要把a[m]之后的字符串(即那些需要循环左移的字符,共有n个)复制到数组b中。这时b[]="ijk"。　//　strcpy(b+n,a);　//　b+n,　因为上面已经把需要循环的n个字符赋给了b,所以b[n]之前的不能在赋值了,只能把a的全部字符串赋给b[n]之后的空间了。这时b[]="ijkabcdefghijk"。//　*(b+strlen(a))='/0';　//这里是问题的关键,要根据a字符串的长度来舍弃b数组中多余的字符串,并给数组b加结束符。这时b[]="ijkabcdefgh";//　strcpy(a,b);　//把数组b中调整好的字符串重新赋给数组a。//　}　方法二:就是用简单的c语句;#include　void　leftloop(char　,　int　)　main()　{　char　a[100];　int　n;　printf("请输入要循环的字符串:/n");　scanf("%s",a);　printf("请输入要循环字符串的位数:/n");　scanf("%d",&n);　//以上代码也可以直接赋初值,我考虑的是一般情况//　void　leftloop(a,n);　//本例以a[]="abcdefghijk",　n=3为例讲解//　printf("输出已经循环左移的字符串:%s/n",a);　}　void　leftloop(char　a[　],　int　n)　{　int　i=0,j=0,k;　int　m;　char　b[100];　while(a[i]!='/0')　{　i++;　}　//这里用i来计算数组a中字符串的大小;//　k=m=i-n;　//计算出前面有多少个字符不用移动//　while(a[k]!='/0')　{　b[j]=a[k];　j++;　k+因为这时k=i-m,a[k]表示需要循环移动的第一个字符,这里是把需要循环右移的字符串赋值到数组b中;b[　]="ijk"。//　b[j]='/0';　m--;k--;　//因为要用m调节下面的循环但是要从0开始所以比实际的多了一次;k--是为了要留着数组a中的结束符,不出现乱码;//　while(m>=0)　{　a[k]=a[m];　m--;　k-原来a[k]=“abcdefghijk",a[m]="abcdefgh",赋值之后a[k]="abcabcdefgh";//　for(i=0;b[i]!='/0';i++)　{　a[i]=b[i];　}　//把数组b中调整好的字符串重新赋给数组a。b[i]="ijk";a[i]="abcabcdefgh"。