C语言的几道习题:
1.在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
2.求出0~999之间的所有“水仙花数”并输出。
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如:153 = 1^3 + 5^3 + 3^3,则153是一个“水仙花数”。
3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
*今天的几道题都要用到for循环,首先我们来简单谈一下一下for循环:
1)基本形式:
for(循环变量赋初值;循环条件;循环变量增值)
{
语句
}
2)具体执行:
循环变量有了初始值之后,循环开始,执行写出的语句,根据具体的增值变换规则来变换,当循环不满足循环条件时,循环结束,之后后面的语句.
注:在这里要着重注意一下循环中出现 break; 语句和 continue: 语句的情况
break: 出现break;语句后就会立即跳出循环然后进行下一步操作,这个时候循环变量是不会再进行一次自增或者自减的.
continue:出现continue;语句后程序不是跳出循环,而是结束本次循环,只有这一次不执行,然后继续执行下一个数,当不满足循环条件时结束循环.
注:说到循环,有一个语句想必大家也很熟悉,就是goto语句,但是在编程中并不推荐使用此语句,因为有时候别人很容易读懂,相比之下while()循环具有更高的可读性,一点小建议,望采纳.
下面是这几道题的代码:
编译环境:vs2013
1.在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
这道题需要注意的点有:
1)要先观察每一行中空格数和*数都有什么规律,找出之间的规律就很好编了,就是几个循环嵌套在一起.
2)在写这个程序的时候,为了代码更清楚起见我用了两个大的for循环,分别输出上半部分和下半部分
3)原题让输出一个十三行的,我加了一些东西,弄成了自己输入行数的,其实也就是加一个scanf函数,没有什么难度.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t = 0;
int z = 0; //总行数;
printf("输入您要打印的行数:\n");
scanf("%d", &z);
int s = z / 2 + 1; //上半部分高度;
int x = z / 2; //下半部分高度;
printf("您要打印的图案为:\n");
for (int i = 1; i <= s; ++i)
{
for (int j = 1; j <= s - i; ++j)
{
printf(" ");
}
for (t = 1; t <= 2 * i - 1;++t)
{
printf("*");
}
printf("\n");
}
for (int i = x; i >=1; --i)
{
for (int j = 1; j <= s-i; ++j)
{
printf(" ");
}
for (int t = 1; t <= 2 * i - 1;++t)
{
printf("*");
}
printf("\n");
}
printf("\n");
system("pause");
return 0;
}
2.求出0~999之间的所有“水仙花数”并输出。
这道题要注意的点为:
1)先计算出三位数的每一位,然后给每一位三次方就行了,比较简单.
2)要是想求具体区间中有多少个水仙花数,如上,只需要加上一个scanf函数就可以了.我没有加,有具体需要的可以自行加上.
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double sum = 0;
for (int i = 100; i <= 999; ++i)
{
int temp = i;
while (temp > 0)
{
sum += pow(temp % 10, 3);
temp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
else
{
sum = 0;
}
}
system("pause");
return 0;
}
3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
这道题需要注意的点是:
1)怎样设置一个算法,使得出现下一项的值,然后加上它,最后再疏忽总和.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int sum = 0;
int tmp = 0;
int a = 0;
printf("请输入一个数:");
scanf("%d", &a);
for (i = 0; i < 5; i++)
{
tmp = tmp * 10 + a;
sum = sum + tmp;
}
printf("%d\n",sum);
system("pause");
return 0;
}
以上就是这三道题的代码,希望在提升自己的同时也能帮到有需要的人.