第十节--巩固练习

一、选择题(每题4分,共 60 分)

1.在位运算中,某操作数 右移3位,其结果相当于 D                        A、操作数乘以6   B、操作数除以6  C、操作数乘以8   D、操作数除以8

2.下列语句定义pf为指向float类型变量f的指针, B 是正确的。
float f, *pf=f; B、float f, *pf=&f; C、float *pf=&f, f; D、float f, pf=f;

3.整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是 D 。
A、x || y   B、x | y   C、x & y    D、x ^ y

4.对两个数组a和b进行如下初始化
char a[]=“ABCDEF”; char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是 D 。
A、a和b数组完全相同 B、a和b长度相同
C、a和b中都存放字符串 D、a数组比b数组长度长

5.设变量定义为“int x, *p=&x;”,则&*p相当于 A 。
A、p B、p C、x D、&x

6.有两个字符数组a、b,则以下正确的输入语句是 B 。
A、gets(a,b); B、scanf(“%s%s”,a,b);
C、scanf(“%s%s”,&a,&b); D、gets(“a”),gets(“b”);

7.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是 B 。
A、s+1 B、 s++ C、&s[0]+1 D、 &s[1]

8.以下程序的执行结果为 C 。
  #inlcude <stdio.h> 
  #define N 2     
  #define M N+1
   #define NUM (M+1)*M/2
    main()  
{pirntf("%d",NUM);}  //–8.5                                A、5     B、6      C、8       D、9

9.以下程序的输出结果是 D 。
#define M(x,y,z) xy+z
main()  
{  int a=1,b=2, c=3;    
printf("%d\n", M(a+b,b+c, c+a)); } 1+2
2+3+3+1                    A、19   B、17    C、15         D、12

10.int a[5][4], (p)[4]=a;,数组a的首地址为100,(p+2)+3等于 C 。
A、116    B、118 C、144    D、122

11.int a[]={1,3,5,7,9},*p=a;,则值为5的表达式是 A 。
A、p+=2, *p++   B、p+=2, *++p C、p+=2, (*p)++  D、a+=2, *a

12.以下对二维数组a的正确说明是 A 。
A、 int a[ ][3]={ 0 }; B、int a[3][ ]={ {1},{2},{3} };
C、 int a[1][3]={ 1,2,3,4 }; D、int a[2][3]={ {1,2},{3,4},{5,6} };

13.已知:char s[4] = “cba”; char *p; 执行语句序列p = s;printf("%c\n",*p+1);后,其输出为 D 。
A、字符’c’   B、字符’b’    C、字符’a’ D、字符’d’

14.已有定义 int k=2; int *ptr1, *ptr2, 且ptr1和ptr2均已指向变量k , 下面不能执行的赋值语句是 B
 A、k=*ptr1+*ptr2;        B、ptr2=k;
 C、ptr1=ptr2;          D、k=ptr1(*ptr2);

15.若有定义int i=2,a[10],p=&a[i];则与p++ 等价的是 A 。
A、a[i++]   B、a[i]++   C、a[i]   D、a[++i]

程序题(每题20分,共40分)

  1. 编写strcat函数(不调用C的字符串库函数,编写函数 strcat).
    已知strcat函数的原型是 char *strcat(char *strDest, const char *strSrc);
    strDest是目的字符串,strSrc是源串。
  #include<stdio.h>
void str_cat(char * p,const char *q);
int main()
{
	char s1[50] = {0};
	char s2[50] = {0};

	printf("请输入目标字符串s1:\n");
	gets(s1);
	printf("请输入源字符串s2:\n");
	gets(s2);

	str_cat(s1,s2);

	puts(s1);
	return 0;
}
void str_cat(char * p,const char * q)
{
	while(* p++);
	p--;
	while(* p++=* q++);

}

2.已知两个升序数组a、b及空数组c:
Int a[] = {1,3,5,7,9,11,13,15,17,19};
Int b[] = {2,4,6,8,10,12,14,16,18,20};
Int c[20];
编写程序将两个数组完成归并,并存入数组c中;

#include<stdio.h>

void ch_gb(int *p1 , int n1 , int *p2 , int n2 , int *p3);
int main()
{
	int a[] = {1,3,5,7,9,11,13,15,17,19};
	int b[] = {2,4,6,8,10,12,14,16,18,20};
	int c[20];
	int n1 = 0,n2 = 0,i = 0;

	n1 = sizeof(a) / sizeof(int);
	n2 = sizeof(b) / sizeof(int);

	ch_gb(a,n1,b,n2,c);

	printf("数组a:\n");
	for(i=0;i<n1;i++)
	{
		printf("%4d",a[i]);
	}
	puts(" ");

	printf("数组b:\n");
	for(i=0;i<n2;i++)
	{
		printf("%4d",b[i]);
	}
	puts(" ");

	printf("数组a和数组b归并后存入数组C的结果:\n");
		for(i=0;i<n1+n2;i++)
		{
			printf("%4d",c[i]);
		}
	puts(" ");

	return 0;
}
void ch_gb(int *p1 , int n1 , int *p2 , int n2 , int *p3)
{
	while(n1)
	{
		*p3=*p1;
		p3++;
		p1++;
		n1--;
	}
	while(n2)
	{
		*p3=*p2;
		p3++;
		p2++;
		n2--;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值