欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言基础语法-屠龙第一步

程序员文章站 2024-03-23 23:59:04
...

C 语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。

至于我为什么专注学习C语言,因为很多研究图论新算法等程序用C语言极为活跃。不得不学。否则难以看懂延伸。

可能更多的熟悉C的大佬们注重C的运行效率,哪怕编写废点力气。毕竟轮上C去解决一些图论算法,效率上来说要求高的不是一点点。如果是普通的程序我们完全可以用商业软件去做,或者python方便的语言去做。

写C语句脑子里得放相应的语法。对一些基础语法的学习非常有必要。这个不掌握后面寸步难行。不过学习的方式倒是可以多样,可以看教程,最有效的办法是不要脱离计算机,结合示例去敲敲,去编译。

下面的例子有的过于简单,但是麻雀虽小,五脏俱全。

1 程序流程

1.1 屠龙技术 goto

无条件转向语句goto,用很舒服,但会造成程序可读性差,转来转去混乱不堪。基本上属于屠龙技巧,不建议使用。

#include<stdio.h>
int main()
{printf("1\n");
printf("2\n");
goto l;
//转到l标签,l是有效标签; 数字1不是。
printf("3\n");
printf("4\n");
l:
printf("5\n");
return 0;}

125 1\\ 2\\ 5\\

2 规距做人

2.1 条件语句登场

既然不推荐使用 goto, 那么我们则只能使用一些条件语句。

例如想判定一个数是偶数。

#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a%2==0)
{printf("%d是偶数!\n",a);}
return 0;}
8
8是偶数!

条件判断语句有两个作用: 1 改变程序流程。2 事物判定。这才显示计算机的智能。如果只关心一个方面,它的格式如下:

if(条件)//常量 变量 运算式 比较式
{条件成立执行
}

更多地:考虑事物的对立面。

#include<stdio.h>
int main(){
int a=0;
scanf("%d",&a);
if(a%2==0)
{
    printf("%d是偶数!\n",a);
}
if(a%2!=0)
{
    printf("%d是奇数!\n",a);
}
return 0;}

像上面这样关心正反两个事物都关心可以用 if else语句。

#include<stdio.h>
int main(){
int a=0;
scanf("%d",&a);
if(a%2==0)
{
    printf("%d是偶数!\n",a);
}
else
{
    printf("%d是奇数!\n",a);
}
return 0;}

事物多个情况出现。我们可以用上面已经学习的if -else嵌套那样去做。

#include<stdio.h>
int main(){
int a=0;
scanf("%d",&a);
printf("请输入一个有效的分数(0-100)\n");
if(a<60)
{
    printf("%d是不及格\n",a);
}
else
{
    if(a<80)
    {printf("%d是及格\n",a);}

    else
        {
        if(a<90)
            {printf("%d是良好\n",a);}
        else
            {printf("%d是优秀\n",a);}
        }
}

return 0;}

但是上述的代码很复杂。但是很有代表性。如果一个事物判定超过两个方面,C语言专门设计了多重条件语句。语法结构如下

if()
{}
else if() {}
else if(){}
else{}

上面的判断等级的嵌套语句可以简化如下;清爽。

#include<stdio.h>
int main(){
int a=0;
scanf("%d",&a);
printf("请输入一个有效的分数(0-100)\n");
if(a<60)
{
    printf("%d是不及格\n",a);
}
else if(a<80)
    {printf("%d是及格\n",a);}

else if(a<90)
    {printf("%d是良好\n",a);}
else
    {printf("%d是优秀\n",a);}9
return 0;}

2.1.2 开关语句

我们考虑对0-10数字进行汉字对应编号,输入0 输出零。

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    if(a==0)
    {
        printf("零\n");
    }
   if(a==1)
    {
        printf("壹\n");
    }
     if(a==2)
    {
        printf("貳\n");
    }
     if(a==3)
    {
        printf("叁\n");
    }
     if(a==4)
    {
        printf("肆\n");
    }
     if(a==5)
    {
        printf("伍\n");
    }
     if(a==6)
    {
        printf("陸\n");
    }
     if(a==7)
    {
        printf("柒\n");
    }
     if(a==8)
    {
        printf("捌\n");
    }
     if(a==9)
    {
        printf("玖\n");
    }
     if(a==10)
    {
        printf("拾\n");
    }

return 0;}

问题的确解决了,可是效率比较低,需要逐行判断。用 else if效率高。

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    if(a==0)
    {
        printf("零\n");
    }
   else if(a==1)
    {
        printf("壹\n");
    }
   else  if(a==2)
    {
        printf("貳\n");
    }
   else  if(a==3)
    {
        printf("叁\n");
    }
    else if(a==4)
    {
        printf("肆\n");
    }
     else if(a==5)
    {
        printf("伍\n");
    }
     else if(a==6)
    {
        printf("陸\n");
    }
    else if(a==7)
    {
        printf("柒\n");
    }
     else if(a==8)
    {
        printf("捌\n");
    }
   else  if(a==9)
    {
        printf("玖\n");
    }
   else  if(a==10)
    {
        printf("拾\n");
    }
    else
    {
        printf("对不起,无法转换\n");
    }
return 0;}

对于上述的我们可以选择开关语句,不过下面开关语句完全可以用多重语句替代。作为了解。

#include<stdio.h>
int main(){

    int a;
    scanf("%d",&a);
    switch(a)
    { case 0:
         printf("零\n");
         break;
     case 1:
         printf("一\n");
         break;
    default:
        printf("对不起,无法转换\n");
        break;

    }
    return 0;
    }

2.2 连续不断循环出击

循环次数已知

#include<stdio.h>
int main()
{//从某一处开始连续不断做某事
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");
    printf("1\n");

return 0;
 }

111111111 1\\ 1\\ 1\\ 1\\ 1\\ 1\\ 1\\ 1\\ 1\\

如果一万个1还这么做?当然不了!

for (表达式1(赋值语句 初值);表达式2 (条件) ;表达式3 增值的赋值语句)

#include<stdio.h>
int main()
{
    for(int i =0;i<9999;i++)
   {
       printf("1\n");
   }

return 0;
 }

现在要求改一下,输出1-100;

#include<stdio.h>
int main()
{
    for(int i =1;i<101;i++)
   {
       printf("%d\n",i);
   }

return 0;
 }

如果步长不是1呢? i++ 代表 i=i+1;

#include<stdio.h>
int main()
{
    for(int i =11;i<=55;i=i+3)
   {
       printf("%d\n",i);
   }

return 0;
 }

111417202326293235384144475053 11\\ 14\\ 17\\ 20\\ 23\\ 26\\ 29\\ 32\\ 35\\ 38\\ 41\\ 44\\ 47\\ 50\\ 53\\

实际上述循环语句是可以用条件语句和goto语句结合处理的, 这样才能程序上回头做。

#include<stdio.h>
int main()
{ int i=11;
label:
     {
         printf("%d\n",i);
         i=i+3;
     }
     if (i<55)
     {
         goto label;
     }

return 0;
 }

继续需要学习的有嵌套循环,复杂循环逐步学习。

#include<stdio.h>
int main()
{ int i=9;
for(int a=i;i>0;i--)
{
  printf("%d\n",i);
}
return 0;
}

不知道循环次数?while / do while

从1 加到100之和。这是知道循环的次数,循环次数可以用循环变量控制。

#include<stdio.h>
int main()
{ int sum=0,i;
for( i=1;i<=100;i++)
{
  sum=sum+i;//sum+=1
}
 printf("%d\n",sum);
return 0;
}

从1到100加到哪个数是3003.

#include<stdio.h>
int main()
{ int sum=0,i;
for( i=1;i<=100;i++)
{
  sum=sum+i;//sum+=1
  if(sum==3003)
  {
      break;
  }
}
 printf("i=%d\n",i);
return 0;
}

77 77\\

#include<stdio.h>
int main(){
    int sum=0,i=0;
    while(sum !=3003)
        {
            i++;
            sum=sum+i;
        }
 printf("%d\n",i);
return 0;
}

77 77\\

注意避免死循环: 比如使用 for(;????{} 则始终符合循环条件,陷入死循环。如果此过程还耗内存,则死机。

不知道循环次数,条件第一次不符合还是需要做一次。

#include<stdio.h>
int main(){
    int sum=0,i=0;
    do{
            i++;
            sum=sum+i;
        }while(sum!=3003);

 printf("%d\n",i);
return 0;
}

问题

进行一次考试,统计考试平均分。

思路: 采集分数,累加,平均。

使用 for? 知道班级人数;

如果不知道人数,结束标志。比如出现负分结束。

知道人数;

#include<stdio.h>
int main(){
    int n;//保存总人数
    int score;//成绩
    int sum=0;//总分
    printf("请输入总人数:");
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        printf("请输入第%d名同学成绩:",i);
        scanf("%d",&score);
        sum+=score;
    }
    printf("平均分是:%g\n",1.0*'sum/n);
return 0;
}

不知道人数。

#include<stdio.h>
int main(){
    int n=0;//保存总人数
    int score;//成绩
    int sum=0;//总分
    printf("请输入第%d个同学的成绩:",n+1);
    scanf("%d",&score);
    while (score>0)
    {
        n++;
        sum+=score;
        printf("请输入第%d名同学成绩:",n+1);
        scanf("%d",&score);
    }
    printf("平均分是:%g\n",1.0*sum/n);
    printf("总人数%d",n+1);
return 0;
}

华丽登场函数!

下次再说:

相关标签: C语言