02.2 C语言分支循环常见编程题

找大小

三数按照大小排序

int main(){
    int a;
    int b;
    int c;
    scanf("%d %d %d",&a,&b,&c);
    if (a<b){
        int temp = a;
        a = b;
        b = temp;
    }
    if (a<c){
        int temp = a;
        a = c;
        c = temp;
    }
    if (b<c){
        int temp = b;
        b = c;
        c = temp;
    }
    printf("%d %d %d",a,b,c);
}
判断闰年
int main(){
    int year = 0;
    int count = 0;
    for(year=1000;year<=2000;year++){
        //判断year是否是闰年
        //1. 能被4整除但是不能被100整除是闰年
        //2. 能被400整除的是闰年
        if(((year%4==0)&&(year%100!=0))||(year%400==0)){
            printf("%d ",year);
            count++;
        }
    }
    printf("\n count = %d",count);
    return 0;
}
素数判断
#include <math.h>
int main() {
    int i = 0;
    int count = 0;
    for (i = 100; i < 200; i++) {
        //判断i是否为素数
        //试除法
        int j = 0;
        for ( j = 2; j < sqrt(i); j++) {
            if(i%j==0){
                break;  // 说明不是
            }
        }
        if (j > sqrt(i)){
            printf("%d ",i);
            count++;
        }
    }
    printf("\ncount = %d",count);
    return 0;
}

还可以将将计算的数从101开始,然后每次运算加2(只计算奇数)。

1-100中7出现的次数
int main(){
    int i = 0;
    int count = 0;
    for (i = 1;i<=100;i++){
        if (i%10==7){        //个位出现9
            count++;
        }
        if (i/10==7){        //十位出现9
            count++;
        }
    }
    printf("count=%d",count);
    return 0;
}
计算最大公因数

辗转相除法(两个数)

int main(){
	int m = 24;
	int n = 18;
	int r = 0;
	while(m%n){
		r = m % n;
		m = n;
		n = r;
	}
	printf("%d\n",n);
	return 0;
}

求n个数的最大公约数。2<=n<50

输入:n个正整数,以0作为数的结束。用空格隔开。

输出:最大公约数和这n个数,用一个空格隔开。

样例:

210 54 24 0

6 210 54 24

int main() {
   //1.输入
   int a[51] = {1};    //最多50个所以使用51
   int n = 1;     //记录长度数组  至少要有一位是0
   while (a[n - 1] != 0) {    // 0是最后一位
       scanf("%d", &a[n]);
       n = n + 1;
   }  // n-2是输入的个数

   // 2. 计算  使用辗转相除法   先算1和2 结果和3算 结果再和4算 以此类推  得到的就是多个数的最大公约数
   //(1) 固定左边的值   (2) 一个值一个值的向右移动  (3)终止条件是:所有的值都算完了
   int left = a[1], right = a[2];
   for (int i = 2; i <= n - 2; i++) {
       int midNum;
       //辗转相除法过程
       while (right != 0) {
           midNum = left % right;
           left = right;
           right = midNum;
       }
//        一次公约数计算完成,下一次计算时左值就是现在的left右值就是a[i+1]
       left = left;
       right = a[i];
   }
   printf("%d ",left);
   // 3.处理输出
   int m = n - 1;   //n加上了最后的0实际上使用的时候应该先减回来。
   while (m > 1) {
       printf("%d ", a[n - m]);
       m--;
   }
}
最小公倍数

求n个数的最小公倍数,2<=n<10。

输入:n个正整数,以0作为数的结束。用空格隔开。

输出:最小公倍数和这n个数,用一个空格隔开。

样例:

210 54 24 0

7560 210 54 24

int main() {
   //1.输入
   int a[11] = {-1};    //最多10个所以使用11
   int n = 1;     //记录长度数组  至少要有一位是0
   while (a[n - 1] != 0) {    // 0是最后一位
       scanf("%d", &a[n]);
       n = n + 1;
       if (a[0] < a[n - 1]) {
           a[0] = a[n - 1];       //将第一个值存为最大的值
       }
   }  // n-2是输入的个数

   // 2. 计算  最小公倍数   先算1和2 结果和3算 结果再和4算 以此类推  得到的就是多个数的最大公约数
   //(1) 固定左边的值   (2) 一个值一个值的向右移动  (3)终止条件是:所有的值都算完了
   int left = a[0], right = a[1];
   int timesNum = left;
   for (int i = 1; i <= n - 1; i++) {
         //最小公倍数
       //计算最小公倍数
       while (timesNum % left != 0 || timesNum % right != 0) {
           timesNum+=1;
       }
   //    一次公约数计算完成,下一次计算时左值就是现在的left右值就是a[i+1]
       left = timesNum;
       right = a[i];
   }
   printf("%d ", timesNum);
   // 3.处理输出
   int m = n - 1;   //n加上了最后的0实际上使用的时候应该先减回来。
   while (m > 1) {
       printf("%d ", a[n - m]);
       m--;
   }
}
分数求和

计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值,打印出结果

int main() {
    int i;
    double sum = 0.0;
    int flag = 1;
    for (i = 1; i <= 100; i++) {
        sum += flag * 1.0 / i;
        flag = -flag;
    }
    printf("%lf\n", sum);
    return 0;
}
求最大值

求10个数的最大值

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int max = a[0];//最大值   这个地方不要用自定义的值,因为有可能自定义的值为最大值
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (i = 1; i < sz; i++) {  //因为arr[0]为最开始的max所以从1开始就可以了
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    printf("max = %d\n", max);
    return 0;
}
乘法口诀表
int main(){
    int i = 0;
    //打印九行
    for ( i = 1; i <= 9; i++) {
        //打印其中一行
        int j;
        for(j=1;j<=i;j++){
            printf("%d*%d=%-2d ",i,j,i*j);//-2左对齐 占两位
        }
        printf("\n");
    }
}
二分查找

在一个有序数组中查找具体的某个数字n。编写int binsearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=…<=v[n-1]的数组中查找x。

//可以遍历  但是没有进步性  这里使用的是二分查找
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int find = 7;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;			//左下标
    int right = sz - 1;		//右下标
    while (left <= right) {      //二分查找的条件
        int mid = (left + right) / 2;
        if (arr[mid] > find) {
            right = mid - 1;
        } else if (arr[mid] < find) {
            left = mid + 1;
        } else {
            printf("找到了,下标是:%d", mid);
            break;    
        }
    }
    if (left>right){     // 如果因为没有跳出来的情况是这样的
        printf("找不到啊!\n");
    }
    return 0;
}
猜数字游戏

需求:

  1. 电脑会生成一个随机数

  2. 猜数字

  3. 重开

#include <stdlib.h>
#include <time.h>

int game(){
    //生成随机数
    int randNum = 0;
    int guessNum = 0;//存储猜的数字
    //用时间戳来设置随机数的起点
    // srand((unsigned int)time(NULL));  //这个应该写在外面 一个程序设置一次就可以了
    randNum = rand()%100+1;//生成随机数  1-100   这个函数本身生成的是0-32767
    // printf("%d",randNum);
    //2.猜数字
    while (1){
        printf("你猜的数字是:");
        scanf("%d", &guessNum);
        if(guessNum>randNum){
            printf("猜大了\n");
        }else if(guessNum<randNum){
            printf("猜小了\n");
        }else{
            printf("恭喜你,猜对了\n");
            break;
        }
    }
    return 0;
}
int main(){
    int input = 0;
    //用时间戳来设置随机数的起点
    srand((unsigned int)time(NULL));
    do {
        printf("#############################################\n");
        printf("########  1.开始游戏     2.退出游戏    ########\n");
        printf("#############################################\n");
        printf("->请选择:");
        scanf("%d",&input);
        switch (input) {
            case 1:
                game();
                // 猜数字
                break;
            case 2:
                printf("退出游戏\n");
                break;
            default:
                printf("游戏结束,再见!\n");
                break;
        }
    } while (input);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎丶辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值