首页 > 代码库 > c语言数组问题解析
c语言数组问题解析
#import <Foundation/Foundation.h>
#define COUNT 10
int main(int argc, const char * argv[])
{
//1、随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值。
// int max = 0, min = 0, sum = 0, secondMax = 0;
// float ave = 0.0;
// int a[20] = {0};
// //给数组元素赋值
// for (int i = 0; i < 20; i++) {
// a[i] = arc4random() % (50 - 10 + 1) + 10;
// printf("%d ", a[i]);
// }
// printf("\n");
// //求数组元素的最大值以及第二大值
// for (int i = 0; i < 20; i++) {
// if (a[i] > max) {
// secondMax = max;
// max = a[i];
// } else if (a[i] != max && a[i] > secondMax) {
// secondMax = a[i];
// }
// }
// min = a[0];
// //求数组元素的最小值
// for (int i = 1; i < 20; i++) {
// if (a[i] < min) {
// min = a[i];
// }
// }
// //求数组元素的和
// for (int i = 0; i < 20; i++) {
// sum += a[i];
// }
// ave = sum / 20.0;
// printf("max = %d, min = %d, secondMax = %d, sum = %d, ave = %.2f\n", max, min, secondMax, sum, ave);
//2.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。
// char str[255] = {0};
// printf("请输入一个字符串:\n");
// scanf("%[^\n]", str);
//// gets(str);
// int maxLength = 0, maxIndex = 0;
// int length = 0;
// int i = 0;
// while (str[i] != ‘\0‘) {
// if (str[i] != ‘ ‘) {
// length++;
// } else {
// if (maxLength < length) {
// maxLength = length;
// maxIndex = i - maxLength;
// }
// length = 0;
// }
// i++;
// }
// if (maxLength < length) {
// maxLength = length;
// maxIndex = i - maxLength;
// }
// for (int j = maxIndex; j < maxIndex + maxLength; j++) {
// printf("%c", str[j]);
// }
//3、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。
// int a[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
// int number = 13; //记录圈内剩余的人数
// int count = 0; //通过计算器来模拟报数
// int i = 0; //循环变量
// while (number > 1) {
// if (a[i] != 0) {
// count++;
// }
// if (count == 3) {
// a[i] = 0; //让该元素置0,模拟踢出圈子
// count = 0; //然后计数器重新归0
// number--; //踢出圈子之后人数-1
// }
// i++;
// if (i == 13) {
// i = 0; //当到最后一个人的时候, 再转到第一个人继续报数
// }
// }
// for (int j = 0; j < 13; j++) {
// if (a[j] > 0) {
// printf("叛徒就是第%d个人.", a[j]);
// }
// }
//4.将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的。
int a[10] = {0};
int b[10] = {0};
int c[20] = {0};
//给数组a赋值
for (int i = 0; i < 10; i++) {
a[i] = arc4random() % (40 - 20 + 1) + 20;
}
//给数组b赋值
for (int i = 0; i < 10; i++) {
b[i] = arc4random() % (40 - 20 + 1) + 20;
}
//将数组a排序
for (int i = 0; i < 10 - 1; i++) {
for (int j = 0; j < 10 - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
//将数组b排序
for (int i = 0; i < 10 - 1; i++) {
for (int j = 0; j < 10 - 1 - i; j++) {
if (b[j] > b[j + 1]) {
int temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
//输出数组a
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
printf("\n");
//输出数组b
for (int j = 0; j < 10; j++) {
printf("%d ", b[j]);
}
printf("\n");
//将数组a和数组b合并到数组c中
int i = 0, j = 0, k = 0;
while (i < 10 && j < 10 ) {
if (a[i] > b[j]) {
c[k++] = b[j++];
} else {
c[k++] = a[i++];
}
}
while (i < 10) {
c[k++] = a[i++];
}
while (j < 10) {
c[k++] = b[j++];
}
//输出排序好的数组c
for (int m = 0; m < 20; m++) {
printf("%d ", c[m]);
}
//5.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
// int element = 2, demo = 1;
// int n = 0;
// float sum = 2.0;
// printf("请输入求前几项的和:\n");
// scanf("%d", &n);
// int temp = 0;
// for (int i = 1; i < n; i++) {
// temp = element;
// element = element + demo;
// demo = temp;
// sum += element * 1.0 / demo;
// }
// printf("sum = %.2f\n", sum);
//6.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
// int number = 0;
// printf("请输入一个不多于5位的正整数:\n");
// scanf("%d", &number);
// int count = 0;
// int copyNumber = number;
// while (copyNumber) {
// count++;
// copyNumber /= 10;
// }
// printf("%d\n", count);
// for (int i = 0; i < count; i++) {
// printf("%d", number % 10);
// number /= 10;
// }
//7.,一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
// int number = 0;
// printf("请输入一个数:\n");
// scanf("%d", &number);
// int count = 0;
// //先求出数字的位数
// int copyNumber = number;
// while (copyNumber) {
// count++;
// copyNumber /= 10;
// }
// int temp = 1;
// for (int i = 0; i < count - 1; i++) {
// temp *= 10;
// }
// BOOL isTrue = YES;
// copyNumber = number;
// for (int i = 0; i < count / 2; i++) {
// int higher = number / temp;
// int lower = number % 10;
// if (higher != lower) {
// isTrue = NO;
// break;
// }
// number %= temp;
// number /= 10;
// temp /= 100;
// }
// if (isTrue) {
// printf("%d是回文数", copyNumber);
// } else {
// printf("%d不是回文数", copyNumber);
// }
//8.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
// char letter = 0;
// printf("请输入第一个字母:\n");
// scanf("%c", &letter);
// switch (letter) {
// case ‘M‘:
// printf("Monday");
// break;
// case ‘T‘:
// {
// rewind(stdin); //清除缓冲区
// //getchar(); 或者取出一个字符丢弃,丢弃的是\n
// printf("请再输入第二个字符:\n");
// scanf("%c", &letter);
// switch (letter) {
// case ‘h‘:
// printf("Thursday");
// break;
// case ‘u‘:
// printf("Tuesday");
// break;
// default:
// break;
// }
// }
// case ‘W‘:
// printf("Wednesday.");
// break;
// case ‘F‘:
// printf("Friday");
// break;
// case ‘S‘:
// {
// rewind(stdin); //清除缓冲区
// //getchar(); 或者取出一个字符丢弃,丢弃的是\n
// printf("请再输入第二个字符:\n");
// scanf("%c", &letter);
// switch (letter) {
// case ‘a‘:
// printf("Saturday");
// break;
// case ‘u‘:
// printf("Sunday");
// break;
// default:
// break;
// }
// }
// default:
// break;
// }
//9.有1000000个数,每个数取值范围是0-999999
//找出其中重复的数,重复次数。
//第一种方式
// int a[COUNT] = {0};
// int number = 0;
// for (int i = 0; i < COUNT; i++) {
// number = arc4random() % COUNT;
// printf("%d ", number);
// a[number]++;
// }
// printf("\n");
// for (int i = 0; i < COUNT; i++) {
// if (a[i] > 1) {
// printf("%d : %d\n", i, a[i]);
// }
// }
//第二种形式
// int a[COUNT] = {0};
// for (int i = 0; i < COUNT ; i++) {
// a[i] = arc4random() % COUNT;
// printf("%d ", a[i]);
// }
// printf("\n");
// int temp = 0; //临时变量,用来存储取出来的数
// int count = 1; //记录重复的个数
// for (int i = 0; i < COUNT; i++) {
// temp = a[i];
// for (int j = i + 1; j < COUNT; j++) {
// if (a[j] == -1) {
// continue;
// }
// if (a[j] == temp) {
// count++;
// a[j] = -1; //将已经计算过的数置为-1.
// }
// }
// if (count > 1) {
// printf("%d : %d\n", temp, count);
// count = 1;
// }
// }
return 0;
}
本文出自 “漠北” 博客,请务必保留此出处http://wsx199312.blog.51cto.com/9168392/1440767
c语言数组问题解析