回复 20楼 shmilyflf
是这样的。strlen1我本来的设想是计算每个字符串的长度,然后first_strlen我想计算每个字符串第一个单词的长度。貌似两个都没有实现我想要的功能。不知道该怎么改了。
回复 19楼 azzbcc
是这样的。strlen1我本来的设想是计算每个字符串的长度,然后first_strlen我想计算每个字符串第一个单词的长度。貌似两个都没有实现我想要的功能。不知道该怎么改了。
程序代码:
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
void FindNum();
void Diamond();
int menu_select();
void main()
{
for(;;)
{
switch(menu_select())
{
case 1:
FindNum();
break;
case 2:
Diamond();
break;
case 3:
printf("Goodbye!\n");
exit(0);
}
}
}
// 菜单选择操作
int menu_select()
{
char s;
int cn;
printf("1.FindNum\n");
printf("2.Diamond\n");
printf("3.Goodbye!\n");
printf("Input 1-3: ");
do
{
s=getchar();
cn=(int)s-48;
} while(cn<0 || cn>3);
return cn;
}
// 求正确的数字完成等式
// 答案:nun=6
void FindNum()
{
int i;
printf("要是下面的等式成立,应在__中填上哪个想同的数字?\n");
printf(" 3__*6237=__3*3564\n");
printf("求解结果为:\n");
for(i=1;1<10;i++)
if((30+i)*6237==(10*i+3)*3564)
{
printf("number=%d\n",i);
break;
}
}
//编制打印菱形图案程序
void Diamond()
{
int i,j,k;
printf("打印菱形图案。\n");
for(i=1;i<=4;i++)
{
for(j=1;j<=16-i;j++)
printf(" ");
for(k=1;k<=(2*i-1);k++)
printf("*");
printf("\n");
}
for(i=1;i<=3;i++)
{
for(j=1;j<=i+12;j++)
printf(" ");
for(k=1;k<=(7-2*i);k++)
printf("*");
printf("\n");
}
}

程序代码:/* 读入若干字符串,并按格式输出 */
#include <stdio.h>
#include <string.h>
#define ROW 10 /* 最大限制字符串的数目 */
#define LINE 100
int getns (char *, int); /* 输入字符串的函数 */
void ascii (char **, int); /* 按照ASCII顺序的函数 */
void length (char **, int); /* 按长度递增顺序的函数 */
void first_length (char **, int); /* 按首单词长度递增顺序的函数 */
int first_strlen (char *); /* 比较首个单词长度的函数 */
void menu (void); /* 输出菜单选项的函数 */
int main (void)
{
char input[ROW][LINE];
char *ptrinput[ROW];
char choice;
int row = 0; /* 字符串的数目 */
int i;
puts ("Please enter a series of sentence.");
while (row < ROW && gets (input[row]))
{
if (*input[row] == EOF)
break;
ptrinput[row] = input[row];
row++;
} /* 将字符串赋予指针 */
menu ();
while ((choice = getchar ()) != 'q')
{
if (choice == '\n')
continue;
switch (choice)
{
case 'a':
{
for (i = 0; i < row; i++)
puts (ptrinput[i]);
break;
}
case 'b': ascii (ptrinput, row); break;
case 'c': length (ptrinput, row); break;
case 'd': first_length (ptrinput, row); break;
default: puts ("Please enter a, b, c, d or q:"); break;
}
menu ();
}
return 0;
}
/* 按照ASCII顺序的函数 */
void ascii (char ** p, int i)
{
int j, k, l;
char *output[ROW];
for (j = 0; j < i; j++)
{
l = 0;
for (k = 0; k < i; k++)
{
if (j == k)
continue;
if (strcmp (p[j], p[k]) >= 0)
l++;
}
output[l] = p[j];
}
for (l = 0; l < i; l++)
puts (output[l]);
}
/* 按长度递增顺序的函数 */
void length (char ** p, int i)
{
char *output[ROW];
int length[ROW];
int j, k;
int temp1;
char *temp2;
for (j = 0; j < i; j++)
{
length[j] = strlen (p[j]);
output[j] = p[j];
}
for (j = 0; j < i; j++)
{
for (k = j + 1; k < i; k++)
{
if (length[j] > length[k])
{
temp1 = length[j];
length[j] = length[k];
length[k] = temp1;
temp2 = output[j];
output[j] = output[k];
output[k] = temp2;
}
}
}
for (j = 0; j < i; j++)
puts (output[j]);
}
/* 按首单词长度递增顺序的函数 */
void first_length (char ** p, int i)
{
char *output[ROW];
int length[ROW];
int j, k;
int temp1;
char *temp2;
for (j = 0; j < i; j++)
{
length[j] = first_strlen (p[j]);
output[j] = p[j];
}
for (j = 0; j < i; j++)
{
for (k = j + 1; k < i; k++)
{
if (length[j] > length[k])
{
temp1 = length[j];
length[j] = length[k];
length[k] = temp1;
temp2 = output[j];
output[j] = output[k];
output[k] = temp2;
}
}
}
for (j = 0; j < i; j++)
puts (output[j]);
}
/* 比较首个单词长度的函数 */
int first_strlen (char * p)
{
int i = 0;
while (p[i] >= 'a' && p[i] <= 'z' || p[i] >= 'A' && p[i] <= 'Z' && p[i] == '\'')
i++;
return i;
}
/* 输出菜单选项的函数 */
void menu (void)
{
puts ("************************************************************************");
puts ("Please choose what to do:");
puts ("a. 输出初始字符列表 b. 按ASCII顺序输出字符串");
puts ("c. 按长度递增顺序输出字符串 d. 按字符串中第一个单词长度输出字符串");
puts ("q. Quit.");
puts ("************************************************************************");
}