实验12 指针与数组

佐手、 提交于 2020-01-14 07:08:14

6-1 计算两数的和与差 (15分)

本题要求实现一个计算输入的两数的和与差的简单函数。

函数接口定义:
void sum_diff( float op1, float op2, float *psum, float *pdiff );

其中op1和op2是输入的两个实数,psum和pdiff是计算得出的和与差。

裁判测试程序样例:
#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
float a, b, sum, diff;

scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);

return 0; 

}

/* 你的代码将被嵌在这里 */

输入样例:
4 6

输出样例:
The sum is 10.00
The diff is -2.00

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	*psum=op1+op2;
	*pdiff=op1-op2;
}

6-2 使用函数的选择法排序 (15分)

本题要求实现一个用选择法对整数数组进行简单排序的函数。

函数接口定义:
void sort( int a[], int n );

其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。

裁判测试程序样例:
#include <stdio.h>
#define MAXN 10

void sort( int a[], int n );

int main()
{
int i, n;
int a[MAXN];

scanf("%d", &n);
for( i=0; i<n; i++ )
    scanf("%d", &a[i]);

sort(a, n);

printf("After sorted the array is:");
for( i = 0; i < n; i++ )
    printf(" %d", a[i]);
printf("\n");

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例:
4
5 1 7 6

输出样例:
After sorted the array is: 1 5 6 7

void sort( int a[], int n )
{
	int i,j,t;
	for(i=0;i<n;i++)
		for(j=0;j<n-i-1;j++)
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
}

6-3 在数组中查找指定元素 (30分)

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:
int search( int list[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:
#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
int i, index, n, x;
int a[MAXN];

scanf("%d", &n);
for( i = 0; i < n; i++ )
    scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
    printf("index = %d\n", index);
else
    printf("Not found\n");

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例1:
5
1 2 2 5 4
2

输出样例1:
index = 1

输入样例2:
5
1 2 2 5 4
0

输出样例2:
Not found

int search( int list[], int n, int x )
{
    int i;
    for(i=0;i<n;i++)
        if(list[i]==x)
            return i;
    if(i==n)
        return -1;
}

6-4 冒泡排序 (15分)

输入n(1<=n<=10)个整数,将它们从小到大排序后输出,要求编写函数bubble()实现冒泡排序算法。

函数接口定义:
void bubble (int a[ ], int n);

其中 a为数组,n为数据个数。

裁判测试程序样例:

#include <stdio.h>
void bubble (int a[ ], int n);
int main(void)
{
int n, a[10];
int i;
scanf("%d", &n);
for (i=0; i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
for (i=0; i<n; i++)
printf("%d “,a[i]);
printf(”\n");
return 0;
}

/* 请在这里填写答案 */

输入样例:
8
7 3 66 3 -5 22 -77 2

输出样例:
-77 -5 2 3 3 7 22 66

void bubble (int a[ ], int n)
{
	int i,j,t;
	for(i=0;i<n;i++)
		for(j=0;j<n-i-1;j++)
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
}

7-1 组织星期信息 (25分)

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :
3
Tuesday
Wednesday
year

输出样例:
3
4
-1

#include<stdio.h>
#include<string.h>
int getnum(char *s);
int main(void)
{
	int n,i;
	scanf("%d",&n);
	char b[n][10];
	for(i=0;i<n;i++)
		scanf("%s",b[i]);
	for(i=0;i<n;i++)
		printf("%d\n",getnum(b[i]));	
}
int getnum(char *s)
{
	char a[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
	int i;
	for(i=0;i<7;i++)
		if(strcmp(a[i],s)==0)
			return i+1;
	return -1;	
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!