1. 题目描述:
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。
(凡是以一个或多个空格隔开的部分就为一个单词)
输入:
输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出:
可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
样例输入:
hello how are you.
样例输出:
5 3 3 3
参考答案
#include<stdio.h> #include<string.h> int main() { char str[1000], index, str_len, k; int word_len[1000]={0}; //存放各单词长度的数组 while(gets(str)) { index=0; str_len = strlen(str); memset(word_len, 0, 1000); k=0; while((' ' == str[k]) && (k<str_len-1))//跳过开头的空格 { k++; } while(k<str_len-1) { if(str[k] != ' ')//读到的是字符 { word_len[index] += 1; k++; } else//读到的是空格 { index++; while((k<str_len-1) && (' ' == str[k]))//跳过中间连续的空格 { k++; } } } for(k=0; k<index; k++) { printf("%d ", word_len[k]); } printf("%d\n", word_len[k]); } return 0; }
参考程序(与此题类似,但是非此题解)
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char words[100][100]; int w_index,w_num,i=0; char ch; printf("Input a string :\n"); w_num = 0; w_index = 0; while((ch = getchar()) != '.') { if(ch == ' ') { if(w_index) { w_index = 0; w_num++; } } else { words[w_num][w_index++]=ch; words[w_num][w_index] = '\0'; } } printf("\nThere are %d words.\n", w_num + 1); for(i=0; i <= w_num; i++) { printf("%s\t %d\n", words[i], strlen(words[i])); } }
2. 题目描述:
输入n,
求y1=1!+3!+...m!(m是小于等于n的最大奇数)
y2=2!+4!+...p!(p是小于等于n的最大偶数)。
输入:
每组输入包括1个整数:n
输出:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
样例输入:
4
样例输出:
7 26
参考答案
#include <stdio.h> long int result[15]; //存储 1 到 14 的阶乘的结果到 result 数组中,避免重复计算 //对于long int 类型,计算到 15! 时开始溢出 void initialize() { long int i,tmp=1; for(i=1; i<14; i++) { tmp=tmp*i; result[i]=tmp; } } int main() { int n,i; long int sum1, sum2; initialize(); while(scanf("%d",&n) != EOF) { sum1 = sum2 = 0; //直接利用 result 数组中存储的结果计算阶乘 for(i=1; i<=n; i++) { if(i%2==1) sum1 += result[i]; else sum2 += result[i]; } printf("%ld %ld\n", sum1 ,sum2); } return 0; }
3. 题目描述:
输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
输入:
输入包括多行字符串,字符串的长度len,(1<=len<=1000)。
输出:
按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
样例输入:
hello
she
sorry
he
样例输出:
he
hello
sorry
参考答案
#include<stdio.h> #include<string.h> #include <limits.h> typedef struct strs{ int len; //用于记录字符串长度长度 char arr[1001]; //用于存储输入的字符串 }strs; strs store[10001]; int main() { int i, index = 0; int max_len = INT_MIN, min_len = INT_MAX; while(scanf("%s", store[index].arr) != EOF){ store[index].len = strlen(store[index].arr); if(max_len < store[index].len){ //计算最大长度 max_len = store[index].len; } else if(min_len > store[index].len){ //计算最小长度 min_len = store[index].len; } index++; } for(i = 0;i < index;i++){ //输出最短字符串 if(store[i].len == min_len){ puts(store[i].arr); } } for(i = 0;i < index;i++){ //输出最长字符串 if(store[i].len == max_len){ puts(store[i].arr); } } return 0; }