C语言笔记(2)

     今天发现一个在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; 
}

演示结果:

      



猜你喜欢

转载自blog.csdn.net/peng_258/article/details/78094183