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

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;}

1 2 5 1\\ 2\\ 5\\ 125

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;
 }

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

如果一万个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;
 }

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

实际上述循环语句是可以用条件语句和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\\ 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\\ 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;
}

华丽登场函数!

下次再说:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值