C语言例题讲解

 1.求圆的面积 

        pi*r方 = pi * r * r

    #include <stdio.h>
    #define PI 3.14

    int main(){
        float y;
        float r;
        r = 2;
        y = PI * r * r;
        printf("%10.4f",y); //
        return 0;

    }

 2.输入三条边,求三角形面积

#include <stdio.h>
#include <math.h>
//输入三条边,求三角形面积
//tips1   首先任意两边之和,大于第三边  
//tips2   需要用到数学函数库math.h
//tips3 要知道怎么求三角形面积 海伦公式
// area = sqrt(s * (s - a) * (s - b) * (s - c)) 其中,a、b和c是三角形的三条边的长度,s是半周长(即三边长度之和的一半),sqrt表示平方根运算。

int main(){
    float a,b,c,s,area;
    printf("请输入三角形的三边长");
    scanf("%f%f%f",&a,&b,&c);
    if(a+c>c && a+c > b && c+b >a){
        s=(a+b+c)/2.0;
        area = sqrt(s * (s-a)*(s-b)*(s-c));
    }else{
        printf("不能构成三角形");
    }
    return 0;
}

3.求一元二次方程的解

        求一元二次方程:ax2+bx+c=0 的根。

        输入三个实数a,b,c的值,且a不等于0。

简单版

#include <stdio.h>
#include <math.h>
 
int main()
{
        float a,b,c,x1,x2,d;
        printf("输入方程的三个系数:");
        scanf("%f %f %f",&a,&b,&c);
        if(a!=0)
        {
                d=sqrt(b*b-4*a*c);
                x1=(-b+d)/(2*a);
                x2=(-b-d)/(2*a);
                if(x1<x2) 
                    printf("%0.2f %0.2f\n",x2,x1); 
                else
                    printf("%0.2f %0.2f\n",x1,x2);
        }
        return 0;
}

进阶

#include <stdio.h>
#include <math.h>
int main(){
	float a,b,c,x1,x2,derta,xu,xu1;

        printf("输入方程的三个系数:"); 
        scanf("%f %f %f",&a,&b,&c);
	if(fabs(a) > 1e-6 ){
		derta = b*b - 4*a*c;

		if(fabs(derta) < 1e-6 ){	//说明是0   相等 
			printf("有两个相等的实根%8.4f\n",-b/(2*a)); 
		}else if(derta > 1e-6){	//两个不相等的
			x1 = (-b-sqrt(derta))/(2*a);
			x2 = (-b+sqrt(derta)/(2*a));
			printf("有两个不相等的实根%8.4f %8.4f\n",x1,x2);
		}else{		无实根,虚根 
			printf("无实根,有虚根");
			xu = -b/(2*a);
			xu1 = sqrt(-derta)/(2*a)
			printf("%8.4f-%8.4f *i\n",xu,xu1);
			printf("%8.4f+%8.4f *i\n",xu,xu1);
		}
	}else{
		printf("不是一元二次方程");
	}
return 0;
}

       while累加和

sum = 1+2+3+。。。+100

#include <stdio.h>
void main(){
    int i=1,sum=0;
    while(i<100){
        sum = sum + i;
        i++;
    }
   printf("sum = %d",sum);

}

sum = 1+3+5。。。+99

#include <stdio.h>
void main(){
    int i=1,sum=0;
    while(i<100){
        sum = sum + i;
        i=i+2;
    }
   printf("sum = %d",sum);

}

猴子吃桃-C语言

题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第n天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?(用户自己输入不同的天数,看第一天有多少个桃)。
分析 :

   x是桃子

两天  ->  第二天x = 1,因为4/2-1 = 1,所以第一天x = 4;(4 = (1+1)*2)

三天  ->  第三天 x = 1, 第二天x = 4,因为10/2-1 = 4,所以第一天x = 10;(10 = (4+1)*2)

如果是第四天->第四天 x = 1,第三天x = 4,第二天 x = 10,第一天就为22; (22 = (10+1)*2)

 for循环

#include <stdio.h>
int main(){
	int i,j,sum=1;
	int day;
	printf("INPUT DAYS:\n");
	scanf("%d",day);
	if(day>0){
		for(i = 1;i<=day;i++){
			sum = (sum+1) * 2;
		}
	}else{
		printf("不对");
		return 0;
	}
    printf("sum = %d\n",sum);
}

  while

#include <stdio.h>
int main(){
	int day,x1,x2;
	x2= 1;
	printf("INPUT DAYS:\n");
	scanf("%d",day);
	while(day>0){
		x1 = (x2+1)*2;
		x2 = x1;
		day--;
	};
	printf("一共%d",x1);
}

输入成绩,输出对应的得分

输出90分以上的 A 80分B 70分 C   。。。。

使用switch选择语句,    

#include <stdio.h>

int main(){
int cj;
scanf("%d",&cj);

switch (cj/10){
case 10 :
case 9:
    printf("A");
    break;
case 8 :
    printf("B");
    break;
case 7 :
    printf("C");
    break;
case 6 :
    printf("D");
    break;

default:
    printf("E");
    break;
}
return 0;
}

这里我们注意 switch()中  要是表达式。注意break的结束语句

交换两个数的值

使用临时变量

        

#include <stdio.h>
int main(){
    int a,b,Temp;
    scanf("%d %d",&a,&b);
    Temp = a;
    a = b;
    b = Temp;
    printf("交换后a=%d,b=%d",a,b);
    return 0;
}

不使用临时变量

#include <stdio.h>
int main(){
    int a,b,Temp;
    scanf("%d %d",&a,&b);
    a = a + b;
    b= a-b;
    a = a-b;
    printf("交换后a=%d,b=%d",a,b);
    return 0;
}

指针方法

通过指针,传递的地址, 来交换地址里的内容

#include<stdio.h>
 
void swap(int *a,int*b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}
int main()
{
    int a=1,b=2;
    swap(&a,&b);
    printf("a=%d\nb=%d\n",a,b);
    return 0;
}


判断奇数/偶数

        方法用 取余2 == 0?   =0是 正数    =1是奇数

#include <stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    if(a % 2 == 0 ){
        printf("偶数a=%d",a);
    }else{
        printf("奇数a=%d",a);
    }
    return 0;
}

三目方法

#include <stdio.h>
int main(){
    int a,b;
    scanf("%d",&a);
    b = (a % 2 == 0 )?printf("偶数%d",a):printf("奇数%d",a);

    //printf("%d",b);
    return 0;
}

循环区间范围内的奇数/偶数

循环输出区间范围内的奇数/偶数可以通过除于 2 的余数来判断

100 - 500

#include <stdio.h>
int main(){
    int a,b;
    scanf("%d",&a);
    b = (a % 2 == 0 )?printf("偶数%d",a):printf("奇数%d",a);
    // (a % 2 != 0 )奇数
    printf("\n %d",b);
    return 0;
}

判断三个数中的最大数

#include <stdio.h>
 
int main()
{
    double n1, n2, n3;
 
    printf("请输入三个数,以空格分隔: ");
    scanf("%lf %lf %lf", &n1, &n2, &n3);
    if(n1>n2 && n1 > n3){
        printf("%.2f 是 最大数",n1);
    }
    if(n2>n1 && n2 > n3){
        printf("%.2f 是 最大数",n2);
    }
    if(n3>n1 && n3 > n2){
        printf("%.2f 是 最大数",n3);
    }
    return 0;
}

直接条件判断闰年

#include <stdio.h>
int main(){
	int year;
	printf("输入年份");
	scanf("%d",year);
	if((year%4 == 0 && year % 100 != 0 ) || year %400 == 0){
		printf("是闰年");
	}else{
		printf("no 不是")	
	}
return 0;
}

+分子-分子+分子

#include <stdio.h>
#include <math.h>
void main(){
	double fm=1,fz=1,f=1,sum=0,itm=fz/fm;
	while(fabs(item) >= 1e-8){
	sum +=item;
	fm+=2
	f = -f
	item = (fz/fm)*f;
}
	printf("%f",sum*4);

}

用户输入一个数字,判断该数字是正数还是负数或是零

#include <stdio.h>
int main()
{
    double number;
 
    printf("输入一个数字: ");
    scanf("%lf", &number);
 
    if (number <= 0.0)
    {
        if (number == 0.0)
            printf("你输入的是 0。");
        else
            printf("你输入的是负数。");
    }
    else
        printf("你输入的是正数。");
    return 0;

将一个正整数逆序输出。例如-12345,则输出5 4 3 2 1

#include <stdio.h>
#include <math.h>
 
int main(){
    int x,tage;
    scanf("%d",&x);
    while (x!=0){
        tage = x%10;
        printf("逆序是 %d ",tage);
        x = x / 10;
    }
    

}

将一个正整数逆序输出。例如-12345,则输出54321

乘10就好了

#include <stdio.h>
#include <math.h>
 
int main(){
    int x,tage;
    scanf("%d",&x);
    while (x!=0){
        tage = x%10 + tage*10;

        printf("逆序是 %d ",tage);
        x = x / 10;
    }
    printf("逆序是 %d ",tage);

}

编程打印99乘法表

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

    return 0;
}

直角三角形

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=i;j++){
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

输出 倒直角三角形

  使用5-i  就可以

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=5-i;j++){
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=5-i;j++){
            printf(" ");
        }
        for(int k=1;k<=i;k++){
                printf("*");
        
        }
        printf("\n");
    }

    return 0;
}

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=i;j++){
            printf(" ");
        }
        for(int k=1;k<=5-i;k++){
                printf("*");
        
        }
        printf("\n");
    }

    return 0;
}

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(j=1;j<=2*i-1;j++){  //找关系 2i-1 
                printf("*");   
        }
        printf("\n");
    }

    return 0;
}

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(int k = 0;k<=5-i;k++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){  //找关系 2i-1 
                printf("*");   
        }
        printf("\n");
    }

    return 0;
}

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=4;i++){
        for(int k = 0;k<=5-i;k++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){  //找关系 2i-1 
                printf("*");   
        }
        printf("\n");
    }
    for(i=3;i>=1;i--){
        for(int k = 0;k<=5-i;k++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){  //找关系 2i-1 
                printf("*");   
        }
        printf("\n");
    }
    return 0;
}

输入的小写字母转大写字母,直到输入非小写字符为止

#include <stdio.h>
int main(){
    //输入的小写字母转大写字母,直到输入非小写字符为止
    char c;
    while(1){
        c = getchar();
        if(c>='a' && c <='z'){
            putchar(c-32);
        }else{
            break;
        }

    }
    return 0;
}

 //求1+2+3+……….直到和值首次大于10000为止;

#include <stdio.h>
int main(){
    //求1+2+3+……….直到和值首次大于10000为止;
    int a=0,i=0;
    while(1){
        a = a+i;
        if(a>10000){
            break;
        }
        i++;
    }
    printf("%d",a);
    return 0;
}

反while条件

#include <stdio.h>
int main(){
    //求1+2+3+……….直到和值首次大于10000为止;
    int a=0,i=0;
    while(a<=10000){
        a = a+i;
        i++;
    }
    printf("%d",a);
    return 0;
}

for方法

#include <stdio.h>
int main(){
    //求1+2+3+……….直到和值首次大于10000为止;
    int a=0,i=0;
    for(i=0;a<=10000;i++){
        a = a+i;
    }
    printf("%d",a);
    return 0;
}

 勒泰公式的   求派的 近似值

#include <stdio.h>
#include <math.h>

int main(){
    int sign=0;
    double pi = 0,n=1,term=1;
    while (fabs(term)>=1e-6)
    {
        pi = pi + term;
        n += 2;
        sign = -sign;
        term = sign/n;
    }
    pi = pi * 4;
    printf("pi = %10.8f",pi);    
    return 0;
}

斐波那契数列(Fibonacci)

也要记住英文名!!! 有的时候会用英文

特点,第1,2个数,为 1,1   从第3个数开始,是前两个数之和

求前40个

   

//斐波那契数列(Fibonacci)
#include <stdio.h>
int main(){
    long int a=1,b=1,next;
    printf("%10ld %10ld",a,b);
    int n=2;
    for(int i = 3; i <=40; i++){
        next = a+b;
        printf("%10ld",next);
        n++;
        if (n%4==0){    //每行输出4个
            printf("\n");
        }
        a=b;b=next;
    }
    return 0;
}

思路就是,前两个是1      第三个是 两个的和 通过交换变量的值,累加

第二种方式

//斐波那契数列(Fibonacci)
#include <stdio.h>
int main(){
    int a=1,b=1,c,i;
    for(i=1;i<=20;i++){
        printf("%d   %d\t",a,b);
        a = a+b;
        b = b+a;
    }
    return 0;
}

判断一个数是否是素数(质数)

        定义是: 只能被1和自己整除的数,叫做素数

n /i     i的值2 - n-1;

2 3 4 5 。。。。 这些只要能被整除了    那就不是素数了,直接结束

采用for

// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
    int n,i=2;
    scanf("%d",&n);
    for (i = 2; i <= n-1; i++){
        if(n%i==0){
            break;
        }
    }
    if (i>=n){
        printf("%d是素数\n",n);
    }else{
        printf("%d不是素数",n);
    }
}

判断3-99之间的素数

// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
    int n,i=2;
    //scanf("%d",&n);
    for (n = 3; n < 99; n++){
        for (i = 2; i <= n-1; i++){
            if(n%i==0){
                break;
            }
        }

        if (i>=n){
            printf("%d是素数\n",n);
        }
    }
}

求3-99之间的素数和

// 判断一个数是否是素数(质数)
#include <stdio.h>
void main(){
    int n,i=2,sum=0;
    //scanf("%d",&n);
    for (n = 3; n < 100; n++){
        for (i = 2; i <= n-1; i++){
            if(n%i==0){
                break;
            }
        }

        if (i>=n){
            printf("%d是素数\n",n);
            sum = sum + n;
        }
    }
    printf("%d是",sum);
}

编程:学校在1000名师生中发起慈善捐款,自愿募捐、款数不限,总数超过20000(2万)元活动结束。编写程序,统计参与捐款的师生人数及捐款总数(精确到角币,即保留1位小数)。

#include <stdio.h>
#define M 20000
int main(){
    float money,sum=0;
    for (int i = 1; i <= 1000; i++){
        scanf("%f",&money);
        sum = sum + money;
        if(sum > M)break;
    }
    if(i<=1000){
        printf("捐款人数%d,捐款总数%.1f",i,sum);
    }else{
        printf("捐款人数%d,捐款总数%.1f",i-1,sum)
    }
    return 0;
}

方式二  这个好

#include <stdio.h>
#define M 20000
int main(){
    float money,sum=0;
    int i;
    for (i = 1; sum < M || i >1000;i++){
        scanf("%f",&money);
        sum = sum + money;
    }
    printf("捐款人数%d,捐款总数%.1f",i-1,sum);
    return 0;
}

输入一行字符统计出字母、数字空格及其它字符 个数

// 输入一行字符统计出字母、数字空格及其它字符 个数
#include <stdio.h>
void main(){
    char ch;
    int zm,sz,kg,qt;
    zm=sz=kg=qt=0;
    printf("输入一行字符\n");
    while( (ch=getchar())!='\n'){
        if (ch >= 'a'&& ch<= 'z' || ch >= 'A'&& ch<= 'Z'){
            zm++;
        }else if(ch >= '0' && ch<='9'){
            sz++;
        }else if(ch ==' '){
            kg++;
        }else{
            qt++;
        }
    }
    printf("字母是%d 数字%d 空格%d 其他%d",zm,sz,kg,qt);
}

求两个整数的最大公约数

// 求两个整数的最大公约数
#include <stdio.h>
void main(){
    int a,b,c;
    scanf("%d%d",&a,&b);
    if (a<b){
        c = a;a=b;b=c;
    }
    
    while (b!=0){
        c = a%b;
        a = b;  //最大公约数
        b = c;
    }
    printf("最大公约数是%d",a);   

}

   求两个整数的最小公倍数

两种方法

求1-20阶乘之和

#include <stdio.h>
void main(){
    int i,n;
    float sum=0,fac=0;
    for (i = 1; i <= 20; i++){
        n=1;fac=1;
        do{
            fac = fac *n;
            n++;
        } while (n<=i);
        sum = sum + fac;
    }
    printf("su

单层for循环

#include <stdio.h>
void main(){
    int fac=1,sum=0;
    for (int i =1; i <= 20; i++)
    {
        fac = fac * i;
        sum = sum +fac;
    }
    printf("sum=%e\n",sum);
}

#include <stdio.h>
void main(){
    int fac=1,sum=0;
    for (int i =1; i <= 20; i++)
    {
        fac = fac * 2;
        sum = sum +fac;
    }
    printf("sum=%e\n",sum);
}

公鸡5元买1只,母鸡3元1只,小鸡1元买3只。用100元钱买100只鸡,问公鸡、母鸡、小鸡各买多少只?

我们要知道数学公式

第一个100个鸡

第二个100块钱

有分式,要扩大3倍

#include <stdio.h>
void main(){
    int x,y,z;
    for (x = 0; x <= 100; x++){ //公鸡  5元一只 最多 20只, 可以改成20
        for (y = 0; y <= 100; y++)  //母鸡  3元 最多33只
        {
            z = 100 - x - y;
            if(15 * x + 9 * y + z == 300){
                printf("x=%-10d y = %-10d z=%-10d \n",x,y,z);
            }
        }
        
    }
    
}

水仙花数

        三位整数,每位数字立方和等于自己,

重点还是 拆分 百位 十位 个位

百位用 /100   得到百位

十位 用  /10 后 %10

个位用  %10

#include <stdio.h>
void main(){
    int i,a,b,c;
    for ( i = 100; i <= 999; i++){
        a = i%10;
        b = i/10%10;
        c = i/100;
        if(a*a*a + b*b*b + c*c*c == i){
            printf("水仙花数是%d",i);
        }
    }
    
}

凯撒密码问题

凯撒密码,动过移动位数  ,改变字母

不是字母的,保持原状不变

#include <stdio.h>
void main(){
    char c;
    while ((c = getchar()) != '\n'){
        if( (c >= 'a' && c<= 'z') || (c >='A' && c <= 'Z') ){
            if (c>='w' && c <= 'z' || c>='W' && c <= 'Z' ){
                c = c - 22;
            }else{
                c = c +4;
            }
        }
    printf("%c",c);
    }

}

因子之和 


 

#include <stdio.h>
void main(){
    int i,s,k;
    for(i=1;i<1000;i++){
        s=0;
        for(k=1;k<i;k++){
            if(i%k==0)s = s+k;
        }
        if(s==i)printf("%d",i);
    }
    
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值