C语言一元一次方程代码然如呵写代码怎么写?

C语言一元一次方程的代码然后写?有源代码吗,随便一个例题?刚开始学不会

demo1:


#include <stdio.h>

int main() {
    float a, b, x;
    printf("请输入方程的系数 a 和 b:\n");
    scanf("%f%f", &a, &b);
    if (a == 0) {
        if (b == 0) {
            printf("该方程有无数解。\n");
        } else {
            printf("该方程无解。\n");
        }
    } else {
        x = -b / a;
        printf("该方程的解为 x = %f。\n", x);
    }
    return 0;
}

demo2:

#include <stdio.h>

int main() {
    float a, b, x;

    printf("请输入一元一次方程的系数:\n");
    printf("a = ");
    scanf("%f", &a);
    printf("b = ");
    scanf("%f", &b);

    if (a == 0) {
        printf("方程无解!\n");
    } else {
        x = -b / a;
        printf("方程的解为:x = %f\n", x);
    }

    return 0;
}


你是求解么?
输入的格式是标准的 ax + b = 0么?
那么x = -b/a

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/221513
  • 这篇博客也不错, 你可以看下求解:C语言输出5名学生的学号、姓名和三门分数,求三科每科的平均分,为什么运行出来的结果是错误的
  • 除此之外, 这篇博客: C语言中的数组名含义(何时代表整个数组,何时代表数组首地址,解索引取值)代码加图详解中的 数组名的含义 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 定义数组
    2. 使用sizeof
    3. 使用&符号

    代码示例

    int a[3];					//a代表整个数组
    printf("%lu\n",sizeof(a);	//a代表整个数组
    printf("a的地址为:%p\n",&a);	//a代表整个数组
    
    • 不是上面三种情况时
    int a [4] = {1,2,3,45};
    int *p = a;		//a代表首元素地址---->&a[0]
    p = a+1;		//a代表首元素地址---->&a[0]
    func(a);		//a代表首元素地址---->&a[0]
    scanf("%d\n",a);//a代表首元素地址---->&a[0]
    ..........
    
    • 代码示例
    	int a[5] = {1,2,3,4,5};
        int b[3][4] = { {1,2,3,4}, {5,6,7,8},{9,10,11,12}}; 
    
        printf("%p\n",&a); //数组a的地址      
        printf("%p\n",&a+1);//数组a地址+20
        printf("%p\n",a);  //a[0]地址          
        printf("%p\n",a+1); //a[1]地址
        printf("%p\n",a+2); //a[2]地址
        printf("%p\n",a+3); //a[3]地址 
        printf("%p\n",a+4); //a[4]地址  
            
    //二维数组情况
        printf("\n");
        printf("%p\n",&b); //数组b的地址      
        printf("%p\n",&b+1); //3x4=12;int型4个字节-->12x4=48
                            //故地址为b+48(注意是十六进制的计算)   
        printf("\n");
        printf("%p\n",b); //b[0](也是b[0][0])的地址-->{1,2,3,4}     
        printf("%p\n",b+1); //b[1]地址 ;因为b[0]有4个元素,4x4=16;
                            //刚好一个16进制
        printf("\n");
        printf("%p\n",*b); //b[0][0] 地址     
        printf("%p\n",*b+1); //b[0][1]地址 
        printf("%p\n",*b+2);//b[0][2]地址  
        printf("\n");
    
        printf("%d\n",**b);//b[0][0]值     
        printf("%d\n",**b+1); //b[0][1]值
    
    

    代码详解:

    1. &a+1代表的是整个数组加一,&a我们清楚它拿的是整个数组地址,这个地址是一个整体,你可以把它想象成一个木箱,至于木箱里面装了什么东西不用管,那么这个木箱+1,去到了木箱的末尾或者可以说是第二个木箱的头;所以&a+1其实拿到的是整个数组的长度,或者说是这个数组的末尾地址,如果它是一个二维数组,那你会发现&a+1的地址就是接着a后面的那个元素的首地址。

    2. &a的地址等于a的地址等于a[0]的地址,这里就有疑惑了,不是说&a代表整个数组,而a[0]是数组首地址,它两者怎么相等呢,这类比一个大木箱,里面整齐排列3个小木箱,那这个整个大木箱的头也是里面第一个小木箱的头,所以它们的地址是相等的,而里面3个小木箱的长度相加就是大木箱的长度(类似说法,方便理解,内存是不会像木箱一样有间隙的)。

    3. 那如何证明3小木箱长度相加就是大木箱的长度呢,我们把上面一段代码拿出来讲解
      代码示例

    	int b[3][4] = { {1,2,3,4}, {5,6,7,8},{9,10,11,12}};
        printf("%p\n",&b); //数组b的地址      
        printf("%p\n",&b+1); //3x4=12;int型4个字节-->12x4=48
                            //故地址为b+48(注意是十六进制的
    

    首先b这个数组是个int型二维数组,那每个元素的大小是4个字节,里面16个元素,4x16=48位,意味着&b+1的地址为&b的地址加个48;那我们来打印看下输出结果;

    printf("%p\n",&b);  //0x7ffd910b34f0
    printf("%p\n",&b+1);//0x7ffd910b3520
    

    通过结果,我们发现十六进制 3520 比 34f0 大了3个十六进制,也就是48。(f---->2:中间经历着0,1,2三位;实在不懂进制计算的同学可以百度进制转换)

    1. 二维数组的*p和**p的取值问题

    我们把前面的代码拿下来:

    	int b[3][4] = { {1,2,3,4}, {5,6,7,8},{9,10,11,12}}; 
     	printf("%p\n",*b); //b[0][0]地址     
        printf("%p\n",*b+1); //b[0][1]地址 
        printf("%p\n",*b+2);//b[0][2]地址  
        printf("\n");
    
        printf("%d\n",**b);//b[0][0]值     
        printf("%d\n",**b+1); //b[0][0]值加1
    
    • 前面我们说过,&b是拿到b的整个地址,那*p解一层指向了里面的第一个元素{1,2,3,4}的首地址,*p+1则是移动到了第二个元素2的地址,以此类推,他们在二维数组中的表示方法为b[0][1].
    • *p是解一层拿到首元素{1,2,3,4}的首地址,那再解一层**p就通过地址拿到了里面的数值,再附上图片详解。
    • 图例详解
      在这里插入图片描述

    到此,我们的讲解就结束了,其他内容大家自己查看打印结果,再根据我的注释加以思考其实是不难的,多思考多验证自己的想法,对于知识点的掌握和理解是有非常大的帮助的。