C语言题目(数组)1
题目有:
1、 将1~10这几个数字放入数组中。
2、从键盘中输入10个互不相同的整数,输出这10 个数,并求最小值。
3、
【1】输入三个数,从大到小输出; ——逐一比较法
【2】输入5个整数,实现从小到大排序;——冒泡法
4、计算n的阶乘。
5、计算1!+2!+3!+......+10!
6、查找数组中某具体的数字:代码实现,在数组中找到数字6。 用“ 折半/二分查找法 ”
7、编写代码实现,模拟用户登录情况,并且只能登陆三次。
8、编写代码,演示多个字符从两段移动,向中间汇聚。
正文
1、遍历:依次访问数组中的数据(利用for循环)
向数组中输入数据和输出数组元素时,将数组与循环结合起来,可以有效的处理大批量的数据,从而大大提高工作效率。
【1】将1~10这几个数字放入数组中。
#include<stdio.h>
int main()
{int i=0;int arr[10];for(i=1;i<=10;i++) {arr[i]=i; /*若从用户端输入,可用scanf("%d",&arr[i]);实现*/}for(i=1;i<=10;i++){printf("%d ",arr[i]);}return 0;
}
2、最值:定义一个变量min(或max)来储存最小值(或最大值),先将arr[0]赋值给min(或max),然后将剩下的数组元素逐个与min(或max)比较,若小于min,则将值赋给min,最后输出min的值。
【2】从键盘中输入10个互不相同的整数,输出这10 个数,并求最小值。
#include<stdio.h>
int main()
{int i=0;int min=0; int arr[10];for(i=0;i<10;i++){scanf("%d",&arr[i]); //从键盘输入10个整数}for(i=0;i<10;i++){printf("%d ",arr[i]); //输出这10个数}min=arr[0]; //数组引用,给min变量赋初值for(i=1;i<10;i++) //循环9次,因下面的if语句需要多次执行{if(arr[0]>arr[i]){min=arr[i]; //数组引用,将较小的值赋给min}}printf("\n最小值是:%d\n",min); //输出最小值
return 0;
}
3、排序
【1】输入三个数,从大到小输出; ——逐一比较法
【2】输入5个整数,实现从小到大排序;——冒泡法
当比较的数的个数较少时,可以利用if语句逐一比较,但是当个数较多时,此法就过于麻烦和低效,因此,此时建议采用数组,用“冒泡法”解决。
#include<stdio.h>
int main()
{int a,b,c,t;scanf("%d %d %d",&a,&b,&c);if(a<b) //算法实现,a中放最大值,b次之,c中放最小值{t=a;a=b;b=t;} if(b<c){t=b;b=c;c=t;} if(a<c){t=a;a=c;c=t;} printf("%d %d %d\n",a,b,c);
return 0;
}
冒泡法:
#include<stdio.h>
int main(void)
{int num[11];int i,j;int temp;for(i=0;i<10;i++)scanf("%d",&num[i]);for(i=0;i<10-1;i++) //这里只需进行九次循环,第十次的数已经是最小值,不需要进行排序 for(j=0;j<10-1-i;j++) //这里只需进行n-i-1次排序,因为前i个数已经排好了序 if(num[j]>num[j+1]){temp=num[j];num[j]=num[j+1];num[j+1]=temp;}for(i=0;i<10;i++)printf("%d ",num[i]);return 0;
}
下面我们来详细分析一下代码:
for(i=0;i<10-1;i++)
第一个循环 要循环n-1次 ?因为每次循环都会把当前循环中的最大一位放到右端,在第n-1次放完后,数组最左端的数字已经是最小的,不需要n次循环。
for(j=0;j<10-i-1;j++)
第二个循环 循环n-i-1次,为什么是n-i-1? 同上,右端经过一次比较就会替换成最大值,每次循环放置一个当前循环的最大值,所以循环完全不必要进行10次,减去已经放好的值的数量(执行一次放一个,执行i次就是i个)可以提高程序运行的速度。
【4】计算n的阶乘。
#include<stdio.h>
int main()
{int i,n,ret;ret=1;printf("请输入n的值:");scanf("%d",&n);for(i=1;i<=n;i++){ret=ret*i;}
printf("ret=%d\n",ret);
return 0;
}
【5】计算1!+2!+3!+......+10!
#include<stdio.h>
int main()
{int i=0;int ret=1;int sum=0;for(i=1;i<=10,i++){ret=ret*i;sum=sum+ret;}
printf("和为:%d\n",sum);
return 0;
}
【6】查找数组中某具体的数字
代码实现,在数组中找到数字6.
#include<stdio.h>
int main()
{int i=0;int arr[]={1,2,3,4,5,6,7,8,9,10};int k=6; //写一个代码,在arr中找到6sz=sizeof(arr)/sizeof(arr[0]); //数组元素的个数for(i=0;i<sz;i++) {if(k==arr[i]) //数组的引用printf("找到了,下标是:%d\n",i);break; //易漏,若不写break,则找到了也会继续执行下面的代码} if(i==sz)printf("没找到\n");
return 0;
}
用“ 折半/二分查找法 ”,执行效率更高,如下:
#include<stdio.h>
int main()
{ int arr[]={1,2,3,4,5,6,7,8,9,10};int k=7;int sz=sizeof(arr)/sizeof(arr[0]);int left=0; //坐下标int right=(sz-1); //右下标while(left<=right){int mid=(left+right)/2; //每次循环都要计算中间坐标,然后与要找到数对比if(arr[mid]>k) //在循环过程中可能出现的3种互斥条件的情况,用if-else-if 语句{right=mid-1;}else if(arr[mid]<k){left=mid+1;}elseprintf("找到了,下标是:%d\n",mid);break; //中间坐标对应的数组元素刚好是7}if(left>right)printf("找不到\n");return 0;
}
【7】编写代码实现,模拟用户登录情况,并且只能登陆三次。
#include<stdio.h>
#include<string.h>
int main(){char password[]="123456";int i;char input[10];for(i=0;i<3;i++) {printf("请输入密码:\n");scanf("%s",input); //注意别加&if(strcmp(input,password) == 0) break;else if (i<3) printf("密码错误,重新输入!\n");} if(i<3) {printf("登陆成功,进入程序!\n");} else printf("密码错误,退出程序!\n");return 0;
}
分析: ==不能用来比较两个字符串是否相等,应使用一个库函数 strcmp()
【8】编写代码,演示多个字符从两段移动,向中间汇聚。
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main(){char arr1[]="welcome to bit !!!!!!"; char arr2[]="####### ## ### ######";int left=0;// 此法也对 int right=sizeof(arr1)/sizeof(arr[0])-2; int right=strlen(arr)-1;//用strlen 求字符串长度,遇'\0'停止,不含'\0'while(left<=right){arr2[left]=arr1[left];arr2[right]=arr1[right];Sleep(1000); //休息1000毫秒,即一秒system("cls"); //清空屏幕; system(); ——执行系统命令的一个函数left++;right--;}printf("%s\n",arr2); /*最后打印一次字符串,不然会因system("cls");而导致屏幕不会出现字符串*/return 0;
}
C语言题目(数组)1相关推荐
- C语言求数组中的最大值
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105163865 C ...
- c语言应用报告,C语言:数组的应用实验报告.doc
C语言:数组的应用实验报告.doc -1- 课程名称课程名称结构化程序设计与结构化程序设计与 C C 语言语言 开课实验室开课实验室 年年 月月 日日 年级年级.专业.班.专业.班 学号学号 姓名姓名 ...
- 7-301 sdut- C语言实验-数组逆序(数组移位)
7-301 sdut- C语言实验-数组逆序(数组移位) 分数 16 全屏浏览题目 切换布局 作者 马新娟 单位 山东理工大学 有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m ...
- 【面试】嵌入式C语言题目整理
[面试]嵌入式C语言题目整理 描述内存四区. 内存四区分为:代码区.静态区.堆区.栈区 代码区就是用来存放代码的. 静态区用来存放全局变量.静态变量.常量(字符串常量.const修饰的全局变量). 堆 ...
- c语言编程数组对角线之和,C语言实现3*3数组对角线之和示例
C语言实现3*3数组对角线之和示例 我就废话不多说了,直接上代码吧! #define _CRT_SECURE_NO_WARNINGS 1 #include #include int SUM(char ...
- C语言题目:左旋字符串.
C语言题目:左旋字符串 两种方法: 方法一原理:把第一个元素放存放到某个变量,让除了第一个的元素全部向前移动一个索引,再把变量放到数组最后一个元素 实现: 方法二原理: 先让要左旋的那几个字符逆序,再 ...
- 100例C语言经典编程题 | 浙大版C语言题目集第三版,助力你C语言从入门到精通
获取每道题详细解答请在公众号[C you again]"C语言题目集"栏目查看. 下载pdf版本请在公众号[C you again]回复"c-pdf"自行获取. ...
- c语言不用数组十进制转二进制,C语言输入十进制整数,不用数组将其转化为二进制数...
1楼:吴诗妍好 c语言输入一个10进制整数不用数据,将它转化为爱情制度,你这个好像有点复杂呀,你应该问一下你的同事和这老师吧 c语言,使用数组,编写一个十进制正整数转换为二进制数的转换工具 5 2楼: ...
- 百度作业帮c语言查题目,c语言题目看程序写结果a=5,b=4,c=3,d:d=(abc)
请大家看一下下面的C语言程序哪里出错了,题目是求一元二次方程的解. 您的程序一共有两个地方有问题,第一是读取输入的时候,a,b,c定义成double,所以读入的时候不能用%d,而应该:scanf(&q ...
- c语言 字符串 timu,这个C语言题目究竟谁该背锅?竟然是它。。。
原标题:这个C语言题目究竟谁该背锅?竟然是它... 问题来源 各位,今天给大家带来一道有问题的C语言题目,初学者犯这种错误的可能性不小,大家来看一下这应该是谁的锅呢?问题代码如下: 1 代码分析 代码 ...
最新文章
- 大型网站的灵魂——性能
- Mybatis执行select语句无匹配对象时返回集为Empty还是null
- 浅谈疫情下的就业形势
- 电影特效用到什么计算机知识,后期影视特效处理知识普及
- C# 模拟Windows键盘事件
- android自定义金额输入键盘_Android 自定义控件 - 仿支付宝数字键盘
- 红外遥控协议-NEC协议
- 7-138 打印沙漏 (20 分)
- 6G 研发启动,普通人如何借势加薪?
- Java 建模:子整体软件开发
- 华为/华三:OSPF多区域配置
- python对landsat8数据进行辐射校正
- 路由交换的一些常见知识点总结
- python中复选框取消修改_Python tkinter复选框双重检查/取消选中(Python tkinter Checkboxes double check/uncheck)...
- windows与mac字体设置
- Acer 笔记本双硬盘安装Ubuntu18.04.4+Win10双系统
- PDM,读《长尾理论》
- Google APAC 2016 University Graduates Test Practice Round APAC test
- MySQL中show命令用法大全
- java date类 时区_Java Date 与时区