7-1 sdut-C语言实验-顺序查找
输入n个正整数(1<= n <= 100),查找n个数中是否存在数x。如果存在则返回第一次出现的下标,否则输出"NO"。
输入格式:
第一行输入n,然后输入n个正整数。
第二行输入x。
输出格式:
如果数列中存在x则输出其下标,否则输出"NO"。
输入样例1:
10 7 0 9 4 3 8 2 1 5 4
6
输出样例1:
NO
输入样例2:
5 8 7 8 3 9
8
输出样例2:
0
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n],i,j,z;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&z);
int t=0,k;
for(i=0;i<n;i++)
{
if(a[i]==z)
{
k=i;
t=1;
break;
}
}
if(t==1)
printf("%d",k);
if(t==0)
printf("NO");
return 0;
}
7-2 sdut- C语言实验-数组逆序(数组移位2)
有n个整数,使其最前m个数变成最后面的m个数,其他各数顺序向前移m(m < n < 100)个位置。
输入格式:
输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。
输出格式:
按先后顺序输出n个整数。
输入样例:
5 1 2 3 4 5
2
输出样例:
3 4 5 1 2
#include<stdio.h>
int main()
{
int n,m;
scanf("%d",&n);
int a[n],b[n],i,j;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
scanf("%d",&m);
for(i=0;i<n;i++)
{
if(i+m<n)
a[i]=b[i+m];
else
a[i]=b[i+m-n];
}
for(i=0;i<n;i++)
{
if(i==n-1)
printf("%d\n",a[i]);
else
printf("%d ",a[i]);
}
return 0;
}
7-3 sdut-C语言实验- 排序
给你N(N<=100)个数,请你按照从小到大的顺序输出。
输入格式:
输入数据第一行是一个正整数N,第二行有N个整数。
输出格式:
输出一行,从小到大输出这N个数,中间用空格隔开。
输入样例:
5
1 4 3 2 5
输出样例:
1 2 3 4 5
#include<stdio.h>
int main()
{
int n,i,j,t;
scanf("%d",&n);
int a[100];
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;
}
}
}
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
return 0;
}
7-4 冒泡法排序之过程
本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。
冒泡排序的算法步骤描述如下:
第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素"冒泡"到a[n−1];
第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素"冒泡"到a[n−2];
......
第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素"冒泡"到a[n−i];
......
第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素"冒泡"到a[1]。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
5
8 7 6 0 1
输出样例:
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8
#include<stdio.h>
int main()
{
int n,t;
scanf("%d",&n);
int a[100];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
if(n==1)
printf("%d",a[0]);
for(int i=0;i<n-1;i++)
{
for(int 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(int i=0;i<n;i++)
{
if(i==n-1)
printf("%d\n",a[i]);
else
printf("%d ",a[i]);
}
}
return 0;
}
7-5 sdut-C语言实验-统计输出
编写一个程序,输入一个1到300之间的数据n,然后输入n个1到100范围内的数, 统计1到10、11到20等每10个分数段出现的数值个数,并输出相应的星号和个数。 如下图所示,在1到10范围内生成了4个值,而在11到20范围内并没有生成范围为11到20的值。如果输入的数据不在要求范围内则输出相应的错误提示信息。
输入格式:
输一个整数n(1<=n<=300)。
输入n个整数,取值范围在1到100之间。
输出格式:
输出每个数据段的星号和数据出现的次数。
输入样例1:
30
1 2 3 12 13 14 15 22 23 24 34 45 46 47 48 56 57 66 69 70 71 77 78 79 99 90 88 91 100 6
输出样例1:
1 to 10: ****(4)
11 to 20: ****(4)
21 to 30: ***(3)
31 to 40: *(1)
41 to 50: ****(4)
51 to 60: **(2)
61 to 70: ***(3)
71 to 80: ****(4)
81 to 90: **(2)
91 to 100: ***(3)
输入样例2:
301
输出样例1:
You must enter a number in the range 1 to 300
#include<iostream>
using namespace std;
const int N=310;
int ge,yi,er,sa,si,wu,li,qi,ba,ji;
int main()
{
int n;
scanf("%d",&n);
if(n<1||n>300) printf("You must enter a number in the range 1 to 300");
else
{
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
if(x<1||x>100) printf("You must enter a number in the range 1 to 300");
else if(x>=1&&x<=10) ge++;
else if(x>=11&&x<=20) yi++;
else if(x>=21&&x<=30) er++;
else if(x>=31&&x<=40) sa++;
else if(x>=41&&x<=50) si++;
else if(x>=51&&x<=60) wu++;
else if(x>=61&&x<=70) li++;
else if(x>=71&&x<=80) qi++;
else if(x>=81&&x<=90) ba++;
else if(x>=91&&x<=100) ji++;
}
printf(" 1 to 10: ");
for(int i=0;i<ge;i++) printf("*");printf("(%d)\n",ge);
printf("11 to 20: ");
for(int i=0;i<yi;i++) printf("*");printf("(%d)\n",yi);
printf("21 to 30: ");
for(int i=0;i<er;i++) printf("*");printf("(%d)\n",er);
printf("31 to 40: ");
for(int i=0;i<sa;i++) printf("*");printf("(%d)\n",sa);
printf("41 to 50: ");
for(int i=0;i<si;i++) printf("*");printf("(%d)\n",si);
printf("51 to 60: ");
for(int i=0;i<wu;i++) printf("*");printf("(%d)\n",wu);
printf("61 to 70: ");
for(int i=0;i<li;i++) printf("*");printf("(%d)\n",li);
printf("71 to 80: ");
for(int i=0;i<qi;i++) printf("*");printf("(%d)\n",qi);
printf("81 to 90: ");
for(int i=0;i<ba;i++) printf("*");printf("(%d)\n",ba);
printf("91 to 100: ");
for(int i=0;i<ji;i++) printf("*");printf("(%d)\n",ji);
}
return 0;
}
7-6 sdut-C语言实验-求一个3*3矩阵对角线元素之和
给定一个3*3的矩阵,请你求出对角线元素之和。
输入格式:
按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。
输出格式:
从左下角到右上角这条对角线上的元素之和。
输入样例:
1 2 3
3 4 5
6 0 1
输出样例:
在这里给出相应的输出。例如:
13
#include<stdio.h>
int main()
{
int i,j,sum;
int a[3][3];
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
scanf("%d",&a[i][j]);
}
}
sum=a[2][0]+a[1][1]+a[0][2];
printf("%d",sum);
return 0;
}
7-7 sdut- C语言实验-矩阵转置
输入N*N的矩阵,输出它的转置矩阵。
输入格式:
第一行为整数N(1≤N≤100)。
接着是一个N*N的矩阵。
输出格式:
转置矩阵。
输入样例:
2
1 2
1 2
输出样例:
1 1
2 2
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n],b[n][n],i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
b[i][j]=a[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=b[j][i];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==n-1)
printf("%d\n",a[i][j]);
else
printf("%d ",a[i][j]);
}
}
return 0;
}
7-8 sdut-C语言实验- 杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是"中国三角形"(Chinese triangle)。
其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。
让我们开始做题吧!
输入格式:
输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。
输出格式:
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
输入样例:
2
3
0
输出样例:
1
1 1
1
1 1
1 2 1
#include<stdio.h>
int main()
{
int n,i,j;
int a[30][30];
while(scanf("%d",&n)!=EOF)
{
a[0][0]=1;
a[1][0]=1;
a[1][1]=1;
for(i=2;i<n;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<n;i++)
{
for(j=1;j<=n-1;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j==i)
printf("%d\n",a[i][j]);
else
printf("%d ",a[i][j]);
} if(i==n-1)
printf("\n");
}
}
return 0;
}