第1题
实验十 C程序的指针(一) 一、实验目的 1. 掌握指针和指针变量的概念。 2. 掌握简单指针变量的定义和基本使用方法。 3. 熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。 4. 了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法。 5. 了解指针与字符串的关系,能熟练使用指针处理字符串。 二、实验内容及实验步骤 1. 用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数的最大者,p2指向次大者,p3指向最小者,然后按由小到大的顺序输出这三个数。 参考程序 /* 用指针访问简单变量的程序 */ #include "stdio.h" main() { int a,b,c,temp; int *p1,*p2,*p3; printf("请输入三个整数值(a,b,c):\n"); scanf("%d,%d,%d",&a,&b,&c); p1=&a; /* 使指针p1指向简单变量a */ p2=&b; /* 使指针p2指向简单变量b */ p3=&c; /* 使指针p3指向简单变量c */ if(*p1<*p2) 10 { temp="*p1;*p1=*p2;*p2=temp;" } * 至此p1指向了三个数中的最大数 至此p3指向了最小数,p2指向了中间数 printf("%d,%d,%d\n",*p3,*p2,*p1); ① 运行程序,任意输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 ② 运行程序,按由小到大的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 ③ 运行程序,按由大到小的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 2. 用指针法在一维有序数组中插入数据。如下是具有10整数的升序数列,存储在一维数组中,要求在其中插入任意一个整数后数列仍然有序。数列:10,20,30,40,50,60,70,80,90,99 参考程序 用指针法在一维有序数组中插入数据程序 #include "stdio.h" #define m main( ) int a[m+1]="{10,20,30,40,50,60,70,80,90,99};" i,n,*p,*q; printf("请输入要插入的数据:\n"); scanf("%d",&n); a[m]="n;" for(p="a,i=0;i<=M;i++)" 确定要插入的位置p p="p+i;" p指向要插入数据的位置 break; for(q="a+M-1;q">=p;q--) /* 元素后移 */ *(q+1)=*q; *p=n; /* 插入数据 */ printf("\n插入数据后的数列:\n"); for(p=a,i=0;i<m+1;i++) 1 3 5 7 9 11 13 15 19 20 printf("%d ",*(p+i)); } 3. 用指针实现选择法排序程序。输入20个整数,并用指针实现选择法升序排序。 参考程序 * 用指针实现的选择法排序程序 #include "stdio.h" #define m main( ) { int a[m],n,i,j,min,temp,*p,*q; printf("请输入排序数据:\n"); for(p="a;p<a+M;p++)" 输入数据 scanf("%d",p); printf("排序前数列:\n"); ",*p); for(i="0;i<M-1;i++)" 选择法排序 q="&a[i];" temp="a[i];" a[i]="*q;" *q="temp;" printf("\n排序后数列:\n"); 输出排序结果 ① 凡是排序程序,输入数据调试时至少要包括三种情况:任意的一组数据;一组升序数据;一组降序数据。 ② 在上面的参考程序中,指针变量p在每一次的数组处理中都是变化的,不管是数组数据输入、数组数据输出、每一趟排序等,p指针总是逐步向后指向下一个元素。在编写调试程序时,指针p的指向也可以相对固定,而采用加(或减)移动量的方式指向其他的数组元素。 4. 测试、运行自己编写的程序。 将一个3*3的矩阵转置,用一函数实现之。 在主函数中用scanf函数输入以下矩阵元素: 将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出以转置的矩阵。 三、实验报告要求 写明: 1. 实验目的 2. 实验内容与步骤 编写的程序(题目,经调试、运行后正确的程序) 思考题的解决方法。 5.>
第4题
A.6
B.4
C.5
D.3
第5题
A.6
B.4
C.5
D.3
第6题
A.6
B.4
C.5
D.3
第7题
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
include <conio.h>
include <stdio.h>
define MAXLINE 20
/*************found**************/
fun(char *pstr[6])
{int i, j;
char *p;
for(i=0;i<5;i++)
{for(j=i+l;j<6;j++)
/*************found**************/
{ if(strcmp(*(pstr+i),pstr+j)>0)
{
p=*(pstr+i);
/*************found**************/
* (pstr+i) -pstr+j;
* (pstr+j)=p;
}
}
}
}
main ( )
{ int i;
char *pstr[6],str[6][MAXLINE];
clrscr();
for(i=0;i<6;i++) pstr[i]=str[i];
printf("\nEnter 6 string(1 string at each
line):\n ");
for(i=0;i<6;i++) scanf("%s",pstr[i]);
fun(pstr);
printf("The strings after sorting:\n ");
for(i=0;i<6;i++) printf("%s\n ",pstr[i]);
}
第9题
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANKl.C中。
不得增行或删行,也不得更改程序的结构!
第10题
将输入的字符串按逆序输出,例如输入abcd,则按dcba顺序输出出来,请完善程序。 #include <stdio.h> #include <string.h> int main( ) { char *str, s[20]; int n; str=s; scanf("%s",str); n=strlen(str); while(--n>=0) { str=&s[____]; printf("%c",*str); } return 0; }
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!