多种类型菱形打印(初学代码,以后删除)
星海
posted @ 2011年1月11日 12:38
in C代码
, 1842 阅读
/*
* =====================================================================================
* 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;
}
}
评论 (0)