C语言——循环结构训练题

编程题

  1. 求N分之一序列前N项和
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	double sum=0;
    	int n, i;
    	scanf("%d",&n);                                                                                    
    	
    	for(i=1; i<=n; i++)
    	{
    		sum = sum + 1.0/i;
    	}
    	printf("sum = %.6lf",sum);
    	
    	
    	return 0;
    }
    
  2. 求阶乘序列前N项和
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int n, i=1, sum=0, jc, t;
    	scanf("%d",&n);
    	
    	for(; i<=n; i++)
    	{
    		t = i;
    		for(jc=1; i>0; i--)
    		{
    			jc *= i;
    		}
    		sum += jc;
    		i=t;
    	}
    	printf("%d",sum);
    	
    	return 0;
    }
    
  3. 求简单交错序列前N项和
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int n, i;
    	double numerator, denominator, t, sum=0.0;
    	scanf("%d",&n);
    	
    	for(i=0; i<n; i++)
    	{
    			numerator = 1;
    			denominator = 1+3*i;
    			if(i%2 == 0)
    			{
    				t = numerator/denominator;
    			}
    			else
    			{
    				t = -(numerator/denominator);
    			}
    			sum += t; 
    	}
    	printf("sum = %.3lf",sum);
    	
    	return 0;
    }
    
  4. 特殊a串数列求和
    在这里插入图片描述
    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    	int i, n, a, t=0, sum=0;
    	scanf("%d %d",&a, &n);
    	
    	for(i=1; i<=n; i++)
    	{
    		t = t*10 + a;
    		sum += t;
    	}
    	printf("s = %d",sum);
    	
    	return 0;
    }
    
  5. 生成3的乘方表
    在这里插入图片描述
    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    	int i, n, y;
    	scanf("%d",&n);
    	
    	for(i=0;i<=n;i++)
    	{
    		y = pow(3,i);
    		printf("pow(3,%d) = %d\n",i, y);		//函数里不能嵌套 
    	}
    	
    	return 0;
    }
    
  6. 找出最小值
    在这里插入图片描述
    #include <stdio.h>
     
    int main(void)
    {
    	int n, i, k, min;
    	
    	scanf("%d", &n);
    	for(i = 0; i < n; i++)
    	{
    		scanf("%d", &k);
    		if( k < min )
    		{    
    			min = k;
    		}
    	}
    	printf("min = %d", min);
    	
    	return 0;
    }
    
  7. 找出三位水仙花数
    在这里插入图片描述
    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    	int m, n, i, sum;
    	scanf("%d %d",&m, &n);
    	
    	if(m>n || n<100 || n>999 || m<100 || m>999)
    	{
    		printf("Invalid Value.");
    	}
    	else
    	{
    		for(;m<=n;m++)
    		{
    			i = m;
    			sum=0;
    			for(;i>0;i/=10)
    			{
    				sum += pow(i%10,3);
    			}
    			if(sum==m)
    			{
    				printf("%d\n",m);
    			}
    		}
    	}
    	return 0;
     } 
    
  8. 猴子吃桃问题
    在这里插入图片描述
    #include <stdio.h>
    int main()
    {
    	int n, num=1, i;
    	scanf(" %d",&n);
    	
    	for(i=2; i<=n; i++)
    	{
    		num = (num+1)*2;
    	}
    	printf("%d",num);
    	
    	return 0;
    }
    
  9. 求整数段和
    在这里插入图片描述
    #include<stdio.h>
    int main()
    {
    	int a,b,sum=0,count=0;
    	scanf("%d %d",&a,&b);
    	for(int i=a; i<=b; i++)
    	{
    		printf("%5d",i);
    		sum += i;
    		count++;
    		if(count%5==0 && count!=0) printf("\n");
    	}
    	if(count%5!=0) printf("\n"); 
    	printf("Sum = %d",sum); 
     } 
    
  10. 求整数的位数及各位数字之和
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	long long int n;
    	int i=0, num=0;
    	scanf("%lld",&n);
    	
    	for(;n>0;)
    	{
    		i += n%10;
    		num++;
    		n /= 10;
    	}
    	printf("%d %d",num, i);
    	return 0;
    }
    
  11. 统计数字字符和空格
    在这里插入图片描述
    #include<stdio.h>
    int main()
    {
    	int blank,digit,other;
    	blank = other = digit = 0;
    	char n;
        while(n!='\n')
        {
    	    n=getchar();
    	    switch(n)
            {
    	        case ' ': case '\n':
    	        	blank++;
    	        	break;
    	        case '0': case '1': case '2': case '3': case'4': case'5':
    	        case '6': case '7': case '8': case '9':
        	    	digit++;
        	    	break;
        	    default:
    	        	other++;
        	    	break;
    	    }
        }
        blank-=1;
    	printf("blank = %d, digit = %d, other = %d",blank, digit, other);
    	return 0;
    }
    
  12. 韩信点兵
    在这里插入图片描述
    #include<stdio.h>
    
    int main()
    {
     	int i=1,j;
    	while(1)
    	{
    	   if((i%5==1) && (i%6)==5 && (i%7)==4 && (i%11)==10)
    	   {
    	      printf("%d",i);
    	      break;
    	   }
    	   else
    	   	  i++;
    	}
    	return 0;
    }
    
  13. 爬动的蠕虫
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int n, d, u;
    	int time, i=0, s=0;
    	scanf("%d %d %d",&n, &u, &d);
    
    	while(s+u < n)
    	{
    		s = s+u-d;
    		i = i+2;
    	}
    	i = i+1;
    	printf("%d",i);
    	
    	return 0;
    }
    
  14. 近似求PI
    在这里插入图片描述
    #include <stdio.h>
    int main()
    {
        double eps;
        scanf("%le", &eps);
        double sum = 1;
        double temp = 1;
        for(int i=1; temp>eps; i++)
    	{
            temp = temp*i/(2*i+1);
            sum += temp;
        }
        printf("PI = %.5f\n", 2*sum);
        return 0;
    }
    
  15. 输出华氏-摄氏温度转换表
    在这里插入图片描述
    #include <stdio.h>
    #include <math.h>
    int main ()
    {
    	int lower, upper;
    	int F;
    	double C;
    	scanf("%d %d",&lower, &upper);
    	if(lower > upper)
    	{
    		printf("Invalid."); 
    	}
    	else
    	{
    		printf("fahr celsius\n");
    		for(lower;lower<=upper;lower=lower+2)	//没有lower+2这种操作? 还有lower<=upper而不是<
    		{
    			F = lower;
    			C = 5*(F*1.0-32)/9;
    			printf("%d%6.1f\n",F,C);
    		}
    	}
    		
    	return 0;
    }
    
  16. 统计学生成绩
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int student[1000];
    	int n, i, j;
    	int a=0, b=0, c=0, d=0, e=0;
    	scanf("%d",&n);
    	
    	for(i=0; i<n; i++)
    	scanf("%d", &student[i]);
    	
    	for(j=0; j<n; j++)
    	{
    		switch(student[j] / 10)
    		{
    			case 10:
    			case 9:	a++; break;
    			case 8: b++; break;
    			case 7: c++; break;
    			case 6: d++; break;
    			default: e++; break;	
    		}
    	}
    	printf("%d %d %d %d %d",a,b,c,d,e);
    	return 0;
    }
    
  17. 最佳情侣身高差
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int i,j,n;
    	char c[10];
    	double a[10];
    	scanf("%d",&n);
    	
    	for(i=0;i<n;i++)
    	{
    		getchar(); 
    		scanf("%c %lf",&c[i], &a[i]);
    	}
    	
    	for(j=0; j<n; j++)
    	{
    		if(c[j] == 'M')
    		{
    			printf("%.2lf\n",a[j]/1.09);	
    		}
    		else if(c[j] == 'F')
    		{
    			printf("%.2lf\n",a[j]*1.09);	
    		}
    	}	
    	
    	return 0;
    }
    
  18. 小于m的最大的10个素数
    在这里插入图片描述
    #include <stdio.h>
    
    int main()
    {
    	int i, m, j, isprime=1;
    	scanf("%d", &m);
    	m--;
    	for(i=0; i<10; m--)
    	{
    		isprime = 1;
     		for(j=2; j<m; j++)
    		{
    			if(m%j == 0)
    			isprime = 0;
    		}
    		if(isprime == 1)
    		{
    			printf("%6d",m);
    			i++;
    		}
    	}
    	
    	return 0;
    }
    
  19. 统计素数并求和
    在这里插入图片描述
    #include <stdio.h> 
    int main()
    {
    	int count = 0, sum = 0;
    	int m, n;
    	int i, j;
    	scanf("%d %d", &m, &n);
    	for (i = m; i <= n; i++)	//开始在俩个数之间循环
    	{
    		for (j = 2; j <= i; j++)	//找出能整除的数
    		{
    			if (i % j == 0) break;	//找到了就打破循环
    		}
    		if (j == i)		//如果找出的数与本身相等,说明这个数是质数
    		{
    			sum += i;
    			count += 1;
    		}
    	}
    	printf("%d %d", count, sum);
    	return 0;
    }
    
  20. 人民币兑换
    在这里插入图片描述
    #include<stdio.h>
    int main ()
    {
    	int n, a, m=0, b, c;
    	scanf ("%d", &n);
    	for (a=1; a<=30; a++)
    	{
    		for (b=1; b<=75; b++)
    		{
    	 		c=100-a-b;
    	 		if (a*5+b*2+c==150)	
    			{
    	 			printf ("%d %d %d\n", a, b, c);
    	 			m++;
    			}
    	 		if (m==n)
    				break;
    		}			
    	}
    	return 0;	
    }
    

函数题

  1. 求m到n之和
    在这里插入图片描述
    int sum( int m, int n )
    {
        int sum=0;
        for(;m<=n;m++)
        sum += m;
        
        return sum;
    }
    
  2. 递归实现指数函数
    在这里插入图片描述
    double calc_pow( double x, int n )
    {
        
        if(n==0)		//放前面 
    	return 1;
    	
        return x*calc_pow( x, n-1 );		//注意n-1	 
        
    }
    
  3. 使用函数输出一个整数的逆序数
    在这里插入图片描述
    int reverse( int number )
    {
    	int x=0;
    	for(;number!=0;)
    	{
    		x = x*10+number%10;
    		number/=10;
    	}
    	return x;
    }
    
  4. 统计个位数字
    在这里插入图片描述
    int Count_Digit ( const int N, const int D )
    {
    	int i=0, j, k;
    	k = N;
    	if(N<0)
    	{
    		k = -N;
    	}else if(k==0 && D==0)
    	{
    		i = 1;
    	}
    	
    	for(;k!=0;)
    	{
    		j = k%10;
    		if(D==j)
    		{
    			i++; 
    		}
    		k/=10;
    	}
    	return i;
    }
    
  5. 统计各位数字之和是5的数
    在这里插入图片描述
    int is( int number )
    {
    	int j = number;
    	int n=0;
    	for(;number!=0;)
    	{
    		n += number%10;
    		number /= 10;
    	}
    	
    	if(n==5)
    		return 1;
    	else
    		return 0;
    	
    }
    
    
    
    void count_sum( int a, int b )
    {
    	int i=0, k, sum=0;
    	for(;a<=b;)
    	{
    		int f=a;
    		for(k=0;f!=0;)
    		{
    			k += f%10;
    			f /= 10;
    		}
    		if(k==5)
    		{
    			sum += a;
    			i++;
    		}
    		a++;
    	}
    	printf("count = %d, sum = %d",i, sum);
    }
    
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值