//

//  main.m

//  C4-一维数组,字符数组

//

//  Created by dllo on 15/10/8.

//  Copyright (c) 2015年 dllo. All rights reserved.

//

#import <Foundation/Foundation.h>

//#define SIZE 10;

int f(float  n){

float c = 0;

if (n == 1 || n == 0) {

c = 1;

}else {

c = f( n - 1) * n ;

}

return c;

}

int main(int argc, const char * argv[]) {

int n = 0;

float y = 0;

//  int f(float  n);

scanf("%d",&n );

y = f( n );

printf("%.0f",y);

}

int a = 0;

定义一个数组

数组终端而每个(成员/元素)的类型为int

数组的名字叫做arr

数组中的每个变量初值为0

注意:1,arr[常量]  2 数组中的变量都是相同类型的

int arr[5] = {0};

初值的几种不同形式

int arr[5] = {0};

int arr1[5] = {1,2,3,4,5};

int arr2[5] = {1,2,3};

注意!!! 定义数组的时候一定要指定好数组中的元素个数

这种初值形式,系统会自动根据初值个数取决定数组元素值

int arr3[] = {1,2,3,4,5};

float arr[7] = {1.0};

char brr[6] = {'v','c'};

访问数组中的元素

int arr[5] = {1,2,3,4,5};

给数组中的元素赋值

注意数组中的元素编号从0开始

2为编号,专业名称叫"下标"

arr[2] = 10;

打印第四个(下标为3)元素的值

printf("%d\n",arr[3]);

注意!!!!!!!越界问题!!!!!!!

数组下表从0开始,最大编号比定义少1

arr[5] = 11;

printf("%d",arr[5]);//也能打出来数但是没有超出定义范围,该数据不受保护,因为该储存地址有可能被其他程序所用,当被其他程序占用的时候,数据丢失

int i = 0;

int a[10] = {0};

for (i = 0; i <10; i++) {

a[i] = i + 1;

printf("%d ",i);

}

定义一个具有20个元素的整型数组,每个元素的取值范围在30-70之间,求数组元素的值

int arr[20] = {0};

int i = 0;

int sum = 0;

for(i = 0;i < 20;i++){

为每个元素赋值随机数

注意访问的时候,数组下标可以是变量

定义的时候,数组下标只能是常量

int ret = arc4random() % (70 - 30 + 1) + 30;

arr[i] = ret;

//元素求和

sum = sum + arr[i];

}

for(i = 0;i < 20;i++){

printf("%d ",arr[i]);

}

printf("\n ");

printf("%d ",sum);

生成2个数组,每个数组都有10个元素,元素取值范围在30-70之间,,将相对应的元素求和

int a[10] = {0};

int b[10] = {0};

int sum = 0;

for(int i = 0;i < 10;i++){

a[i] = arc4random() % (70 - 30 + 1) + 30;

b[i] = arc4random() % (70 - 30 + 1) + 30;

printf("i:%d a:%d b:%d ",i,a[i],b[i]);

sum = a[i] + b[i];

printf("sum:%d",sum);

printf("\n");

}

限时代码

int a = 0;

int max = 0;

for (int i = 0; i < 10 ; i++) {

a = arc4random() % (40 - 20 + 1) + 20;

printf("%d ",a );

if (a> max) {

max = a ;

}

}

printf("\n");

printf("%d",max);

冒泡排序(万能程序)

int arr[8] = {22,13,8,2,44,3,6,66};

i控制进行几轮比较 n个数就把3换成n-1就可以

for (int i = 0; i < 8 - 1; i++) {

j 控制每轮比较多少次  ,n个数就把 4换成  n - i - 1 就可以

for (int j = 0; j < 8 - i - 1; j++) {

若当前元素大于后面的元素,交换2个变量的值

if (arr[j] < arr[j + 1]) {

交换

int temp = arr[j + 1];

arr[j + 1] = arr[j];

arr[j] = temp;

}

}

}

for(int i = 0;i < 8;i++){

printf("%d  ",arr[i]);

}

定义一个20 个元素,为每个元素赋值20-70,并进行冒泡排序

int a[20] = {0};

for (int i = 0; i < 20 ; i++) {

a[i] = arc4random() % ( 70 - 20 + 1) + 20;

}

printf("先前数组为:");

for (int i = 0; i < 20 ; i++) {

printf("%d ",a[i]);

}

printf("\n");

for (int i = 0 ; i < 20 - 1; i++) {

for (int j = 0; j < 20 - i - 1 ; j++) {

if (a[j] > a[j + 1]) {

int temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp ;

}

}

}

printf("排序后的数组:");

for (int i = 0; i < 20 ; i++) {

printf("%d ",a[i]);

}

定义一个字符型的数组

char str[] = {'y','h','c','l','g','f'};

字符串-也是一维数组,系统会自动的在后面添加结束符'\0',但是仍需要多预留一个位置

char  name[6] = "yuhao";

这种写法需要手动添加结束符'\0'

char name1[6] = {'y','u','h','a','o','\0'};

char name2[] = "李金明";

char name3[] = "wangqiong";

for (int i = 0; i < 6; i++) {

printf("%c",name[i]);

}

for (int i = 0; i < 6; i++) {

printf("%c",str[i]);

}

printf("\n");

printf("%s\n",name1);

printf("%s\n",name2);

printf("%s\n",name3);

printf("%s",str);//报错,因为没有找到\0,程序没有结束

字符串拷贝

strcpy(str1 ,str2)-功能将str2的内容拷贝到str1中

char name1[] = "yuhao";

char name2[20] = {0};

strcpy(name2, name1);

printf("%s",name2);

字符串长度

len = strlen(name1) - 功能:计算name1的长度(不算结束符),结果返回到len中

char name1[] = "yuhao";

char name2[20] = {0};

long len  =  strlen(name1);

printf("%ld\n",len);

字符串的拼接

strcat(name1,name2)-功能:将name2的内容拼接到name1上,并将拼好的字符串存到name1中

//注意name1要有足够的空间容下拼接后的字符串

char name1[20] = {0};

char name2[] = "yuhao";

strcat(name1,name2);

printf("%s",name1);

字符串的比较

int ret = strcmp(name1,name2)-功能比较name1和name2的大小(逐个比较ascii码值,遇到第一处不等的停止并返回值,若全部相等返回0)

char name1[] = "yuhao";

char name2[] = "lijinming";

int ret = strcmp(name1, name2 );

printf("%d\n",ret );

查找字符串中的空格数

int count = 0;

char a[] = "i love ios, i want an iphone6s";

for (int  i = 0; i < strlen(a); i++) {

if (' '== a[i]) {

count ++;

}

}

printf("%d",count);

}

字符串倒转

例如 "yuhao"

转成oahuy 注意 是改变字符串本身,不是反向输出

注意循环条件为len / 2,即互换的次数为len / 2.

!!!1时刻记着字符串的\0不显示,但是仍然占着一位

char a[] = "yuhao";

long len = strlen(a);

for (int i = 0 ; i < len  / 2; i++) {

将2个元素互换

int b = a[i];

a[i] = a[ len - i - 1];

a[ len - i - 1] = b;

}

printf("%s",a);

int i = 0;

***)找出下列整型数组中最大和最小值及其所在位置i。

14、(****)思考题:编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

比如:"ni hao world”,最长单词是world。

char a[]= "ni hao woddddsfrsdld";

int maxlength = 0;//最长长度

int currentlength = 0;//每个单词的长度

int i = 0;//下标

int index = 0;//最长单词的开始位置

while(a[i] != '\0'){

if (a[i] != ' ') {

currentlength++;

if (a[i + 1] == '\0') {

if (maxlength < currentlength) {

maxlength = currentlength;

index = i + 1 -maxlength;

}

}

} else{

if (maxlength < currentlength) {

maxlength = currentlength;

index = i - maxlength;

}

currentlength = 0;

}

i++;

}

for (int  i = index;  i < maxlength + index; i++) {

printf("%c",a[i]);

}

printf("%d\n",maxlength);

}

15、(*****)思考题: 约瑟夫环的数组实现

约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。

约瑟夫环问题的具体描述是:设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,知道只剩下一人为止。当任意给定 n和 m后,设计算法求 n个人出圈的次序。

/int  arr1 = 0;// 当前单词长度

int  arr2 = 0;// 最大单词长度

int  arr3 = 0;//下标

int i = 0;

char a[] ="ni hao woddddsfrsdld";

while (a[i] != '\0') {

if (a[i] != ' ') {

arr1 ++;

if (a[i + 1] == '\0') {

if(arr2 < arr1){

arr2 = arr1;

arr3 = i + 1 - arr2;

}

}else{

if(arr2 < arr1){

arr2 = arr1;

arr3 = i - arr2;

}

arr1 = 0;

}

i++;

}

for(int i = arr3; i < arr2 + arr3 ;i++ ){

printf("%c",a[i]);

}

printf("%d\n",arr2);

/*

1. (*)先调试,调试成功后抄写下列程序:

#include <stdio.h>

#define SIZE 10

int main(int argc, char *argv[])

{

int a[SIZE] = {0},i= 0;

for(i = 0; i < SIZE; i++){

a[i] = i+10;

printf("a[%d] = %d\n", i, a[i]);

}

return 0;

}

答案

int a[10] = {0};

for (int i = 0; i < SIZE ; i++) {

a[i] = i + SIZE;

printf("a[%d]=%d ",i,a[ i]);

}

2. (*)将第一题中的数组a反向输出。

int a[10] = {0};

for (int i = 0; i < SIZE; i++) {

a[i] = i + SIZE;

}

for (int i = 9 ; i >= 0 ; i--) {

printf("a[%d]=%d \n",i,a[i]);

}

3. (*)对第一题中的数组进行求和操作,打印计算结果。

int a[10] = {0};

int sum = 0;

for (int i = 0; i < SIZE ; i++) {

a[i] = i + SIZE;

sum = sum + a [i];

printf("a[%d]=%d \n",i,a[i]);

}

printf("sum:%d",sum);

}

4. (**)计算第一题数组连减,打印计算结果。

int a[10] = {0};

int sum = 0;

for (int i = 0; i < SIZE; i++) {

a[i] = i + SIZE;

sum = sum - a [i];

printf("a[%d]=%d \n",i,a[i]);

}

printf("sum:%d",sum);

}

5. (**)随机产生20个10~50的正整数存放到数组中,并求数组中的多有元素最大值、最小值、平均值及各元素之和。

int a[20] = {0} ;

int sum = 0;

int max = 0;

int min = 51;

for (int i = 0 ; i < 20 ; i++) {

a[i]= arc4random() % (50 - 10 + 1) + 10;

if (a[i] > max) {

max = a[i];

}

if (a[i] < min) {

min = a[i];

}

sum = sum + a[i];

}

printf("max:%d ",max);

printf("min:%d ",min);

printf("sum:%d ",sum);

printf("平均值:%d",sum/20);

6. 编写一个程序,先将两个数组升序排序,然后将这两个数组合并成一个升序数组。

int a[5] = {0};

int b[5] = {0};

int c[10] = {0};

printf("请先输入5位数字:");

for(int i = 0;i < 5;i++){

scanf("%d",&a[i]);

}

printf("\n");

printf("再输入5位数字:");

for(int i = 0;i < 5;i++ ){

scanf("%d",&b[i]);

}

//对a,b数组分别进行冒泡排序

for(int i = 0;i < 5 - 1 ;i++){

for(int j = 0; j < 5 - i  - 1;j++ ){

if(a[j] > a[j + 1]){

int temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp ;

}

if(b[j] > b[j + 1]){

int temp = b [j];

b[j] = b[j + 1];

b[j + 1] = temp ;

}

}

}

// 对排过顺序的数组输出

printf("a数组冒泡排序结果:");

for (int i = 0; i < 5; i++) {

printf("%d ",a[i]);

}

printf("\n");

printf("b数组冒泡排序结果:");

for (int i = 0; i < 5; i++) {

printf("%d ",b[i]);

}

printf("\n");

// 将2个数组的值给c数组

for (int i = 0; i < 10 ; i++) {

if (i < 5) {

c[i] = a[i];

} else {

c[i] = b[i - 5];

}

}

printf("c数组的结果:");

for (int i = 0; i < 10; i++) {

printf("%d ",c[i]);

}

printf("\n");

//将数组c进行排序

for(int i = 0;i < 10 - 1;i++){

for(int j = 0;j < 10 - i - 1;j++){

if (c[j] > c[j + 1]) {

int temp = c[j];

c[j] = c[j + 1];

c[j + 1] = temp;

}

}

}

printf("c数组的冒泡排序结果:");

for (int i = 0; i < 10; i++) {

printf("%d ",c[i]);

}

7. (***)给定某年某月某日,输出其为这一年的第几天。

int year = 0;

int month = 0;

int a[12] ={31,28,31,30,31,30,31,31,30,31,30,31};

int day = 0;

//int sum = 0;

printf("请输入年月日,格式为年份月份日期(用空格隔开):\n");

scanf("%d%d%d",&year,&month,&day);

printf("日期为:%d-%d-%d\n",year,month,day);

// 能整除就是取余得0

if ((year % 400 == 0)|| ( (year % 4 == 0) && (year % 100 != 0))){

a[1] = 29;

}

int sum = 0;

for(int i= 0;i < month - 1;i++){

sum = sum + a[i];

}

sum = sum + day ;

printf("%d",sum);

8. (**)编写整型值数组排序程序(冒泡排序--升序)

int a[] = {3,-9,32,77,63,-24,14,0,21,45};

int a[] = {3,-9,32,77,63,-24,14,0,21,45};

for (int i = 0 ; i < 10 - 1; i++) {

for (int j = 0; j < 10 - i - 1; j++) {

if (a[j] > a [j + 1]) {

int temp = a [j];

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

printf("冒泡排序后的结果:");

for(int i = 0;i < 10 ;i++){

printf("%d ",a[i]);

}

9、(***)找出下列整型数组中最大和最小值及其所在位置i。

int a[] = {5,-9,32,77,64,-24,14,0,21,45};

10、(*)把str1, str2, str3合并到result数组中。

char result[50] = {0};

char str1[] = "Lanou ";

char str2[] = "23_class ";

char str3[] = " is niu best!";

结果:“Lanou 23_class is niu best!”

代码:

char result[50]= {0};

char str1[] = "Lanou";

char str2[] = "23_class";

char str3[] = " is niu best!";

strcpy(result,str1);

printf("%s ",result);

strcpy(result, str2);

printf("%s",result);

strcpy(result, str3);

printf("%s",result);

11、(**)找出下面程序的错误:

int main(int argc, char *argv[])

{

char string[10], str1[10];

int i;

for(i = 0; i < 10; i++)

{

str1[i] = 'a';

}

strcpy(string, str1);

}

!!!!!  i< 9   不是10

char string[10]  , str1[10] ;

int i;

for(i = 0; i < 9; i++)

{

str1[i] = 'a';

}

strcpy(string,str1 );

printf("%s",string);

printf("\n");

printf("%s",str1);

12、(**)下面这个程序执行后会有什么错误或者效果:

int main(int argc, char *argv[])

{

unsigned char str[10], i;

for(i = 0; i < 256; i++)

str[i] = i;

}

unsigned char str[10], i;

for(i = 0; i < 10; i++)

str[i] = i;

13、(***)模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生),

若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。

int a[4] = {0};

char b[] = {'A','B','C','D'};

int n = 0;

printf("请输入参加选举的人数:");

scanf("%d",&n);

for (int i = 0;i < n; i++) {

int ret = arc4random() % (70  - 65  + 1) + 65;

if( ret < 69){

a[ret - 65]++;//起始值都是0,票有效就加1

}

}

for(int i = 0;i < 4 ;i++){

printf("%d ",a[i]);

}

//  对a[] b[]进行冒泡排序

for(int i = 0;i < 4 - 1;i++){

for(int j = 0;j < 4 - i - 1;j++){

if(a[j] < a[j + 1] ){

int temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

int r  = b[j];

b[j] = b[j + 1];

b[j + 1] = r;

}

}

}

printf("\n");

for(int i = 0;i < 4; i++){

printf("%d ",a[i]);

}

printf("\n");

for(int i = 0;i < 4; i++){

printf("%c ",b[i]);

}

14、(****)思考题:编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

比如:"ni hao world”,最长单词是world。

char a[]= "ni hao woddddsfrsdld";

int maxlength = 0;//最长长度

int currentlength = 0;//每个单词的长度

int i = 0;//下标

int index = 0;//最长单词的开始位置

while(a[i] != '\0'){

if (a[i] != ' ') {

currentlength++;

if (a[i + 1] == '\0') {

if (maxlength < currentlength) {

maxlength = currentlength;

index = i + 1 -maxlength;

}

}

} else{

if (maxlength < currentlength) {

maxlength = currentlength;

index = i - maxlength;

}

currentlength = 0;

}

i++;

}

for (int  i = index;  i < maxlength; i++) {

printf("%c",a[i]);

}

printf("%d\n",maxlength);

}

15、(*****)思考题: 约瑟夫环的数组实现

约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。

约瑟夫环问题的具体描述是:设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,知道只剩下一人为止。当任意给定 n和 m后,设计算法求 n个人出圈的次序。

*/

转载于:https://www.cnblogs.com/yuhaojishuboke/p/5043139.html

ioS开发之c语言基础-一维数组,字符数组相关推荐

  1. iOS开发之c语言入门教程

    苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...

  2. iOS开发之Objective-C(基础篇)-李飞-专题视频课程

    iOS开发之Objective-C(基础篇)-232人已学习 课程介绍         该系列课程是iOS开发之Objective-C基础入门视频.课程中会详细的讲解OC语法特点,面向对象的使用,循环 ...

  3. (0033) iOS 开发之Block 的基础用法及注意事项2

    循环引用之String 当在block内部使用成员变量的时候,比如 @interface ViewController : UIViewController { NSString *_string; ...

  4. iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements

    在前面的博客中已经介绍了如何连接SQLite数据库,并且简单的查询和遍历结果集.在前面用到了sqlite3_stmt *stmt,也就是预编译后的SQL语句.在本篇博客中会了解一下sqlite3_st ...

  5. Flutter开发之Dart语言基础

    Flutter 发展历史 Flutter是Google开发的一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架.说到Flutter,很多同学可能会将它和下面的几个词 ...

  6. Android NDK开发之C语言基础及指针①

    我们知道 , Android系统是基于linux开发 , 采用的是linux内核 , Android APP开发大部分也要和系统打交道 , 只是Android FrameWork 帮我们屏蔽了系统操作 ...

  7. (0032) iOS 开发之Block 的基础用法及注意事项1

    该文章参考多篇文章,已记不清,如有问题请联系我. 参考:http://blog.csdn.net/zm_yh/article/details/51469275 Block理解 1. Block执行的代 ...

  8. iOS开发之C语言---for循环

    1.for循环介绍 语法:for(表达式1:表达式2:表达式3) { 循环体: } 语义: 第一步:先执行表达式1,再跳转到表达式2 第二步:判断表达式2是否为真,如果为真则跳转到第三步,如果为假,那 ...

  9. 芒果iOS开发之Swift教程05-Swift字符串和字符

    [主要内容] 1. 字符串字面量 2. 初始化空字符串 3. 字符串可变性4. 字符串是值类型 5. 使用字符 6. 连接字符串和字符 7. 字符串差值 8. Unicode 9. 计算字符数量 10 ...

最新文章

  1. MIT中国博士生开发出第一套保护自动驾驶车辆的感知算法
  2. PocoMaker(魅客)
  3. java dom 解析xml 例子,Java DOM解析XML的幾個例子
  4. Python 微信机器人:调用电脑摄像头时时监控功能实现演示,调用电脑摄像头进行拍照并保存
  5. 【Android工具】高端DLNA音乐播放器Hi-Fi Cast 来自play
  6. 切割图形_重庆Q3245R锅炉板加工几何图形2021新闻
  7. JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法
  8. C++分文件的编写函数
  9. NetSuite ERP软件系统特点介绍!
  10. gluster分布式存储 入门篇
  11. 能做多大的单片机项目程序开发,就代表了你的敲代码的水平
  12. 今天下午又是在教室里坐了一个下午,头有点晕
  13. 苹果6s强制删除id锁_#Vlog# 苹果7绕过id激活锁
  14. python内置函数系列之str(一)(持续更新)
  15. VMware卸载不干净导致安装VMware报错(无法安装服务vmware Authorization server请确保你有足够的权限)
  16. 最齐全的企业BI建设地图,附高清完整版BI知识图谱
  17. 怎样批量修改图片像素大小?
  18. win10怎么快捷锁定计算机,win10锁屏快捷键如何设置_让你win10电脑一键秒锁屏的方法...
  19. 小红书话题笔记是什么意思?话题笔记发布步骤流程分享
  20. 拼多多校招笔试题 避嫌抢劫

热门文章

  1. WINDOWS SERVER 2003从入门到精通之使用证书在WEB服务器上设置SSL(下)
  2. springboot文字转语音(jacob)
  3. linux下获取硬盘使用情况
  4. selenium--字符串/整型问题Can't convert 'int' object to str implicitly提示解决方法
  5. 【内存泄露】Memory Leaks 内存优化
  6. 【Machine learning】余弦相似度
  7. 使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置
  8. Know more about CBO Index Cost
  9. Windows Server2003 sp2重装IIS后无法浏览asp.net网页解决方法
  10. T100 section已经修改过