有不对的欢迎跟我讨论
no1.c
# include <stdio.h>
int main(void)
{
int ch ;
long i = 0 ;
while ((ch = getchar()) != EOF)
i++ ;
printf("sum = %ld\n" , i);
return 0 ;
}
no2.c
# include <stdio.h>
int main(void)
{
int ch ;
int i = 0 ;
while ((ch = getchar()) != EOF)
{
if (ch < ' ')
switch (ch)
{
case '\n' :
printf("\\n");
break ;
case '\t' :
printf("\\t");
break ;
default :
printf("^%c:%d" , ch + 64 , ch);
break ;
}
else
printf("%c:%d " , ch , ch);
if (i++ % 10 == 0)
putchar('\n') ;
}
return 0 ;
}
no3.c
# include <stdio.h>
# include <ctype.h>
int main(void)
{
int ch ;
long n_upper , n_lower , n_onther ;
n_upper = n_lower = n_onther = 0 ;
while ((ch = getchar()) != EOF)
if (isupper(ch))
n_upper++ ;
else if (islower(ch))
n_lower++ ;
else
n_onther++ ;
printf("There are %ld upper character and %ld lower charecter.\n", n_upper , n_lower);
return 0 ;
}
no4.c
/*
* 通过前一个字符和当前字符判断是否是一个单词有三种情况
* no prev current result action
* 1 0 1 单词开始 n_char++
* 2 1 1 单词中 n_char++
* 3 1 0 单词结束 n_word++
*
* 而在只计算字符总数, 和单词总数的情况下情况1和情况2就简化,合并为一条语句,即只判断
* 当前字符是不是字母即可.
* 而在当前字符不是字母的情况下,前一个字符只有两种情况:是或不是,如果是表示单词结束,
* 如果不是,表示还未接收到单词. 当前题目下只需要对是的情况作出动作即可.
* 所以第二个条件和简化后的第一个条件再次简化,合并为一条 if..else if.. 语句
*/
# include <stdio.h>
# include <ctype.h>
int main(void)
{
int prev ; // 前一个字符
int ch ; // 当前字符
long n_char = 0 ; // 字符数量
long n_word = 0 ; // 单词数量
while ((ch = getchar()) != EOF)
{
if (isalpha(ch))
n_char++ ;
else if (isalpha(prev))
n_word++ ;
prev = ch ;
}
printf("Total words: %ld , Total characters: %ld , Characters per word:%.2lf",
n_word , n_char , n_word == 0 ? 0.0 :(double)n_char / (double)n_word);
return 0 ;
}
no5.c