-
c语
2020-12-22 14:21:00C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。 C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及...C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。
C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。
当前最新的 C 语言标准为 C18 ,在它之前的 C 语言标准有 C17、C11...C99 等。
#include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! \n"); return 0; }
- 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
- /* ... */ 用于注释说明。
- printf() 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明。
- stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
- return 0; 语句用于表示退出程序。
-
单片机C语语言编程常用语句.ppt
2020-08-28 02:26:34单片机C语语言编程常用语句.ppt -
SN8P2501B的C语程序
2012-09-03 17:59:49松翰芯片SN8P2501B的C语程序,消毒柜产品程序工程文件 -
c 语 言 程 序 设 计 哈尔滨工业大学计算机学院 侯俊英.pptx
2020-02-26 00:56:31C 语 言 程 序 设 计;一教学内容;第1章 程序设计基础;计 算 机;计算机基本工作过程;计算机基本工作过程;软件的形成;软件运行过程的简单描述;程序设计语言Programming Language是人与计算机进行交流的语言 计算机直接... -
身份证号码验证——C语小程序言
2020-04-07 15:02:31身份证号码验证——C语小程序言 #include <stdio.h> int main(){ int a, b, num = 0, sum = 0; int arr[17] = {0}; int arr1[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; printf("请输入你身份证号码的...身份证号码验证——C语小程序言
#include <stdio.h> int main(){ int a, b, num = 0, sum = 0; int arr[17] = {0}; int arr1[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; printf("请输入你身份证号码的前十七位:\n"); for(num = 0; num <= 16; num++){ scanf("%d",&arr[num]); } for(num = 0; num <= 16; num++){ sum += (arr[num] * arr1[num]); } b = sum % 11; printf("请输入你身份证号码最后一位(若为X则输入10):\n"); scanf("%d",&a); printf("%d\n",b); if(b == 0 && a == 1){ printf("验证通过\n"); } else if(b == 1 && a == 0){ printf("验证通过\n"); } else if(b == 2 && a == 10 ){ printf("验证通过\n"); } else if(b == 3 && a == 9 ){ printf("验证通过\n"); } else if(b == 4 && a == 8 ){ printf("验证通过\n"); } else if(b == 5 && a == 7 ){ printf("验证通过\n"); } else if(b == 6 && a == 6 ){ printf("验证通过\n"); } else if(b == 7 && a == 5 ){ printf("验证通过\n"); } else if(b == 8 && a == 4 ){ printf("验证通过\n"); } else if(b == 9 && a == 3 ){ printf("验证通过\n"); } else if(b == 10 && a == 2 ){ printf("验证通过\n"); } else { printf("验证不通过\n"); } return 0; }
-
c语萌新,原创井字棋
2021-02-03 23:30:40c语萌新(才刚刚学到二维数组)自己想的井字棋小游戏, 希望大佬指点指点有什么不规范的地方,谢谢 #include <stdio.h> int main() { int a[3][3]={0,0,0,0,0,0,0,0,0}; int i,j,z,b,c,d,e,f,g,h,k,l,s,o,q; ...c语萌新(才刚刚学到二维数组)自己想的井字棋小游戏,
希望大佬指点指点有什么不规范的地方,谢谢#include <stdio.h>
int main()
{
int a[3][3]={0,0,0,0,0,0,0,0,0};
int i,j,z,b,c,d,e,f,g,h,k,l,s,o,q;b=a[0][0]; c=a[0][1]; d=a[0][2]; e=a[1][0]; f=a[1][1]; g=a[1][2]; h=a[2][0]; k=a[2][1]; l=a[2][2]; printf(" 0 1 2\n"); printf("0 %d |%d |%d\n---------\n",b,c,d); printf("1 %d |%d |%d\n---------\n",e,f,g); printf("2 %d |%d |%d\n---------\n",h,k,l); for(z=1;z<10;z++) {
start:
printf(“round %d\n”,z);
printf(“player1 enter line\n”);
scanf("%d",&i);
printf(“player1 enter arrage\n”);
scanf("%d",&j);if(i<=2 && i>=0 && j<=2 && j>=0 && a[i][j]==0) { a[i][j]=1; b=a[0][0]; c=a[0][1]; d=a[0][2]; e=a[1][0]; f=a[1][1]; g=a[1][2]; h=a[2][0]; k=a[2][1]; l=a[2][2]; printf(" 0 1 2\n"); printf("0 %d |%d |%d\n---------\n",b,c,d); printf("1 %d |%d |%d\n---------\n",e,f,g); printf("2 %d |%d |%d\n---------\n",h,k,l); } else { goto start; } if(b==c==d && b>0 && c>0 && d>0 || b==e==h && b>0 && e>0 && h>0 || b==f==l && b>0 && f>0 && l>0 || e==f==g && e>0 && f>0 && g>0 || h==k==l && h>0 && k>0 && l>0 || c==f==k && c>0 && f>0 && k>0 || d==g==l && d>0 && g>0 && l>0 || d==f==h && d>0 && f>0 && h>0) { q=1; goto p1win; } if(b!=0 && c!=0 && d!=0 && e!=0 && f!=0 && g!=0 && h!=0 && k!=0 && l!=0) { o=1; goto tie; }
start1:
printf(“player2 enter line\n”);
scanf("%d",&i);
printf(“player2 enter arrage\n”);
scanf("%d",&j);if(i<=2 && i>=0 && j<=2 && j>=0 && a[i][j]==0) { a[i][j]=2; b=a[0][0]; c=a[0][1]; d=a[0][2]; e=a[1][0]; f=a[1][1]; g=a[1][2]; h=a[2][0]; k=a[2][1]; l=a[2][2]; printf(" 0 1 2\n"); printf("0 %d |%d |%d\n---------\n",b,c,d); printf("1 %d |%d |%d\n---------\n",e,f,g); printf("2 %d |%d |%d\n---------\n",h,k,l); } else { goto start1; } if(b==c==d && b>1 && c>1 && d>1 || b==e==h && b>0 && e>0 && h>0 || b==f==l && b>1 && f>1 && l>1 || e==f==g && e>1 && f>1 && g>1 || h==k==l && h>1 && k>1 && l>1 || c==f==k && c>1 && f>1 && k>1 || d==g==l && d>1 && g>1 && l>1 || d==f==h && d>1 && f>1 && h>1) { s=1; goto p2win; } }
p1win:
if(q==1)
{
printf(“player1 win!!!\n”);
}p2win:
if(s==1)
{
printf(“player2 win!!!\n”);
}tie:
if(o==1)
{
printf(“tie!\n”);
}return 0;
}
-
C/C++语言到Objective-C语
2012-03-13 22:23:14转载:... 从C/C++语言到Objective-C语 2010-12-20 15:55 概念 SEL,IMP的定义 接下来,我们来看看 Objective-C 语言中的头文件 objc.h 的定义 : // objc.h t从C/C++语言到Objective-C语2010-12-20 15:55概念
SEL,IMP的定义
接下来,我们来看看 Objective-C 语言中的头文件 objc.h 的定义 :// objc.h复制代码
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
typedef struct objc_selector *SEL;
typedef id (*IMP)(id, SEL, …);
typedef signed char BOOL;
#define YES (BOOL)1
#define NO (BOOL)0
#ifndef Nil
#define Nil 0 /* id of Nil class */
#endif
#ifndef nil
#define nil 0 /* id of Nil instance */
#endifid
id和void *并非完全一样。在上面的代码中,id是指向struct objc_object的一个指针,
这个意思基本上是说,id是一个指向任何一个继承了Object(或者NSObject)类的对象。
需要注意的是id是一个指针,所以你在使用id的时候不需要加星号。
比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。
而id *foo=nil则定义了一个指针,这个指针指向另一个指针,
被指向的这个指针指向NSObject的一个子类。
Objective-C的Object
nil
nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个Objctive-C对象,
这个对象的指针指向空(没有东西就是空)。
Nil
首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
SEL
SEL是“selector”的一个类型,表示一个方法的名字。比如以下方法:
-[Foo count] 和 -[Bar count] 使用同一个selector,它们的selector叫做count。
在上面的头文件里我们看到,SEL是指向 struct objc_selector的指针,
但是objc_selector是什么呢?
那么实际上,你使用GNU Objective-C的运行时间库和NeXT Objective-C的运行运行时间库(Mac OS X使用NeXT的运行时间库)时,
它们的定义是不一样的。
实际上Mac OSX仅仅将SEL映射为C字符串。
比如,我们定义一个Foo的类,这个类带有一个- (int) blah方法,那么以下代码:NSLog (@"SEL=%s", @selector(blah));复制代码会输出为 SEL=blah。说白了SEL就是返回方法名。
这样的机制大大的增加了我们的程序的灵活性,
我们可以通过给一个方法传递SEL参数,让这个方法动态的执行某一个方法;
我们也可以通过配置文件指定需要执行的方法,
程序读取配置文件之后把方法的字符串翻译成为SEL变量然后给相应的对象发送这个消息。
在 Objective-C 运行时库中,selector 是作为数组来管理的。
这都是从效率的角度出发:函数调用的时候,
不是通过方法名字比较而是指针值的比较来查找方法,
由于整数的查找和匹配比字符串要快得多,
所以这样可以在某种程度上提高执行的效率。
这样就必须保证所有类中的 selector 须指向同一实体(数组)。
一旦有新的类被定义,其中的 selector 也需要映射到这个数组中。
实际情况下,总共有两种 selector 的数组:
预先定义好的内置selector数组和用于动态追加的selector数组。
方法的定义
简单地说,内置的selector就是一个大的字符串数组。
定义在objc-sel-table.h文件中:#define NUM_BUILTIN_SELS 16371复制代码
/* base-2 log of greatest power of 2 < NUM_BUILTIN_SELS */
#define LG_NUM_BUILTIN_SELS 13
static const char * const _objc_builtin_selectors[NUM_BUILTIN_SELS] = {
".cxx_construct",
".cxx_destruct",
"CGColorSpace",
"CGCompositeOperationInContext:",
"CIContext",
"CI_affineTransform",
"CI_arrayWithAffineTransform:",
"CI_copyWithZone:map:",
"CI_initWithAffineTransform:",
"CI_initWithRect:",
"CI_rect",
"CTM",
"DOMDocument",
"DTD",
...
};可以看到,数组的大小NUM_BUILTIN_SELS定义为16371。
字符串按照字母顺序排序,简单的都是为了运行时检索的速度(二分法查找)。
从定义好的 selector 名称我们可以看到一些新的方法名称,
比如 CIConetext,CI开头的方法是由Tiger开始导入的程序库。
每次系统更新的时候,这个数组也是需要更新的。
动态追加selector
另一个用于动态追加的 selector,
其定义在 objc-sel.m 和 objc-sel-set.m 文件中
新的 selector 都被追加到 _buckets 成员中,
其中追加和搜索使用 Hash 算法。static struct __objc_sel_set *_objc_selectors = NULL;复制代码
struct __objc_sel_set {
uint32_t _count;
uint32_t _capacity;
uint32_t _bucketsNum;
SEL *_buckets;
};IMP
从上面的头文件中我们可以看到,IMP定义为id (*IMP) (id, SEL, …)。复制代码这样说来,IMP是一个指向函数的指针,
这个被指向的函数包括id(“self”指针),调用的SEL(方法名),再加上一些其他参数。
说白了IMP就是实现方法。
我们取得了函数指针之后,也就意味着我们取得了执行的时候的这段方法的代码的入口,
这样我们就可以像普通的C语言函数调用一样使用这个函数指针。
当然我们可以把函数指针作为参数传递到其他的方法,或者实例变量里面,
从而获得极大的动态性。
我们获得了动态性,但是付出的代价就是编译器不知道我们要执行哪一个方法所以在编译的时候不会替我们找出错误,
我们只有执行的时候才知道,我们写的函数指针是否是正确的。
所以,在使用函数指针的时候要非常准确地把握能够出现的所有可能,并且做出预防。
尤其是当你在写一个供他人调用的接口API的时候,这一点非常重要。
方法的定义
在头文件 objc-class.h 中,有方法的定义 :typedef struct objc_method *Method;复制代码
struct objc_method {
SEL method_name;
char *method_types;
IMP method_imp;
};这个定义看上去包括了我们上面说过的其他类型。
也就是说,Method(我们常说的方法)表示一种类型,
这种类型与selector和实现(implementation)相关。
最初的SEL是方法的名称method_name。
char型的method_types表示方法的参数。
最后的IMP就是实际的函数指针,指向函数的实现。
Class的定义
Class(类)被定义为一个指向struct objc_class的指针,
在objc/objc-class.h中它是这么定义的:struct objc_class {复制代码
struct objc_class *isa; /* metaclass */
struct objc_class *super_class; /* 父类 */
const char *name; /* 类名称 */
long version; /* 版本 */
long info; /* 类信息 */
long instance_size; /* 实例大小 */
struct objc_ivar_list *ivars; /* 实例参数链表 */
struct objc_method_list **methodLists; /* 方法链表 */
struct objc_cache *cache; /* 方法的缓存 */
struct objc_protocol_list *protocols; /* protocol链表 */
};由以上的结构信息,我们可以像类似于C语言中结构体操作一样来使用成员。
比如下面取得类的名称:Class cls;
cls = [NSString class];
printf("class name %s\n", ((struct objc_class*)cls)->name); -
C 语 言制定了一套 ANSI 标准
2014-08-22 10:16:25由于没有统一的标准,使得这些 C 语 言之间出现了一些不一致的地方。 为了改变这种情况, 美国国家标准研究所(ANSI)为 C 语 言制定了一套 ANSI 标准, 成为现行的 C 语言标准。 1.2 C 语言的特点 C 语言发展如此迅速, ... -
C语深度言剖析.zip
2020-07-27 19:41:15在问到 C 语言相关的问题的时候,总是没几个人能完全答上我的问 题。甚至一些工作多年,简历上写着“最得意的语言是 C 语言”,“对 C 有很深的研究”, “精通 C 语言”的人也答不完全我的问题,甚至有 个别人我问... -
-
Daily-C-Study(12):C语static关键字
2013-06-03 20:10:20Daily-C-Study(12):C语static关键字 成于坚持,败于止步 不要误以为关键字static 很安静,其实它一点也不安静。这个关键字在C 语言里主要有两个作用,C++对它进行了扩展。 一、修饰变量 第一个作用:修饰变量... -
N个数中找到第K大的数值(C语实现)
2020-09-22 11:26:40分享一份不超时的C语代码~ 测试例子: 思路: 思路超简单,看到题目首先想到的就是先对N个数进行排序,再直接输出第K大的值即可。 1、最简单的方法就是冒泡排序(入门基础知识哈哈) 我试了下,成功超时了。因为... -
c语 json cJSON安装
2020-07-05 14:24:07git clone https://github.com/DaveGamble/cJSON.git cd cJSON/ mkdir build cd build/ cmake .. make sudo make install sudo vim /etc/ld.so.conf 在第二行加上 /usr/local/lib 保存 执行命令 ...cJS -
求c语大师为我解答这题如何解决,如何写代码。
2016-12-20 01:29:22求c语大师为我解答这题如何解决,如何写代码。以附 上图,感谢大师指点。![图片]... -
死宅BALBALBA的奇妙冒险(0)——C语萌新的新手村
2020-05-13 08:27:58在沉沦了大半年之后,我们的死宅balbalba,终于从游戏中苏醒过来,然而,却发现自己意外穿越到了C语大陆,这可怎么办啊。 新手村的入口 balbalba顺着道路来到了一个村子,这个又饥又渴的死宅进村却被挡住了,因为... -
初学c语心得
2015-10-17 23:22:05在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流。 在这个星期里,我们在...学习c程序设计语言除了课堂讲授 -
小白从零开始学习C 之 C语言 顺序结构 C语
2019-03-23 15:15:22小白从零开始学习C 之 C语言 顺序结构 C语言:一个函数包含声明部分和执行部分 C语句分为5类,分别是: 控制语句 函数调用语句。函数调用语句由一个函数调用加一个分号构成。...1.1最基本的语... -
基于adc0809的两路报警及LCD显示的数字电压表proteus仿真程序及C语程序开发包
2013-06-11 07:59:45基于adc0809的两路报警及LCD显示的数字电压表proteus仿真程序及C语程序开发包.zip(lcd显示两路电压数据,第一路电压超过1.25v蜂鸣器响,第二路超过2.5vled灯亮,同时lcd上显示异常。(此压缩包包括proteus仿真程序... -
对c语的认识
2017-10-25 15:28:26C语言是什么。 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。... -
【C语】猜密码
2019-03-28 00:05:48在这里插入代码片#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int i = 0; char a[10] = { 0 };... i... -
c语的言include命令
2018-11-26 00:13:52在命令处插入一个文本文件 比如 a.cpp文件内容 int main(){ fun(); } #include "a.h" a.h文件内容 int i = 1; void fun(); //执行预编译命令 gcc -E a.cpp > temp.cpp ...built-i... -
C语笔记 循环(2)
2020-11-10 09:18:48==不能用来比较两个字符串是否相等,此时应使用库函数strcmp
-
图像分类预习知识笔记
-
Codeforces Global Round 13 ABC题解
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
机器学习可视化软件机器学习可视化软件
-
mysql-8.0.21-winx64.zip
-
【Flutter】StatefulWidget 组件.zip
-
第3章-11 字符串排序 (20 分)
-
C#坦克大战带技能版源码(RealTank).zip
-
2021.2.28 前端题
-
ACID (数据库事务正确执行的四个基本要素的缩写)
-
使用 Linux 平台充当 Router 路由器
-
org.apache.log4j.Logger 使用jar包
-
Kubernetes概述.pdf
-
牛牛量化策略交易
-
request+response学习笔记
-
定时器加案例
-
Http通信协议
-
使用vue搭建微信H5公众号项目
-
2020年-世界五百强前百(中国)
-
应广105G雾化片驱动.rar