没有合适的资源?快使用搜索试试~ 我知道了~
C语言编程练习之数组.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2023-02-27
20:34:40
上传
评论
收藏 45KB DOCX 举报
温馨提示
试读
21页
.
资源推荐
资源详情
资源评论
1.输出整数各位数字
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
(1)编程思路。
将一个非负整数 number 各位上的数字依次分离出来,其操作步骤为:
1)分离出 number 的个位数,即 number%10。
2)将 number 除以 10,作为新的 number,即新的 number 丢掉了个位数。
3)如果 number 等于 0,分离完毕,结束。否则,转第 1)步,继续显示。
例如,number=1234,number%10=4, number=1234/10=123,得到数字 4;
number%10=3, number=123/10=12,得到数字 3;
number%10=2, number=12/10=1,得到数字 2;
number%10=1, number=1/10=0,得到数字 1;结束。
将分离的各位数字依次存储到数组 a 中,然后逆序输出数组 a 中保存的各元素值即可。
(2)源程序。
#include <stdio.h>
int main()
{
long long n;
scanf("%lld",&n);
int a[20]={0},cnt=0;
while (n!=0)
{
a[cnt++]=n%10;
n=n/10;
}
if (cnt==0)
printf("0 \n");
else
{
for (int i=cnt-1;i>=0;i--)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}
2.冒泡法排序
将 N 个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如
果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是
最大的元素。然后用同样的方法对前 N−1 个元素进行第二遍扫描。依此类推,最后只需处
理两个元素,就完成了对 N 个数的排序。
本题要求对任意给定的 K(<N),输出扫描完第 K 遍后的中间结果数列。
输入格式:
输入在第 1 行中给出 N 和 K(1≤K<N≤100),在第 2 行中给出 N 个待排序的整数,数字间
以空格分隔。
输出格式:
在一行中输出冒泡排序法扫描完第 K 遍后的中间结果数列,数字间以空格分隔,但末尾不
得有多余空格。
输入样例:
6 2
2 3 5 1 6 4
输出样例:
2 1 3 4 5 6
(1)编程思路。
前 k 趟冒泡排序描述为:
for (i=0;i<k;i++)
{
// 对序列 a[0]~a[n-1-i]从头到尾对前后相邻两数进行比较,逆序则交换
for (j=0;j<n-1-i;j++)
if (a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
(2)源程序。
#include <stdio.h>
int main()
{
int a[100];
int n,k;
scanf("%d%d",&n,&k);
int i,j,t;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<k;i++)
for (j=0;j<n-1-i;j++)
if (a[j]>a[j+1])
{
t=a[j]; a[j]=a[j+1]; a[j+1]=t;
}
printf("%d",a[0]);
for (i=1;i<n;i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}
3.评委打分
班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是 10 个同学,随着一道道题目
的出示,有时是 1 号选手得分,有时是 5 号选手得分,每次答对者得 10 分,最后结果如何
呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数 n,表示有 n 道题竞赛。 接
下去有 n 行,每行有一个数字 x,x 表示本次可以加分的选手序号(每次答对者得10 分)。
输出格式:
10 个同学最终的得分值,每两位同学之间有一个空格。
输入样例:
10 0 0 0 10 10 0 0 0 10
3
1
10
1
输出样例:
30 0 0 0 10 10 0 0 0 20
(1)编程思路。
定义数组
int a[11];,其中 a[1]~a[10]分别保存序号为 1~10 的选手的得分。每次输入本
次可以加分的选手序号 x 后,数组元素 a[x]加 10 分即可。
(2)源程序。
#include <stdio.h>
int main()
{
int a[11];
int i;
for (i=1;i<=10;i++)
scanf("%d",&a[i]);
int n,k;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&k);
a[k]+=10;
}
printf("%d",a[1]);
for (i=2;i<=10;i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}
4.组合数的和
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求
所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、
82、85,它们的和为 330。
输入格式:
输入在一行中先给出 N(1 < N < 10 ),随后给出 N 个不同的非 0 个位数字。数字间以空
格分隔。
输出格式:
输出所有可能组合出来的 2 位数字的和。
输入样例:
3 2 8 5
输出样例:
330
(1)编程思路 1。
定义数组 int a[10];保存输入的 N 个非 0 的个位数字,用二重循环组成两位数并求和。
for (i=0;i<n;i++)
// 取得十位数字 a[i]
for (j=0;j<n;j++) // 取得个位数字 a[j]
{
if(i==j) continue; // 个位数字和十位数字不能取同一个数字
s=s+10*a[i]+a[j];
}
(2)源程序 1。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[10];
int i,j;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
int sum=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
if (j==i) continue;
sum+=a[i]*10+a[j];
}
printf("%d\n",sum);
return 0;
}
(3)编程思路 2。
用二重循环
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{ }
可以在 n 个数字中任取两个不同的数字 a[i]和 a[j],这两个数字可以构成两
位数 10*a[i]+a[j]或 10*a[j]+a[i]。
(4)源程序 2。
#include <stdio.h>
int main()
剩余20页未读,继续阅读
资源评论
xxpr_ybgg
- 粉丝: 6442
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功