C语言-分支习题及解析

发布于:2025-07-20 ⋅ 阅读:(12) ⋅ 点赞:(0)

习题

  1. 计算 n 以内所有正奇数的和?n 值通过键盘输入

     #include <stdio.h>
     int main()
     {
         int n,sum;
         printf("请输入一个整数:");
         scanf("%d",&n);
         while(n!=0)
         {
             if(n%2 !=0){
                 sum += n;
             }
             n--;
         }
         printf("%d以内所有正奇数的和为%d",n,sum);
      } 
     请输入一个整数:100
     0以内所有正奇数的和为2500
     --------------------------------
     Process exited after 3.068 seconds with return value 0
     请按任意键继续. . .

  2. 计算 1 + 1/(23) + 1/(34) + ...+ 1/(n*(n+1))=?直到最后一相值小于 0.00001 为止。

     #include <stdio.h>
     int main()
     {
         double y = 0.0;
         double n = 2;
         double m = 1/(n*(n+1));
         printf("m = %lf\n",m);
         printf("n = %lf\n",n);
         
         while( m  >= 0.00001)
         {
             m = 1/(n*(n+1));
             y += 1/(n*(n+1));
             n++;
         }
         y = y+1;
         printf("y = %lf\n",y);
         printf("n = %d\n",(int)n);
         printf("m = %lf",m);
         return 0;
     }
     m = 0.166667
     n = 2.000000
     y = 1.496845
     n = 317
     m = 0.000010
     --------------------------------
     Process exited after 0.08403 seconds with return value 0
     请按任意键继续. . .

  3. 计算 1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n=?n ·通过键盘输入(int k=-1)

     #include <stdio.h>
     int main()
     {
         double n;
         double m = 0;
         printf("输入一个整数n:");
         scanf("%lf",&n);
         while(n>=1)
         {
             m += 1/n;
             n--;
         }
         printf("m=%lf",m);
         return 0;
     }
     输入一个整数n:100
     m=5.187378
     --------------------------------
     Process exited after 60.27 seconds with return value 0
     请按任意键继续. . .

  4. 计算 n 的阶乘?n! = 123.....*n n 值通过键盘输入

     #include <stdio.h>
     int main()
     {
         int n;
         int m = 1;
         printf("输入一个整数n:");
         scanf("%d",&n);
         while(n>1)
         {
             m *= n;
             n--; 
         }
         printf("m=%d",m);
         return 0;
     }
     
    输入一个整数n:10
     m=3628800
     --------------------------------
     Process exited after 1.482 seconds with return value 0
     请按任意键继续. . .

  5. 输出半径为 1~10 的圆面积,面积大于 100 时停止

    #include <stdio.h>
    #define PAI 3.14
    int main()
    {
    	double n,m;
    	while(1)
    	{
    		printf("输入一个圆的半径:");
    		scanf("%lf",&n);
    		m = n*n*PAI;
    		printf("圆的面积为%lf\n",m);
    		if(m>100) break;
    	}
    	return 0;
    }
    输入一个圆的半径:100
    圆的面积为31400.000000
    
    --------------------------------
    Process exited after 1.657 seconds with return value 0
    请按任意键继续. . .

  6. 求输入的十个整数中正数的个数及其平均值

    #include <stdio.h>
    int main()
    {
    	int a[10],b[10];
    	double sum = 0;
    	int n = 0;
    	printf("请输入10个整数:"); 
    	for(int i=0;i<=9;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	for(int i=0;i<=9;i++)
    	{ 
    		if(a[i]>0)
    		{
    			sum += a[i];
    			printf("%d\n",a[i]);
    			
    			b[n] = a[i];
    			n++;
    		} 
    	}
    	
    	printf("正整数有:"); 
    	for(int i=0;i<n;i++)
    	{
    		printf("%d  ",b[i]);
    	}
    	double p = sum/(double)n;
    	printf("平均数为:%lf\n",p);
    	
    }
    请输入10个整数:10 10 10 10 10 10 10 10 -10 10
    10
    10
    10
    10
    10
    10
    10
    10
    10
    正整数有:10  10  10  10  10  10  10  10  10  平均数为:10.000000
    
    --------------------------------
    Process exited after 11.96 seconds with return value 0
    请按任意键继续. . .

  7. 打印出 100 以内能整除 7 之外的的自然数

    #include <stdio.h>
    int main()
    {
    	int i;
    	for(i=0;i<101;i++)
    	{
    		if(i%7==0){
    			printf("%d  ",i);
    		}
    	}
    	return 0;
    }
    0  7  14  21  28  35  42  49  56  63  70  77  84  91  98
    --------------------------------
    Process exited after 0.1568 seconds with return value 0
    请按任意键继续. . .

  8. 打印乘法表

    #include <stdio.h>
    int main()
    {
    	int i,j;
    	for(i=1;i<10;i++)
    	{
    		for(j=1;j<i+1;j++)
    		{
    			printf("%dX%d=%d\t",i,j,i*j);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    1X1=1
    2X1=2   2X2=4
    3X1=3   3X2=6   3X3=9
    4X1=4   4X2=8   4X3=12  4X4=16
    5X1=5   5X2=10  5X3=15  5X4=20  5X5=25
    6X1=6   6X2=12  6X3=18  6X4=24  6X5=30  6X6=36
    7X1=7   7X2=14  7X3=21  7X4=28  7X5=35  7X6=42  7X7=49
    8X1=8   8X2=16  8X3=24  8X4=32  8X5=40  8X6=48  8X7=56  8X8=64
    9X1=9   9X2=18  9X3=27  9X4=36  9X5=45  9X6=54  9X7=63  9X8=72  9X9=81
    
    --------------------------------
    Process exited after 0.1593 seconds with return value 0
    请按任意键继续. . .

  9. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

    #include <stdio.h>
    int main()
    {
    	int a,b,c;
    	for(a=1;a<100;a++)
    	{
    		for(b=1;b<100;b++)
    		{
    			for(c=1;c<100;c++)
    			{
    				if(5*a+3*b+c/3 == 100&&a+b+c == 100)
    				{
    					printf("%d  %d  %d\n",a,b,c);
    				}
    			}
    		}
    	 } 
    	return 0;
    }
    3  20  77
    4  18  78
    7  13  80
    8  11  81
    11  6  83
    12  4  84
    
    --------------------------------
    Process exited after 0.1925 seconds with return value 0
    请按任意键继续. . .

  10. 从键盘上输入多个无符号整型数据,直到 0 结束,输出所输入数据中的最大值。

    #include <stdio.h>
    int main()
    {
    	int a[1000];
    	int i=0;
    	while(i<1000)
    	{
    		scanf("%d",&a[i]);
    		if(a[i]==0) break;
    	}
    	 
    	 return 0;
    }
    1
    2
    3
    5
    6
    8
    9
    7
    1
    0
    
    --------------------------------
    Process exited after 7.483 seconds with return value 0
    请按任意键继续. . .

猜拳游戏

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

int main()
{
	int ai,wj;
	int game = 1;
	// 设置随机种子
	srand(time(NULL));
	// 生成随机数 0~2之间的随机数 rand() % 最大范围整数,生成的实际数的范围 0 ~ 最大范围整数 - 1
    ai = rand() % 2;
    
     // 设计头
    printf("----------------------\n");
    printf("----------------------\n");
    printf("|   猜拳小游戏v1.0   |\n");
    printf("----------------------\n");
    printf("----------------------\n");
    printf("选择难度(1)【简单/困难】\n"); 
  	printf("简单说明(2)           \n");
	printf("退出游戏(3)           \n");  	
    while(game)
	{	
    	int a;    // 菜单序号

		while(1)
		{
			//处理非法输入 
	    	if (scanf("%d", &a) != 1)
			{
				// 清空输入缓冲区非法字符
				while (getchar() != '\n');
				printf("请输入数字1~3!\n");
				continue;
			}
			
			if(a>=1 &&a<=3) break;
			printf("请在上述范围内输入!\n"); 
		}

		if(a == 1)
		{ 
			printf("简单1/困难2\n"); 
			int b;
			while(1)
			{
				// 清空输入缓冲区中的所有字符,直到遇到换行符
				while (getchar() != '\n');
				//处理非法输入 
	    		if (scanf("%d", &b) != 1)
				{
				// 清空输入缓冲区非法字符
				while (getchar() != '\n');
				printf("请输入数字1~2!\n");
				continue;
				}
				if(b>=1 &&b<=2) break;
				printf("请在上述范围内输入!\n"); 
			}
			
			// 创建一个变量,用来存储玩家自己出拳的序号
			int player_gesture;
			
			if(b == 1)
			{
				
				printf("简单模式!");
				while(1)
				{
					printf("请出拳:【1】石头 【2】剪刀 【3】布:\n");
					//处理非法输入 
	    			if (scanf("%d", &player_gesture) != 1)
					{
					// 清空输入缓冲区非法字符
					while (getchar() != '\n');
					printf("请输入数字1~2!\n");
					continue;
					}
			
					if(player_gesture>=1 &&player_gesture<=3) break;
					printf("请在上述范围内输入!\n"); 
				}
				// 显示玩家出拳信息
				const char* player_gesture_name = player_gesture == 1 ?"石头" : player_gesture == 2 ? "剪刀" : "布";
				printf("您出:%s\n", player_gesture_name);
				// 3. 对手出拳
				printf("\n--- 对手出拳 ---\n");
				int computer_gesture = 1;
				const char* computer_gesture_name = computer_gesture == 1? "石头" : computer_gesture == 2 ? "剪刀" : "布";
				// 显示对手出拳信息
				printf("出:%s\n", computer_gesture_name);
				// 4. 判断胜负
				printf("\n--- 判断胜负 ---\n");
				// 创建一个变量,用来存储比较的结果
				int result = (player_gesture - computer_gesture + 3) % 3;
				printf("战况:");
				// 比较
				if (result == 0) printf("平局!\n");
				else if (result == 2) printf("您赢了!\n");
				else printf("您输了!\n");
				break; 
			}
			
				if(b == 2)
			{
				printf("困难模式!");
				while(1)
				{
					printf("请出拳:【1】石头 【2】剪刀 【3】布:\n");
					//处理非法输入 
	    			if (scanf("%d", &player_gesture) != 1)
					{
					// 清空输入缓冲区非法字符
					while (getchar() != '\n');
					printf("请输入数字1~2!\n");
					continue;
					}
			
					if(player_gesture>=1 &&player_gesture<=3) break;
					printf("请在上述范围内输入!\n"); 
				}
				
				// 显示玩家出拳信息
				const char* player_gesture_name = player_gesture == 1 ?"石头" : player_gesture == 2 ? "剪刀" : "布";
				printf("您出:%s\n", player_gesture_name);
				// 3. 对手出拳
				printf("\n--- 对手出拳 ---\n");
				// 创建一个变量,作为对手的出拳序号,这个序号需要随机生成1~3
				int computer_gesture = rand() % 3 + 1;
				const char* computer_gesture_name = computer_gesture == 1? "石头" : computer_gesture == 2 ? "剪刀" : "布";
				// 显示对手出拳信息
				printf("出:%s\n", computer_gesture_name);
				// 4. 判断胜负
				printf("\n--- 判断胜负 ---\n");
				// 创建一个变量,用来存储比较的结果
				int result = (player_gesture - computer_gesture + 3) % 3;
				printf("战况:");
				// 比较
				if (result == 0) printf("平局!\n");
				else if (result == 2) printf("您赢了!\n");
				else printf("您输了!\n");
				break; 
			}	
		} 
	 
		if(a == 2)
		{
			printf("规则说明:剪刀>布>石头>剪刀\n"); 
		}
			
		if(a == 3)
		{
			game = 0 ;
		} 
	}
	
	printf("\n----- 游戏退出 -----\n");
	
	return 0;
	}
     
  // while(getchar() !='\n');	


网站公告

今日签到

点亮在社区的每一天
去签到