C语言图形打印题总结

此帖用于总结最近在C语言学习中遇到的图形打印题,还望大牛们指正

1.等腰三角形打印

输入一个数,打印倒等腰三角形。

如输入:5

打印:

*****

***

*

分析:对于此类题目应先着手分析,查找规律

行号  空格  星号

1   0    5

2     1       3

3     2       1

行数:n = (输入数字 + 1) /  2;

空格与行数的关系:空格数 = 行数 - 1;

星号:  行数 * 2 - 1;(行数由大到小控制输出)

代码如下:

 1 void exam4()
 2 {
 3     int n, num, i, j;
 4     printf("请输入等腰三角形底边长度:");
 5     scanf("%d", &n);
 6     //计算行数
 7     num = (n + 1) / 2;
 8     //控制行数(行号倒序)
 9     for (i = num; i > 0; i--) {
10         //控制空格
11         for (j = 0; j < num - i; j++) {
12             printf(" ");
13         }
14         //控制星号
15         for (j = 2 * i - 1; j > 0; j--) {
16             printf("*");
17         }
18         printf("\n");
19     }
20 }

2.传入一个字母,打印图形(10分)

传入:‘D‘ ,打印如下图形:

A

ABA

ABCBA

ABCDCBA

DCBABCD

CBABC

BAB

A

分析:观察图形不难发现将图形分为上下部分打印更为简单

此图形上半部分最外层全为A,内层为B,然后为C,可以考虑先从最外层往内层打印。

观察下半部分可以发现:下半部分的图形为“DCBABCD”字符串依次往少打印两端的字符

代码如下:

 1 void printGraph(char c)
 2 {
 3     int sizeUp, sizeDown, size, i, m, n;
 4     //获取构造字符串的大小
 5     size = ((c + 1) - ‘A‘) * 2;
 6     //计算上半部分的行数
 7     sizeUp = sizeDown = size / 2;
 8     //构造数组
 9     char array[size][size];
10     char b = ‘A‘;
11     m = n = sizeUp - 1;
12     //先将数组中所有位置置为空格,后面就只需要赋值
13     for (i = 0; i < sizeUp; i++) {
14         for (int j = 0; j < size; j++) {
15             array[i][j] = ‘ ‘;
16         }
17     }
18     //思考先从外而内进行赋值,即先赋值A,然后到指定字母
19     for (int k = 0; k < sizeUp; k++) {
20         for (i = k; i < sizeUp; i++) {
21             for (int j = 0; j < size; j++) {
22                 if (i + j == n || j - i == m) {
23                     array[i][j] = b;
24                 }
25             }
26         }
27         b++;
28         m--;
29         n++;
30     }
31     //输出上半部分
32     for (int i = 0; i < sizeUp; i++) {
33         for (int j = 0; j < size; j++) {
34             printf("%c", array[i][j]);
35         }
36         printf("\n");
37     }
38
39     //构造下半部分数组
40     char fuck[size];
41     int p = 0, q = size - 2;
42     while (p <= q) {
43         fuck[p] = fuck[q] = c;
44         c--;
45         p++;
46         q--;
47     }
48     fuck[size] = ‘\0‘;
49     char array2[sizeDown][size];
50     for (i = 0; i < sizeDown; i++) {
51         strcpy(array2[i], fuck);
52     }
53     //控制打印
54     for (i = 0; i < sizeDown; i++) {
55         for (int k = 0; k < i; k++) {
56             printf(" ");
57         }
58         for (int j = i; j < size - i - 1; j++) {
59             printf("%c", array2[i][j]);
60         }
61         printf("\n");
62     }

三、实现函数,根据输入的内容打印图形

输入:"1234567"

打印:

1234567

2     6

3  5

4

3  5

2     6

1234567

观察图形可以发现,可以考虑遍历输入的字符串,同时设置两个标记值k, m,分别指向数组第二个和倒数第二个数,遍历数组当下表和标记值相等时,则打印出

数组中对应的字符,同时移动标记值,k++,m--;

 1 void print()
 2 {
 3     char a[20];
 4     gets(a);
 5     int size = (int)strlen(a);
 6     int i = 0, j = 0, k = 1, m = size - 2;
 7     puts(a);
 8     for (i = 0; i < size - 2; i++) {
 9         for (j = 0; j < size; j++) {
10             if(j != k && j!= m){
11                 printf(" ");
12
13             }else{
14                 printf("%c",a[j]);
15             }
16         }
17         k++;
18         m--;
19         printf("\n");
20     }
21     puts(a);
22 }
时间: 2024-10-31 01:49:35

C语言图形打印题总结的相关文章

Javascript基础练习之实现C语言经典程序题

前言: 最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家

VS2012+C语言+图形界面窗口+读取TXT文件+显示

#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define ID_TIMER 1 LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); //声明回调函数 int WINAPI WinMain(HINSTANCE hInstance, HINST

C语言每日一题之No.9

再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规则插到字符串a中,最后输出"abdefghjkmnptwy". 二.思路:既然是已经排好序的,就用二分法查找的思想 将字符串s中的每个字符依次作为key拿来和字符串a做比较并且插入 三.程序 1 #include <stdio.h> 2 #include <string.

C语言每日一题之No.3

题目:从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复字符.如输入"ad2f3adjfeainzzzv",则输出"23adefijnvz" 思路:先定义一个字符数组用来存储字符串 讲数字转化成字符(ASCII) 排序 进行遍历,删除重复字符 程序: C语言每日一题之No.3,布布扣,bubuko.com

C语言每日一题之No.1

鉴于在学校弱弱的接触过C,基本上很少编程,C语言基础太薄弱.刚好目前从事的是软件编程,难度可想而知.严重影响工作效率,已无法再拖下去了.为此,痛下决心恶补C语言.此前只停留在看书,光看好像也记不住,C这东西毕竟是练出来的,所以从今天开始,每日一道C语言题目,从题目入手来补知识漏洞.题目比较基础,如不堪入目,还请见谅. 题目:输入三个整数,输出最大的数 思路:定义三个变量用来存储输入的整数 比较三个变量的大小,找到最大的数 定义一个变量存储来存储最大的数 程序: 1 #include <stdio

C语言每日一题之No.2

题目:已知三个整型数8,12,6,按公式s=a+b*c计算,并显示结果 思路:定义三个整型变量a,b,c 定义一个变量s用来保存运算结果 输出 程序: 1 #include <stdio.h> 2 3 void main() 4 { 5 int a = 8; 6 int b = 12; 7 int c = 6; 8 int s = 0; 9 10 s = b*c ; //s用来保存b*c 11 s += a; //s=a+b*c 12 printf("a+b*c=%d\n"

C语言每日一题之No4.

这几天老大也没安排我什么项目,于是想正好趁着空补C.当然,是利用晚上加班时间,白天正常上班时间还是学习公司的平台. 今儿个突然弱弱的感觉到在公司补C是件很低级的事情,哪怕是在加班时间都会被喷,因为大家在关心Linux玩得顺溜不顺溜的情况下,我在补C,万恶的C.想想也是,这种最最基础的C语言只能自己挤出时间来补了,在公司最起码也得学点高端点的,比如Linux,如果作为一个软件开发人员,你不会Linux还搞毛线啊? 好吧,工作一天了,今日吐槽完毕,人生因吐槽而舒畅爽快 ,神一样的存在.此时此刻就是回

【腾讯开源】前端预处理器语言图形编译工具 Koala使用指南

摘要:Koala是一款预处理器语言图形编译工具,支持Less.Sass.CoffeeScript.Compass框架的即时编译.无需手动输入命令去编译,后台监听文件是否有改变,如有修改会自动进行编译,能够大大提升Web开发中的工作效率. 近期,我们对腾讯Koala团队进行了专访 ,一款预处理器语言图形编译工具,支持Less.Sass.CoffeeScript.Compass框架的即时编译.本篇文章为大家着重介绍Koala工具的使用进行讲解,以供参考. Koala代码托管地址: https://c

C语言每日一题之No.7

今天是正式第一天在现有的世界里与自己相处,你再也没有另一个世界可以躲避了.终于要自己面对自己了,一个人要真实的面对自己的灵魂总是痛苦的.从学校到社会的环境转换,现实与理想的冲突,个人价值观和社会价值观的矛盾,这些都很大程度的冲击着我,不行,我不可以被这些所俘虏失去自我,我得重新把自己给找回来.如果不重新学会和自己相处,那我又该以怎样的姿态活着?如果内心无法认可自己,那我活着有什么意义?虽然过程有点痛苦,可心里很踏实,因为自己没有被外界的评价所绑架,而是牢牢的和自己的灵魂紧密相拥.girl ,加油