今天发现一个在C语言中常犯的毛病,百思不得其解,经过经过一阵的挣扎,最终想出来了。。。
(1)输出4*5的矩阵
#include<stdio.h>
int main()
{
int i,j,n=0;
for(i=1;i<5;i++)
for(j=1;j<6;j++,n++)
{
if(n%5==0)
printf("\n");
if(i==3&&j==1)break;
printf("%d\t",i*j);
}
printf("\n");
return 0;
}
运行结果如下:
如果有的同学可能这样认为:
以这个思路走的时候,当进行到break后,n的值应该是11,所以不应该有空行,导致左思右想不明白,在正确的语法中,for语句是逆时针走的。
(2)
#include<stdio.h>
int main()
{
unsigned long i;
char c;
for(i=0;(c=getchar())!='\n';i+=c);// 接收字符转换为ASCII码进行累加(无需循环体)
printf("%d",i);
return 0;
}
(3)
// 输出100-200之间的所有素数
/*
*1.偶数不属于素数(101,103,。。。)
*2. 如果一个数A不是素数的话,它不会被0~sqrt(A)的数整除
*/
#include<stdio.h>
#include<math.h>
int main()
{
int i=0;
int j,k;
int m=0;
for(i=100;i<=200;i++)
{
j=sqrt(i);
for(k=2;k<=j;k++)
if(i%k==0)break; //此数将被整除(不是素数)
if(k>j)
{
printf("%d\t",i);
if((++m)%10==0)
printf("\n");
}
}
return 0;
}
(4)
//输出一个菱形图形
/**
*1->4
*2->3,4,5
*3->2,3,4,5,6
*4->1,2,3,4,5,6,7
*5->2,3,4,5,6
*->3,4,5
*7->4
**/
#include<stdio.h>
int main()
{
int i,j,k;
for(i=1;i<=4;i++)
{
for(j=0;j<4-i;j++)
printf(" ");
for(k=0;k<2*i-1;k++)
printf("*");
printf("\n"); //正向
}
for(i=1;i<4;i++)
{
for(j=1;j<=i;j++)
printf(" ");
for(k=7-2*i;k>0;k--)
printf("*");
printf("\n"); //反向
}
return 0;
}
演示结果: