zohoChou 发表于 2022-4-1 19:50

C语言学习记暨能否简化程序逻辑

本帖最后由 zohoChou 于 2022-4-1 19:51 编辑

题目1:输出以下图形:




我的奇怪逻辑…………(话说我想了半天结果发现自己用python也还是这奇怪逻辑……)



#include <stdio.h>
int main(void) {
      for (int i = -6; i <= 6; i = i + 2) {
                int reg_i = i;
                int abs_i = -i;
                if (i > 0) {
                        reg_i = -i;
                        abs_i = i;
                }
                int abs_temp_1 = abs_i / 2;
                int abs_temp_2 = abs_i / 2;
                int reg_temp = reg_i + 7;
                while (abs_temp_1 > 0) {
                        printf_s(" ");
                        --abs_temp_1;
                }
                while (reg_temp > 0) {
                        printf_s("*");
                        --reg_temp;
                }
                while (abs_temp_2 > 0) {
                        printf_s(" ");
                        --abs_temp_2;
                }
                printf("\n");
      }
      return 0;
}


题目二:
输入最多10个整数,多出的做出提示,并找出最大值、最小值、计算平均值。输入样例如下:
N=5
n1=1
n2=3
n3=5
n4=7
n5=9
---------(输出如下)

Max=9
Min=1
Avg=5



我的奇怪思路(甚至用了还没学到的数组)【python的列表就是香啊……不用管指针什么的,方法都是现成的……C……文本串都得费老大事储存……】



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

int calc(int *a, int N);

int main(void) {
      int N = 0;
      printf("N=");
      scanf("%d", &N);
      if ((N <= 0) || (N > 10)) {
                printf_s("请输入小于等于10的正整数");
                getchar();
                exit(-1);
      } else if (N == 1) {
                printf_s("n1=");
                scanf("%d", &N);
                printf("Max=%d\nMin=%d\nAvg=%d", N, N, N);
                while (1) {
                        exit(0);
                }
      }

      int x;
      for (int i = 0; i < N; ++i) {
                printf_s("n%d=", i + 1);
                scanf("%d", &x);
      }
      calc(x, N);
      return 0;
}

int calc(int *a, int N) {
      int max, min;
      int sum = 0;
      max = a;
      min = a;
      for (int i = 0; i < N; ++i) {
                if (max < a) {
                        max = a;
                }
                if (min > a) {
                        min = a;
                }
                sum += a;
      }
      float avg = sum / N;
      printf("Max=%d\nMin=%d\nAvg=%.2f", max, min, avg);
      return 0;
}

求问各位大神有没有什么好的方法……C语言属实是刚入门,程序实现逻辑也很奇怪……
(这里面有个while是废话,但是老师规定得用while,迫不得已……)

平淡最真 发表于 2022-4-1 21:28

#include <stdio.h >
#include <stdlib.h>
void p(int n, char c[])
{
        for (int i = 0; i < n; i++)
        {
                printf(c);
        }
}
int main()
{
        for (int i = 1; i < 8; i++)
        {
                char a[] = "*";
                char b[] = " ";
                p(abs(8-2*i)/2, b);
                p(7-abs(8-2*i), a);
                p(abs(8-2*i)/2, b);
                printf( "\n");

        }
}

xiadongming 发表于 2022-4-1 21:33

snake88 发表于 2022-4-1 23:13

棒棒哒,真厉害!

zohoChou 发表于 2022-4-3 18:36

平淡最真 发表于 2022-4-1 21:28
#include
#include
void p(int n, char c[])


好家伙,太牛了{:1_919:}
您是怎么想的思路啊{:301_1008:}我真没想到还能这么简洁(笑哭

平淡最真 发表于 2022-4-4 03:25

zohoChou 发表于 2022-4-3 18:36
好家伙,太牛了
您是怎么想的思路啊我真没想到还能这么简洁(笑哭

你都写复杂了,就根据排列的数学规律来凑出来的吧
#include <stdio.h >
int main()
{
        int max, min, i,N,M;
        printf_s("请输入个数:");
        scanf_s("%d", &N);
        M = N;
        int Sum = 0;
        float avg;
        while (N)
        {
                printf_s("请输入一个整数:");
                scanf_s("%d",&i);
                Sum =Sum+ i;
                if (N == M)
                {
                        max = i;
                        min = i;
                }
                if (i > max) { max = i; }
                if (i < min) { min = i; }
                N--;
        }
        avg = Sum / M;
        printf_s("最大值=%d,最小值=%d,平均值=%f", max,min,avg);
}

UNline 发表于 2022-4-12 17:07


真厉害,棒棒哒
页: [1]
查看完整版本: C语言学习记暨能否简化程序逻辑