本次上机作业分为两部分 1指针基本概念 2 数组提高体 题目较多,指针基本概念题和数组提高题中的阅读程序题的前5小题(做到红色标号位置即可)必须当堂提交,剩余的题目3月17日前提交即可—如全部当堂提交可获得高分 题目就在原题做即可----请独立完成,严禁抄袭---否则0分
1指针基本概念题:
1.设有定义“int a=3,b,*p=&a;”,则下列语句中不能使b为3的语句是_D________。 A. b=*&a; B. b=*p; C. b=a; D. b=*a; 2.若有说明:int i,j=7,*p=&i; 则与i=j;等价的语句是___B______。 A. i=*p; B. *p=*&j; C. i=&j; D. i=**p; 3.int j,*p=&j; 要实现j的内容加10,错误的是____D_____。 A. *p=*&j+10; B. j=*p+10; C. *p=*p+10; D. *p=&j+10;
4.设指针x指向的整型变量值为25,则printf(\%d\\n\, ++*x);的输出是_D_______。 A. 23 B. 24 C. 25 D. 26
5.设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是__B_______。
A. k=*P1+*P2; B. P2=k; C. P1=P2; D. k=*P1 *(*P2); 6.对基类型相同的指针变量不能进行的运算是____A_____。 A. + B. - C. = D. == 7.若有以下定义,则不能表示a数组元素的表达式是_B________。 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A. *p B. a[10] C. *a D. a[p-a]
2、指针基本概念填空题
1.设有char *a=\则printf(\的输出是_ABCD__________________,而printf(\%c\,*a);的输出是A___________。
2.只能给指针变量赋___NULL______和______合法空间的地址________________________________值。
3.若int a[10], *p, k=5; p=a+k; 则p的内容为 a[5]的地址___________________________,*p的内容为_a[5]的值__________________________。
2数组提高题
2数组提高题:1阅读程序题
1.以下程序的输出结果是__s=1234__________。 #include
{int a[]={1,2,3,4},i, j, s=0; j=1; for(i=3;i>=0;i--) {s=s+a[i]*j; j=j*10;}
1
printf(\s=%d\\n\,s);}
2.以下程序的输出结果是*****___________。 ***** ***** ***** ***** main()
{char a[]={'*', '*', '*', '*', '*'}; int i, j, k; for(i=0;i<5;i++) {printf(\\\n\);
for(j=0;j
for(k=0;k<5;k++)printf(\%c\, a[k]);} }
3.以下程序的功能是_求数组最大元素的下标___________________________________。 main()
{int k,p; int s[]={1,-9,7,2,-10,3};
for(p=0,k=p; p<6;p++) if(s[p]>s[k])k=p; printf(\%d\\n\, k);}
4.以下程序的输出结果是6______。 main()
{char ch[7]={ \65ab21\}; int i,s =0; for(i=0;ch[i]>= '0'&&ch[i]< '9';i+=2) s=10*s+ch[i]- '0'; printf(\%d\\n\,s);}
5.以下程序的功能是__将两个字符串合并,再输出合并字符串_的长度____________________________。 main( )
{char a[80]= \abcdef\, b[ ]= \1234\; int num=0, n=0;
while(a[num]!= '\\0') num++;
while(b[n]!= '\\0') {a[num]=b[n]; num++; n++;} printf(\%s num=%d\\n\, a, num); }
6.以下程序的输出结果是__e, hello____。 #include \string.h\ y, ,0 #include \stdio.h\ main()
{char a[]=\I love you\; printf(\%c, \,a[5]); strcpy(a, \hello\); puts(a);
printf(\printf(\%c, \,a[5]); printf(\%d\\n\,a[5]);}
7.以下程序的输出结果是s=15______。
2
#include
{int a[3][3]={1,2,3,4,5,6,7,8,9},i,s=0; for(i=0;i<=2;i++) s=s+a[i][i];
printf(\s=%d\\n\,s);}
8.以下程序的输出结果是_0 1 2_____。 0 1 2 0 1 2 main()
{int k,j,a[3][3]; for(j=0;j<3;j++) {for(k=0;k<3;k++)
{if(j==3)a[j][k]=a[j-1][k]+1; else a[j][k]=k; printf(\M\,a[j][k]);} printf(\\\n\);} }
9.以下程序最后一行的输出结果是__00001____。 main() {int a[6][6],k,j; for(k=1;k<6;k++)
for(j=1;j<6;j++)a[k][j]=(k/j)*(j/k); for(k=1;k<6;k++)
{for(j=1;j<6;j++)printf(\ printf(\ }
10.以下程序的功能是_将任意读入的十进制正整数转换成十六进制___________________________________。 main()
{char b[17]=\ int c[64],d,i=0,base=16; long n; scanf(\
do {c[i]=nose; i++; n=n/base;} while(n!=0); for(--i;i>=0;--i)
{d=c[i]; printf(\ } 2完善程序题
1.输出任意读入的一个十进制整数的二进制形式代码。 #define N 20
main()
{int x , i , j , a[N]; char fh='+';
3
scanf(\%d\, &x);
if(x<0) {x=-x ; fh='-';} printf(\%c\, fh); i=0;
do {a[i]=x%2; x=x/2____________; i++;
}while(_x!=1___________);
for(j=_i-1_____; j>=0; j--) printf(\\,a[j]); printf(\\\n\);}
2.某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 main()
{int a,i,aa[4],t;
do scanf(\%d\,&a); while(a<1000||a>9999); aa[0]=a; aa[1]=a0/10; aa[2]= _a00/100___________; aa[3]=a/1000;
for(i=0;i<=3;i++){aa[i]+=5; _aa[i]= aa[i]___________; } for(i=0; _i<2___________;i++){t=aa[i];aa[i]=aa[3-i];aa[3-i]=t;} for(i=3;i>=0;i--)printf(\%d\,aa[i]);} 3.将一批数据逆序存放在原数组中。 #define SIZE 12 main( )
{ int a[SIZE],j, k, t; for(j=0;j scanf(\%d \,&a[j]); j=0; k=_SIZE-1___________; while(j { t=a[j]; a[j]=a[k]; a[k]=t; j++; k--;} for(j=0;j 4.以下程序的功能是:任意读入多个字符串,输出其中最大者。 #include \string.h\ #include \stdio.h\ main() {char a[100],max[100]= _” “ 空串_____; int n,i; printf(\Shu ru geshu :\\n\); scanf(\%d\,&n); i=1; do{scanf(\%s\,a); if(_strcmp(a,max)>0___________) strcpy(max, a); 4 i++; }while(i<=n); printf(\Max is:%s\\n\, max);} 5.以下程序的功能是:不用strcat函数完成任意两个字符串的连接。(要求功能与strcat一样) #include \stdio.h\ main() {char a[100],b[20]; int i ,j; gets(a); gets(b); _i=0___________; while(a[i]!= '\\0')i++; for(j=0;b[j]!= '\\0';j++) _a[i+j]=b[j]___________; __a[i+j+1]=’\\0’__________; puts(a);} 6.将已知字符串中的空格删去。 main( ) {_char s[]___________=\Our teacher teachs C language\; int j, k; for(_j=k=0___________;s[j]!='\\0';j++) if(s[j]!= ' ') s[k++]=s[j]; _s[k]=’\\0’___________; printf(\%s\,s);} 7.以下程序的功能是:用折半查找法判断任意读入的整数是否在有序数组中。 #define n 11 main() {int x,low,mid,high,find; static int a[]={2,5,11,18,24,35,42,50,58,86,92}; scanf(\%d\,&x); low=0; high=n-1; find=0; while((low<=high)&&!find) {mid=(low+high)/2; if(x==a[mid]) _find=1___________; else if(x>a[mid]) low=mid+1____________; else _high=mid-1___________;} if(find) printf(\It's successful:a[%d]=%d\\n\, mid, x); else printf(\It's fail to find %d\, x);} 8.下列程序的功能是输出一5×5矩阵,使得两条对角线的元素为1,其余元素为0。 main() 5