如何打印枚举子、递归栈、递归斐波拉契数列、爱恩斯坦阶梯、筛法求素数、统计单词

  一、如何打印枚举子,可以定义与枚举子对应的字符串指针,也可以使用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);

原文地址:https://www.cnblogs.com/GoldenEllipsis/p/9504160.html