C语言编程学习day1
1、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开,例如:输入“I am a boy.”,则统计结果应该有4个单词 。
思路:问题的关键是如何确定“出现了一个新单词”。可以采取这样的方法:从第一个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是,就使变量count加1(用count统计单词个数),最后的count的值就是单词总数。
判断是否出现新单词,可以由是否有空格出现来决定(连续的若干个空格作为出现一次空格)。如果测试出某个字符为非空格,而它前面的字符是空格,则表示"新单词开始了“;如果当前字符为非空格而其前面字符也是非空格,则意味着仍然是原来那个单词的继续。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int main() {
// 统计单词个数
int flag = 0;
int count = 0;
char str[100];
gets_s(str, 64); //输入一个字符串给字符数组str;在vs里面用的是ges_s(),而不是gets()
char c;
for (int i = 0; (c=str[i]) != '\0'; i++) {
if (c == ' ') {
flag = 0; //如果是空格字符,使flag=0;如果是多个空格,那么flag永远为0
}else if (flag == 0) { //如果不是空格字符,且flag的值为0
count++;
flag = 1; //使flag=1,直到该单词结束
}
}
printf("单词个数%d\n", count);
return 0;
}
运行结果
2、从键盘输入任何一个正整数(输入不要大于21亿,例题里用的是int类型),判断该数是否为回文数,所谓回文数就是从左到右与从右到左的阅读顺序一样。例如:1234321,565
思路:从左到右与从右到左的阅读顺序一样,那么可以将其取反,如果两个数大小相同,那么就判断为回文数。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int main() {
//判断是否为回文数
int imput = 0;
int number = 0; //接收将input取反后的数
int k = 0;
scanf_s("%d", &imput, 64); //vs里用的是scanf_s(),而不是scanf()
int a = imput; //保存input,因为再下面while循环里,会改变input值
while (imput > 0) {
k = imput % 10; //取input的每一位
number = number * 10 + k; //number*10然后再加上本轮的余数
imput = imput / 10;
}
if (a == number) { //比较a(input)与number的大小,如果相等,则就是回文数
printf("你输入了回文数!");
}else {
printf("Error!");
}
return 0;
}
运行结果:
总结:今天比较忙,就只写了两道数学题,后期会对应增加数据结构方面的编程。