在聊C语言之前先说说用哪款编辑器比较好:
目前市面上用的比较多的也是我用过的就是Clion和VSCode,这两款编辑器各有特色Clion主要做的就是 C/C++用起来非常非常简单,连编译器都不用配置。而VSCode则是由微软开发的功能极其全面就连烧录硬件也支持,而且它的插件特别多(这里提及一个特别好玩的插件名字叫:Rainbow Fart Waifu,这个插件可以在你写代码的时候通过好听的语音夸你写的好(语音包支持更改))。
对于新手而言建议使用Clion,或者目前学校机房比较通用的CodeBlocks;
VSCode需要配置编译器相对比较麻烦不建议;
编程语言的共性:(选看)
因为本人对Python有所学习,所以就大概讲讲编程语言的一些共有特点:
例如:
在下面两种语言常用的库调用中,C采用的是#include <>而Python是import,其中这两个单词的意思都差不多是导入的意思,stdio.h是C语言的标准输入输出库,字母的缩写呗。
#include <stdio.h>
import time
C定义一个函数用的是eg;int function(int n){},python是def function():,都大差不差只是一个函数名前是返回值类型一个不是罢了。
int function(int n){ for (int a=0;a<=n;a++){ printf("%d",a); } }
def function(): n=input() for i in range(int(n)+1): print(i)
C中输入信息方式有 :
char strs[10]; gets(strs); fgets(strs,sizeof(strs),stdin); scanf("%s",strs);
而Python的则是:strs=input() 。看似这个点不同的地方有点多,其实也没啥get不就是得到的意思嘛,那肯定是电脑获取到的东西,而scan的意思不就是扫描键盘输入的信息嘛。Python的话input什么意思我想大家都懂了。
说了这么多,再说半天就学不完了。总而言之,他们看似是两种不同的语言其实都大差不差,无非换了个关键词。我的意思是你们无论以后学习什么语言都要借助于已会的语言寻找共同点,这样很快就可以学会了。
特别提醒Python支持面向对象编程而C只能面向过程编程,所以便有了可以面向对象编程的C++
序言:
芜湖,不容易啊,终于写到了序言;
那就浅浅说一下近期我学习C的感悟吧,其实编程语言中的语法部分都很简单(指针那块可能也有些不太好理解)那么难在哪里呢?
难在如何使用这些基础语法完成你要完成的任务,难在算法难在如何简化程序提高运算速度。
今天在九天的帮助下就先帮大家解决基础部分吧,毕竟九天也是一条大咸鱼。
对了,说一句如果程序没有思路可以先把必要的部分写上去,有时候写着写着就有思路了。
1 头文件:
通常会见到两种形式的引入头文件:
#include <stdio.h> #include "my_header.h"
那么<>这种和””这种有什么区别呢?
<>这种格式的话编译器会直接从系统标准库中寻找头文件,而””这种编译器会先在本地找找不到再去系统标准库。不过一般情况不在本地找stdio.h,你问为啥?人家标准库有的东西没必要自己写吧,如果非要如此只能说不是人才都是蠢材。
对于初学C语言而言,基本只需要记住stdio.h, stdlib.h, string.h这几个就好
具体什么时候用什么,后边讲到会说的。不要一次吃太多,三尺之冰非一日之寒。
2 主函数:
对于一个任务下,即使有多个C文件但你会发现有且只有一个,你会好奇有时候我程序明明没有问题为啥无法运行。遇到这种情况就是因为main函数多于一个,检查一下该任务下的别的多余文件将其删除即可。
讲一下主函数的大体规范吧
int main(){ return 0; }
一般主函数不建议返回值为void,如果这样你咋清楚程序是否正常结束呢?
所以一般用int,返回一个0,告诉自己(哥就是个天才,程序根本不会有问题)。
默认情况下0代表没有问题,要是看见1那就要小心了,绝对有大事(小心家被偷了)。
接下来就让我们写下第一个C语言程序吧
#include <stdio.h> int main(){ printf("Hello word!"); return 0; }
3 数据类型
讲到数据类型就不得不提下python了,对于python而言是不需要在创建变量前定义变量数据类型的,而C这个大佬级语言选择了采用。不得不说这个想法真不赖,根据数据类型划分不同大小的空间,从而使程序占用空间更加饱和,促使其运行速度更快。
以下是常用类型(64位编译器下):
char // 1字节(字符型) short //2(短整数型) int // 4(整数型) float // 4(单精度浮点型) double // 8(双精度浮点型) long // 8(长整型) long long // 8(超长整型) void * // 8 指针变量
提一句类型转换分为主动转化和被动转化,eg:
int a=2; double b=13.14; printf("%lf",(double)a); //此时会主动转化为double型 printf("%lf",a*b);//此时a*b这个整体的结果属于double型(强制转化,向字节存储量大的类型转化)
4 变量命名及运算符:
变量名只能由数字,下划线,字母组成。且不能以数字开头。
建议使用英语定义变量,显得高级。虽然九天大废物英语不好常用拼音命名,但还是建议用英文。
常用算术运算符:
+ 加 – 减 * 乘
/ 除(注:如果两个数均为整数型则保留商,若有一个有小数点则转变为真正的除法)
% 取模符即取余符(两数相除只保留余数)
与或非三种逻辑运算符:
&& 且的意思,就是要保证前后两个判断均为真;
|| 或,有一个为真即可;
! 非,如果结果本应为真则返回假;
关系运算符:
==,>=,<=,>,<(这几个应该都知道就不说了)
!=(这个大家应该没见过,它的意思是a不等于b)
上述几个关系运算符当条件正确时返回值均为1,否则为0。
so if判断语句中当判断为真时执行if语句正是因为返回值为1。
都说了这么多了,那把自增自减也讲一下吧:
a++;意思即为如果a一开始为1,那么经过它就会加1变为2
a- –;同理
我既然都讲自增自减了,那我把下边这个也说一下吧:
+=,-=,*=,/=
以大家聪明的大脑我想我说一个应该就懂了,eg:a+=b(意思即为a=a+b)
是不是很简单呢?那咱们就下一知识点吧!
5 if 以及switch语句:
if语句:
if 语句其实超级超级简单,不就是一个判断嘛!如果if ( )括号内返回值为1则执行if 语句,否则跳过。
如果if 后边有else 语句则会在跳过if 后直接执行else语句。
除此之外还有一种写在if 后边的就是else if() 语句它与else的区别就在于它会判断括号中的内容返回值是否为1。
下面举一个例子来进行说明:
#include <stdio.h> int main(){ int a=0; if (a>0){ printf("hello word!"); }else if (a==0){ printf("九天真帅!"); }else { printf("hello!"); } return 0; }
原本想对这个例子进行讲解的,但转念一想,应该留给大家去思考。实在不会的话自己把程序原封不动复制到编辑器上跑一跑。毕竟编程的学习光听是不行的。九天相信聪明的大家是一定会的,加油!
哦对,差点都忘了if 语句是可以嵌套的但不建议超过三层。
switch语句:
switch顾名思义就是开关的意思嘛,具体它是干什么的,我感觉这个举一个例子来讲会比较容易懂,放心这次不会让大家猜了
/*其下为部分代码,不是整体*/ switch(a+b){ case 1:printf("大家好");break;//当case后面的内容等于a+b就执行“:”后面的内容 case 2;printf("我是人见人爱花见花开的");break; default:printf("九天");break; //default 顾名思义无效力的,也就是说switch后面括号中的内容如果与case后面的内容都不一样就执行它; }
在上述代码中傻傻的九天犯了一个低级错误,希望大家能帮忙指出。(不是在解释语句中哦!)
—–持续更新中,催更可在下方留言—–
#include
using namespace std;
class Person{
public:
char *name;
int age;
int xue=100;
char *gun=NULL;
int zidanshu=0;
int weili=0;
Person(char *name){
this->name=name;
}
void naqiang(char *gun){
this->gun=gun;
}
void person_info(){
cout<<"name "<<name<<" age"<<age<<" 血 "<<xue;
if (gun==NULL){
cout<<" 老王没枪"<<"子弹数"<<zidanshu<<\n";
}else {
cout<<" 老王有枪"<<gun<<"子弹数"<<zidanshu<name=name;
}
void gun_info(){
cout<<"name"<name<<"子弹数"<danshu<weili=li;
}
};
int main(){
class Person hero(“老王”);
hero.age=18;
hero.person_info();
class Gun gun(“AK47”);
gun.gun_info();
class Dan zidan(80);
hero.gun=gun.name;
hero.person_info();
return 0;
}
//int main()
//{
// int a,b,c;
// scanf(“%d%d%d”,&a,&b,&c);
// if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
// {
// printf(“yes”);
// }else
// {
// printf(“no”);
// }
// return 0;
//}
//int main()
//{
// int a,b;
// scanf(“%d %d”,&a,&b);
// if(a>0&&b>0)
// {
// printf(“1”);
// }else if(a0)
// {
// printf(“2”);
// }else if(a<0&&b<0)
// {
// printf("3");
// }else
// {
// printf("4");
// }
// return 0;
//}
//int main()
//{
// int a;
// scanf("%d",&a);
// if(a10000&&a50000)
// {
// printf(“%.2lf”,3200+(a-50000)*0.02);
// }
// return 0;
//}
//int main()
//{
// int a;
// scanf(“%d”,&a);
// if(a>=90)
// {
// printf(“A”);
// }else if(a>=80&&a=70&&a=60&&a<70)
// {
// printf("D");
// }else if(a<60)
// {
// printf("E");
// }
// return 0;
// }
//int main()
//{
// double a;
// scanf("%lf",&a);
// if(a=500&&a=1000&&a=3000&&a=5000)
// {
// printf(“%.2lf”,a*0.8);
// }
// return 0;
//}
int main()
{
int a;
scanf(“%d”,&a);
if(a=-2&&a=3)
{
printf(“%d”,3*a+4);
}
return 0;
}