//// main.m// Day5_一位数组//// Created by 王佳兴 on 14-10-18.// Copyright (c) 2014年 lanou3g.com 蓝鸥科技. All rights reserved.//#include<string.h>#import <Foundation/Foundation.h>#define SIZE 10int main(int argc, const char * argv[]) {1. (*)先调试,调试成功后抄写下列程序: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[SIZE] = {0};int i = 0;for(i = 0; i < SIZE; i++){a[i] = i + 10;printf("a[%d] = %d\n", i, a[i]);}2. (*)将第一题中的数组 a 反向输出int a[SIZE] = {0};int i = 0;for(i = SIZE - 1; i > 0; i--){a[i] = i + 10;printf("a[%d] = %d\n", i, a[i]);}3. (*)对第一题中的数组进行求和操作,打印计算结果。int a[SIZE] = {0};int i = 0;int sum = 0;//循环累加for(i = 0; i < SIZE; i++){a[i] = i + 10;sum += a[i];}printf("%d\n", sum);4. (**)计算第一题数组连减,打印计算结果int a[SIZE] = {0};int i = 0;int b = 0;int c = 0;//循环累减for(i = 0; i < SIZE; i++){a[i] = i + 10;b = b - a[i];}c = b + a[0];printf("%d\n", c);5. (**)随机产生20个10~50的正整数存放到数组中,并求数组中的多有 元素最大值、最小值、平均值及各元素之和//第一种://定义整型数组int a[20] = {0};//对最大值,最小值,各元素之和以及平均值初始化int max = 0, min = 50, sum = 0, avg = 0;//循环求得最大值,最小值,以及各元素之和for (int i = 0; i < 20; i++) {a[i] = arc4random() % (50 - 10 + 1) + 10;printf("%d ", a[i]);if (a[i] > max) {max = a[i];}if (a[i] < min) {min = a[i];}sum += a[i];}//各元素之和除以元素个数为平均值avg = sum / 20;//打印所求结果printf("最大值:%d\n最小值:%d\n各元素之和:%d\n平均数:%d\n", max, min, sum, avg);//第二种://定义数组int array[20] = {0};//定义最大值和最小值下标,初始化和与平均值int max = 0, min = 0;float sum = 0, avg = 0;//通过循环得到最大值,最小值,累加器for (int i = 0; i < 20; i++) {//通过随机数得到数组各元素array[i] = arc4random() % (50 - 10 + 1) + 10;//打印数组,检验以下正确性printf("%d ",array[i]);//判断求得最大值if (array[i] > array[max]) {max = i;}//判断求得最小值if (array[i] < array[min]) {min = i;}//累加得到各元素之和sum += array[i];}//平均值avg = sum / 20;//美观printf("\n");//打印结果printf("max : %d\nmin : %d\nsum : %.2f\navg = %.2f\n", array[max], array[min], sum, avg);6. 编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组//定义两个数组int a[5] = {3, 5, 1, 9, 7};int b[5] = {8, 6, 2, 0, 4};//初始化循环变量int i, j, temp;//循环将两个整型数组分别排序(冒泡排序)for(j = 0; j < 5; j++){for (i = 0; i < 5 - 1 - j; i++) {if (a[i] > a[i + 1]) {temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;}if (b[i] > b[i + 1]) {temp = b[i];b[i] = b[i + 1];b[i + 1] = temp;}}}//分别打印排序后的两个数组printf("a[5]:");for (i = 0; i < 5; i++) {printf("%d ", a[i]);}printf("\n");printf("b[5]:");for (i = 0; i < 5; i++) {printf("%d ", b[i]);}printf("\n");//定义第三个数组,将排序之后的两个数组拼接到第三个数组上int c[10] = {0};for (int i = 0; i < 10; i++) {if (i < 5) {c[i] = a[i];}else {c[i] = b[i-5];}}//冒泡排序法为所得数组排序int temp1;for (j = 0; j < 10; j++) {for (i = 0; i < 10 - 1 - j; i++) {if (c[i] > c[i + 1]) {temp1 = c[i];c[i] = c[i + 1];c[i + 1] = temp1;}}}//打印所得数组printf("c[10]:");for (i = 0; i < 10; i++) {printf("%d ", c[i]);}printf("\n");7. (***)给定某年某月某日,输出其为这一年的第几天//定义整型数组,元素为各个月份的天数,第一个元素为程序运行方便设置成0int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//提示输入日期printf("请输入日期:");//定义循环变量以及 年 月 日 和累加器sumint i, year, month, day, sum = 0;//输入日期scanf("%d %d %d", &year, &month, &day);//判断输入日期是否为闰年if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {a[2] = 29;}//循环式累加器累加判断所输入的月份的天数for(i = 0; i < month; i++){sum += a[i];}//所输入的月份的天数,加上之前月份的天数即为这一年的多少天sum += day;//打印天数printf("%d\n", 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 j = 0; j < 10; j++) {for (int i = 0; i < 10 - 1 - j; i++) {if (a[i] > a[i + 1]) {int temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;}}}//打印排序后的数组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};//定义是个元素的数组int a[] = {5, -9, 32, 77, 64, -24, 14, 0, 21, 45};//初始化最大值以及最小值int max = -24, min = 77;//循环取得最大值和最小值for (int i = 0; i < 10; i++) {//判断取最大值if (a[i] > max) {max = a[i];}//判断取最小值if (a[i] < min) {min = a[i];}}//打印最大值和最小值printf("最大值:%d ", max);printf("最小值:%d\n", min);//循环判断取得最大值和最小值的下标for (int i = 0; i < 10; i++) {if (a[i] == max) {printf("最大值下标:%d ", i);}if (a[i] == min) {printf("最小值下标:%d\n", i);}}//定义数组int a[] = {5, -9, 32, 77, 64, -24, 14, 0, 21, 45};//初始化最大值和最小值的下标int max = 0, min = 0;//循环取得最大值和最小值下标for (int i = 0; i < 10; i++) {//判断取得最大值下标if (a[i] > a[max]) {max = i;}//判断取得最小值下标if (a[i] < a[min]) {min = i;}}//打印结果printf("max:%d\nmin:%d\nmaxid:%d\nminid:%d\n", a[max], a[min], max, min);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 str1[]="lanou ";char str2[]="23_class ";char str3[]="is niu best!\n";//拼接数组strcat(str1, str2);strcat(str1, str3);//打印数组printf("%s",str1);11、(**)找出下面程序的错误:char string[10], str1[10];int i;for(i = 0; i < 10; i++){str1[i] = 'a';}strcpy(string, str1);没预留\0位12、(**)下面这个程序执行后会有什么错误或者效果:int main(int argc, char *argv[]) {unsigned char str[10], i;for(i = 0; i < 256; i++)str[i] = i;}数组长度不够!13、(***)模拟 n 个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用 A、B、C、D 表示,当选某候选人时,直接输入其编号(编号由计算机随机产生),若输入的不是 A、B、C、D 则视为无效票,选举结束后按得票数从高到低输出 候选人编号和 所得票数printf("请输入参加选举的人数:");//n为投票的人数, number判断随机选的是哪个人int n,number;//输入投票人数scanf("%d", &n);//存储每个编码对应的票数int personNum[4] = {0};//定义存储代表候选人字母的字符串数组char person[4] = {'A', 'B', 'C', 'D'};for (int i = 0; i < n; i++) {number = arc4random() % 4;personNum[number]++;}for (int i = 0; i < 4; i++) {printf("%c:", person[i]);printf("%d\n", personNum[i]);}printf("排名如下:\n");for (int j = 0; j < 4 - 1; j++) {for (int i = 0; i < 4 - 1 - j; i++) {if(personNum[i] < personNum[i + 1]){int temp = personNum[i];personNum[i] = personNum[i + 1];personNum[i + 1] = temp;char tempC = person[i];person[i] = person[i + 1];person[i] = tempC;}}}for (int i = 0; i < 4; i++) {printf("%c : %d\n", person[i], personNum[i]);}//提示用户输入投票人数printf("请输入人数:");//创建任命数组char person[4] = {'B', 'J', 'R', 'L'};//创建票数数组int score[4] = {0};//定义整型变量用来存数参加选举的人数int n = 0;//通过控制台给n赋值scanf("%d", &n);//投票过程for (int i = 0; i < n; i++) {//创建一个0~3的随机数int r = arc4random() % 4;//用随机值给被选举人投票score[r]++;}//拍戏过程for (int i = 0; i < 4 - 1; i++) {for (int j = 0; j < 4 - 1 - i; j++) {//判断条件是根据票数而定if (score[j] < score[j + 1]) {//交换票数int temp = score[j];score[j] = score[j + 1];score[j + 1] = temp;//不要忘记,交换票数的同时需要交换人的位置char tempChr = person[j];person[j] = person[j + 1];person[j + 1] = tempChr;}}}printf("排名如下:\n");for (int i = 0; i < 4; i++) {printf("%c:%2d\n", person[i], score[i]);}14、(****)思考题:编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。 比如:"ni hao world”,最长单词是 world15、(*****)思考题: 约瑟夫环的数组实现 约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元 66-70 年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达 伯特城达 47 天之久,在城市沦陷之后,他和 40 名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。约瑟夫环问题的具体描述是:设有编号为 1,2,......,n 的 n(n>0)个人围成一 个圈,从第一个人开始报数,报到 m 时停止报数,报 m 的人出圈,再从他的 下一个人起重新报数,报到 m 时停止报数,报 m 的出圈,......,如此下去,知 道只剩下一人为止。当任意给定 n 和 m 后,设计算法求 n 个人出圈的次序。16、(*****)拓展题:调查学习冒泡排序以外的排序算法,并用 C 语言 实现练习3.查找字符中的空格数: 例如:“I love iOS, i want an iPhone5s” 6个空格//定义数组char str[] = "I love iOS, i want an iPhone5s";//定义累加器int sum = 0;//循环累加出空格的个数for (int i = 0; i < 30; i++) {if (strcmp(str + i, str + 30) == 32) {sum++;}}//打印空格的个数printf("空格个数为:%d\n", sum);练习4.将字符串倒转: 例如:“afjnpue” 转变成字符串“eupnjfa” (注:是改变字符串本⾝身,不是反向输出)定义字符串char str[12] = "WangJiaxing";//循环使字符串最前与最后调换,依次向内执行for (int i = 0; i < 11 / 2; i++) {char temp = str[i];str[i] = str[10 - i];str[10 - i] = temp;}//打印倒转后的字符串printf("%s", str);
Day5_c语言_一维数组练习
最新推荐文章于 2025-07-18 13:48:16 发布
本文涵盖C语言中数组的基本操作,包括数组的初始化、排序、求和等,并深入探讨字符串处理技巧,如字符串合并、反转及空格计数。
6349

被折叠的 条评论
为什么被折叠?



