一、如何打印枚举子,可以定义与枚举子对应的字符串指针,也可以使用switch语句
1 #include <stdio.h> 2 int main() 3 { 4 /* 1.定义枚举类型 */ 5 enum type {INT,CHAR,DOUBLE}; 6 /* 2.定义与枚举子对应的字符串指针 */ 7 const char *TYPE[3] = {"INT","CHAR","DOUBLE"}; 8 /* 3.定义枚举变量并初始化 */ 9 enum type T = INT; 10 /* 4.打印枚举子 */ 11 printf("%s\n",TYPE[T]); 12 return 0; 13 }
1 #include <stdio.h> 2 int main() 3 { 4 /* 1.定义枚举类型 */ 5 enum type {INT,CHAR,DOUBLE}; 6 /* 2.定义枚举变量并初始化 */ 7 enum type T = INT; 8 /* 3.打印枚举子 */ 9 switch(T){ 10 case INT:printf("INT");break; 11 case CHAR:printf("CHAR");break; 12 case DOUBLE:printf("DOUBLE");break; 13 } 14 return 0; 15 }
二、爱恩斯坦阶梯
1 #include <stdio.h> 2 int main() 3 { 4 int x = 7, find = 0; 5 while (!find) 6 { 7 if (x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0) 8 { 9 printf("x = %d\n", x); 10 find = 1; 11 } 12 x++; 13 } 14 return 0; 15 }
三、递归栈的理解(dev c++调式)
1 #include <stdio.h> 2 3 int a[100] = {3}; 4 void fun(int m,int k){ 5 int i,j; 6 for(i=m; i>=k; i--){ 7 a[k] = i; 8 if(k>1) 9 fun(i-1,k-1); 10 else{ 11 for(j= a[0];j>0;--j) 12 printf("%d ",a[j]); 13 printf("\n"); 14 } 15 } 16 } 17 18 int main() 19 { 20 fun(5,3); 21 return 0; 22 }
四、递归斐波那契数列
1 # include <stdio.h> 2 #include <string.h> 3 # define N 100 4 5 int fab[N]; 6 int Fab(int n) 7 { 8 if (fab[n]==-1)//防止溢出 9 { 10 if ((n==1)||(n==2)) 11 fab[n]=1; 12 else 13 fab[n]=Fab(n-1)+Fab(n-2); 14 } 15 return fab[n]; 16 } 17 18 int main() 19 { 20 int n; 21 scanf("%d",&n); 22 23 memset(fab,-1,N);//数组赋值-1 24 printf("%d\n",Fab(n)); 25 26 for(int i=1; i<=n; ++i) 27 printf("%d ",fab[i]); 28 return 0; 29 }
五、筛法求素数
#include <stdio.h> #include <math.h> #include <string.h> void shift(int *isPrime, int n, int i){ for(int j=2*i; j<n; j+=i) isPrime[j] = 0; //划掉不是素数的数 } int main() { int isPrime[100]; //假定1~100都是素数 memset(isPrime,1,100*sizeof(int)); //初始化数组所有元素为1 //求素数 for(int i=2; i<sqrt(100);++i) { if(isPrime[i]) shift(isPrime,100,i); } //输出素数 for(int j=2; j<100; ++j) if(isPrime[j]) printf("%d ", j); return 0; }
六、统计单词
1 #include <stdio.h> 2 3 void CountWords(const char *a,int *b){ 4 int i=0,num=0,word=0; //为统计第一个单词,假定有空白符 5 6 for(i=0; a[i]; i++){ 7 if(a[i]==' '||a[i]==',' || a[i]=='\n'){ //忽略空白符或其他符号 8 word=0; 9 }else if(word==0){ //出现空白符单词个数++ 10 word=1; 11 num++; 12 } 13 } 14 //利用参数返回 15 *b=num; 16 } 17 18 int main() 19 { 20 const char *a = " Hello , world \n haha "; 21 int count; //主函数局部变量 22 CountWords(a,&count); //取地址传递 23 printf("%d\n",count); 24 return 0; 25 }
七、若干人(100以内)围成一圈,数到3的人退出,计算坚持到最后的那个人的位置
#include<stdio.h> int main() { int a[100]={0}; //初始化数组,所有元素都为0 int n,i; //i 表示数组下标 printf("请输入人数:"); scanf("%d",&n); int cnt=0; //计数器初始化为0 int count = n; //人数 for (i=0; count>1; ++i,i%=n) //因为 i 每次累加后被 n 取余,所以累加不会超过 n { if(a[i]==0) //数组元素为0的表示有人,为-1的表示已经退出 { cnt++; } if (cnt==3) { count--; //人数减 1 a[i]=-1; // 赋值为-1表示退出圈子 cnt=0; //计数器归0 } } for(i=0;i<n;i++) { if (a[i]==0) printf("The result is %d: ",i+1); //数组下标+1就是人的位置,没必要用数组元素的值表示位置 } return 0; }
八、随机产生1~10十个数字的序列,数字不能重复,然后,选择排序
#include <stdio.h> #include <stdlib.h> //rand #include <time.h> int main() { srand((unsigned) time(NULL)); //随机数发生器 int i,j,k,t; int n = 10; //10个数字 int arr[10] = {0}; //记录随机产生的数字序列 int key[10] = {0}; //是否产生过数字的标记 int index = 0; //记录数字序列的下标 int num = 0; //随机产生的数字 //随机产生10个1~10的数字序列 while(index<n){ num = rand()%n; //num随机产生的数字 0~9 if(!key[num]){ //num是否产生过 arr[index++] = num + 1; //记录随机产生的数字 key[num]++; //num产生后,标记 } } //随机序列 for( i=0; i<n; ++i) printf("%d ",arr[i]); printf("\n"); //选择排序 for(i=0; i<n-1; ++i){ k=i; for(j=i+1;j<n;++j) { if(arr[j]<arr[k]) k=j;//最小数下标 } //交换 t=arr[i]; arr[i]=arr[k]; arr[k]=t; } //排序结果 for( j=0; j<n; ++j) printf("%d ",arr[j]); printf("\n"); return 0; }
九、简易摇号器,vc 6.0 ++ 设计图形界面
int i,j; int x = GetDlgItemInt( IDC_EDIT1); /*选出人数*/ int y = GetDlgItemInt( IDC_EDIT2); /*总人数*/ srand((unsigned)time(NULL)); /*随机种子*/ int *num = (int *)malloc(sizeof(int)*y); /*总人数的数组*/ if(num ==NULL){ exit(0); } for(i=0; i<y; ++i){ /*总人数从1开始到总人数为止*/ num[i] = i+1; } for(j=0; j<y; ++j){ /*随机打乱数组*/ int k,temp; k = rand()%y; temp = num[j]; num[j] = num[k]; num[k] = temp; } CString strShow =_T(""); CString strTemp =_T(""); for(i=0; i<x; i++) /*选择数组从下标0开始到x-1结束共x个数字*/ { strTemp.Format("%d",num[i]); strShow+=strTemp+","; } SetDlgItemText(IDC_EDIT3,strShow); free(num);
十、求二进制数中1的个数
/* 求二进制数中1的个数 */ #include <stdio.h> int main() { int v = 0170; // 001 111 000 -1 -> 001 110 111 // & 001 110 111 // 001 110 000 int cnt = 0; while(v) { v &= (v-1); //printf("%o\n", v ); cnt++; } printf("%d\n", cnt ); return 0; }