C语言程序设计 实验8.1 指针与数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-----*/
printf("After sorted: ");
forபைடு நூலகம்i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
1循环移动(调试示例error08_1)
#include <stdio.h>
void mov(int *x, int n, int m);
否则返回-1,函数形参list的类型是整型指针,形参n和x的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)
输出
index = 1
Not found
---*/
if(res != -1)
5 4 3 2 1
输出
After sorted: 1 5 6 7
After sorted: 1 2 3
After sorted: 1 2 3 4 5
----*/
printf("After sorted: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
3使用函数的选择法排序
#include <stdio.h>
int main(void)
{
int i, n,index,temp,k;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
2在数组中查找指定元素
#include <stdio.h>
int main(void)
{
int i, n, res, x;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
*(a+index)=*(a+k);
*(a+k)=temp;
}
}
4报数
#include<stdio.h>
int main(void)
{
int count, i, m, n, no;
int num[50];
int *p;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
输入一个正整数n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,
如果找到则输出相应元素的最小下标,否则输出"Not found"。
要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,
若找到则返回相应元素的最小下标,否则返回-1,函数形参list的类型是整型指针,形参n和x的类型是int,函数的类型是void。
输入:
5 3 (n=5,m=3)
1 2 3 4 5 (5个整数)
输出:
After move: 3 4 5 1 2
----*/
printf("After move: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
最后输出移动后的n个整数。
要求定义并调用函数mov(x,n,m)实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入:
5 3 (n=5,m=3)
1 2 3 4 5 (5个整数)
输出:
After move: 3 4 5 1 2
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)
输出
index = 1
Not found
-----*/
if(res != -1)
printf("index = %d\n", res);
else
printf("Not found\n");
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
res=search(a, n, x);
/*------程序填空,不要改变与输入输出有关的语句。
a[k]=temp;
}
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),再输入n个整数存入数组a中,用选择法将数组a中的元素按升序排列,最后输出排序后的数组元素。
要求定义并调用函数sort(a,n),它的功能是采用选择排序算法,将数组a的前n个元素按从小到大的顺序排序,
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++)
if(a[i]<a[index]) index=i;
temp=a[index];
a[index]=a[k];
printf("index = %d\n", res);
else
printf("Not found\n");
}
return 0;
}
/*---------*/
int search(int list[], int n, int x)
{
int i,res;
res=-1;
for(i=0;i<n;i++)
if(*(list+i)==x){
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,
如果找到则输出相应元素的最小下标,否则输出"Not found"。
要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,
num[i] = i + 1;
p = num; /*--*p=num[0]--*/
count = no = 0;
while(no < n-1)
{
if(*p != 0) count++;
if(count == m)
{
no++;
printf("No%d: %d\n", no, *p);
*p = 0;
count = 0;
}
return 0;
}
/*---------*/
void sort(int a[],int n)
{
int i,k,index,temp;
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++)
if(*(a+i)<*(a+index)) index=i;
temp=*(a+index);
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,n);
/*-----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),再输入n个整数存入数组a中,用选择法将数组a中的元素按升序排列,最后输出排序后的数组元素。
实验8.1指针与数组
题目信息表
序号题目名称题目满分题目得分题目编号
1循环移动(调试示例error08_1)
2在数组中查找指定元素
3使用函数的选择法排序
4报数
1循环移动(调试示例error08_1)
#include <stdio.h>
int main(void)
{
int i, m, n,k,j;
int a[80];
res=i;
break;
}
return res;
}
3使用函数的选择法排序
#include <stdio.h>
void sort(int a[],int n);
int main(void)
{
int i, n;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
k=*(x+n-1);
for(j=n-1;j>0;j--)
*(x+j)=*(x+j-1);
*x=k;
}
}
2在数组中查找指定元素
#include <stdio.h>
int main(void)
{
int i, n, res, x;
int repeat, ri;
int a[10];
int search(int list[], int n, int x);
输入两个正整数n和m (1<m<n<=10),再输入n个整数,将这些数排成一行,向右循环移动m个位置(从右边移出的数再从左边移入),
最后输出移动后的n个整数。
要求定义并调用函数mov(x,n,m)实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
输入输出示例:括号内为说明
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i=0;i<m;i++){
k=a[n-1];
for(j=n-1;j>0;j--)
a[j]=a[j-1];
a[0]=k;
}
/*-----程序填空,不要改变与输入输出有关的语句。
int main(void)
{
int i, m, n;
int a[80];
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
mov(a,n,m);
/*----程序填空,不要改变与输入输出有关的语句。
输入两个正整数n和m (1<m<n<=10),再输入n个整数,将这些数排成一行,向右循环移动m个位置(从右边移出的数再从左边移入),
-----*/
printf("After move: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
/*---------*/
void mov(int *x, int n, int m)
{
int i,j,k;
for(i=0;i<m;i++){
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
res=-1;
for(i=0;i<n;i++)
if(a[i]==x){
res=i;
break;
}
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
}
p++; /*p的地址向后平移一个单位*/
if(p == num + n)
p = num; /*当一轮轮完,P的地址有从num[0]开始赋制值,使之循环*/
}
/*----程序填空,不要改变与输入输出有关的语句。
输入两个正整数n和m((1<m<n<=50)),有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,
报数m的人退出圈子,下一个人从1开始重新报数,报数m的人退出圈子。
如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。
提示:将每个人的编号存入数组,从第一个人开始报数,输出报数m的人的编号,并将该编号清除为0,
重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。
要求定义并调用函数sort(a,n),它的功能是采用选择排序算法,将数组a的前n个元素按从小到大的顺序排序,
函数形参a的类型是整型指针,形参n的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
函数形参a的类型是整型指针,形参n的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
5 4 3 2 1
输出
After sorted: 1 5 6 7
After sorted: 1 2 3
After sorted: 1 2 3 4 5
printf("After sorted: ");
forபைடு நூலகம்i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
1循环移动(调试示例error08_1)
#include <stdio.h>
void mov(int *x, int n, int m);
否则返回-1,函数形参list的类型是整型指针,形参n和x的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)
输出
index = 1
Not found
---*/
if(res != -1)
5 4 3 2 1
输出
After sorted: 1 5 6 7
After sorted: 1 2 3
After sorted: 1 2 3 4 5
----*/
printf("After sorted: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
3使用函数的选择法排序
#include <stdio.h>
int main(void)
{
int i, n,index,temp,k;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
2在数组中查找指定元素
#include <stdio.h>
int main(void)
{
int i, n, res, x;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
*(a+index)=*(a+k);
*(a+k)=temp;
}
}
4报数
#include<stdio.h>
int main(void)
{
int count, i, m, n, no;
int num[50];
int *p;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
输入一个正整数n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,
如果找到则输出相应元素的最小下标,否则输出"Not found"。
要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,
若找到则返回相应元素的最小下标,否则返回-1,函数形参list的类型是整型指针,形参n和x的类型是int,函数的类型是void。
输入:
5 3 (n=5,m=3)
1 2 3 4 5 (5个整数)
输出:
After move: 3 4 5 1 2
----*/
printf("After move: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
最后输出移动后的n个整数。
要求定义并调用函数mov(x,n,m)实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入:
5 3 (n=5,m=3)
1 2 3 4 5 (5个整数)
输出:
After move: 3 4 5 1 2
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)
输出
index = 1
Not found
-----*/
if(res != -1)
printf("index = %d\n", res);
else
printf("Not found\n");
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
res=search(a, n, x);
/*------程序填空,不要改变与输入输出有关的语句。
a[k]=temp;
}
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),再输入n个整数存入数组a中,用选择法将数组a中的元素按升序排列,最后输出排序后的数组元素。
要求定义并调用函数sort(a,n),它的功能是采用选择排序算法,将数组a的前n个元素按从小到大的顺序排序,
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++)
if(a[i]<a[index]) index=i;
temp=a[index];
a[index]=a[k];
printf("index = %d\n", res);
else
printf("Not found\n");
}
return 0;
}
/*---------*/
int search(int list[], int n, int x)
{
int i,res;
res=-1;
for(i=0;i<n;i++)
if(*(list+i)==x){
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,
如果找到则输出相应元素的最小下标,否则输出"Not found"。
要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,
num[i] = i + 1;
p = num; /*--*p=num[0]--*/
count = no = 0;
while(no < n-1)
{
if(*p != 0) count++;
if(count == m)
{
no++;
printf("No%d: %d\n", no, *p);
*p = 0;
count = 0;
}
return 0;
}
/*---------*/
void sort(int a[],int n)
{
int i,k,index,temp;
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++)
if(*(a+i)<*(a+index)) index=i;
temp=*(a+index);
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,n);
/*-----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n (1<n<=10),再输入n个整数存入数组a中,用选择法将数组a中的元素按升序排列,最后输出排序后的数组元素。
实验8.1指针与数组
题目信息表
序号题目名称题目满分题目得分题目编号
1循环移动(调试示例error08_1)
2在数组中查找指定元素
3使用函数的选择法排序
4报数
1循环移动(调试示例error08_1)
#include <stdio.h>
int main(void)
{
int i, m, n,k,j;
int a[80];
res=i;
break;
}
return res;
}
3使用函数的选择法排序
#include <stdio.h>
void sort(int a[],int n);
int main(void)
{
int i, n;
int repeat, ri;
int a[10];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
k=*(x+n-1);
for(j=n-1;j>0;j--)
*(x+j)=*(x+j-1);
*x=k;
}
}
2在数组中查找指定元素
#include <stdio.h>
int main(void)
{
int i, n, res, x;
int repeat, ri;
int a[10];
int search(int list[], int n, int x);
输入两个正整数n和m (1<m<n<=10),再输入n个整数,将这些数排成一行,向右循环移动m个位置(从右边移出的数再从左边移入),
最后输出移动后的n个整数。
要求定义并调用函数mov(x,n,m)实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
输入输出示例:括号内为说明
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i=0;i<m;i++){
k=a[n-1];
for(j=n-1;j>0;j--)
a[j]=a[j-1];
a[0]=k;
}
/*-----程序填空,不要改变与输入输出有关的语句。
int main(void)
{
int i, m, n;
int a[80];
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
mov(a,n,m);
/*----程序填空,不要改变与输入输出有关的语句。
输入两个正整数n和m (1<m<n<=10),再输入n个整数,将这些数排成一行,向右循环移动m个位置(从右边移出的数再从左边移入),
-----*/
printf("After move: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
/*---------*/
void mov(int *x, int n, int m)
{
int i,j,k;
for(i=0;i<m;i++){
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
res=-1;
for(i=0;i<n;i++)
if(a[i]==x){
res=i;
break;
}
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
}
p++; /*p的地址向后平移一个单位*/
if(p == num + n)
p = num; /*当一轮轮完,P的地址有从num[0]开始赋制值,使之循环*/
}
/*----程序填空,不要改变与输入输出有关的语句。
输入两个正整数n和m((1<m<n<=50)),有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,
报数m的人退出圈子,下一个人从1开始重新报数,报数m的人退出圈子。
如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。
提示:将每个人的编号存入数组,从第一个人开始报数,输出报数m的人的编号,并将该编号清除为0,
重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。
要求定义并调用函数sort(a,n),它的功能是采用选择排序算法,将数组a的前n个元素按从小到大的顺序排序,
函数形参a的类型是整型指针,形参n的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
函数形参a的类型是整型指针,形参n的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
5 4 3 2 1
输出
After sorted: 1 5 6 7
After sorted: 1 2 3
After sorted: 1 2 3 4 5