[求助]关于for循环的2个题目~字母菱形和数字统计
小弟我才开始学c语言编程不久,还请各位高手多指导~这个是前2天我们老师布置的2到课本上的题目,但是想了半天没想出来――――谁来帮我下啊?
(1)统计区间【1000,9999】内所有被7整除,且千位与个位数字之和为7的整数个数。
这题我想用if来做,可做来做去就是不对,另外,我也不知道怎么去实现统计数字的个数……
(2)设计程序打印出以下字母的图案:菱形为N(奇数,键盘输入)行,第一行为字母A,第二行为BCD,第三行为CDEFG,以此类推。菱形上下对称相同。例如,输入N=7时,菱形如图:
A
B C D
C D E F G
D E F G H I J
C D E F G
B C D
A
这题我不知道为什么,就是不能正确输出字母……做个循环就出来满屏幕的字母,不知道该怎么把那些字母一好好的输出了……
各位高手帮帮我啊~
[[it] 本帖最后由 采书大盗 于 2008-4-5 13:46 编辑 [/it]]
----------------解决方案--------------------------------------------------------
第二题
程序代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
int lines;
int i,j,k;
char first;
printf("请输入一正奇数(1~17)");
scanf("%d",&lines);
while(lines%2==0 || lines<=0 || lines>17) //lines大于17后,将打印非大写字母;
{
printf("ERROR!重新输入:");
scanf("%d",&lines);
}
for(i=-(lines/2);i<=lines/2;i++)
{
first='A'+(lines/2-abs(i)); //控制每行首字符;
for(j=abs(i);j>0;j--)
printf(" ");
for(k=lines;k>2*abs(i);k--) //打印字符;
{
printf("%c",first++);
}
printf("\n");
}
return 0;
}
#include<math.h>
int main(void)
{
int lines;
int i,j,k;
char first;
printf("请输入一正奇数(1~17)");
scanf("%d",&lines);
while(lines%2==0 || lines<=0 || lines>17) //lines大于17后,将打印非大写字母;
{
printf("ERROR!重新输入:");
scanf("%d",&lines);
}
for(i=-(lines/2);i<=lines/2;i++)
{
first='A'+(lines/2-abs(i)); //控制每行首字符;
for(j=abs(i);j>0;j--)
printf(" ");
for(k=lines;k>2*abs(i);k--) //打印字符;
{
printf("%c",first++);
}
printf("\n");
}
return 0;
}
[[it] 本帖最后由 now 于 2008-4-6 13:48 编辑 [/it]]
----------------解决方案--------------------------------------------------------
第一道题,你用i,j,k,t分别表示四个位上的数字,用几个循环看看!!
----------------解决方案--------------------------------------------------------
第一题:能被7整除,n%7==0;
个位千位之和为7, (n/1000+n%10)==7;
自己动手做下。
----------------解决方案--------------------------------------------------------
2楼的谢谢了~只是没看明白first='A'+lines/2-abs(i); 里的abs(i);是什么意思,是不是这个函数可以定义字母?能讲一下吗?书上没找到……
另外,第一题我想知道的是如何实现“计数”,找那些数字的语句我基本没什么问题,但是我不知道该如何统计已找出来的数字的个数。
[[it] 本帖最后由 采书大盗 于 2008-4-5 15:07 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我承认我脑袋短路了…………最后自己突然灵感来袭,自己做出来了……第一题,其实很简单的……判断条件,然后加1就可以了…………
#include<stdio.h>
#include<math.h>
main()
{ int s,sn,n;
for(n=1000;n<=9999;n++)
if(n%7==0&&(n/1000+n%10)==7) s=s+1;
printf("s=%d\n",s);
getch();
}
----------------解决方案--------------------------------------------------------
把上面的改了下,我发现楼上的程序里定义的什么s,sn都没用到,直接给删除了,还有几十输出结果可能不是很好看!
#include<stdio.h>
#include<math.h>
main()
{ int s,sn,n;
for(n=1000;n<=9999;n++)
if(n%7==0&&(n/1000+n%10)==7) s=s+1;
printf("s=%d\n",s);
getch();
}
----------------解决方案--------------------------------------------------------
回复 5# 的帖子
abs(i);//数学库函数,取绝对值;first='A'+(lines/2-abs(i));// 控制每行首字母;例:'A'+0=='A','A'+1=='B';
----------------解决方案--------------------------------------------------------
#include <stdio.h>
main()
{
int n,i,j,m;
char c;
printf("请输入一个奇数:");
L: scanf("%d",&n);
if(n<0||n>26||(n%2==0))
{
printf("输入错误!\n重新输入:");
goto L;
}
for(i=1;i<=n;++i)
{
if(i<=(n+1)/2)
{
m=i-1;
for(j=i;j<=n/2;++j)
printf(" ");
for(j=0;j<2*i-1;++j)
{
c='A'+m++;
printf("%c",c);
}
printf("\n");
}
if(i>(n+1)/2)
{
m=n-i;
for(j=1;j<=i-(n+1)/2;++j)
printf(" ");
for(j=0;j<2*(n-i)+1;++j)
{
c='A'+m++;
printf("%c",c);
}
printf("\n");
}
}
}
----------------解决方案--------------------------------------------------------
第一题
#include<stdio.h>int main(void)
{
int i,j=0;
for(i=1000;i<10000;i++)
if(i%7==0&&i/1000+i%10==7)
{
printf(" %d",i);
j++;
if(j%10==0)
puts(" ");
}
printf("\n\n符合这个条件的整数个数为 %d 个。\n",j);
getch();
}
----------------解决方案--------------------------------------------------------