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;}
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还这么做?当然不了!
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;
}
实际上述循环语句是可以用条件语句和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;
}
#include<stdio.h>
int main(){
int sum=0,i=0;
while(sum !=3003)
{
i++;
sum=sum+i;
}
printf("%d\n",i);
return 0;
}
注意避免死循环: 比如使用 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语言基础语法-屠龙第一步
-
《Swift 4.0 语言学习之路》第一章 语法基础篇(3)
-
C语言基础练习1:将一个正整数分解质因数。
-
C语言基础学习运算符-逻辑运算符 博客分类: C语言 逻辑运算truefalse!||
-
C语言基础学习运算符-自增自减 博客分类: C语言 i++++i自增自减
-
C语言基础学习运算符-自增自减 博客分类: C语言 i++++i自增自减
-
C语言基础学习运算符-逗号表达式 博客分类: C语言 逗号表达式
-
C语言基础学习分支与跳转-if语句 博客分类: C语言 if分支语句
-
C语言基础学习运算符-逗号表达式 博客分类: C语言 逗号表达式
-
C语言基础学习运算符-条件表达式 逗号表达式?