c语言上机实验九 指针1--参考答案
二级计算机C语言实验九__指针的应用(1)及参考答案

实验九指针的应用(1)【实验目的】1、掌握指针的基本概念,指针变量的定义和初始化方法。
2、熟练掌握指针的基本运算:& 取地址运算、*存取指针所指的内容。
3、掌握函数实参与形参的对应关系以及“传值”和“传址”两种方式的区别【实验内容】一、编程题1、下面程序的函数swap功能是交换两个变量a和b的值,请补充函数体部分的代码。
并运行测试结果是否正确。
#include<stdio.h>swap(int *p1, int *p2){}void main(){int a,b;int *pt1,*pt2;scanf(“%d,%d”,&a,&b);printf(“%d,%d\n”,a,b);pt1=&a;pt2=&b;swap(pt1,pt2);printf(“%d,%d\n”,a,b);}参考答案:int t;t=*p1;*p1=*p2;*p2=t;2、函数fun的功能是:将两个正整数(位数至少是2)a、b合并形成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的百位和千位上,b数的十位和个位数依次放在c数的个位和十位上。
例如,当a=451,b=723。
调用该函数后,c=1532。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>void fun(int a, int b, long *c){}void main(){int a,b;long c;printf("Input a, b:");scanf("%d%d", &a, &b);fun(a, b, &c);printf("The result is: %ld\n", c);}参考答案:*c=(a%10)*1000+((a/10)%10)*100+(b%10)*10+(b/10)%10;//提示://a的个位:a%10//a的十位:a/10%10二、程序填空题1、以下程序功能是:通过指针操作,找出三个整数中的最小值并输出。
C语言指针习题和答案精选文档

C语言指针习题和答案精选文档TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include ""#include ""int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}写一个函数,将3 3矩阵转置#include ""void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}用指向一维数组的指针做函数参数#include<>#include<>int main(){void sort(char (*s)[6]);3”n",*(month_name+n));elseprintf("It is wrong.\n");}运行结果:① Input month: 2↙It is February.② Input month: 8↙It is August.③ Input month: 13↙It is wrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。
上机实验九 指针参考答案

上机实验九指针一.目的要求1.掌握指针的基本概念。
2.掌握指针变量的定义和初始化。
二.实验内容【实验题1】程序填空,交换指针p1,p2所指向的变量。
# include <stdio.h>void main ( ){ int a=1,b=2, *p1, *p2, *pt;p1=&a; p2=&b;printf(“p1=%d, p2=%d \n”, p1,p2);//交换指针变量p1,p2所指向的变量pt= p1; p1=p2 ; p2=pt ; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2);}运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)【实验题2】程序填空,交换指针p1,p2所指变量的值。
# include <stdio.h>void main ( ){ int a=1,b=2, *p1, *p2, temp;p1=&a; p2=&b;printf(“*p1=%d, *p2=%d \n”, *p1,*p2);//交换p1,p2所指向的变量的值temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符* printf(“*p1=%d, *p2=%d \n”, *p1,*p2);}运行结果:(注意:指针前加*, 代表指针所指变量)【实验题3】程序填空:输入三个整型变量i,j,k的值。
请设置三个指针变量p1,p2,p3,分别指向i,j,k。
然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。
输出交换后i,j,k的值。
i jk分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。
设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序:#include <stdio.h>void main ( ){ int i,j,k,temp, *p1=&i ,*p2=&j ,*p3=&k ;printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k//i-->j-->k-->itemp=*p1 ;*p1= *p3 ;*p3= *p2 ;*p2 = temp;printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k}输入:1 2 3输出:3 1 2【实验题4】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
指针 习题九及参考答案

#include "string.h" main() {char s1[80],s2[30]; int n; gets(s1); gets(s2); printf("Input n(n<strlen(s1):\n"); do scanf("%d",&n); while(n>=strlen(s1)); insert(s1,s2,n); puts(s1); } insert(char *p1,char *p2,int k) {char tem[80]; strcpy(tem,p1+k); /*保存第k个字符开始的字符*/ *(p1+k)='\0'; /*使第k个字符之前的字符为一个独立字符串*/ strcat(p1,p2); /*将p2复制到p1之后*/ strcat(p1,tem);/*再将保存再tem中的字符串连接到p1末尾*/ } 3、用指针编写比较两个字符串s和t的函数strcmp(s,t)。要求s<t时返 回-1,s=t时返回0,s>t时,返回1。 解1: /* P279_3.C */ int strcmp(char *s1,char *t1) { while(*s1!='\0'&&*t1!='\0') {if(*s1>*t1)return 1; if(*s1<*t1)return -1; if(*s1++==*t1++)continue; } if(*s1>*t1)return 1; if(*s1==*t1)return 0; if(*s1<*t1) return -1; } main()
max=min=*p; for(q=________;________;q++) (q=p q<p+n) if(________)max=*q; (*q>max) else if (________)min=*q; (*q<min) } main() {int i,num[10]; printf("input 10 numbers:\n") for(i=0;i<10;i++) scanf("%d",&num[i]); find_max_min(num,10); printf("max=%d;min=%d\n",max,min); } 三、编程题 1、编写一函数,其功能是交换两个变量x、y的值。编程序实现对数组 a[100],b[100]调用此函数,交换a、b中具有相同下标的数组元素的 值,且输出交换后的a、b数组。 /*p279_1.c*/ #include "stdlib.h" void swap(int *pa,int *pb) {int t; t=*pa;*pa=*pb;*pb=t; } main() {int a[100],b[100],i; for(i=0;i<100;i++) /*产生数组a和b */ {a[i]=random(100); b[i]=random(100); } printf("before swap A:\n"); /*输出交换前数组a */ for(i=0;i<100;i++) printf("%3d",a[i]); printf("\n"); printf("before swap B:\n"); /*输出交换前数组b */ for(i=0;i<100;i++)
C语言指针习题及答案

B)ptr2=k
C)ptr1=ptr2
3、若有说明 :int *p,m=5,n; 以下程序段正确的就是
D
D)k=*ptr1*(*ptr2) 。
A)p=&n ; scanf( “%d ”,&p);
C)scanf( “%d”,&n); *p=n ;
4、已有变量定义与函数调用语句
B)p = &n ;
scanf(“%d ”,*p);
均在有效范围内 )
A)&a[0][0]+6*i+j
B)&a[0][0]+4*j+i
C)&a[0][0]+4*i+j
38、下面程序的运行结果就是
B
D)&a[0][0]+6*j+I 。
main ( ) { int x[5]={2,4,6,8,10}, *p, **pp ;
p=x , pp = &p ;
printf( “%d”,*(p++)); printf( “%3d”,**pp); }
A)a+1 表示的就是字符 t 的地址 B)p 指向另外的字符串时 ,字符串的长度不受限制
C 语言指针习题及答案
C)p 变量中存放的地址值可以改变
D)a 中只能存放 10 个字符
19、若已定义 char s[10]; 则在下面表达式中不表示 s[1] 的地址就是
B
。
A)s+1
B)s++
C)&s[0]+1
7、下面判断正确的就是
C
C)*&p,*p,&a 。
D)&a,&*p,p
C语言 上机报告9 指针答案

上机报告9指针一、上机内容1、执行以下程序后,输出结果是什么?#include<stdio.h>main(){int a, b, k=4, m=6, *p=&k, *q=&m;a=p==&m; // p=&k , q=&m, p!=q , a=0b=(-*p)/(*q)+7; // = -4/6 +7 =7printf("a=%d\n", a);printf("b=%d\n", b);}程序中,*p =_______ ,*q=_______2. 下列程序使用指针操作数组,列出了各种形式,体会其用法。
3.下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再存放一个空格,例如字符串s为"abcdefg",则字符串t为"abc def g",请补充程序。
#include"stdio.h"#include"string.h"main(){int j, k=0;char s[60], t[100], *p;p=s;puts("please input a string");gets(p);while(*p){for (j=1; j<=3 &&*p; p++,k++,j++)t[k]=*p;if (j==4) { t[k]=' '; k++;}}t[k]='\0';puts(t);4. 下面程序用来计算一个英文句子中最长单词的长度(字母个数)max。
假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以'.'为结束。
请填空。
#include"stdio.h"main(){static char s[]={" you make me happy when days are grey."}, *t;int max=0, length=0;t=s;while (*t!='.'){while ((*t<='Z'&&*t>='A')||(*t<='z'&&*t>='a')){length++;t++;}if (max<length)max=length;length=0;t++;}printf("max=%d", max);}5. 下面程序是判断输入的字符串是否是“回文”,(顺读和倒读都一样的字符串称为“回文”,如level)。
指针习题及参考答案_C 语言项目开发实训教程_[共6页]
![指针习题及参考答案_C 语言项目开发实训教程_[共6页]](https://img.taocdn.com/s3/m/66e7390480eb6294dc886cc9.png)
第四篇 习题参考答案195 {printf("学号:%10s 姓名:%20s",st[i].num,st[i].name); for(j=0;j<5;j++)printf("%.2f",st[i].score[j]); printf("\n");}}getch();} 运行时输入如下:F100001↙89 78 69 66 78↙zhangshan ↙……………九、指针习题及参考答案一、选择题1.变量的指针,其含义是指该变量的( )。
A .值 B .地址 C .名 D .一个标志【答案】B2.有如下语句:int m=6, n=9, *p , *q; p=&m; q=&n ;如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是( )。
m p n qp q nA .*p=*q ;B .p=*q ;C .p=q ;D .*p=q ;【答案】C 3.若有说明:int a=2, *p=&a , *q=p ;,则以下非法的赋值语句是( )。
A .p=q ;B .*p=*q ;C .a=*q ;D .q=a ;【答案】D 4.下面程序的运行结果是( )。
#include "stdio.h"#include "string.h"main(){char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}C 语言项目开发实训教程196 A .正数B .负数C .零D .不确定的值【答案】B 5.若定义:int a=511, *b=&a ;,则printf("%d\n", *b);的输出结果为( )。
C语言上机实验

实验一(第1章实验)实验目的:1.掌握运行C语言程序的全过程。
2.熟悉编译环境。
3.初步熟悉C语言程序的语法规定。
4.了解简单函数的使用方法。
实验内容:1.编程且上机运行:求3个整数的和。
2.编程且上机运行:求2个数的和、差、积和商。
3.编程且上机运行:输入3个数,求最大值。
4.编程且上机运行:输入圆的半径,求圆的面积和周长。
5.在屏幕上输出:“hello world!”实验结果:实验二(第3章实验)1.实验目的:理解C语言的类型系统。
实验内容:写程序测试数据-2在类型char,int,unsigned int,long int,unsigned long int 中存储情况。
实验过程:实验结果:参见各种类型的存储实现描述。
2.实验目的:了解混合类型计算中类型的转换规则。
实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。
注意unsigned int和int数据运算时类型转换的方向。
实验过程:/** 类型转换问题* 试问下面两个表达式等价吗?*/#include <stdio.h>#include <stdlib.h>int main() {unsigned int ui,uj;ui = 1;uj = 2;if (ui < uj)printf("\n%u < %u is true !\n", ui, uj);elseprintf("\n%u < %u is false !\n", ui, uj);if (ui - uj < 0)printf("\n%u - %u <0 is true !\n", ui, uj);elseprintf("\n%u - %u <0 is false !\n", ui, uj);system("pause");return 0;}实验结果:参见类型转换规则。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机实验九指针(一)
一.目的要求
1.掌握指针的基本概念。
2.掌握指针变量的定义和初始化。
二.实验内容
【实验题1】程序填空,交换指针p1,p2所指向的变量。
# include <stdio.h>
void main ( )
{ int a=1,b=2, *p1, *p2, *pt;
p1=&a; p2=&b;
printf(“p1=%d, p2=%d \n”, p1,p2);
//交换指针变量p1,p2所指向的变量
pt= p1; p1=p2 ; p2=pt ; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2);
}
运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)
【实验题2】程序填空,交换指针p1,p2所指变量的值。
# include <stdio.h>
void main ( )
{ int a=1,b=2, *p1, *p2, temp;
p1=&a; p2=&b;
printf(“*p1=%d, *p2=%d \n”, *p1,*p2);
//交换p1,p2所指向的变量的值
temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符* printf(“*p1=%d, *p2=%d \n”, *p1,*p2);
}
运行结果:(注意:指针前加*, 代表指针所指变量)
【实验题3】程序填空:输入三个整型变量i,j,k的值。
请设置三个指针变量p1,p2,p3,分别指向i,j,k。
然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。
输出交换后i,j,k的值。
i j
k
分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。
设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序:
#include <stdio.h>
void main ( )
{ int i,j,k,temp, *p1=&i ,*p2=&j ,*p3=&k ;
printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k
//i-->j-->k-->i
temp=*p1 ;
*p1= *p3 ;
*p3= *p2 ;
*p2 = temp;
printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k
}
输入:1 2 3
输出:3 1 2
【实验题4】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
# include <stdio.h>
void main ( )
{ int a,b,c, *p1, *p2, *p3;
scanf(“%d%d%d”,&a,&b,&c);
// 令p1指向最大值
p1=a>b? &a: &b ; //p1指向a,b中较大者
if(c> *p1 ) p1=&c;
//令p2指向最小值
p2=a<b? &a:&b ; //p2指向a,b中较小者
if(c< *p2 ) p2=&c;
printf(“max=%d, min=%d”, *p1,*p2 );
}
运行结果:输入1 2 3
输出max=3, min=1
【实验5】程序设计(冒泡排序):输入8个实数,要求用冒泡法将这8个实数按降序排列,输出排序结果。
# include <stdio.h>
void main ( )
{ double a[8], temp;
//输入数组
printf(" Input 8 doubles:\n");
for( i=0; i<8 ; i++) scanf("%lf", &a[i]);
//冒泡法
for( i=7; i>0; i--)
for( j=0; j< i; j++)
if(a[j]>a[j+1] ) {temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;}
//输出排序后的数组
printf("After sorted: ");
for( i=0; i<8; i++) printf("%f ", a[i]);
}。