C语言分支与循环练习

/*计算i的阶乘*/
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    int i = 0;
//    static int ret = 1; //最初值不能给0,要么乘以任何数都为零 
//    scanf("%d", &i);
//    for(n = 1; n <= i; n++)
//    {
//        ret = ret * n; 
//    }
//    printf("ret = %d\n", ret);
//    return 0;
//}

/*计算1! + 2! + 3!*/
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int n = 0;
//    int ret;
//    static int sum = 0;
//    for(n = 1; n<=3; n++)
//    {
//        ret = 1; //将ret每次的初初始值设为1,防止ret进行累积计算 
//        for(i = 1; i<= n; i++)
//        {
//            ret = ret * i;
//        } //算出n的阶乘 
//        sum = sum + ret; //将n的阶乘累积加在一起 
//   }
//   //ret = 1*1 = 1
//   //ret = 1*1*2 = 2
//   //ret = 1*1*2*3 = 6
//   printf("sum = %d\n", sum);
//    return 0;
//}

/*计算1! + 2! + 3!*/
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    int ret = 1;
//    int sum = 0;
//    for(n = 1; n<=3; n++)
//    {
//        ret = ret * n;
//        sum = sum + ret;
//    }
//    printf("sum = %d\n", sum);
//    return 0;
//} 

/*写一个代码,在arr(无序的)数组中找到其中一个数字*/
//#include<stdio.h>
//int main()
//{
//    int arr[] = {0,20,2,13,4,5,18,7,8,9,10};
//    int k = 8;
//    int i = 0;
//    int sz = sizeof(arr)/sizeof(arr[0]);
//    for(i = 0; i<=sz; i++)
//    {
//        if(k == arr[i])
//        {
//            printf("找到了,下表是:%d\n", i);
//            break;
//        }
//        else if(i == sz)
//                printf("找不到\n"); 
//    }
//    return 0;
//}

/*写一个代码,在arr(有序的)数组中找到其中一个数字*/
/*折半查找算法(其效率是挨个查找算法的log2N)*/
//#include<stdio.h>
//int main()
//{
//    int arr[] = {1,2,3,4,5,6,7,8,9,10};
//    int sz = sizeof(arr)/sizeof(arr[0]);         //计算元素个数 
//    int left = 0;                                //左下标 
//    int right = sz - 1;                          //元素个数减一就是右下标
//    int k = 17;                                  //查找7 
//    while(left<=right)
//    {
//        int mid = (left + right)/2;              //计算中间元素的下标(一定要定义在while循环里面,因为每次查找的时侯都要再计算一次中间元素的下标)
//        if(arr[mid] > k)                         //arr[mid]为整个数组中的中间值 
//            {
//                right = mid - 1;
//            }
//         else if(arr[mid] < k)
//            {
//                left = mid + 1;
//            }
//        else
//           {
//                printf("找到了,下标是:%d\n", mid);
//                break;
//            } 
//    }
//    if(left>right)
//    {
//        printf("找不到了\n");
//    }
//    return 0;
//}

/*演示多个字符从两端移动,向中间汇聚*/
//#include<stdio.h>
//#include<string.h>
//#include<windows.h> 
//int main()
//{
//    char arr1[] = "Welcome to Zhejianggongshang University!";
//    char arr2[] = "                                        ";
//    int left = 0;
//    int right = strlen(arr1) - 1;                                       //计算右下标的位置 
//    while(left <= right)
//    {
//        arr2[left] = arr1[left];
//        arr2[right] = arr1[right];
//        printf("%s\n", arr2);
//        //每打印一次休息一秒
//        Sleep(1000); //单位是毫秒 
//        system("cls"); //执行系统命令的一个函数 - cls - 清空屏幕 
//        left++;
//        right--;
//    } 
//    printf("%s\n", arr2);
//    return 0;
//} 

/*模拟用户登录情景,并且只能登录3次。(只允许输入三次密码,如果密码正确提示登陆成功,如果三次输入均错误,则退出程序)*/
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    int i = 0;
//    char password[20] = {0};
//    for(i = 0; i<3; i++)
//    {
//        printf("请输入密码:");
//        scanf("%s", password); 
//        if(strcmp(password, "123456") == 0)  //等号不能用来比较两个字符串相等,应该使用一个库函数strcmp 
//                                             //如果第一个字符串大于第二个字符串会返回一个大于零的值。如果第一个字符串小于第二个字符串会返回小于零的值 
//        {
//            printf("登陆成功\n");
//            break;
//        }
//        else
//        {
//            printf("密码错误\n");
//        }
//    }
//    if(i == 3)
//    {
//        printf("三次密码均错误,请退出\n");
//    }
//    return 0;
//    
//}

/*将字符串1中有字符串2中重复的值不输出*/ 
//#include<stdio.h>
//int instead(char s1[], char s2[])
//{
//    int i, j, k;
//    for(k = 0; s2[k] != '\0'; k++)
//    {
//        for(j = i = 0; s1[i] != '\0'; i++)
//            if(s1[i] != s2[k])
//            {
//                s1[j++] = s1[i];
//            }
//
//            s1[j] = '\0';
//    }
//} 
//int main()
//{
//    char str1[] = "Good morning!";
//    char str2[] = "o";
//    printf("%s\n", str1);
//    instead(str1, str2);
//    printf("%s\n", str1);
//    return 0;
//}

/*输入3个数,从大到小输出*/
//#include<stdio.h>
//int main()
//{
//    int a = 0;
//    int b = 0;
//    int c = 0;
//    scanf("%d%d%d", &a, &b, &c);
//    if(a<b)
//    {
//        int tmp = a;
//        a = b;
//        b = tmp;
//    }
//    if(a<c)                           //a,b,c的判断顺序一定不能变 
//    {
//        int tmp = a;
//        a = c;
//        c = tmp;
//    }
//    if(b<c)
//    {
//        int tmp = b;
//        b = c;
//        c = tmp;
//    }
//    printf("%d %d %d", a, b, c);
//    return 0;
//}


/*打印1-100之间3的倍数的数字*/
//#include<stdio.h>
//int main()
//{
//    int i = 1;
//    for(i = 1; i<100; i++)
//    {
//        if(i%3 == 0)         //i%3,一个数除以3的余数 
//        {
//            printf("%d ", i);
//        }
//        else
//        {
//            continue;
//        }
//    }
//    return 0;
//}

/*给定两个数求最大公约数(辗转相除法)*/
//#include<stdio.h>
//int main()
//{
//    int m = 0;
//    int n = 0;
//    int r = 0;
//    scanf("%d%d", &m, &n);
//    while(m%n)
//    {
//        r = m%n;
//        m = n;
//        n = r;
//    }
//    printf("%d\n", n);
//    return 0;
//}

/*打印1000年到2000年之间的闰年*/
//#include<stdio.h>
//int main()
//{
//    int year = 1000;
//    int count = 0;
//    for(year = 1000; year <= 2000; year++)
//    {
//        //判断year是否为闰年
//        //1.能被4整除,且不能被100整除   2.能被400整除
//        if(year%4 == 0 && year%100 != 0)
//        {
//            printf("%d是闰年\n", year);
//            count++;
//        }
//        else if(year%400 == 0)
//        {
//            printf("%d是闰年\n", year);
//            count++;
//        }
//        else
//        continue;
//    }
//    printf("\n%d\n", count);
//    return 0;
//}
/*方法2*/
//#include<stdio.h>
//int main()
//{
//    int year = 0;
//    int count = 0;
//    for(year = 1000; year <= 2000; year++)
//    {
//        if(((year%4 == 0) && (year%100 != 0)) || (year%400 == 0))
//        {
//            printf("%d是闰年\n", year);
//            count++;
//        }
//        else
//        continue;
//    }
//    printf("\n%d\n", count);
//    return 0;
//} 

/*打印100到200之间的素数*/
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int count = 0;
//    int j = 0;
//    for(i = 100; i<=200; i++)
//    {
//        //判断i是否为素数
//        //1.试除法   首先产生2到i-1之间的数字 
//        for(j = 2; j <= i-1; j++)
//        {
//            if(i%j == 0)
//            {
//                break;           //跳出内层for循环 
//            }
//        }
//        if(j == i)
//        {
//            count++;
//            printf("%d\n", i);
//        }
//    }
//    printf("100-200之间的素数总数为;%d\n", count);
//    return 0;
//}

/*方法二*/
//#include<stdio.h>
//#include<math.h>   //数学库函数 
//int main()
//{
//    //如果i不是素数,那么必然有i = a*b
//    //并且a和b中至少有一个 <= 开平方i
//    int i = 0;
//    int j = 0;
//    int count = 0;
//    for(i = 101; i<=200; i+=2)             //因为偶数不可能为素数,所以直接从101开始,每次给i+2 
//    {
//        for(j = 2; j <= sqrt(i); j++)     //sqrt()是数学库函数,意思为开平方 
//        {
//            if(i%j == 0)
//            {
//                break;
//            }
//        }
//        if(j>sqrt(i))
//        {
//            count++;
//            printf("%d ", i);
//        }
//    }
//    printf("\n100-200之间的素数总数为:%d\n", count);
//    return 0;
//}

/*编写程序写一下1到100的所有整数中出现多少个数字9*/
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int count = 0;
//    for(i = 1; i<=100; i++)
//    {
//        if(i%10 == 9)
//        {
//            count++;
//        }
//        if(i/10 == 9)
//        {
//            count++;
//        }
//    }
//    printf("总数为:%d\n", count);      //99个位有一个9,十位有一个9,算作两个 
//    return 0;
//}

/*计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值*/
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    double sum = 0.0;
//    int flag = 1;
//    for(i = 1; i<=100; i++)
//    {
//        sum += flag*(1.0/i);       //将1改为1.0则可以除出来小数,否则只能除出来整数
//        flag = -flag;              //实现加一个数,减一个数 
//    }
//    printf("%lf\n", sum);
//    return 0;
//}

/*求10个整数的最大值*/
//#include<stdio.h>
//int main()
//{
//    int arr[] = {-1,-2,-3,-4,-13,-6,-7,-8,-9,-10};
//    int max = arr[0]; //假设这个数组中第一个数(第一个数的下标为0)为最大值
//    int i = 0;
//    int sz = sizeof(arr)/sizeof(arr[0]);
//    for(i = 0; i<sz; i++)                //i就是我们这个数组中每个元素的下标 
//    {
//        if(arr[i]>max)
//        {
//            max = arr[i];
//        } 
//    }
//    printf("max = %d\n", max);
//    return 0;
//}

/*乘法口诀标的打印*/
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int j = 1;
//    for(i = 1; i <= 9; i++)     //确定打印9行 
//    {
//        for(j = 1; j <= i; j++)
//        {
//            printf("%d*%d=%-2d ", i, j, i*j);   //%2d的意思是打印时直接打印2位,如果不足两位,用空格补齐,"-2"表示左对齐,没有"-"表示右对齐 
//        }
//        printf("\n");
//    }
//    return 0;
//}

/*关机程序*/
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    char input[20] = {0};
//    //shutdown -s -t 60 电脑在60秒内关机 
//    //shutdown -a
//    system("shutdown -s -t 60");
//again:
//    printf("请注意,您的电脑在1分钟之内关机,如果输入:我是猪,就取消关机\n请输入>:");
//    scanf("%s", input);
//    if(strcmp(input, "我是猪") == 0)   //比较两个字符串--strcmp() 
//    {
//        system("shutdown -a");
//    }
//    else
//    {
//        goto again;
//    }
//    return 0;
//}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值