多种类型菱形打印(初学代码,以后删除)
星海
posted @ 2011年1月11日 12:38
in C代码
, 1785 阅读
/* * ===================================================================================== * Filename: diamond-1.c * Description: 编写函数diamond打印一个菱形 * 问题摘自 http://learn.akae.cn/media/ch06s05.html * ===================================================================================== */ #include <stdio.h> #include <stdlib.h> void diamond(int n, char x) { if (n % 2 == 0) { printf("wrong number\n"); return; } int i, j; for (i = (-n / 2); i < (n / 2 + 1); ++i) { for (j = 0; j < n; ++j) { if (j < 2 * abs(i)) { if (j % 2 == 0) printf(" "); else printf("\t"); } else printf("%c\t", x); } printf("\n"); } } int main(void) { diamond(5, '&'); return 0; }
/* * ===================================================================================== * Filename: diamond-2.c * Description: 打印如下所示的菱形,创建一个函数diamond2(); * A BBB CCCCC DDDDDDD CCCCC BBB A * Created: 2011年01月10日 23时45分54秒 * ===================================================================================== */ #include <stdio.h> #include <stdlib.h> void diamond2(int n) { // 因为要显示大写字母,范围在A-Z,所以n的取值范围为 3——2*26-1=51 if (n % 2 == 0 && n < 3 && n >= 51) { printf("Wrong Number\n"); return; } int i, j, k, charx; char x = 'A'; for (i = n / 2; i > -(n / 2 + 1); --i) { for (j = 0; j < abs(i); ++j) printf(" "); //当i大于0时,字符A先输出再自增:x++。 否则,--x-1。 if (i >= 0) charx = x++; else charx = --x - 1; for (k = 0; k < n - 2 * abs(i); ++k) { printf("%c", charx); } printf("\n"); } } int main(void) { // 测试最大菱形 diamond2(51); return 0; }
/* * ========================================================================== * * Description: * 编写一个程序,读取输入,直到读了10个字符串或者遇到EOF。这个程序可以为用户提供一个有5个选项的菜单: 1. 输出初始化字符串列表\n\ 2. 按ascii码顺序输出字符串\n\ 3. 按长度递增输出字符串\n\ 4. 按字符串中第一个单词的长度输出字符串\n\ 5. 退出\n * * Version: 1.0 * Created: 2011年01月28日 00时17分41秒 * Revision: none * Compiler: gcc * ========================================================================== */ //全用的选择排序算法 //尤其注意136行,不能是 if (strlen(v[i]) - strlen(v[j]) > //0),必须是strlen(v[i]) > //strlen(v[j]),因为strlen返回unsigned值,unsigned值相减返回unsigned值 // #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdbool.h> #define MAXLINE 10 /* 最多输入字符串个数 */ #define MAXLEN 50 /* 字符串最大字符数 */ void menu(void); /* 菜单显示程序 */ void prall(char *v[], int n); /* 打印所有字符串 */ void compascii(char *s); /* 按ascii码顺序输出字符串 */ void complen(char *v[], size_t lim); /* 按字符串长度递增输出字符串 */ int cmpwd(char *s); /* 计算单个字符串中第一个单词的长度 */ void compcmp(char *v[], size_t lim); /* 按第一个长度排列所有字符串 */ int main(void) { bool flags = true; /* 菜单“退出”标记 */ int c, i, j; size_t linenum = 0; /* 实际输入的行数 */ char a[MAXLINE][MAXLEN] = { 0 }; char *p[MAXLINE]; printf ("请输入不超过10个字符串,每行字符串以换行符结尾\n"); for (i = 0; i < MAXLINE; i++) { ++linenum; j = 0; while (((c = getchar()) != '\n') && c != EOF && j < MAXLEN - 1) a[i][j++] = c; a[i][j] = '\0'; if (c == EOF) break; } while (flags) { for (i = 0; i < linenum; i++) p[i] = a[i]; menu(); switch (c = getchar()) { case '1': prall(p, linenum); break; case '2': for (i = 0; i < linenum; ++i) compascii(a[i]); break; case '3': complen(p, linenum); prall(p, linenum); break; case '4': compcmp(p, linenum); prall(p, linenum); break; case '5': flags = false; break; default: printf ("\n\n\n请输入1-5选择您要的功能,按5键推出\n"); break; } while (getchar() != '\n') ; /* 清除多余的回车符 */ } return 0; } void menu(void) { printf("按键1-5选择相应菜单\n\ 1. 输出初始化字符串列表\n\ 2. 按ascii码顺序输出字符串\n\ 3. 按长度递增输出字符串\n\ 4. 按字符串中第一个单词的长度输出字符串\n\ 5. 退出\n"); } void prall(char *v[], int n) { int i; for (i = 0; i < n; i++) { printf("%s\n", v[i]); } } void compascii(char *s) { char a[MAXLEN]; int i, j, k; char temp; for (i = 0; i < MAXLEN - 1 && s[i] != '\0'; i++) a[i] = s[i]; for (j = 0; j < i - 1; j++) for (k = j + 1; k < i; k++) if (a[j] > a[k]) { temp = a[j]; a[j] = a[k]; a[k] = temp; } a[i] = '\0'; printf("%s\n", a); } void complen(char *v[], size_t lim) { int i, j; char *temp; for (i = 0; i < lim - 1; i++) for (j = i + 1; j < lim; j++) if (strlen(v[i]) > strlen(v[j])) { temp = v[i]; v[i] = v[j]; v[j] = temp; } } int cmpwd(char *s) { size_t num = 0; while (*s) if (!isspace(*s++)) num++; else break; return num; } void compcmp(char *v[], size_t lim) { int i, j; char *temp; for (i = 0; i < lim - 1; i++) for (j = i + 1; j < lim; j++) if (cmpwd(v[i]) > cmpwd(v[j])) { temp = v[i]; v[i] = v[j]; v[j] = temp; } }