(学习记录)C 0001——简单的了解C语言

2024-04-13 10:08

本文主要是介绍(学习记录)C 0001——简单的了解C语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从0开始的C语言学习记录

  • 自我介绍
    • 目标
    • 如何学好编程
  • 开始学习C的第一个程序
    • 主函数
      • int main(void) 和 int main()的区别
      • 过时的代码
      • Hello World
    • 数据类型
      • 数据类型的使用和大小
      • ASCII码表
    • 变量和常量
      • 变量的分类
      • 变量的使用


自我介绍

我很喜欢玩游戏,不管是以前的经典游戏,还是近年来的3A级大作,每每在体验到它们优秀的可玩性或者让人难以忘怀的故事情节时,让我常常想,自己也能做一款这样令人满意的游戏, 这就是我想学好编程的动力。


目标

要想成为一名合格程序员。首先要学好最基础的C语言,再系统的、全面的学习,其他应该要熟练掌握编程知识,打好坚实的基础,培养出优秀的能力。


如何学好编程

学好编程,不仅仅是学会一门计算机高级语言C/C++/JAVA,还要熟练掌握如算法数据结构操作系统数据库等等身为程序员所应该掌握的基础知识

除应该掌握的基础知识以外,还要注重的问题:

  1. 一直不断去学习的能力。因为计算机技术更新很快,新技术新知识层出不穷稍不注意可能就跟不上技术发展的趋势

  2. 培养自己解决问题的能力。在学习中出现的大部分问题都被解决过,所以代码出现BUG,首先自己要勤于调试代码,找到问题所在,思考问题出现的根源,如果解决不了再去网页查找,最后网页查找还是解决不了,再去向大神或者老师提问。

  3. 提高自己的表达能力。谁也不是你的知音,不可能知道你的所有想法,该表达你的所想时,先组织好语句,让他人清晰、明确你所述的想法。

这就是我现在所理解也要去完成的,如何学好编程所要做的事情。


开始学习C的第一个程序

主函数

也就是main函数

在一个程序中主函数有且仅有一个

在C89/C99/C11标准文档中提供了两种main函数的写法

//第一种写法
int main(void)
{return 0;
}
//形参为void,表明它在调用的时候不能传入任何参数,
//那么它也就不能获取命令行参数了。
///
//第二种写法
int main(int argc, char* argv[])
{return 0;
}
//第一个入参为命令行参数个数,第二个入参为命令行参数数组。
//通常用于实现需要从命令行获取参数的功能。

int main(void) 和 int main()的区别

int main(void)

指此函数的参数为空,不能传入参数,若输入参数则会出错,但必须要有返回值,如return 0;。

int main()

可以传入参数,程序需要返回值。


过时的代码

在一些书中常常看到这样的主函数

void main()
{}

这是已经过时的写法,如果那一本书还能看到,证明这本书已经过时了,尽早换书吧!


Hello World

按照某个不成文的传统,开始第一个程序“Hello World

#include<stdio.h>//stdio—标准输入输出//int —整型 —整数的类型
//main函数 — 也就是主函数 它是程序的入口
int main()
{printf("Hello World\n");//库函数—打印函数—输出函数return 0;
}

数据类型

为什么写代码?
为了使生活更加便利,所以有了我们常用的微信,京东等等一系列应用软件。

假如我买一件东西它的价格为100元,这个数在数学中表示为整数。
在C语言是叫做整型,分为:
字符数据类型(char);
短整型(short);
整型(int)
长整形(long)
更长的整型(long long)。

假如我的体重为45.5公斤,这个数在数学中表示为小数。在C语言中叫做浮点数分为:
单精度浮点数(float);
双精度浮点数(double)。


数据类型的使用和大小

  1. 为什么要存在这么多类型?
int main()
{short age = 18;int price = 20000;float weight = 55.5;return 0;
}

因为每个数据类型大小各不相同,所以为了避免空间浪费,要用合适的类型表达。

  1. 如何计算一个类型创建的变量所占空间的大小呢?

用sizeof计算,如图:

int main()
{                              printf("%d\n", sizeof(char));//1字节printf("%d\n", sizeof(short));//2字节printf("%d\n", sizeof(int));//4字节printf("%d\n", sizeof(long));//4字节printf("%d\n", sizeof(long long));//8字节printf("%d\n", sizeof(float));//4字节printf("%d\n", sizeof(double));//8字节return 0;
}

计算机中的单位

单位大小
Bit1
1 Byte(字节)8 Bit
1 KB1024 Byte
1 MB1024 KB
1 GB1024 MB
1 TB1024 GB
1 PB1024 TB

char的取值范围 -128 ~ +127 (1 Byte)
short的取值范围 -32767 ~ + 32768 (2 Bytes)
unsigned short的取值范 0 ~ 65536 (2 Bytes)
int 的取值范围-2147483648 ~ +2147483647 (4 Bytes)
unsigned int 的取值范围0 ~ 4294967295 (4 Bytes)

具体如何计算它的取值范围,以后再学习。

  1. 为什么sizeof(long)和sizeof(int)相同
    因为c语言规定 sizeof(long)>= sizeof(int) ,所以在不同计算机sizeof(long)可能是8,也可能是4。

ASCII码表

ASCII码表
ASCII码表有什么用?
如图:

int main()
{char ch = 'e';printf("%c\n", ch);//结果为eprintf("%d\n", ch);//结果为101return 0;
}

为什么%d输出后结果为101?
因为根据ASCII码表,字符e所对应的10进制数为101。

变量和常量

生活中有些值是不变的(比如:圆周率,身份证号,血型等等)
这样的值就叫做常量。因此可以变换的值就叫做变量
例如:

int main()
{//age是变量short age =10;age = 11;printf("%d\n", age);//11return 0;
}

变量的分类

  1. 变量分为局部变量全局变量
    如图:
int g = 100;//全局变量
int test()
{int b = 1000;//局部变量
}
int main()
{int a = 10;//局部变量return 0;
}
  1. 如果全局变量名和局部变量名相同时,变量的值是全局变量的值还是局部变量值?
int a = 100;
int main()
{int a = 10;//局部变量和全局变量的名字可以相同,//相同时,局部优先,但不建议相同printf("%d\n", a);//结果是10return 0;
}

变量的使用

  1. 变量如何使用?
int main()
{int num1 = 0;//创建第一个变量,赋值为0。int num2 = 0;//创建第二个变量,赋值为0。scanf("%d%d", &num1, &num2);//输入两个数int sum = num1 + num2;//两个数相加,相加的值赋给sumprintf("%d\n", sum);//输出sum的值return 0;
}
  1. 在使用scanf时所要注意的事项
    由于VS编译器由于认为scanf函数不安全,会编译不过去,有两种解决办法,第一种方法:用scanf_s函数,缺陷是其他编译器不认。第二种方法:在代码行第一行#define _CRT_SECURE_NO_WARNINGS 1

输入时注意的问题

scanf("%d%d", &num1, &num2);

在写代码时,如果2个%d之间或者前面亦或者后面,加入了任意字符或者数字,在输入数据时,加上你所输入的字符或者数字。


这篇关于(学习记录)C 0001——简单的了解C语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899839

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl