梦龙_C语言作业11
Posted 童话与梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梦龙_C语言作业11相关的知识,希望对你有一定的参考价值。
钟情于你
忠心于你
忠诚于你
终止于你
终究还是你
一.填空题(共4题,20.0分)
1、插入法
5.5 下面程序使用插入法在输入的同时升序排序,请补充①②③三处空缺。
第一空:
break
第二空:
i+1
第三空:
i
源码
#include<stdio.h>
typedef int Intarry[10];
void insertx(Intarry a,int n,int x)
{
int i;
for(i=n-1;i>=0;i--)
if(a[i]>x) a[i+1] = a[i];
else break;
a[i+1]=x;
}
void main()
{
Intarry s;
int i;
scanf("%d",&s[0]);
for(i=1;i<=9;i++)
{
scanf("%d",&s[i]);
insertx(s,i,s[i]);
}
for(i=0;i<=9;i++)
printf("%d ",s[i]);
}
2、冒泡法
5.17 阅读下面程序并填空:
第一空:
0
第二空:
冒泡
第三空:
升
源码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[10];
int i,j,n,t;
n=10;
srand((unsigned)time(NULL));
for(i=0;i<n;i++) a[i] = rand()%101;
for(i=0;i<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;}
for(i=0;i<n;i++) printf("%d ",a[i]);
}
3、插入法
5.18 阅读下面程序并填空:
第一空:
j>=0
第二空:
插入
第三空:
降
源码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[10];
int i,j,n,t;
n=10;
srand((unsigned)time(NULL));
for(i=0;i<n;i++) a[i] = rand()%101;
for(i=0;i<n-1;i++)
{
t=a[i+1];
for(j=i; j>=0&&t>a[j];j--)
a[j+1]=a[j];
a[j+1]=t;
}
for(i=0;i<n;i++) printf("%d ",a[i]);
}
4、冒泡法
5.19 阅读下面程序并填空:
第一空:
i+1
第二空:
冒泡
第三空:
升
源码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[10];
int i,j,n,t;
n=10;
srand((unsigned)time(NULL));
for(i=0;i<n;i++) a[i] = rand()%101;
for(i=0;i<n-1;i++)
{
for(j=i+1; j<=n-1;j++)
if(a[i]>a[j])
{ t=a[i];a[i]=a[j];a[j]=t;}
}
for(i=0;i<n;i++) printf("%d ",a[i]);
}
二.简答题(共1题,5.0分)
1、互异随机数
11-1 请产生10个互不相同的[0,100]之间的随机数存放到数组中并显示,显示时每个数后跟1个空格。(不要有任何提示文字,结果后面不要回车)
(5.0分)
参考答案
/*
时间:2021-5-20
作者:童话
环境:Win 10 、 VC++ 6
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[10];
int i,j,t;
int flag;
srand((unsigned)time(NULL));
i=0;
while(i<10)
{
t = rand()%101;
flag = 1;
for(j=0;j<=i;j++)
{
if(t==a[j])
flag = 0;
}
if(flag)
{
a[i] = t;
i++;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
三.程序题(共2题,10.0分)
1、排序、二分法查找元素
5.7 请编程:输入10个整数到一数组,按升序排序,再输入一整数,然后使用二分查找法查找该数是否存在于数组中,若存在返回查找时比较的次数,若不存在返回0。例如,输入1 2 3 4 5 6 7 8 9 10,再输入10,显示结果4。若输入3 2 7 8 9 6 1 5 4 10,再输入5,返回结果1。(不显示任何提示文字,显示最后的结果不回车)
参考答案
×
/*
时间:2021-5-20
作者:童话
环境:Win 10 、 VC++ 6
*/
#include<stdio.h>
int dichotomy(int* i,int j,int k)
{
int a=0,b=j-1,c,d=0;
while(a<=b)
{
d++;
c = (a+b)/2;
if(k == i[c]) return d;
else if(k < i[c]) b=c-1;
else a = c + 1;
}
return 0;
}
void main()
{
int a[10],i,j,k,t,n=10;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<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;}
scanf("%d",&t);
if(dichotomy(a,n,t)) printf("%d",dichotomy(a,n,t));
}
√
/*
时间:2021-5-20
作者:童话
环境:Win 10 、 VC++ 6
*/
#include<stdio.h>
int dichotomy(int* array,int n,int num)
{
int left = 0;
int right = n-1;
int count = 0;
int midde;
while(left<=right)
{
count++;
midde = (left+right)/2;
if(num == array[midde])
{
return count;
}
else if(num < array[midde])
{
right = midde-1;
}
else
{
left = midde + 1;
}
}
return 0;
}
void main()
{
int a[10];
int i,j,t;
int n=10;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<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;
}
}
}
scanf("%d",&t);
if(dichotomy(a,n,t))
{
printf("%d",dichotomy(a,n,t));
}
}
2、月份
5.16 定义12个成员的整型数组a和b,a的成员按顺序保存了1到12月每个月的天数,b的成员按顺序保存1到12月的以前各个月的累计天数,下标为0的成员中保存了1月之前的天数0,下标为11的成员中保存了12月之前的11个月的累计天数。请编程,输入1个年份,根据年份修改a的2月份的天数,然后根据a计算出数组b并显示b,每个数据显示时后跟1个空格。(不要有任何提示文字,结果最后不用回车)
参考答案
/*
时间:2021-5-20
作者:童话
环境:Win 10 、 VC++ 6
*/
#include<stdio.h>
void main()
{
int a[12] = {31,28,31,30, 31,30, 31, 31, 30, 31, 30, 31};
int b[12];
int year;
int i;
scanf("%d",&year);
if((year%400==0) || (year%4==0&&year%100!=0))
a[1] = 29;
b[0] = 0;
printf("%d ",b[0]);
for(i=1;i<12;i++)
{
b[i] = b[i-1] + a[i-1];
printf("%d ",b[i]);
}
}
以上是关于梦龙_C语言作业11的主要内容,如果未能解决你的问题,请参考以下文章