1、一维数组
//一维数组、多维数组、字符数组
int a[kCount] = {1,2,3,4,5};
for (int i = 0; i < 5; i++)
{
//a[i]是数组a的第i个元素,a代表数组首地址,a+i是a[i]的地址,*(a+i)是*指向a[i]的地址
printf("%d",a[i]);
printf("%d \n",*(a+i));
}
// int b[kCount] = {1,2,7,8,9};
//变量,指针都是标量类型 数组,结构体,共用体属于聚合类型
//数组中的成员叫数组元素
//数组地址是依次后排,加的字节数跟数据类型有关
printf("%d %d %p %p\n",a[0],a[1],a,a+1); //%p打印地址
//数组跟for循环一般一起出现,计算总和,遍历,平均值,最大值等操作
2、宏定义
//宏定义一般最后不加分号,可以根据实际情况判断
#define kCount 8
#define kMax1(a,b) a>b?a:b //获取ab中大的一个
printf("%d",kMax1(13, 12));
3、getchar() putchar() gets puts fgets
//scanf不能用于有空格的输入,因为空格回车会作为scanf输入结束的判断
char a99[50];
scanf("%s",a99);
printf("%s",a99);
//如果想要输入空格到字符串变量中,gets以回车结束,不会进行数组越界上限判断
gets(a99);//warning: this program uses gets(), which is unsafe.
printf("%s",a99);
//fgets从stdin中读入7个,剩余最后一个自动写入'\0',fgets用于替换gets方法,提高安全性
fgets(a99, 8, stdin);
puts(a99);
fgets fputs 读取和写入文件
//sscanf 从字符串中读入到另一个字符串
printf("\n");
sscanf("1234abcdABCD AA", "%s",a99);//将前面的字符串以%s的形式读入a99,sscanf跟scanf一样,不能读入空格
puts(a99);//在printf的基础上加了一个\n
printf("%s\n",a99);
//正则表达式 用于匹配,做筛选用的,一般用于查询筛选
sscanf("1234abcdABCD AA", "%[^a-z]",a99);//读到a-z中任一字符终止,后边即时还有其他字符也不做判断
puts(a99);
strcpy(a99, "");
printf("-----");
sscanf("1234abcdABCD AA", "%[a-z]",a99);//只读a-z范围之内的,读到非a-z的任一字符终止,后边即时还有其他字符也不做判断
puts(a99);
strcpy(a99, "");
printf("-----");
sscanf("1234dcbaABCD AA", "%[a-z1-9]",a99);//只读a-z范围之内的,读到非a-z的任一字符终止,后边即时还有其他字符也不做判断
//[a-z1-9]方括号里边只说明范围,不管顺序
puts(a99);
int a100;
scanf("%*d %d",&a100);//%*d是过滤掉他读入的数值
printf("%d",a100);
//提取12abc,前面iOS/过滤掉,后边@sina.com过滤掉
printf("\n*****\n");
sscanf("iOS/12abc@sina.com", "%*[^2]2%[^@]",a99);//[^2]2中两个2是一个字符,替换这两个代表过滤到2,与%*配合使用
printf("%s\n",a99);
//多维数组
char b111[20][50] = {"abc","def","ghi"};//存姓名
int a110[2][20];//a[0]存年龄,a[1]存成绩
printf("%lu\n",strlen(b111[0]));
strcpy(b111[3], b111[0]);
printf("%s\n",b111[3]);
//>0是大于,<0是小于 ==0是等于
printf("%d\n",strcmp(b111[0], b111[1]));
printf("%d\n",strcmp(b111[0], b111[3]));
//把右边的字符串拼到前面的字符串后边
strcat(b111[0], "123");
puts(b111[0]);
补充部分day4的练习工程
//
// main.m
// C04 array
#import <Foundation/Foundation.h>
//宏定义一般最后不加分号,可以根据实际情况判断
#define kCount 8
#define kMax1(a,b) a>b?a:b
#define M 200
//struct Candidate
//{
// long num;
// int poll;
//};
//struct Person
//{
// int num;
// int goOutOrder;
//
//};
//
//void sortArray(int aa[],int n)
//{
// int tmp,count = n;
// for (int i = 0; i < count-1; i++)
// {
// for (int j = 0; j < count-1-i; j++)
// {
// if (aa[j] > aa[j+1])
// {
// tmp = aa[j];
// aa[j] = aa[j+1];
// aa[j+1] = tmp;
// }
// }
// }
//}
//
//void candidateCopy(struct Candidate a1,struct Candidate a2)
//{
// a1.num = a2.num;
// a1.poll = a2.poll;
//}
//
//void printCandidate(struct Candidate aa[],int n)
//{
// for (int i = 0; i < n; i++)
// {
// printf("%ld %d\n",aa[i].num,aa[i].poll);
// }
//}
//
//void sortCandidateByPoll(struct Candidate aa[],int n)
//{
// struct Candidate tmp;
// int count = n;
// for (int i = 0; i < count-1; i++)
// {
// for (int j = 0; j < count-1-i; j++)
// {
// if (aa[j].poll > aa[j+1].poll)
// {
// candidateCopy(tmp, aa[j]);
// candidateCopy(aa[j], aa[j+1]);
// candidateCopy(aa[j+1], tmp);
// }
// }
// }
//}
//
//void personArraySetInitialValue(struct Person aa[],int n,int initialValue)
//{
// for (int i = 0; i < n; i++)
// {
// aa[i].num = i+1;
// aa[i].goOutOrder = initialValue;
// }
//}
//
//void personCopy(struct Person *aa,struct Person *bb)
//{
// aa->num = bb->num;
// aa->goOutOrder = bb->goOutOrder;
//}
//
//void personFromArrayGoOut(struct Person aa[],int i,int currentCount)
//{
// struct Person tmp;
// personCopy(&tmp, &aa[i]);
// for (int j = i; j < currentCount-1; j++)
// {
// personCopy(&aa[j], &aa[j+1]);
// }
// personCopy(&aa[currentCount-1], &tmp);
//}
//
//void sortPersonByNum(struct Person aa[1],int n)
//{
// for (int i = n-1; i >= 0; i--)
// {
// aa[i].goOutOrder = n-i;
// }
//
// struct Person tmp;
// int count = n;
// for (int i = 0; i < count-1; i++)
// {
// for (int j = 0; j < count-1-i; j++)
// {
// if (aa[j].num > aa[j+1].num)
// {
// personCopy(&tmp, &aa[j]);
// personCopy(&aa[j], &aa[j+1]);
// personCopy(&aa[j+1], &tmp);
// }
// }
// }
//}
//
//void printGoOutOrder(struct Person aa[1],int n)
//{
// for (int i = 0; i < n; i++)
// {
// printf("第%d个人出列次序是%d\n",aa[i].num,aa[i].goOutOrder);
// }
//}
//
//void printArray(int aa[1],int n)
//{
// for (int i = 0; i < n; i++)
// {
// printf("%d ",aa[i]);
// }
// printf("\n");
//}
//int getDay(int year,int month,int day)
//{
// int dayCount[2][13] =
// {
// {0,31,28,31,30,31,30,31,31,30,31,30,31},
// {0,31,29,31,30,31,30,31,31,30,31,30,31}
// };
// int leapYear = (year%4==0&&year%100!=0)||(year%400==0);
// int allDay = 0;
// for (int i = 1; i < month; i++)
// {
// allDay += dayCount[leapYear][i];
// }
// return allDay+day;
//}
//int getDay(int year,int month,int day)
//{
// int allday = 0;
// int daysCount[2][13] =
// {
// {0,31,28,31,30,31,30,31,31,30,31,30,31},
// {0,31,29,31,30,31,30,31,31,30,31,30,31}
// };
//
// int leapYear = ((year % 4==0)&&(year % 100 != 0)) || (year %400 == 0);
//
// for (int i = 1; i < month; i++)
// {
// allday += daysCount[leapYear][i];
// }
// allday += day;
// return allday;
//}
struct Candidate
{
char num;
int poll;
};
enum candidateNum
{
candidateNum_A,
candidateNum_B,
candidateNum_C,
candidateNum_D,
};
void sortCandidateByPoll(struct Candidate a[],int n)
{
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j < n-1-i; j++)
{
if (a[j].poll < a[j+1].poll)
{
struct Candidate tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
void printCandidate(struct Candidate a[],n)
{
for(int i = 0; i < n;i++)
{
printf("编号为%c的候选人获得了%d票\n",a[i].num,a[i].poll);
}
}
struct Person
{
int num;
int goOutNum;
};
void initPerson(struct Person p[],int n)
{
for (int i = 0; i < n; i++)
{
p[i].num = i+1;
p[i].goOutNum = -1;
}
}
void personGoOut(struct Person p[],int index,int n)
{
struct Person tmp = p[index];
for (int i = index; i < n-1; i++)
{
p[i] = p[i+1];
}
p[n-1] = tmp;
}
//void personWriteGoOutNum(struct Person p[],int n)
//{
// for (int i = n-1; i >= 0; i--)
// {
// p[i].goOutNum = n - i;
// }
//}
//
//void personSortByGoOutNum(struct Person p[],int n)
//{
// struct Person tmp;
// for (int i = 0; i < n-1; i++)
// {
// for (int j = 0; j < n-1-i; j++)
// {
// if (p[j].num > p[j+1].num)
// {
// tmp = p[j];
// p[j] = p[j+1];
// p[j+1] = tmp;
// }
// }
// }
//}
void printPerson(struct Person p[],int n)
{
for (int i = n-1; i >= 0; i--)
{
printf("第%d次出列的人是第%d个人\n",n-i,p[i].num);
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
/*----------------------------------*/
//一维数组、多维数组、字符数组
// int a[kCount] = {1,2,3,4,5};
// for (int i = 0; i < 5; i++)
// {
// //a[i]是数组a的第i个元素,a代表数组首地址,a+i是a[i]的地址,*(a+i)是*指向a[i]的地址
printf("%d",a[i]);
// printf("%d \n",*(a+i));
// }
// int b[kCount] = {1,2,7,8,9};
/*----------------------------------*/
//变量,指针都是标量类型 数组,结构体,共用体属于聚合类型
//数组中的成员叫数组元素
/*----------------------------------*/
//数组地址是依次后排,加的字节数跟数据类型有关
// printf("%d %d %p %p\n",a[0],a[1],a,a+1);
/*----------------------------------*/
//数组跟for循环一般一起出现,计算总和,遍历,平均值,最大值等操作
/*----------------------------------*/
//有参宏计算最大值
// printf("%d",kMax1(13, 12));
/*----------------------------------*/
//getchar() putchar() gets puts fgets
// while (1)
// {
// putchar(getchar());
// }
/*----------------------------------*/
//scanf不能用于有空格的输入,因为空格回车会作为scanf输入结束的判断
char a99[50];
// scanf("%s",a99);
// printf("%s",a99);
/*----------------------------------*/
//如果想要输入空格到字符串变量中,gets以回车结束,不会进行数组越界上限判断
// gets(a99);//warning: this program uses gets(), which is unsafe.
// printf("%s",a99);
/*----------------------------------*/
//fgets从stdin中读入7个,剩余最后一个自动写入'\0',fgets用于替换gets方法,提高安全性
// fgets(a99, 8, stdin);
// puts(a99);
/*----------------------------------*/
//fgets fputs 自己尝试读取和写入文件
/*----------------------------------*/
//sscanf 从字符串中读入到另一个字符串
// printf("\n");
// sscanf("1234abcdABCD AA", "%s",a99);//将前面的字符串以%s的形式读入a99,sscanf跟scanf一样,不能读入空格
// puts(a99);//在printf的基础上加了一个\n
// printf("%s\n",a99);
/*----------------------------------*/
//正则表达式 用于匹配,做筛选用的,一般用于查询筛选
// sscanf("1234abcdABCD AA", "%[^a-z]",a99);//读到a-z中任一字符终止,后边即时还有其他字符也不做判断
// puts(a99);
/*----------------------------------*/
// strcpy(a99, "");
// printf("-----");
// sscanf("1234abcdABCD AA", "%[a-z]",a99);//只读a-z范围之内的,读到非a-z的任一字符终止,后边即时还有其他字符也不做判断
// puts(a99);
/*----------------------------------*/
// strcpy(a99, "");
// printf("-----");
// sscanf("1234dcbaABCD AA", "%[a-z1-9]",a99);//只读a-z范围之内的,读到非a-z的任一字符终止,后边即时还有其他字符也不做判断
// //[a-z1-9]方括号里边只说明范围,不管顺序
// puts(a99);
/*----------------------------------*/
// int a100;
// scanf("%*d %d",&a100);//%*d是过滤掉他读入的数值
// printf("%d",a100);
/*----------------------------------*/
//提取12abc,前面iOS/过滤掉,后边@sina.com过滤掉
// printf("\n*****\n");
// sscanf("iOS/12abc@sina.com", "%*[^2]2%[^@]",a99);//[^2]2中两个2是一个字符,替换这两个代表过滤到2,与%*配合使用
// printf("%s\n",a99);
/*----------------------------------*/
// //多维数组
// char b111[20][50] = {"abc","def","ghi"};//存姓名
// int a110[2][20];//a[0]存年龄,a[1]存成绩
/*----------------------------------*/
// printf("%lu\n",strlen(b111[0]));
// strcpy(b111[3], b111[0]);
// printf("%s\n",b111[3]);
//
// //>0是大于,<0是小于 ==0是等于
// printf("%d\n",strcmp(b111[0], b111[1]));
// printf("%d\n",strcmp(b111[0], b111[3]));
//
// //把右边的字符串拼到前面的字符串后边
// strcat(b111[0], "123");
// puts(b111[0]);
/*----------------------------------*/
/*
fgets fputs读写文件
*/
FILE *file;
//fopen第一个参数是文件路径
/*
r只读 文件必须存在
r+可读写 文件必须存在
w 只写文件覆盖,没有则创建
w+ 可读写文件覆盖,没有则创建
*/
// char path[50];
// strcpy(path, __FILE__);
//
// for (int i = (int)strlen(path)-1; i >= 0; i--)
// {
// if (path[i] == '/')
// {
// path[i] = '\0';
// break;
// }
// }
// strcat(path, "/File.txt");
//
//
// if ((file = fopen(path/*"/Users/zhangjing/Documents/File.txt"*/, "r+")) == NULL)
// {//NULL说明打不开
// printf("文件打开失败");
// }
// else
// {
// fputs("my name is wang fang shuai", file);
// fclose(file);
// }
//
// //读取
// char a[50];
// if ((file = fopen(path/*"/Users/zhangjing/Documents/File.txt"*/, "r+")) == NULL)
// {//NULL说明打不开
// printf("文件打开失败");
// }
// else
// {
// fgets(a, 50, file);
// fclose(file);
// }
// printf("%s",a);
/*----------------------------------*/
//linux,unix,mac下获取当前运行目录,工程目录的方法
// printf("The current path : %s\n", getenv("PWD"));//得到当前运行后编译生成可执行文件所在目录
// printf("%s\n",__FILE__);//得到当前文件目录,需要上级目录的话将最后的main.m去掉
/*----------------------------------*/
//堆栈
/*
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
*/
// char a[50];
// char *b = malloc(sizeof(char)*50);
//
// free(b);
/*----------------------------------*/
/*
1.随机对有十个元素的数组赋值(20-30),计算找出最大值和所有元素的和
*/
// int a[10],sum = 0,max = 0;
// for (int i = 0; i < 10; i++)
// {
// a[i] = arc4random()%11+20;
// sum += a[i];
// if (a[i] > max)
// {
// max = a[i];
// }
// }
// printf("和是%d,最大值是%d",sum,max);
/*----------------------------------*/
/*
2,生成一个具有20个元素的数组,每个元素的取值范围是30-70,求数组元素的和
*/
// int aa2[20],sum = 0;
// for (int i = 0; i < 20; i++)
// {
// aa2[i] = arc4random()%41+30;
// printf("%d ",aa2[i]);
// sum += aa2[i];
// }
// printf("\n和是:%d\n",sum);
/*----------------------------------*/
/*
2,复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另一个数组中。
*/
// int a[10],b[10];
// for (int i = 0; i < 10; i++)
// {
// a[i] = arc4random()%100;
// b[i] = a[i];
// }
// for (int i = 0; i < 10; i++)
// {
// printf("%d ",b[i]);
// }
/*----------------------------------*/
/*
4,生成2个数组,每个数组都有10个元素,元素取值范围20-40之间,数组对应元素相加,放到另外一个数组中
*/
// int a[10],b[10],c[10];
// for (int i = 0; i < 10; i++)
// {
// a[i] = arc4random()%21+20;
// b[i] = arc4random()%21+20;
// c[i] = *(a+i)+*(b+i);
// }
// for (int i = 0; i < 10; i++)
// {
// printf("%d ",a[i]);
// }
// printf("\n");
// for (int i = 0; i < 10; i++)
// {
// printf("%d ",b[i]);
// }
// printf("\n");
// for (int i = 0; i < 10; i++)
// {
// printf("%d ",c[i]);
// }
// printf("\n");
/*-----------------------------------*/
/*
查找字符串中的空格数
*/
// char a[50];
// int count = 0;
// fgets(a, 50, stdin);
// a[strlen(a)-1] = '\0';
//
// for (int i = 0; a[i] != '\0'; i++)
// {
// if (a[i] == ' ')
// {
// count++;
// }
// }
// printf("空格数是:%d",count);
/*-----------------------------------*/
/*
使字符串倒转
*/
// char a[20],tmp;
// fgets(a, 20, stdin);
//
// //fgets会读入\n,一般不需要的话执行下面的语句
// a[strlen(a)-1] = '\0';
sscanf(a, "%s",a);
// unsigned long count = strlen(a);
// for (int i = 0; i < count/2; i++)
// {
// tmp = a[i];
// a[i] = a[count-i-1];
// a[count-i-1] = tmp;
// }
// puts(a);
// char a[20],tmp;
// scanf("%s",a);
// unsigned long count = strlen(a);
// for (int i = 0; i < count/2; i++)
// {
// tmp = a[i];
// a[i] = a[count-i-1];
// a[count-i-1] = tmp;
// }
// puts(a);
// int count = 10;
// int a[count],tmp;
// for (int i = 0; i < count; i++)
// {
// a[i] = arc4random()%100;
// }
//
// /*
// 冒泡排序(升序)
// 最简单的排序方式但效率较低
// 此算法取名:水泡一点一点的浮出水面
// 越大的元素经由交换慢慢浮到数列顶端故名
//
// 冒泡排序外层控制趟数,内层控制每趟比较次数
// 相邻的两个数做比较,内层第一次循环结束将有一个最大数放到数组末尾
// 内层第二次循环结束将有第二大数放到数组倒数第二个
// 直到所有数据排好
// */
// for (int i = 0; i < count-1; i++)
// {
// for (int j = 0; j < count-1-i; j++)
// {
// if (a[j] > a[j+1])
// {
// tmp = a[j];
// a[j] = a[j+1];
// a[j+1] = tmp;
// }
// }
// }
// /*
// 选择排序(升序)
// 选择排序外层控制从0到倒数第2个
// 内层循环从数组右边所有数中找出最小值所在的index
// 内存循环结束将最小值跟i对应的元素交换
// 依次执行
// */
// int minIndex;
// for (int i = 0; i < count-1; i++)
// {
// minIndex = i;
// for (int j = i+1; j < count; j++)
// {
// if (a[minIndex] > a[j])
// {
// minIndex = j;
// }
// }
// tmp = a[i];
// a[i] = a[minIndex];
// a[minIndex] = tmp;
// }
// /*
// 插入排序(升序)
// 第一次排序时将第2个元素放入tmp,然后跟前面的第一个元素比较,如果第一个元素大于第二个元素,则第二个元素赋值为第一个元素,然后将第一个元素赋值为tmp
// 此时前两个为有序表
//
// 第二次排序时将第3个元素放入tmp,然后跟前面的第二个元素比较,如果第二个元素大于第三个元素,则第三个元素赋值为第二个元素,再判断第一个元素大于第二个元素时,将第二个元素赋值为第一个元素,然后将第一个元素赋值为tmp
//81
//6 7 32 61 81 87 12 84 10 97
// for (int i = 1; i < count; i++)
// {
// int j;
// tmp = a[i];
// for (j = i-1; j >= 0; j--)
// {
// if (tmp < a[j])
// {
// a[j+1] = a[j];
// }
// else
// {
// break;
// }
// }
// a[j+1] = tmp;
// }
// for (int i = 0; i < count; i++)
// {
// printf("%d ",a[i]);
// }
/*
6、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组。
定义一个函数返回指针,传入三个数组,一个目标数组,两个原数组,返回目标数组的指针
*/
// int count = 5;
// int a[count],b[count],c[count*2];
// printf("请输入第一个数组(逗号分隔):");
// scanf("%d,%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
// printf("请输入第二个数组(逗号分隔):");
// scanf("%d,%d,%d,%d,%d",&b[0],&b[1],&b[2],&b[3],&b[4]);
// sortArray(a,count);
// sortArray(b,count);
//
// for (int i = 0,ai = 0, bi = 0; i < count*2; i++)
// {
// if (ai == 5 && bi != 5)
// {
// c[i] = b[bi++];
// }
// else if (ai != 5 && bi == 5)
// {
// c[i] = a[ai++];
// }
// else
// {
// if (a[ai] > b[bi])
// {
// c[i] = b[bi++];
// }
// else
// {
// c[i] = a[ai++];
// }
// }
// }
//
// printArray(a,count);
// printArray(b,count);
// printArray(c,count*2);
/*
7、给定某年某月某日,将其转换成这一年的第几天并输出。
*/
// int year,month,day;
// scanf("%d,%d,%d",&year,&month,&day);
// int allday = getDay(year, month, day);
// printf("%d",allday);
/*
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};
// sortArray(a, 10);
// printArray(a, 10);
/*
10、char result[50] = {0};
char str1[] = “Shangcheng ";
char str2[] = "class ";
char str3[] = " is niu best!";
把str1, str2, str3合并到result数组中。
“Shangcheng class is niu best!”
*/
// char aaa[5] = {"abcd"};
// char result[50] = {""};//必须要有足够的空间容纳要拼接的字符串,如果空间不足会将字符串写到aaa里边
// char str1[] = "Shangcheng ";
// char str2[] = "class ";
// char str3[] = " is niu best!";
// sprintf(result, "%s%s%s",str1,str2,str3);//格式化输出到左边的字符串
// puts(result);
//
// //只能从一个字符串读到另一个字符串,以某种格式,或者筛选
// char result2[50] = {0};
// sscanf(result, "%s",result2);//sscanf不能读入空格
// puts(result2);
// gets(<#char *#>)//可以读空格
// fgets(<#char *restrict#>, <#int#>, <#FILE *#>)//可以读空格
// scanf(<#const char *restrict, ...#>)//空格作为结束和不同变量间分隔,不能读
// strcat(result, str1);
// strcat(result, str2);
// strcat(result, str3);
// puts(result);
// puts(aaa);
/*
11、找出下面程序的错误
*/
//string 地址是0x111 str1的地址是多少0x107
//string在前面定义,存高地址,str1往低地址走10个字节开始存
// char string[10], str1[10];
// int i;
// for(i = 0; i < 10; i++)
// {
// str1[i] = 'a';//puts %s读到'\0',str1读到最后没有找到'\0'
// }
// strcpy(string, str1);
// puts(str1);//20
// puts(string);//10
/*
12、下面这个程序执行后会有什么错误或者效果:
*/
// unsigned char str[10], i;//i取值范围0-255
// for(i = 0; i < 256; i++)//最大值自增后变成最低值,死循环
// {
// if (i==255)
// {
//
// }
// str[i] = i;}
/*
5、模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生),
若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
*/
// struct Candidate c[4] = {'A',0,'B',0,'C',0,'D',0};
// int n = 100,randNum;
// for (int i = 0; i < 100; i++)
// {
// randNum = arc4random()%5;
// switch (randNum)
// {
// case candidateNum_A:
// {
// c[0].poll++;
// }
// break;
// case candidateNum_B:
// {
// c[1].poll++;
// }
// break;
// case candidateNum_C:
// {
// c[2].poll++;
// }
// break;
// case candidateNum_D:
// {
// c[3].poll++;
// }
// break;
//
// default:
// break;
// }
// }
// sortCandidateByPoll(c, 4);
// printCandidate(c, 4);
/*
13、思考题:编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
比如:"ni hap world",最长单词是world
*/
// char *words = "ni hap world";
// int longLocation = 0,longLength = 0,tmpLocation = 0,tmpLength = 0;
// for (int i = 0; ; i++)
// {
// if (words[i] == '\0' || words[i] == ' ')
// {
// if (longLength < tmpLength)
// {
// longLength = tmpLength;
// longLocation = tmpLocation;
// }
// tmpLocation = i+1;
// tmpLength = 0;
// if (words[i] == '\0')
// {
// break;
// }
// }
// else
// {
// tmpLength++;
// }
// }
// printf("%d %d\n",longLocation,longLength);
// char longWord[20];
// strncpy(longWord, &words[longLocation], longLength);
// puts(longWord);
//查找最长单词简易实现方法
void find1(){
char a[]="nibbbbb hap worlbb",b[50],max[50];
int i;
int j=0;
int temp=0;
a[(int)strlen(a)]=' ';
for (i=0; i<=strlen(a); i++){
if (a[i]==32){
if(strlen(b)>strlen(max)){
strcpy(max, b);
for (int c=0;c<10; c++) {
b[c]='\0';
}
temp=i+1;
j=0;
}
else {*b=0;j=0;temp=i+1;}
}
else{
for (; j<=i-temp; j++) {
b[j]=a[i];
}
}
}
puts(max);
}
/*
14、思考题: 约瑟夫环的数组实现
约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫环问题的具体描述是:设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,知道只剩下一人为止。当任意给定 n和 m后,设计算法求 n个人出圈的次序。
*/
// printf("请输入n,m,逗号分隔:");
//
// //currentCursor当前报数报到几,currentCount表示有人出圈后当前圈里还有几个人,currentIndex当前数组的下标
// int n,m,currentCursor = 0,currentCount,currentIndex = 0;
// scanf("%d,%d",&n,&m);
// currentCount = n;
//
// struct Person p[n];
//
// initPerson(p, n);
//
// for (int i = 0; i < n; i++)//控制出列次数
// {
// while (currentCount > 0)
// {
// currentCursor++;
// currentIndex++;
// if (currentIndex == currentCount-1)
// {
// currentIndex = 0;
// }
// if (currentCursor == m)
// {
// personGoOut(p,currentIndex,n);
// currentCount--;
// currentCursor = 0;
// }
// }
// }
// printPerson(p, n);
}
return 0;
}
//约瑟夫环的简易实现
//void Joseph (int n,int m){
// int sum, a[n], i, del = 0;
// for (i = 0; i <= n-1; i++)
// a[i] = i + 1;
// for (sum = n; sum != 1; sum--) {
// del = (del + m-1) % sum;
// printf("第%d个出局%d\n",n-i+1, a[del]);
// for (i = del; i <= sum - 2; i++)
// a[i] = a[i+1];
// }
// printf("留下的是%d\n\n", a[0]);
//}