首页 > 其他分享 >【Solution】用C语言代码绘制线性函数包围图

【Solution】用C语言代码绘制线性函数包围图

时间:2024-11-23 19:34:13浏览次数:9  
标签:Solution height valid MySymbol printf 线性 line C语言 输入

题目:

在这里插入图片描述
绘制左边图的众多*输出图像,函数已给出:y=1,y=-x+2n,y=x。


解决方案:


思路
对于原来的坐标几何图形,2<=n,y<=x<=2n-y,1<=y<=x。
我们用来写C代码的函数首先要确定三角形高的范围,至少要2。
将图形分隔成上下两部分。从最高的顶点到三角形高的部分,和其下面的部分。
使用line表示行数,height表示高(由用户输入),line最大为2*height-1(对应2n-1),然后使用循环来处理每一行的输出。
判断行line是否等于高height来将图形分隔成上下两部分,判断条件为line是否<=height。
MySymbol用于输出*,相当于x,由于直线方程y=-x+2n,斜率为-1,所以对应上半的输出图像上随着行数+1而*号数量+1,MySymbol起始值为1,到函数交点x=n时停止,也就是第n行(第height行)。
下半部分,MySymbol递减至1。对应每次值应该为2*height-line(图像下半部分的边界为x=y,line+y=line+x=line+MySymbol=2*height所以MySymbol对应2*height-line)。

代码

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

int main() {

    int height, line, MySymbol, valid = 0; //height为高,line为行数,MySymbol为*的计数,valid用于验证输入
    
    while (1) {
        printf("请输入三角形的高(需要大于1且小于30): ");
        valid = scanf_s("%d", &height);

        // 检查输入的内容是否符合要求 
        if (valid == 1 && height > 1 && height < 30) {
        break; // 输入有效,退出循环
        }
        else {
        printf("请重新输入符合规范的数字。\n\n");
        // 清除输入缓冲区
        while (getchar() != '\n'); // 丢弃无效输入  
        }
    }

    // 绘制图形  
    for (line = 1; line <= 2 * height - 1; line++) {
        //上半部分绘制
        if (line <= height)
        {
            for (MySymbol = 1; MySymbol <= line; MySymbol++)
            {
                printf("*");
            }
            printf("\n");
        }
        //下半部分绘制
        else {
            for (MySymbol = 2*height-line; 1<=MySymbol; MySymbol--)
            {
                printf("*");
            }
            printf("\n");
        }

    }

    return 0;
}

输出结果

在这里插入图片描述

标签:Solution,height,valid,MySymbol,printf,线性,line,C语言,输入
From: https://blog.csdn.net/qq_44954543/article/details/143869903

相关文章

  • C语言_数据类型及运算符_PAGE3
    顺序程序设计例题华氏度转化为摄氏度#include<stdio.h>intmain() { floatf,c;//定义f和c为单精度浮点型变量 f=64.0; c=(5.0/9)*(f-32); printf("f=%f\n",f,c); return0; }计算存款利息#include<stdio.h>intmain() { floatp0=1000,r1=0.0036,r2=0.022......
  • c语言程序块中初始化变量对同名变量作用域的影响
     001、[root@PC1test1]#lstest1.ctest2.c[root@PC1test1]#cattest1.c#include<stdio.h>intmain(void){inti;intx=10000;for(i=0;i<4;i++){intx=i*5;printf(......
  • 广义加性模型(GAM):灵活的非线性建模框架
    广义加性模型(GAM):灵活的非线性建模框架一、引言1.1问题背景现实世界中的非线性关系普遍存在传统线性模型和GLM的局限性需要在可解释性和灵活性之间取得平衡多维特征的非线性效应难以建模1.2算法概述GAM是GLM的自然扩展将线性项替换为平滑函数保持可加性结构基本形式......
  • C语言数据结构与算法--简单实现栈的出栈与入栈
     目录(一)栈的基本概念(二)栈的的表现形式1.栈的表示和实现2.栈的链式表示(三)栈的链式表示时元素压入、弹出 算法实现思路1.栈的线性链表的压入算法2.栈的线性链表的弹出算法(四)算法的实现(一)栈的基本概念        栈(Stack)是限定仅在表尾进行插入和删除操作的线......
  • C语言:函数指针精讲
    1、函数指针一个函数总是占用一段连续的内存区域,函数名在表达式中有事也会被转换为该函数所在内存区域的首地址,这和数组名非常类似,我们可以把函数这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就......
  • c语言:动态内存管理中的malloc和free,calloc和realloc
    为什么要有动态内存分配?通过之前的学习,我们已经掌握的内存开辟方式有:inta=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间上述空间的开辟的大小是固定的数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能进行调整。......
  • 嵌入式课程day04-C语言运算符和选择结构
    2.3运算符2.3.1运算符介绍运算符:具有一定运算规则的符号。操作数:运算符的操作对象。~a   ---a就是~运算符的操作数。---单目运算符:运算符只有一个操作数3+5---35就是+运算符的操作数。---双目运算符:运算符有2个操作数    表达式1?表达式2:表达......
  • 提高ADC采样精度:C语言中的滤波与取平均值技巧
    在嵌入式系统中,ADC(模数转换器)是常用的组件,用于将模拟信号转换为数字信号。然而,由于噪声和其他干扰因素,ADC采样值可能会波动,导致读数不稳定。为了提高ADC读数的准确性,常用的方法是进行滤波和取平均值。本文将详细介绍如何在C语言中实现ADC采样值的滤波和取平均值,并提供详细的代......
  • c语言之正负整数在内存中的存储本质
    int、short、long、longlong是如何定义变量的        我们先从最为我们所知的定义变量入手,当我们用int定义一个变量的时候,这个变量是整型,长度是4个字节,不同的操作系统下由int定义的变量长度有可能不同,当然对于short、long、longlong也是同样如此,因此为了使大家更清......
  • C语言:动态内存管理
    目录为什么要有动态内存管理mallocfreecallocrealloc为什么要有动态内存管理内存分为栈区、堆区、静态区,每个区存放的变量如下图:目前我们掌握的内存开辟方法有:创建结构体structs{inti;intc;};创建一些变量:intx;intu[10];charl;还有创建联合等…......