C语言程序设计(边学边练)

3-1学习-用while循环求s=1+2+3+…+n的值

任务描述
本关任务:输入 n,使用 while 循环语句求1+2+3+…+n之和。

#include <stdio.h>
int main()
{
    int i=1,sum=0,n;
    scanf("%d",&n);
    /********** Begin **********/
    while(i<=n){
        sum+=i;
        i++;
    }
    /********** End **********/
    printf("sum=%dn",sum);              
    return 0;
}

3-2练习-用while循环求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n) 的值

任务描述
本关任务:用while循环求编写求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)值的小程序。

#include <stdio.h>
int main()
{
	int i,n,sum=0,result=0;
	scanf("%d",&n);
	/********** Begin *********/
    // i = 0<4
    // 这里不好理解,i会循环4次,为什么会是1+(1+2)+(1+2+3),
    // 这样看 (0+1)+(1+2)+(1+2+3)
    // 所以这里i选择为0
    while(i<=n){
    	// result就是1,现在result是2,
        result+=i;
        // sum现在也是1了,sum = 1 + 2 ,sum此时是1,result是2,这样正好应和公式 
        sum+=result;
        i++;
    }
    printf("sum=%d",sum);
    /********** End **********/
	return 0;
}

3-3学习-用for循环求 s=1!+ 2!+ 3!+ …+n!的值

任务描述
本关任务:编写程序输入n,用for循环求 s=1!+ 2!+ 3!+ …+n!的值并输出。

#include <stdio.h>
int main()
{
	int i=1,n;
	long s=1,sum=0;
	scanf("%d",&n);
    /********** Begin **********/
    for(i;i<=n;i++){
        s*=i;
        sum+=s;
        printf("%d!=%dn",i,s);
    }
    printf("1!+2!+ …+%d!=%d",n,sum);
    /********** End **********/ 
    return 0;
}

3-4练习-用for循环求s=a+aa+aaa+aaaa+…的值

任务描述
本关任务:输入正整数a和n,计算s=a+aa+aaa+aaaa+aa…a(n个a)的值。

这里的sum += a * pow(10,i); pow里面的内容为,10的i次方
sum = 5
sum = 55
sum = 555

#include <stdio.h>
int main(void)
{
    // 请在此添加代码
    /********** Begin *********/
    int a,b,i,sum=0,num=0;
    scanf("%d %d",&a,&b);
    for(i=0;i<b;i++){
        sum +=  a * pow(10,i);
        num += sum;
    }
    printf("%d",num);
    /********** End **********/
    return 0;
}

3-5练习-用for循环求分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…,前n项之和

任务描述
本关任务:用for循环求分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…,前n项之和。

#include <stdio.h>
int main()
{
	/********** Begin **********/
	int n,i;
    double sum=0,a=2,b=1,t;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        sum += a/b;
        t = a;
        a = a+b;
        b = t;
    }
    printf("sum=%.2f",sum);
    /********** End **********/
	return 0;
}

3-6学习-用do…while循环按公式e=1+1/1!+1/2!+1/3!+…+1/n!计算 e 的值(精度为 1e-6)

任务描述
本关任务:编写程序用do-while循环按公式e=1+1/1!+1/2!+1/3!+…+1/n!计算 e 的值,直到最后一项的绝对值小于精度值eps时为止,输出e的值并统计累加的项数。

#include <stdio.h>
int main()
{
    /********** Begin **********/
    int i;
    double p=1,sum=1.0;
    double eps;//数列法,掌握精度作为循环条件
   scanf("%lf", &eps);
  i=1;
  do
  {
    p *= i;
    sum += 1.0/p; 
    i++;
  }while( 1.0/p>=eps);  // 检查当前项1/n!是否大于或等于10的(-6)次方
  printf("i=%dn",i);       // 输出循环的次数
  printf("e=%lfn",sum);    // 输出e的近似值
   /********** End **********/
  return 0;
}

3-7练习-用do…while循环实现输入一批整数统计正负数个数

任务描述
本关任务:用do…while循环实现输入一批整数,以零为结束标志,统计正负数个数。

#include <stdio.h>
int main()
{
	int num,zsum=0,fsum=0;
	//循环输入与求和
	/********** Begin **********/
    do{
        scanf("%d",&num);
        if(num>0){
            zsum+=1;
        }else if(num<0){
            fsum+=1;
        }
    }while(num);
    printf("正数个数为%dn",zsum);
    printf("负数个数为%d",fsum);
    /********** End **********/
	return 0;
}

3-8练习-输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数

任务描述
本关任务:输入一行字符,以’#'作为结束标志,分别统计出其中的英文字母、空格、数字和其他字符的个数。

#include <stdio.h>
int main()
{
	int letter=0,space=0,digit=0,other=0;
	char ch;
	//字母、数字、空格、其它字符的判定方法
	/********** Begin **********/
    do{
        if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')){
            letter+=1;
        }else if(ch == ' '){
            space+=1;
        }else if(ch>='0' && ch<='9'){
            digit+=1;
        }else{
            other+=1;
        }
    }while((ch=getchar())!='#');
    other-=1;
	/********** End **********/
	printf("字母有%d个,空格有%d个,数字有%d个,其他字符有%d个n",letter,space,digit,other);  
	return 0;
}

3-9学习-输入正整数m,判断m是否是素数

任务描述
本关任务:输入正整数 m ,判断 m 是否是素数。

#include<stdio.h>
int main()
{
    int m,i;
    scanf("%d",&m);
    /*判断m是否能被2~ m-1之中任何一个整数整除*/
    /*********Begin*********/
    for(i=2;i<=m-1;i++){
        if(m%i==0){
            break;
        }
    }
    /*********End**********/ 
    /*判断上述循环语句是否是提前结束循环*/
    /*********Begin*********/
    if(i==m){
        printf("%d is a prime number",m);
    }else{
        printf("%d is not a prime number",m);
    }
    /*********End**********/ 
    return 0;
}

3-10练习-输入正整数n,输出n以内的全部素数,并输出n以内所有素数个数

任务描述
本关任务:输入正整数 n,输出 n 以内的全部素数,并输出 n 以内所有素数个数。

#include<stdio.h>
int main()
{
    int m,i,n=0,num=0;
    scanf("%d",&n);
    /*********Begin*********/
    // 测试2~n之间的素数,外层控制循环
    for(i=2;i<=n;i++){
        // 内层控制判断
        for(m=2;m<i;m++){
            // 3 % 2
            // 4 % 2
            if(i%m==0){
                break;
            }
        //  如果m到了i,那么就是素数,没有被i整除,i会从2到100
        }
        if(m==i){
            printf("%d,",m);
            num+=1;
        }
    }
    /*********End**********/ 
    printf("n%d以内共有%d个素数n",n,num);
    return 0;
}

3-11学习-随机输入一批整数,编程计算并且输出这批整数中5个正整数的和

任务描述
本关任务:随机输入一批整数,有正整数,负整数和零,计算并且输出这批整数中 5 个正整数的和,当读入的数据为负数或 0 时,程序忽略此次输入,直到读入 5 个正整数时程序才停止。

#include <stdio.h>
int main()
{
	int i, n, sum=0;
   /*********Begin*********/
   while(n!=5){
      scanf("%d",&i);
      if(i>0){
         sum+=i;
         n+=1;
      }else{
         continue;
      }
   }
   /*********End**********/ 
   printf("sum=%dn",sum);
   return 0;	
}

3-12练习-输入某班C语言考试成绩,人数未知,用-1作为结束标志,若大于100分,则重新输入,计算全班的最高分、最低分与平均分

任务描述
本关任务:输入某班C语言考试成绩,该班人数未知,用 -1 作为结束标志,若输入大于 100 分或小于 0 分,则重新输入,然后计算全班的最高分、最低分与平均分。

#include <stdio.h>
int main()
{	
	double temp,sum,avg,max=0,min=100;
	int i=0,num;
	/*********Begin*********/
	while(num!=-1){
        scanf("%d",&num);
        if(num>100 || num<0){continue;}else{i+=1;sum+=num;}
        if(num>=max){max = num;}
        if(num<=min){min = num;}
    }
	/*********End**********/ 
	if(i!=0)
	{
		avg=sum/i;	
		printf("全班一共有学生:%dn",i);
		printf("全班平均分:%.1lfn",avg);
		printf("全班最高分:%.1lfn",max);
		printf("全班最低分:%.1lfn",min);
	}
	else
		printf("输入了0个合法的分数n");
	return 0;
}

3-13练习-输入两个正整数m和n,求其最大公约数和最小公倍数

任务描述
本关任务:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/
    int m,n,t,num;
    scanf("%d %d",&m,&n);
    num = m*n;
    t = m % n;
    while(t){
        m = n;
        n = t;
        t = m % n;
    }
    m=num/n;
    printf("最大公约数是:%dn",n);
    printf("最小公倍数是:%d",m);
    /*********End**********/ 
    return 0;
}

3-14练习-求Fibonacci数列的前12个数

任务描述
本关任务:求Fibonacci数列的前12个数。Fibonacci数列有如下特点:第1、2 两个数为1、1,从第 3 个数开始,该数是其前面两个数之和,即为: 1,1,2,3,5,8,13,21,……。

#include <stdio.h>
int main()
{
    /********** Begin **********/
    int i,a=0,b=1,t;
    for(i=1;i<=12;i++){
        t = a;
        a = a+b;
        b = t;
        printf("第%d月:%dn",i,a);
    }
    /********** End **********/
    return 0;
}

3-15练习-打印九九乘法口诀表

任务描述
本关任务:编写程序,打印九九乘法口诀表。

#include <stdio.h>
int  main()
{
    /********** Begin **********/
    int i=1,j=1;
    for(i=1;i<=9;i++){
        for(j=1;j<i;j++)printf("t");
        for(j=i;j<=9;j++)
            printf("%d*%d=%dt",i,j,j*i);
        printf("n");
    }
    /********** End **********/
    return 0;
}

3-16练习-求1000以内所有的水仙花数

任务描述
本关任务:求1000以内所有的水仙花数.

#include <stdio.h>
int main()
{
	//掌握水仙花数算法,关键在于提取百位、十位、个位的方法
	/********** Begin **********/
    int i,gw,sw,bw;
    for(i=100;i<1000;i++){
        gw = i % 10;
        sw = i / 10 % 10;
        bw = i / 100;
        if((gw*gw*gw)+(sw*sw*sw)+(bw*bw*bw) == i){
            printf("%d ",i);
        } 
    }
   /********** End **********/
	return 0;
}

3-17练习-输入正整数n,判断n是否是完数

任务描述
本关任务:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3,编程判断n是否是完数,n从键盘输入。


#include <stdio.h>
int main()
{	//完数等于因子之和,因子包括质数和1
	/********** Begin **********/
    int num,count;
    scanf("%d",&num);
    // 循环1到输入的数
    for(int i = 1;i<num;i++){
        // 途中对所有i取余,假设num是6,那么只有1,2,3可以被6取余为0;所以6是完数
        if(num % i == 0){
            count+=i;
        }
    }
    if(count == num){
        printf("Yes");
    }else{
        printf("No");
    }
   /********** End **********/
	return 0;
}

3-18练习-求正整数n之内的所有完数

任务描述
本关任务:练习-输入正整数n,求n之内的所有完数。

#include <stdio.h>
int main()
{	//完数等于因子之和,因子包括质数和1
	/********** Begin **********/
    int num,count;
    scanf("%d",&num);
    for(int i=1;i<num;i++){
        // 每一次都归0
        count = 0;
        for(int j=1;j<i;j++){
            if(i % j == 0){
                // 等i到6,6 % 1~5 
                // count += 1+2+3
                count+=j;
            }
        }
        // i = 6 count = 6
        if(count == i){
            printf("%d ",i);
        }
    }

   /********** End **********/
	return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>