C语言习题!解决方法

C语言习题!
在下只学到了if,   if/else,   while语句。  
    运算符   +=,   -=,   *=,/=,%=,++,--, <=,   > =,   ==,   !=,   ?:   。
    等比较浅的知识,各位用后面的知识写我看不懂的。


a)编写一个程序,输入一个五位数,把这个数字分成单个数字,并显示出这个数字,
每个数字之间通过3个空格分隔开来。   (提示:使用整除和模数的组合。)例如,
如果用户输入42139,那么这个程序显示:

4 2 1 3 9


b)编写一个程序,对于任何输入,如果所入的数值不是1或2,那么就保持循环,直到
用户输入了正确的数值才结束程序。


c)编写一个程序,这个程序能够读入正方形边长,然后使用星号输出这个中空正方形。
程序应该能够适合于在1~20之间所有边长的正方形。例如,如果读入的边长为5,那么应该显示:

*****
*       *
*       *
*       *
*****


d)编写一个程序显示出100个星号,每次显示一个星号。每显示完10个星号之后,程序应该显示一个换行符。
(提示:从1到100进行计数。使用求模运算符来识别出计数器是否达到10倍数。)


------解决方案--------------------
题1
----------------------------
#include <stdio.h>

int main(void)
{
int num;

puts ( "请输入一个5位的整数: ");
scanf ( "%d ", &num);
puts ( "按要求打印输出为: ");
printf ( "%-4d%-4d%-4d%-4d%-4d\n ", num/10000, num/1000%10, num/100%10, num/10%10, num%10); /* 分别输出万位, 千位...个位上的数字,并且每个数之间有三个空格*/

return 0;
}


题2
-----------
#include <stdio.h>

int main(void)
{
int input;

puts ( "输入任意一个整数,如果该数不为1或2则继续输入: ");
scanf ( "%d ", &input);

/* 如果输入的数字不是1或2则要求再次输入 */
while (input != 1 && input != 2)
{
puts ( "继续输入: ");
getchar (); /* 吃掉上一次输入的回车符 */
scanf ( "%d ", &input);
}

puts ( "\n退出程序 ");
return 0;
}


题3
--------------
#include <stdio.h>

int main(void)
{
int x;
int i, j;

puts ( "请输入正方形的边长(边长:1-20): ");
scanf ( "%d ", &x);

puts ( "打印正方形: ");
for (i=0; i <x; i++)
{
putchar ( '* ');
}

for (i=0; i <x-2; i++)
{
putchar ( '\n ');
for (j=0; j <x; j++)
{
if((j == 0) || (j == x-1))
{
putchar ( '* ');
}

else
{
putchar ( ' ');
}
}
}

putchar ( '\n ');
for (i=0; i <x; i++)
{
putchar ( '* ');
}

putchar ( '\n ');
return 0;
}

题4
--------------------
#include <stdio.h>

int main(void)
{
int n;

for (n=1; n <=100; n++)
{
putchar ( '* ');
if (n%10 == 0)
{
putchar ( '\n ');
}
}

return 0;
}