字符数组程序的相关问题

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{ char s[]="this is a c program!";
int i,n;
n=strlen(s);
for(i=0;i<n-1;i++)
{ if(i==0)
s[i]=toupper(s[i]);
else if(s[i]==' ' && isalpha(s[i+1]))
s[i+1]=toupper(s[i+1]);
}
puts(s);
}
整个程序都不太看得懂 谁能解释一下啊😢
能不能把语句都解释一下😢

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{ char s[]="this is a c program!"; //给这个字符类型的数组赋值,是这一个字符串
int i,n;//定义两个整型变量
n=strlen(s); // 把s这个字符串的长度赋值给n
for(i=0;i<n-1;i++)//for循环
{ if(i==0) //i为零说明是第一个字符
s[i]=toupper(s[i]); // 小写字符变成大写
else if(s[i]==' ' && isalpha(s[i+1])) //如果当前字符是个空格,且下一个是英文字母
s[i+1]=toupper(s[i+1]); // 下一个英文字母也大写
}
puts(s); //输出字符串S
}

每个词的首字母·改成大写。