- 浏览: 703589 次
文章分类
MobclickAgent——友盟用户分析工具
Android 统计分析 SDK使用指南
登录你的帐号后,看到友盟的管理后台,点击"+添加新应用",进入新应用信息填写的页面。在新应用信息填写中,请尽量填写真实的信息。App建立成功后,可以获得该App的AppKey,以及最新的开发指南和SDK文件。可在这里下载SDK,包含开发文档,demo程序和jar包。
*Tips
您可以通过友盟统计分析平台的特性节省重复建立App的时间。如果您要对App不同的发布渠道进行统计,不需要创建新App (请查看【使用分发渠道分析】),通过分发渠道分析,您可以更方便的对比数据。
- 导入Analytics_Android_SDK_3.2.1.jar(简称SDK)下载地址:点击打开链接
下载最新版sdk的zip包,解压将其中的Analytics_Android_SDK_3.2.1.jar释放到本地目录,Eclipse用户右键您的工程根目录,选择Properties -> Java Build Path -> Libraries, 然后点击Add External JARs... 选择指向 Analytics_Android_SDK_3.2.1.jar 的路径,点击OK,即导入成功。
-
配置AndroidManifest.xml
- 添加应用程序的Appkey(必须), 需要先添加应用程序获得Appkey,获得后写到AndroidManifest.xml的meta-data里。(注意:不要改变字符串'UMENG_APPKEY')
- 添加权限android.permission.INTERNET(必须), 向我们的服务器发送用户分析数据。
- 添加权限android.permission.READ_PHONE_STATE(必须), 这个权限仅为了获取用户手机的IMEI,用来唯一的标识用户。(如果您的应用会运行在无法读取IMEI的平板上,我们会将mac地址作为用户的唯一标识,请添加权限: android.permission.ACCESS_WIFI_STATE )
- android.permission.ACCESS_NETWORK_STATE (可选),检测网络状态,友盟SDK 1.6版本新增权限。
- android.permission.READ_LOGS (可选), 如果您想获得客户端crash的报告, 需要添加这个权限。具体见【使用错误报告】
- android.permission.WRITE_EXTERNAL_STORAGE (可选), 如果您使用了友盟自动更新提醒功能,需添加这个权限,为了将更新的APK临时存在SD卡里。
- 将应用程序的Appkey (需要先添加应用程序获得Appkey) 写到AndroidManifest.xml的meta-data里。(注意:不要改变'UMENG_APPKEY')
此处为添加部分
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< manifest ……>
< application ……>
……
< activity ……/>
< meta-data android:value = "YOUR_APP_KEY" android:name = "UMENG_APPKEY" ></ meta-data >
</ application >
< uses-sdk android:minSdkVersion = "4" ></ uses-sdk >
< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" ></ uses-permission >
< uses-permission android:name = "android.permission.INTERNET" ></ uses-permission >
< uses-permission android:name = "android.permission.READ_PHONE_STATE" ></ uses-permission >
< uses-permission android:name = "android.permission.READ_LOGS" ></ uses-permission >
</ manifest >
|
-
添加代码
- 添加引用:import com.mobclick.android.MobclickAgent
-
注册 Activity:在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context), 传入的参数为当前context的引用,这个方法将会自动地从AndroidManifest.xml文件里读取Appkey。 这里请不要将全局的application context传入。
12345
public
void
onResume() {
super
.onResume();
MobclickAgent.onResume(
this
);
}
-
在每个Activity的onPause方法中调用MobclickAgent.onPause(Context), 只需传入一个参数当前activity的context.
12345
public
void
onPause() {
super
.onPause();
MobclickAgent.onPause(
this
);
}
确保在所有的activity中都调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。注意如果您的Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加onPause和onResume方法,否则会造成重复统计(eg.使用TabHost、TabActivity、ActivityGroup时)。一个应用程序在多个activity之间连续切换时,将会被视为同一个session(启动)。
当用户两次使用之间间隔超过30秒时,将被认为是两个的独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。 在V3.1.1.1以上版本中我们提供了新的接口来自定义这个时间间隔,您只要调用:MobclickAgent.setSessionContinueMillis(long)传入适当的参数,就可以控制session重新启动时间,注意参数是以毫秒为单位的。 例如,如果您认为在60秒之内返回应用可视为同一次启动,超过60秒返回当前应用可视为一次新的启动,那么请写成MobclickAgent.setSessionContinueMillis(60000)。
-
测试
- 确认所需的权限都已经添加:INTERNET, READ_PHONE_STATE, (READ_LOGS, WRITE_EXTERNAL_STORAGE)
- 确认APPKEY已经正确的写入Androidmanifest.xml
- 确认所有的Activity中都调用了onResume和onPause方法
- 确认测试手机(或者模拟器)已成功连入网络
- 启动应用程序,几分钟之后您应该已经可以看到相应的报表.
- 如果几分钟后报表中仍然没有收到数据,请与我们的技术支持联系 QQ 800083942 或者邮件到support@umeng.com我们会尽快回复您的报表.
友盟统计分析工具,还可以帮助您捕捉用户在使用应用程序过程中出现的异常退出(FC), 并在应用程序下次启动时将错误报告发送给服务器。错误报告包含应用程序版本,操作系统版本和设备型号以及程序出现异常时的Stacktrace,这些数据将帮助您修正应用程序的Bug。我们提供两种方式发送 错误报告,一种是我们自动捕获的错误信息,另外一种是开发者自己传递的错误信息
前者,您需要在AndroidManifest.xml里面添加权限android.permission.READ_LOGS,并且在程序的Main Activity (应用程序入口)的onCreate方法里调用MobclickAgent.onError(Context):
1
2
3
4
5
6
|
public void onCreate(Bundle
savedinstanceState) {
super .onCreate(savedInstanceState);
MobclickAgent.onError( this );
...
}
|
后者需要开发者调用 MobclickAgent.reportError(Context context,String error) 在第二个参数中传入,自己扑捉的错误信息。
除了基本统计分析功能外,我们还支持您自定义的事件分析,例如您可以统计游戏中通过不同关卡的人数,广告的点击次数或者视频被播放的次数等等。使用自定义事件功能请先在网站应用管理后台(设置->编辑自定义事件)中添加相应的自定义事件后,服务器才会对相应的自定义事件请求进行处理。
这里我们将提供几个简单而通用的接口:
- 简单事件
在您希望发送事件报告的代码段,调用如下方法就可以向服务器发送事件记录
1
|
MobclickAgent.onEvent(Context
context, String event_id);
|
统计event_id对应事件的发生次数,变化趋势,例如广告点击,短信数量等等。参数context为当前context的引用。event_id为当前统计的事件ID,注意event_id中不要加空格或其他的转义字符
比如,在口袋微博应用程序里一条微博被转发定义为事件"Reply"。那么在点击转发的函数里调用 MobclickAgent.onEvent(this, "Reply") 通知服务器一个转发的事件。
1
|
MobclickAgent.onEvent(Context
context, String event_id, String label);
|
除了能够统计event_id所对应事件的发生次数,变化趋势外,还能统计事件中具体标签所占的比例。label为当前标签,同样这里的event_id字符串中也不能有空格。
比如,在口袋微博程序中,我们定义了一个发布微博的多标签事件"Publish",对应的发布内容有"Text"(发布文本),"Pic0"(发小图),"Pic1"(发中图),"Pic2"(发大图),来对应不同的发布内容,这样我们不仅可以记录Publish事件的点击数量还可以看到不同内容对应的比例。
多标签事件分析图表示例
- 事件累计
在应用程序中某些自定义事件可能会被频繁触发,例如用户点击某个按钮。开发者可以在程序中维护一个计数器,这样某个事件被多次触发但只需要生成一个消息,这个消息中包括该事件被触发的次数。为了支持这个功能,这里我们简单重载了之前的两个接口:
MobclickAgent.onEvent(Context context, String event_id, int acc);
MobclickAgent.onEvent(Context context, String event_id, String label, int acc)
参数acc是对应事件 (和对应标签)被触发的次数。
有时需要统计应用程序的分发渠道,例如有多少用户来从联想乐园下载了您的应用,又有多少用户通过Google android market下载到您的应用程序。您只需要在AndroidManifest.xml里添加meta-data,并将 value属性修改为对应的发布渠道名。
1
2
3
4
5
|
< application ……>
< activity ……/>
< meta-data android:value = "Channel
ID"
android:name = "UMENG_CHANNEL" />
</ application >
|
当然,这需要您在不同渠道发布应用程序时,重新编译打包。
注意
- 不要改变'UMENG_CHANNEL',修改'Channel ID'为您的渠道名称,注意不能是纯数字(eg.value="AndroidMarket")。
- 每台设备只记录第一次统计到的渠道,您如果在测试的时候发现渠道统计到的设备数量不增加,很可能是因为您用同一个设备修改过渠道号。您换一台设备测试即可。
这个功能将帮助您把新版应用程序推送给用户,您只需要:
- 将zip包中layout文件夹下的umeng_analyse_download_notification.xml和values、values-en文件夹下的umeng_analyse_strings.xml复制到对应的文件夹下,此XML文件的作用是绘制状态栏里的下载进度条和多语言支持。
-
在应用程序的入口Activity里的OnCreate() 方法中调用
1
2
3
4
5
|
public void onCreate(Bundle
savedInstanceState) {
super .onCreate(savedInstanceState);
MobclickAgent.update( this );
}
|
-
每次更新应用程序,您只需要修改VersionCode,把应用程序的apk文件上传到友盟。MobclickAgent.update方法会判断是否有新版应用程序,如果发现可更新的应用程序安装包,会提示用户是否更新。用户选择更新后,安装包会在后台下载自动安装更新。(按照version code来检测是否需要更新)
此功能需要添加权限 android.permission.WRITE_EXTERNAL_STORAGE,考虑到用户流程的限制,目前我们默认在Wi-Fi接入情况下才进行自动提醒。如需要在其他网络环境下进行更新自动提醒,则请添加以下代码:1MobclickAgent.setUpdateOnlyWifi(
false
);
- 同时,我们提供了一个判断下载状态的接口MobclickAgent.isDownloadingAPK() 返回boolean 类型的值,true表示正在下载。
-
如果程序想自己处理更新可以按如下步骤,设置updateAutoPopup= false,我们将禁止主动弹框,实现更新监听接口,处理更新事件:
123456789101112131415161718192021222324
MobclickAgent.update(
this
);
MobclickAgent.updateAutoPopup=
false
;
MobclickAgent.setUpdateListener(
new
UmengUpdateListener(){
@Override
public
void
onUpdateReturned(
int
arg) {
switch
(arg){
case
0
:
//has update
MobclickAgent.showUpdateDialog(DemoActivity.
this
);
Log.i(TAG,
"show dialog"
);
break
;
case
1
:
//has no update
Toast.makeText(getParent(),
"has no update"
, Toast.LENGTH_SHORT).show();
break
;
case
2
:
//none wifi
Toast.makeText(getParent(),
"has no update"
, Toast.LENGTH_SHORT).show();
break
;
case
3
:
//time out
Toast.makeText(getParent(),
"time out"
, Toast.LENGTH_SHORT).show();
break
;
}
}
});
-
按渠道更新功能:需要开发者在网站上按照渠道添加对应的更新包,渠道更新的规则是: SDK检测本地安装的软件对应的渠道,然后连接服务器检测更新,如果服务器上有对应渠道的更新包 则选择此更新包并返回提示,如果服务器上没有对应渠道的更新包但有默认的更新包,则选择默认的 更新包并返回提示,如果服务器上没有默认的更新包,但是有其他渠道的更新包,将不会有更新提醒。
- 按天时间间隔更新功能:通过对update(Context)函数的简单重载,我们提供了一个按时间间隔更新的接口update(Content, long),实现按一定的时间间隔进行更新,比如实现按天更新,只要传作如下调用:update(context, 1000*60*60*24),注意传入的参数,是以毫秒为单位的。这样在下次更新的时候,我们会先检查上次的更新时间,如果间隔超出了设定的值,我们才会再次提示更新。
来体验独立的友盟反馈组件吧!它会给您 提供更多的可定制功能。
除了可以通过统计报表,自定义事件等方式了解到用户的使用情况之外,友盟可以帮助开发者收集到最直观的用户反馈。集成用户反馈模块,您只需要:
- 将zip包里的资源文件(layout、values、values-en、drawable)复制到res对应的文件夹下,您可以更改资源但是请不要更改文件名和资源ID。 并在<application>标签中添加新的activity :
1
2
3
4
|
< activity android:name = "com.feedback.ui.SendFeedback" android:windowSoftInputMode = "adjustResize" ></ activity >
< activity android:name = "com.feedback.ui.FeedbackConversations" ></ activity >
< activity android:name = "com.feedback.ui.FeedbackConversation" android:configChanges = "keyboard" ></ activity >
|
- 代码中启用Feedback模块,调用下面函数进入反馈界面:
1
|
UMFeedbackService.openUmengFeedbackSDK( this );
|
- 当开发者回复用户反馈后,如果需要提醒用户,请在应用程序的入口Activity的OnCreate()方法中下添加以下代码:
1
|
UMFeedbackService.enableNewReplyNotification( this ,
NotificationType.AlertDialog);
|
方法第一个参数类型为:Context,第二个参数为枚举类型,可选值为NotificationType.AlertDialog 或NotificationType.NotificationBar,分别对应两种不同的提示方式: AlertDialog 以 AlertDialog方式提醒用户,NotificationBar 则使用NotificationBar 方式提醒用户。
若调用该接口,反馈模块将在你程序启动后于后台检查是否有新的来自开发者的回复,若有,我们将提醒用户,若无,则不会打扰用户。
你也可以选择不调用该接口,这样我们会在用户进入反馈界面后,再去检查是否存在新的回复。
- 代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public void onCreate(Bundle
savedInstanceState) {
super .onCreate(savedInstanceState);
UMFeedbackService.enableNewReplyNotification( this , 0 );
}
public boolean onCreateOptionsMenu(Menu
menu) {
//一般可以在OptionsMenu中添加一个Item,用于作为反馈界面的入口
menu.add( 0 , 0 , 0 , "feedback" );
...
return true ;
}
public boolean onOptionsItemSelected(MenuItem
item) {
switch (item.getItemId())
{
case 0 :
//
调用反馈提供的接口,进入反馈界面
UMFeedbackService.openUmengFeedbackSDK( this );
return true ;
default :
...
}
}
|
- 下面是用户反馈界面的默认样式,您也可以通过修改资源文件来调整样式,不过需要注意的是,不要修改任何元素的ID和文件名.
应用程序每次只会在启动时会向服务器发送一次消息,在应用程序过程中产生的所有消息(包括自定义事件和本次使用时长)都会在下次启动时候发送。 如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。 发送策略默认为启动时发送。
应用程序产生每条消息(包括启动信息,自定义消息,退出消息)时都会立即发送到服务器。
设置每日单次发送后,当日第二次及之后的启动将不再发送数据,未发送的数据将缓存在手机,等待次日(或他日)发送。
注:由于不同应用的用户使用行为不同,数据发送会有相应的延迟。
- 设置发送模式
新版本的SDK支持在线动态配置发送策略,您需要在onCreate()函数中调用MobclickAgent.updateOnlineConfig(this);方法,这样我们就可以在程序启动的时候,联网检测动态配置的发送策略了。详细配置见下面的9.使用在线配置功能。
旧版本SDK(2.3以前版本)发送模式设置需要在onCreate()函数中调用MobclickAgent.setReportPolicy(int policy),一旦应用发布就不能再更改,我们推荐使用最新版本的SDK。如果您需要更灵活的发送模式, 请发邮件至support@umeng.com,我们会尽快回复您。
这个功能目前可以帮你在网站上动态配置两种类型的参数:
- 数据发送策略
- 自定义key-value型的键值对
在程序的入口Activity的OnCreate()方法中调用
1
2
3
4
|
public void onCreate(Bundle
savedInstanceState) {
super .onCreate(savedInstanceState);
MobclickAgent.updateOnlineConfig( this );
}
|
这样程序启动的时候,我们将联网检测您的在线配置,并将这些信息保存在本地,等待下此启动的时候,我们将按照保存的配置来设定发送策略,您可以通过下面的函数读取您的自定义参数:
1
|
String
MobclickAgent.getConfigParams(Context c, String key);
|
参数为 Context 和 在网站上编辑好的key, 返回值是对应的 value 如果没有读到相应的value将返回空字符串("").
同时,我们提供了在线参数回调接口,注意此接口只在在线参数有变化的时候才会回调,实现此接接口:
1
2
3
4
5
6
|
MobclickAgent.updateOnlineConfig( this );
MobclickAgent.setOnlineConfigureListener( new UmengOnlineConfigureListener(){
@Override
public void onDataReceived(JSONObject
data) {
}
});
|
在没有取到在线配置的发送策略的情况下,会使用默认的发送策略,通过下面函数设置(如果不设置的话,我们默认为启动时发送)
1
|
MobclickAgent.setDefaultReportPolicy( this ,
ReportPolicy.BATCH_AT_LAUNCH);
|
在线参数设置界面在 开发工具->参数配置 如下图:
数据发送策略设置界面在 统计分析->设置->发送策略 如下图
相关推荐
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
数通系列ospf学习思维导图
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
VBA复制指定路径文件待粘贴【可用于自动发微信文件】.xlsm 有时候我们需要复制指定路径的文件,然后到指定的位置或软件进行粘贴 所有我们可根据指定的路径文件进行复制,待粘贴
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
● 数据集介绍:零售食品 LOGO 检测数据集,真实零售食品 LOGO 高质量商品图片数据,数据集含常见零售食品 LOGO 图片,包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富,标注标签包含 1500 个商品商标类别; ● 适用实际项目应用:零售食品 LOGO 检测项目,以及作为通用新零售场景商品目标检测数据集场景数据的补充; ● 标注说明:采用 labelimg 标注软件进行标注,标注质量高,提供 VOC(xml)、COCO (json)、YOLO (txt) 三种常见目标检测数据集格式,可以直接用于如 YOLO 等的算法训练; 注意:由于数据集资源超过 1G,所以托管在我的百度网盘,所以这里的资源格式是 PDF,内附数据集基本情况介绍以及数据集获取方式!
12121212132323232323
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
断指(肢)再植术护理规定(医院规章制度管理文件).docx
燃油消耗统计表.docx
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
外固定支架患者健康教育学习培训资料(心理指导、饮食指导、休息、运动或体位指导、功能锻炼 ).docx
chromedriver-win64_118.0.5940.0.zip
在 Qt 框架中,要在 QTableWidget的表头中添加复选框,可以通过继承 QHeaderView 并重写 paintSection 方法来实现。 介绍一种继承 QHeaderView的方法分别实现QTableWidget中添加复选框,可全选/全不选/部分选。
未来差异化SDP零信任的技术创新点 - AI的结合思路及技术落地方案 ;探讨AI与SDP零信任结合的技术创新点 - 当前网络安全形势与挑战 - 传统安全架构的局限性 - SDP和零信任的兴起背景
环境因素及控制措施表.docx
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。