C语言实验二题目及答案
第一次课(2学时):
必作实验:
编写程序,输入一个正整数,计算并显示该整数的各位数字之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。
编写一个程序,找出被2,3,5整除时余数均为1的最小的10个自然数。
选作实验:
3. 编写一个程序,它打印出个位数是6、且能被3整除的所有三位正整数及其个数。要求一行打印8个数据。
4. 求N内的勾股数(A2+B2=C2)A、B、C。
参考答案:
1、答:
#include
void main( )
{
int i,sum;
int k;
printf("\nEnter a integer:");
scanf("%d",&i);
sum=0;
while(i!=0)
{
k=i%10; /*取数字的最后一位*/
sum=sum+k; /*累加到计数器中*/
i=i/10; /*去掉数字的最后一位*/
}
printf("sum is %d\n",sum);
}
2、答:
程序如下:
#include
void main ( )
{
int i=1;
int count=0;
printf ("\n能被2,3,5整除时余数为1的最小10个自然数是:\n");
while (count<=10)
{
if ((i%2==1)&&(i%3==1)&&(i%5==1))
{
count++;
printf ("%d\n",i);
}
i++;
}
}
3、【解】题目中要求打印的是三位数,且个位数必须是6。因此可以for循环,它的循环控制变量从106开始,直到996为止,增量为10(因此要保证个位数是6)。由于还要打印这种数据的总个数,因此需要设置一个用于计数的变量,比如是count。发现一个这样的数,它就加1。为了满足一行打印8个数据要求,可以利用计数器count,让这样的数一个个地打印下去。如果count %8= =0,就打印一个回车换行。具体程序如下:
#include
void main( )
{
int count=0,j;
for(j=106;j<=996;j+=10)
{
if(j%3!=0)
continue;
else
{
count++;
printf("%d\t",j);
if(count%8==0)
printf("\n");
}
}
printf("\nThe count is %d\n",count);
}
运行此程序,输出结果如下图所示。
4、【解析】
(1)分析题意,建立数据模型,设计算法。
该问题可用枚举法实现,直接用C语言描述:
scanf (“%d”,&n); /* 输入n */
for (A=1;A
for (B=A+1;B
{
C=(int)sqrt (A*A+B*B); /*计算C值*/
if ((C<=n)&&(A*A+B*B==C*C)) /* 输出勾股数*/
{
printf (“[%5d”“%5d”%5d] “,A,B,C);
count + +;
if (count%3= =0) printf (“\n”);
}
}
(2) 编程。
#include
#include
void main( )
{
int n,A,B,C,count=0;
printf("输入一个正整数:");
scanf ("%d",&n);
for (A=1;A
for (B=A+1;B
{
C=(int)sqrt(A*A+B*B);
if ((C<=n)&&(A*A+B*B==C*C))
{
printf ("[%5d %5d %5d]",A,B,C);
count++;
if (count%3==0)printf ("\n");
}
}
printf ("\n");
}
(3)程序运行示例
输入一个正整数:40
[ 3 4 5 ] [ 5 12 13 ] [ 6 8 10 ]
[ 7 24 25 ] [ 8 15