嵌入式学习代码总结(二)

时间范围:2022年10月31日-2022年11月6日

2022年10月31日

/*
 *	作者:徐子宸
 *	来源:原创
 *	功能:用指针实现冒泡排序
 *	日期:2022年10月31日
 *
 */
#include<stdio.h>
int input(int a[],int n)
{
	int *p=a;
	n=5;
    printf("请输入待排序的数\n");
	for(int i=0;i<5;i++)
	{
		scanf("%d",&p[i]);
	}
}
int sort(int a[],int n)
{
	int *p=a;
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5-i;j++)
		{
			if(p[j]>p[j+1])
			{
				int tmp=p[j];
				p[j]=p[j+1];
				p[j+1]=tmp;
			}
		}
	}
}
int output(int a[],int n)
{	
	int *p=a;
	printf("已完成排序\n");
	for(int i=0;i<5;i++)
	{
		printf("%d\n",p[i]);
	}
}
int main()
{
	int a[5]={0};
	input(a,5);
	sort(a,5);
	output(a,5);
	//int i,j;
	return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
float jia(float a,float b)
{
	return a+b;
}
float jian(float a,float b)
{
	return a-b;
}
float cheng(float a,float b)
{
	return a*b;
}
float chu(float a,float b)
{
	return a/b;
}
int main()
{
	float a,b;
	char c;
	char str[10]={'\0'};
	//while(1);
	printf("输入quit退出,goon继续\n");
	while(1)
	{
	    gets(str);
		if(strcmp(str,"quit")==0)
		{
			exit(0);
		}
		else if(strcmp(str,"goon")==0)
		{
		   printf("请输入要计算的数字和操作\n");
	       scanf("%f%*c%c%f",&a,&c,&b);
			switch(c)
			{
				case '+':
					//jia(a,b);
					printf("%f\n",jia(a,b));
					break;
				case '-':
					//jian(a,b);
					printf("%f\n",jian(a,b));
					break;
				case '*':
					//cheng(a,b);
					printf("%f\n",cheng(a,b));
					break;
				case '/':
					//chu(a,b);
					printf("%f\n",chu(a,b));
					break;
				default:
					printf("ERROR");
					break;
			}
		}
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	char b='c';
	char *q=&b;
	printf("%ld\n",sizeof(int *));
	printf("%ld\n",sizeof(char *));
	return 0;
}
#include<stdio.h>
int swap(int x,int y)
{
	int temp=x;
	x=y;
	y=temp;
}
int main()
{
	int x=3;
	int y=4;
	swap(x,y);
	printf("x=%d,y=%d\n",x,y);
	return 0;
}
#include<stdio.h>
int swap(int *x,int *y)
{
	int temp=*x;
	*x=*y;
	*y=temp;
	printf("x=%d,y=%d\n",*x,*y);
}
int main()
{
	int x=3,y=4;
	swap(&x,&y);
	printf("x=%d,y=%d\n",x,y);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	printf("%d",*&a);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	*p=20;
	printf("%d",*p);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	printf("%d\n",*p);
	*p=20;
	printf("%d\n",a);
	printf("%d\n",*&a);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int b=20;
	*p=b;
	printf("%p\n",&a);
	printf("%p\n",p);
	printf("%d\n",*p);
	printf("%p\n",&b);
	printf("%p\n",p);
	printf("%d\n",*p);
	return 0;
}
#include<stdio.h>
int main()
{
	int *p;
	printf("%p\n",p);
	return 0;
}
#include<stdio.h>
int main()
{
	int *p;
	p=NULL;
	printf("%p\n",p);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	const int *p=&a;
	printf("%p\n",p);
	int b=20;
	p=&b;
	printf("%p\n",p);
	return 0;
}
#include<stdio.h>
int main()
{
	const int *p=&a;
	int b;
	int a;
	printf("%p\n",*p);
	*p=b;
	printf("%p\n",*p);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=20,b=10;
	int * const p=&a;
	*p=10;
	*p=20;
	printf("%d\n",*p);
	return 0;
}
#include<stdio.h>
int main()
{
	int a[5];
	int *p=a;
	for(int i=0;i<5;i++)
	{
		scanf("%d",&p[i]);
	}
	for(int i=0;i<5;i++)
	{
		printf("%d\n",p[i]);
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int a[5];
	int *p=a;
	for(int i=0;i<5;i++)
	{
		scanf("%d",p+i);
	}
	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(p+i));
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int a[5];
	int *p=a;
	for(int i=0;i<5;i++)
	{
		scanf("%d",p++);
	}
	p=a;
	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(p++));
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int *p=arr;
	for(int i=0;i<5;i++)
	{
		scanf("%d\n",&p[i]);
	}
	for(int i=0;i<5;i++)
	{
		printf("%d\n",p[i]);
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int a[5];
	int *p=a;
	for(int i=0;i<5;i++)
	{
		scanf("%d",p++);
	}
	/*for(int i=0;i<5;i++)
	{
		printf("%d\n",*(p--));
	}*/
	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(--p));
	}
	return 0;
}
#include<stdio.h>
int swap(int *a,int *b)
{
	int c=*a;
	*a=*b;
	*b=c;
}
int main()
{
	int a=10,b=20;
	printf("a=%d,b=%d\n",a,b);
	return 0;
}
#include<stdio.h>
int swap(int *a,int *b)
{
	int *temp;
	*temp=*a;
	*a=*b;
	*b=*temp;
	printf("a=%d,b=%d\n",*a,*b);
}
int main()
{
	int a=10,b=20;
	swap(&a,&b);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}
/*
 *	段错误
 *
 */

2022年11月1日

#include<stdio.h>
int my_strcat(char *s,char *q)
{
	while(*s!='\0')
	{
		s++;
	}
	while(*q!='\0')
	{
		*s=*q;
		q++;
		s++;
	}
}
int main()
{
	char str[50]="aaaaa";
	char str1[50]="bbbbb";
	my_strcat(str,str1);
	printf("%s",str);
	return 0;
}

#include<stdio.h>
int my_strcmp(char *s,char *q)
{
	while(*s==*q&&*q!=0)
	{
		s++;
		q++;
	}
	if(*s>*q)
	{
		printf(">\n");
	}
	else if(*s<*q)
	{
		printf("<\n");
	}
	else
	{
		printf("=\n");
	}
}
int main()
{
	char str[100]="xuzichen";
	char str1[100]="zhaozhanqin";
	my_strcmp(str,str1);
	return 0;
}
#include<stdio.h>
int main()
{
	char str1[100]={'\0'};
	char str2[100]={'\0'};
	gets(str1);
	gets(str2);
	int i=0;
	int j=0;
	while(str1[i]!='\0')
	{
		i++;
	}
	while(str2[j]!='\0')
	{
		str1[i]=str2[j];
		i++;
		j++;
	}
	puts(str1);
	return 0;
}
#include<stdio.h>
int main()
{
	char str1[100]={'\0'};
	char str2[100]={'\0'};
	gets(str1);
	gets(str2);
	int i=0;
	while(str2[i]!='\0')
	{
		str1[i]=str2[i];
		i++;
	}
	str1[i]='\0';
	puts(str1);
	return 0;
}
#include<stdio.h>
/*
 *	作者:徐子宸
 *	来源:22091班上课笔记
 *	功能:实现字符串的拷贝
 *
 *
 *
 */
int main()
{
	char *str="China";
	char *atr="country";
	char *p=atr;
	char *q=atr;
	int i=0;
	while(*(p++)!='\0')
	{
		*(q++)=*(p++);
		//i++;
	}
	p[i]='\0';
	puts(str);
	return 0;
}
#include<stdio.h>
int input(int n,int *p)
{
	//int i=0;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&p[i]);
	}
}
int output(int n,int *p)
{
	for(int i=0;i<n;i++)
	{
		printf("%d ",p[i]);
	}
}
int sort(int n,int *p)
{
	for(int i=0;i<n-1;i++)
	{
		for(int j=0;j<n-1-i;j++)
		{
			if(p[j]>p[j+1])
			{
				int temp=p[j];
				p[j]=p[j+1];
				p[j+1]=temp;
			}
		}
	}
}
int main()
{
	int arr[5]={0};
	input(5,arr);
	sort(5,arr);
	output(5,arr);
	return 0;
}
#include<stdio.h>
void my_strcpy(char *p,char *q)
{
	while(*q!='\0')
	{
		*q=*p;
		p++;
		q++;
	}
	*p='\0';
}
int main()
{
	char str[100]="abcde";
	char str1[100]="aa";
	my_strcpy(str,str1);
	puts(str);
	return 0;
}
/*
 *	有问题
 *
 *
 */
#include<stdio.h>
int my_strlen(char *s)
{
	char *p=s;
	while(*p!='\0')
	{
		p++;
	}
	return p-s;
}
int main()
{
	char str[10]="abcde";
	printf("%d",my_strlen(str));
	return 0;
}
#include<stdio.h>
int my_strlen(char *s)
{
	char *p=s;
	while(*(p++)!='\0');
	return p-s-1;
}
int main()
{
	char *a="abcde";
	printf("%d",my_strlen(a));
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int *p=&arr[0];
	int *q=&arr[1];
	printf("%ld",q-p);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int *p=&arr[0];
	int *q=&arr[1];
	printf("%p\n",q);
	printf("%p\n",p);
	printf("%p\n",q-p);
	printf("%d\n",q-p);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int *p=arr;
	printf("%p\n",p);
	p++;
	printf("%p\n",p);
	printf("%p\n",&arr[1]);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int *p=arr;
	printf("%p\n",p);
	printf("%p\n",&arr[0]);
	p++;
	printf("%p\n",p);
	printf("%p\n",&arr[1]);
	p--;
	printf("%p\n",p);
	printf("%p\n",&arr[0]);
	return 0;
}
/*
 *	指针的运算
 *
 */

#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int *p=arr;
	printf("%p\n",p);
	printf("%p\n",&arr[0]);
	p++;
	printf("%p\n",p);
	printf("%p\n",&arr[1]);
	p--;
	printf("%p\n",p);
	printf("%p\n",&arr[0]);
	p+1;
	printf("%p\n",p);
	p-1;
	printf("%p\n",p);
	return 0;
}
/*
 *	p++/p--	往地址增大或减小的方向移动一个数据类型的大小,p的指向发生了改变
 *	p+1/p-1 往地址增大或减小的方向移动一个数据类型的大小,p的指向未发生改变
 *
 *
 */
#include<stdio.h>
int main()
{
	char a[10];		//	错误
	a[10]="abcde";	
	char b[10];		//	错误
	b="abcde";
	char *c;		//	错误
	*c="abcde";
	char *d;		//	改变指针指向
	d="abcde";
	char *e="abcde";	//	错误
	*e="ab";
	char f[10]="abcde";		//	正确
	char *p;
	p=f;
	char g[10]="abcde";		//	正确	
	char *q=g;
	q=&g[2];
	char *h=NULL;		//	正确  
	h="abcde";
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	for(int i=0;i<5;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}
#include<stdio.h>
int main()
{
	char arr[5]="abcd";
	for(int i=0;i<5;i++)
	{
		printf("%c",arr[i]);
	}
	return 0;
}
#include<stdio.h>
int main()
{
	char arr[5]="abcd";
	printf("%s",arr);
	return 0;
}
#include<stdio.h>
int main()
{
	char str[3][20]={"aaaa","bbbb","cccc"};
	int i;
	printf("%s",str[i]);
	return 0;
}
#include<stdio.h>
int main()
{
	char *s="abcde";
	*s="a";
	return 0;
}
#include<stdio.h>
int main()
{
	char str[10]="abcde";
	char *p=str;
	printf("%s\n",p);
	p=&str[2];
	printf("%s\n",p);
	printf("%s\n",str);
	return 0;
}
#include<stdio.h>
int main()
{
	char str[10]="abcde";
	printf("%s",str[2]);
	return 0;
}
#include<stdio.h>
int main()
{
	char *p="abcde";
	printf("%c\n",*p);
	printf("%s\n",*p);
	printf("%s\n",p);
	printf("%d\n",*p);
	return 0;
}
#include<stdio.h>
int main()
{
	char *s="abcde";
	s++;
	printf("%s\n",s);
	s++;
	printf("%s\n",s);
	s++;
	printf("%s\n",s);
	s++;
	printf("%s\n",s);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int **q=&p;
	printf("%d\n",sizeof(p));
	printf("%d\n",sizeof(q));
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int **q=&p;
	printf("%p\n",&a);
	printf("%p\n",p);
	printf("%p\n",*q);
	printf("%p\n",&p);
	printf("%p\n",q);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int **q=&p;
	printf("%d\n",*p);
	printf("%p\n",*q);
	printf("%p\n",**q);
	printf("%p\n",p);
	printf("%p\n",&a);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int **s=&p;
	printf("%d\n",**s);
	printf("%p\n",&a);
	printf("%p\n",p);
	printf("%p\n",*s);
	int b=20;
	*s=&b;
	printf("%p\n",&b);
	printf("%p\n",p);
	printf("%p\n",*s);
	return 0;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int b=20;
	int *pp=&b;
	int const **s=&p;
	**s=*pp;
	s=&pp;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int b=20;
	int *pp=&b;
	int ** const s=&p;
	**s=*pp;
	s=&pp;
}
#include<stdio.h>
int main()
{
	int a=10;
	int *p=&a;
	int b=20;
	int *pp=&b;
	int * const * s=&p;
	**s=*pp;
	s=&pp;
}
#include<stdio.h>
int main()
{
	char *str[3]={"abcde","qwert","zxcvb"};
	int i=0;
	for(i=0;i<3;i++)
	{
		printf("%s\n",*str[i]);
	}
	return 0;
}

2022年11月2日

#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int (*p)[5]=&arr;
	printf("%p\n",arr);
	printf("%p\n",&arr);
	printf("%p\n",&arr[0]);
	printf("%p\n",p);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int (*p)[5]=&arr;
	printf("%p\n",p);
	int arr1[5]={1,2,3,4,5};
	//int arr1[3]={1,2,3};
	p=&arr1;
	printf("%p\n",p);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int (*p)[5]=&arr;
	printf("%p\n",p);
	p++;
	printf("%p\n",p);
	return 0;
}
/*
 *	作者:徐子宸
 *	来源:原创
 *	功能:用指针实现冒泡排序
 *	日期:2022年10月31日
 *
 */
#include<stdio.h>
int input(int (*p)[5]/*,int n*/)
{
	//int *p=a;
	//n=5;
    printf("请输入待排序的数\n");
	for(int i=0;i<5;i++)
	{
		scanf("%d",&(*p)[i]);
	}
}
int sort(int (*p)[5]/*,int n*/)
{
	//int *p=a;
	for(int i=0;i<5-1/* i<2 i<1 */;i++)
	{
		for(int j=0;j<5-1-i;j++)
		{
			if((*p)[j]>(*p)[j+1])
			{
				int tmp=(*p)[j];
				(*p)[j]=(*p)[j+1];
				(*p)[j+1]=tmp;
			}
		}
	}
}
int output(int (*p)[5]/*,int n*/)
{	
	//int *p=a;
	printf("已完成排序\n");
	for(int i=0;i<5;i++)
	{
		printf("%d\n",(*p)[i]);
	}
}
int main()
{
	int a[5]={0};
	int (*p)[5]=&a;
	input(&a/*,5*/);
	sort(&a/*,5*/);
	output(&a/*,5*/);
	//int i,j;
	return 0;
}
/*
 *	思路分析:
 *	输入元素:1 9 4 2 6
 *	第一趟:
 *	1 9 4 2 6
 *	1 4 9 2 6
 *	1 4 2 9 6
 *	1 4 2 6 9
 *	第二趟:
 *	1 4 2 6 9
 *	1 2 4 6 9
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int (*p)[5]=&arr;
	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(arr+i));
	}

	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(*p+i));
	}


	for(int i=0;i<5;i++)
	{
		printf("%d\n",*(*p++));
	}


	for(int i=0;i<5;i++)
	{
		printf("%d\n",*((*p)++));
	}


}
#include<stdio.h>
int main()
{
	int arr[5];
	int (*p)[5]=&arr;
	//int i;
	for(int i=0;i<5;i++)
	{
		scanf("%d",&(*p)[i]);
	}

	for(int i=0;i<5;i++)
	{
		printf("%d",(*p)[i]);
	}
}
#include<stdio.h>
int main()
{
	int arr[5];
	int (*p)[5]=&arr;
	//int i;
	for(int i=0;i<5;i++)
	{
		scanf("%d",&*(*p+i));
	}

	for(int i=0;i<5;i++)
	{
		printf("%d",(*p)[i]);
	}
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[5]={1,2,3,4,5};
	int (*p)[5]=&arr;
	printf("%d\n",sizeof(int(*)[5]));
	printf("%d\n",sizeof(int[5]));
	return 0;
}
#include<stdio.h>
int main()
{
	printf("%d\n",sizeof(int *));
	printf("%d\n",sizeof(char *));
	printf("%d\n",sizeof(double *));
	printf("%d\n",sizeof(int (*)[5]));
	return 0;

}

附习题:

若有以下定义和语句:

double r=99;double *p=&r ;

*p=r ;

则以下正确的叙述是         

A. 以两处的*p 含义相同,都说明给指针变量p 赋值

B. 在"double r=99,*p=&r;"中,把r 的地址赋值给了p 所指的存储单元

C. 语句"*p=r;"把变量r 的值赋给指针变量p

D. 语句"*p=r;"取变量r 的值放回r 中

5、 分析下面函数,以下说法正确的是        

swap(int *p1,int *p2)

{

 Int *p;

  *p=*p1; *p1=*p2; *p2=*p;

}

A. 交换*p1和*p2的值            B. 正确,但无法改变*p1和*p2的值

C. 交换*p1和*p2的地址          D. 可能造成系统故障,因为使用了野指针

9、 有如下程序段

int *p ,a=10 ,b=1 ;

p=&a ; a=*p+b ;

执行该程序段后,a 的值为         

A. 12        B. 11        C. 10           D. 编译出错

8、 若int x ; int *pb; ,则正确的赋值表达式是         

A. pb=&x       B. pb=x;    C. *pb=&x; D. *pb=*x

12、若有说明:long *p ,a;则不能通过scanf 语句正确给输入项读入数据的程序段

         

A. *p=&a; scanf("%ld",p);

B. p=(long *)malloc(8); scanf("%ld",p);

C. scanf("%ld",p=&a);

D. scanf("%ld",&a);

13、对于类型相同的两个指针变量之间,不能进行的运算是         

A. <         B. =         C. +         D. -

2、执行以下程序后,a的值为( )b的值为( )

void main()

{

  int a,b,k=4,m=6,*p1=&k,*p2=&m;

a = p1==&m;

b=(-*p1)/(*p2)+7;

printf(“a=%d\n”, a);

printf(“b=%d\n”, b);  

}

A.-1    B.1      C.0      D.4

A.5     B.6      C.7      D.10

6、有四组对指针变量进行操作的语句,以下判断正确的选项是()

1. int p, q; q=p;               int a,*p,*q; p=q=&a;

2. int a,*p,*q; q=&a; p=*q;     int a=20,*p; p=a;

3. int a=b=0,*p; p=&a; b=*p;    int a=20,*p,*q=&a; p=q;

4. int a=20,*p,*q=&a; p=q;      int p,*q; p=q;

A.正确(1) 不正确(2)(3)(4)

B.正确(1)(4) 不正确(2)(3)

C.正确(3) 不正确(1)(2)(4)

D.正确(1)(3) 不正确 (2)(4)

7、以下程序中调用scanf 函数给变量a输入值的方法是错误的,其错误原因是( )

void main()

{

int*p, q, a, b;

p=&a;

printf(“input a:”);

scanf(“%d”,*p);

……

}

A.*p表示的是指针变量p的地址 

B.*p表示的是变量a的值,而不是变量a的地址 

C.*p表示的是指针变量p的值

D.*p只能用来说明p是一个指针变量

2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是    

A)k=*ptr1+*ptr2     B)ptr2=k            C)ptr1=ptr2          D)k=*ptr1*(*ptr2)

5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是        

A)p1=&m; p2=&p1 ;         B)p1=&m; p2=&n; *p1=*p2 ;

C)p1=&m; p2=p1 ;          D)p1=&m; *p1=*p2 ;

6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是        

A)a,p,*&a           B)&*a,&a,*p        C)*&p,*p,&a        D)&a,&*p,p

  1. 有以下程序

void fun(char *a, char *b)

{

 a=b; (*a)++;

}
void main()
{

char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是( )
A)Ab    B)aa     C)Aa      D)Bb

2、下列选项中正确的语句组是(  )
A)char s[8]; s={"Beijing"};    B)char *s; s={"Beijing"};
C)char s[8]; s="Beijing";      D)char *s; s="Beijing";

3、下面程序是对两个整型变量的值进行交换,以下正确的说法是( )

void main()

{

int a=10,b=20;

printf(“(1)a=%d, b=%d\n”, a , b);

swap(&a, &b);

printf(“(2)a=%d, b=%d\n”, a ,b);

}

swap(int p, int q)

{

int t; t=p; p=q; q=t;

}

A.程序正确 ,能实现既定功能

B.程序有错,只要将语句swap(&a,&b);中的参数改成a,b即可

C.程序有错,只要将swap()函数中的形参p和q 以及t均定义为指针(执行语句不变)即可

D.以上说法都不对

4、以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址
#include <stdio.h>
#include <string.h>
char  *scmp(char *s1, char *s2)
{

if(strcmp(s1,s2)<0)
return(s1);
else return(s2);
}
main()

{

int i;

char string[20], str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为( )
A)abcd  B)abba  C)abc  D)abca

5、有以下程序
#include <string.h>
main()
{

char str[ ][20]={"Hello","Beijing"},*p=str[0];
printf("%d\n",strlen(p+20));
}
程序运行后的输出结果是(  )
A)0   B)5    C)7    D)20

6、有以下程序_______
main()
{

int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;}
printf("%d\n",k);
}
执行后输出的结果是(  )
A) 58    B) 56    C) 45     D) 24

7、 有以下程序
main(int argc,char *argv[])
{ int n,i=0;
while(argv[1][i]!='\0')
{ n=fun(); i++;}
printf("%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;
return s;
}
假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令
exam 123〈回车〉
则运行结果为(  )

A) 6 B) 8 C) 3 D) 4
8、下列程序的输出结果是(  )
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}

A) 非法 B)a[4]的地址 C)5 D)3

9、有以下程序
main()
{ char *s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是(  )
A) n,two B) t,one C) w,one D) o,two

10、下面判断正确的是( )

A. char*a=”china”;等价于char *a; a=”china”;

B. char str[10]={“china”};等价于char str[10];  str=china

C. char*s=”china”;等价于char str[10] =china

D. char c[4]=”abc”,d[4]=”abc” 等价于char c[4]=b[4]=”abc”; 

11、设char*s=”\ta\017bc”;则指针变量s指向的字符串所占的字节数是 ( )

A.9       B.5         C.6          D.7

12、下面能正确进行字符串赋值的操作的是( )

A. char s[5]={“ABCDE”};

B. char s[5]={‘A’,’B’,’C’,’D’,’E’,};

C. char*s; s=”ABCDE”;

D. char s; scanf(“%s”, s);

13、下面程序段的运行结果是( )

char*s=”abcde”; s+=2; printf(“%d”,s);

A.cde   B.字符’c’    C.字符’c’的地址    D.无确定结果 

14、设有以下程序段:char s[]=”china”; char*p; p=s; 则下列叙述正确的是( )

A.s和p完全相同

B.数组s中的内容和指针变量p中的内容相等

C.s数组长度和p所指向的字符串长度相等 

D.*p与s[0]相等

15、下面程序段的运行结果是( )

char*format=”%s, a=%d, b=%d\n”;

int a=1,b=10; a+=b;

printf(format,” a+=b,”, a, b);

A. for,” a+=”,a b          B. format,” a+=b”

C. a+=b, a=11,b=10           D.以下结果都不对

16、以下正确的程序段是( )

A. char str [20];   scanf(“%s”, &str);

B. char *p;         scanf(“%s”, p);

C. char str[20];    scanf(“%s”, &str[2]);

D. char str[20], *p = str; scanf(“%s”, p+2);

17、下面程序段的运行结果是( )

char str[]=”ABC”, *p=str;

printf(“%d\n”,*(p+3));

A. 67      B. 0    C.字符’C’的地址     D.字符’C’

18、下面程序段运行结果是( )

char a[]=”language”,*p;    p=a;

while(*p!=’u’) {printf(“%c”,*p-32);p++;}

A. LANGUAGE           B. language

C. LANG               D. language

19、下面说明不正确的是( )

A.char a[10]=”china”;   B.char a[10],*p=a;p=”china”;

C.char*a; a=”china”;     D.char a[10],*p; p=a=”china”; 

20、 若有说明语句

char a[]=”It is mine”; char*p=”It is mine”;

则以下不正确的叙述是( )

A.a+1表示的是字符t的地址

B.p指向另外的字符串时,字符串的长度不受限制

C.p变量中存放的地址值可以改变

D.a中只能存放10个字符

21、若已定义char s[10];则在下面表达式中不能表示s[1]的地址是( )

A.s+1      B.s++      C.&s[0]+1      D. &s[1]

22、下面程序段的运行结果是( )

char s[6]; s=”abcd” printf(“\”%s\”\n”,s);

A.”abcd”    B.”abcd “     C.\”abcd\”     D.编译出错

23、当运行以下程序时,从键盘输入Happy!<CR> ,则下面的程序运行结果是( )

#include<stdio.h>

#include<string.h>

stre(char str[])

{

int num=0;

while(*(str+num)!=’\0’)

num++;

return(num);

}

void main()

{

char str [10],*p = str;

gets (p);

printf(“%d\n”, stre(p));

}

A.7    B.6     C.5     D.10

24、下面程序的运行结果是( )

#include<stdio.h>

void main()

{

static char a[ ]=“Language”,b[ ]=”programe”;

char p1, p2; int k;

p1=a; p2=b; printf(" %c”,*(p1+k));

}

A. age    B. ag    C. Language    D.有语法错误 

25、下面程序运行结果( )

#include<stdio.h>

void main()

{

int a=28,b;

char s[10],*p;

p=s;

do{

b=a%16;

if(b<10) *p=b+48;

else *p=b+55;

p++;

a=a/5;

}while(a>0);

*p=’\0’;

puts(s);

}

A.10    B. C2      C.C51         D.\0

26、下面程序的运行结果是( )

#include<stdio.h>

void delch(char *s)

{

int I,j;

char *a;

a=s;

for(I=0,j=0;a[I]!=’\0’;I++)

if(a[I]>=’0’&&a[I]<=’9’){s[j]=a[I];j++;}

s[j]=’\0’;

}

void main()

{

char*item=”a34bc”;

delch(item);

printf("\n%s",item);

}

A.abc     B.34        c.a34         D.a34bc

27、下面程序运行结果是( )

#include<stdio.h>

#include<string.h>

void main()

{

char *s1=”AbDeG”; char *s2=”AbdEg”;

s1+=2; s2+=2;

printf(“%d\n”,strcmp(sl,s2));

}

A.正数     B.负数    C.零     D.不确定的值

28、下面的程序的运行结果是( )

#include<stdio.h>

#include<string.h>

fun(char*s)

{

char a[7];

s=a;

strcpy(a,”look”);

}

void main()

{

char *p;

fun(p);

puts(p);

}

A.look□□□    B.look     C.异常结束      D.不确定的值

29、下面程序的运行结果是( )

#include<stdio.h>

#incude<string.h>

void main()

{

char* p1,*p2,str[50]=”abc”;

p1=”abc”; p2=”abc”;

strcpy(str+1,strcat(p1,p2));

printf(“%s\n”,str);

}

A.abcabcabc     B.bcabcabc     C.aabcabc     D.cabcabc

30、下面程序的运行结果是( )

#include<stdio.h>

abc(char*p)

{

int I,j;

for(I=0,j=0;*(p+I)!=’\0’;I++)

if(*(p+I)>=’d’){*(p+j)=*(p+I); j++; }

*(p+j)=’\0’;

}

void main()

{

char str[]=”cdalb”;

abc(str);

puts(str);

}

A.dalb        B.cd        C.dl          D.c

31、若有以下定义,则对a数组元素的正确引用是

int a[5],*p=a;

A.*&a[5]     B.a+2     C.*(p+5)     D.*(a+2)

32、若有定义:int a[2][3];则对a数组的第I行,第j列元素值的正确引用是( )

A.*(*a+I)+j)    B.(a+I)[j]    C*(a+I+j)    D.*(a+I)+j

33、若有以下定义和语句,则对a数组元素的正确引用为( )

int a[2][3],(*p)[3]; p=a;

A.(p+1)[0]           B.*(*(p+2)+1)

C.*(p[1]+1)          D.p[1]+2

34、若有定义:int a[5];则a数组中首元素地址可以表示为( )

A.&a     B.a+1      C.a      D.&a[1]

35、有以下程序
void fun(char *c,intd)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
程序运行后的输出结果是(  )。
A) B,a,B,a   B) a,B,a,B   C) A,b,A,b   D) b,B,A,b  

36、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序
void sort(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++) printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是(  )。
A) 1,2,3,4,5,6,7,8,9,10,
B) 10,9,8,7,6,5,4,3,2,1,
C) 1,2,3,8,7,6,5,4,9,10, 
D) 1,2,10,9,8,7,6,5,4,3,

37、有以下程序
main()
{char a[]={'a','b','c','d','e','f','g','h','\0'}; int i,j;
i=sizeof(a); j=strlen(a);
printf("%d,%d\n",i,j);
}
程序运行后的输出结果是( )。
A) 9,9   B) 8,9   C) 1,8   D) 9,8

38、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是( ) 
A) 22  B) 10   C) 34   D) 30

39、若有以下定义,则*(p+5)表示( )

int a[10],*p=a;

A.元素a[5]的地址     B.元素a[5]的值

C.元素a[6]的地址     D.元素a[6]的值

40、以下正确的说明语句是( )

A.int*b[]={1,3,5,7,9};

B.int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};

C.int a[]={1,3,5,7,9};

D.int a[3][4],(*num)[4];num[1]=&a[1][3];

41、若有以下定义,且0<=I<4,则不正确的赋值语句是( )

int b[4][6],*p,*q[4];

A.q[I]=b[I];    B.p=b;    C.p=b[I];    D.q[I]=&b[0][0];

42、有以下程序
void ss(char *s,char t)
{while(*s)
{if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{char str1[100]="abcddfefdbd",c='d';
ss(str1,  C); printf("%s\n",str1);
}
程序运行后的输出结果是______。
A) ABCDDEFEDBD
B) abcDDfefDbD
C) abcAAfefAbA
D) Abcddfefdbd

43、有以下程序
#include <stdlib.h>
main()
{char *p,*q;
p=(char *)malloc(sizeof(char)*20); q=p;
scanf("%s%s",p,q); printf("%s%s\n",p,q);
}
若从键盘输入:abc def<回车>,则输出结果是______。
A) def def  B) abc def   C) abc d   D) d d

44、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。
#include <string.h>
void f(char  (*p) [10], int  n)
{ char t[20]; int i,j;
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(strcmp(p[i],p[j])<0)
{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}
}
main()
{char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i;
 f(p,5);

printf("%d\n",strlen(p[0]));
}
程序运行后的输出结果是 ________

A) 6   B) 4   C) 5  D) 3

45、阅读以下程序:

void main()

{

int a[10]={2,4,6,8,10,12,14,16,18,20},*p;

p=a;

printf(“%x\n”,p);

printf(“%x\n”,p+9);

}

若第一个printf语句输出的是ffca,则第二个printf语句输出的是( )

A.ffee B.ffdc C.ffde D.ffcd

46、设有以下定义:

char *cc[2]={“1234”,”5678”};

则正确的叙述是( )

A.cc数组的两个元素中各自存放了字符串“1234”和“5678”的首地址

B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

C.cc是指针变量,它指向含有两个数组元素的字符型一维数组

D.cc数组元素的值分别是“1234”和“5678”

47、若有以下定义

int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}

int(*p)[3]=x;

则能够正确表示数组元素x[1][2]的表达式是( )

A *((*p+1)[2])   B (*p+1)+2   C *(*p+5)   D *(*p+1)+2)

48、下面程序的运行结果是( )

void main()

{

int x[5]={2,4,6,8,10},*p,**pp;

p=x;

pp=&p;

printf(“%d”,*(p+1));

printf(“%3d\n”**pp);

}

A 4 4    B 2 4     C 4 2     D, 4 6

49、若有说明:

char *language[]={“fortran” ,”basic” ,”pascal” ,“java” ,

”c”};则表达式language[1]>language[3]比较的是( )

A 字符f和字符p 的大小

B 字符串basic和字符串java地址的大小

C 字符b和字符j 的大小

D 字符串fortran和字符串pascal地址的大小

50、若有说明( )

char *language[]={“fortran”,”basic”,”pascal”,”java”,

”c”}则language[2]的值是

A 一个字符  B 一个地址  C 一个字符串  D一个不定值

51、 若有说明

char *language []={“fortran” ,”basic”,“pascal” ,“java”,“c”}则以下不正确的是(   )

A.language+2表示字符串”pascal”的首地址

B.language[2]的值是字母p

C.language是一个字符型指针数组,它包含5个元素每个元素都是一个指向字符变量的指针

D.language是一个字符型指针数组,它包含5个元素其初值分别是:fortran,basic,pascal,java,c,

52、语句int(*ptr) ()的含义是(  )

A.ptr是指一维数组的指针变量

B.ptr是指向int型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int型数据

D.ptr 是一个函数名,该函数的返回值是指向int型数据的指针

52、若有函数max(a,b)并且已使函数指针变量p指向max,当调用该函数时正确的调用方法是(  )

A.(*p)max(a,b)   B.pmax(a,b)   C.(p)(a,b)   D.*p(a,b)

53、已有函数max(a,b),为了让函数指针变量p指向函数max正确的赋值方法是(  )

A.p=max    B.*p=max    C.p=max(a,b)   D.*p=max(a,b)

54、已有定义int(*p)( ) ,指针p可以(  )

A.代表函数的返回值  

B.指向函数的入口地址 

C.表示函数的类型

D.表示函数返回值的类型

55、若有以下说明和语句:char*language[]=

{“fortran” ,“basic” ,”pascal” ,“java”,“c”}

char**p;

p=language+2

则语句printf(“%o/n”*p);( )

A.输出的是language[2]元素的地址

B.输出的是字符串pascal

C.输出的是language[2]元素的值,它是字符串pascal的首地址

D.格式说明不正确,无法得到确定的输出

56、若要对a进行++运算,则a应具有下面说明(  )

A.int a[3][2]

B.char *a[]{“12”,ab}

C.char(*a)[3]

D.int b[10],*a=b;

二、填空题

1、以下程序运行后的输出结果是 【   1,0,3,4,5,0,7,8,9 】
void main()
{

int i,j,a[ ][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)  *(*(a+j)+i)=0;
for(i=0;i<3;i++)
{

for(j=0;j<3;j++) printf("%d ",*(*(a+i)+j));
printf("\n");
}
}
2、以下程序运行后输入:3,abcde<回车>,则输出结果是 【  edcba,5  】
#include <string.h>
move(char *str, int n)
{ char temp; int i;
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s, z);
printf("%s\n",s);
}

3、有以下程序,若输入的字符串是:abc123edf456gh,则执行程序后输出:【 123456   】。
#include <stdio.h>
#include <ctype.h>
main()
{ char  s[80], d[80]; int i,j;
gets(s);
for(i=j=0;*(s+i)!='\0';i++)
if(*(s+i)>='0' && *(s+i)<='9' ) { *(d+j)= *(s+i); j++; }
 *(d+j)='\0';
puts(d);
}

4、若有以下程序
main()
{int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,

{-21,23,0,-24},{-31,32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{ if(*(*(a+i)+j)<0) continue;
if(*(*(a+i)+j) ==0) break;
s+=*(*(a+i)+j);
}
}
printf("%d\n",s);
}
执行后输出结果是【  3  】。
5、 以下函数的功能是删除字符串s中的所有数字字符。请填空。
viod dele(char  *s)
{

 int n=0,i;
for(i=0;s[i];i++)
if(【  s[i]!=\0&&s[i]>=0&&s[i]<=9  】)
s[n++]=s[i];
s[n]=【 \0  】;
}

6、 设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。
main()
{ int findbig(int,int,int);
int (*f)(int,int,int),x,y,z,big;
f=【  findbig(x,y,z)  】;
scanf("%d%d%d",&x,&y,&z);
big=(*f)(x,y,z);
printf("big=%d\n",big);
}
7、以下程序通过函数指针p调用函数fun,请在填空栏内,写出定义变量p的语句。

void fun(int *x,int y)
{ …… }
main()
{ int a=10,b=20;
【 fun(&a,&b);   】 ; /定义变p */
p=fun; p(&a,&b);
……
}

8、 下列程序的输出结果是 【 100 0  】 。
void fun(int *n)
{ while( (*n)--);
printf("%d",++(*n));
}
main()
{ int a=100;
fun(&a);
}
9、 以下程序的输出结果是 【 20 10  】 。
main()
{ int arr[ ]={30,25,20,15,10,5}, *p=arr;
p++;
printf("%d\n",*(p+3));
}
10、 以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。
#define N 3
#define M 4
void LineMax(int  (*x)[M])
{ int i,j,p;
for(i=0; i<N;i++)
{ p=0;
for(j=1; j<M;j++)
if(x[i][p]<x[i][j]) 【  p=x[i][j]  】 ;
printf("The max value in line %d is %d\n", i, 【 p  】 );
}
}
main()
{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
LineMax (x)
}

1、 若有以下定义和语句,且0≤i<10则对数组元素的错误引用是        

int a[10]={1,2,3,4,5,6,7,8,9,10},*p,i;

p=a;

A. *(a+i)          B. a[p-a]            C. p+i             D. *(&a[i])

4、 char *s="\t \\ N a m e \\ A d d r e s s \n";

指针s所指字符串的长度为:        

A. 说明不合法        B. 19          C. 18         D. 15

14若已定义:int a[9] *p=a;并在以后的语句中未改变p 的值,不能表示a[1]

址的表达式是         

A. p+1          B. a+1          C. a++ (数组名是常量,常量不能自运算)         D. ++p

15、若有以下说明:

int a[10]={1,2,3,4,5,6,7,8,9,10} ,*p=a ;

则数值为6 的表达式是         

A. *p+6       B. *(p+6)       C. *p+=5 D.       p+5

6、设P1 和P2 是指向同一个int 型一维数组的指针变量,k 为int 型变量,则不能正

确执行的语句是         

A. k=*P1+*P2;     B. p2=k;     C. P1=P2;     D. k=*P1 * (*P2);

17、若有以下的定义:

int a[ ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} , *p=a ;

则值为3 的表式是         

A. p+=2  *p++        B. p+=2 ,*++p

C. p+=3 , *p++             D. p+=2 ,++*p

18、若有以下定义和语句:

int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ,*p=a ;

则不能表示a 数组元素的表达式是         

A. *p         B. a[10]         C. *a         D. a[p-a]

19、有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则数值为9 的表达式是         

A. *p+9         B. *p+8         C. *p+=9         D. p+8

1. 16位编译系统上 sizeof(int) =2,若有定义int  a[]={10,20,30}, *p=a;,当执行p++;后,下列说法错误的是( )

Ap向高地址移了一个字节 Bp向高地址移了一个存储单元

Cp向高地址移了两个字节 Dpa+1等价

2.有以下程序段 
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是()
  A)5      B)6     C)8     D)9

3.若有以下定义,则对a数组元素的正确引用是_________.

 int a[5],*p=a;

 a)*&a[5]   b)a+2  c)*(p+5)  d)*(a+2)

  

4.若有以下定义,则p+5表示_______.

  int  a[10],*p=a;

  a)元素a[5]的地址             b)元素a[5]的值

  c)元素a[6]的地址             d)元素a[6]的值

2022年11月3日

6.有以下程序段 
#include <stdio.h>

int main()

{   int x[] = {10, 20, 30};

    int *px = x;

    printf("%d,", ++*px); 11   printf("%d,", *px);11

    px = x;

    printf("%d,", (*px)++);11  printf("%d,", *px);12

    px = x;

printf("%d,", *px++); 12   printf("%d,", *px); 20

px = x;

    printf("%d,", *++px);20    printf("%d\n", *px);20

    return 0;

}

程序运行后的输出结果是(11,11,11,12,12,20,20,20 ) 

A11,11,10,11,10,20,20,20  B20,10,11,10,11,10,11,10

C11,11,11,12,12,20,20,20        D20,10,11,20,11,12,20,20

7.设有如下定义:

int arr[]={6,7,8,9,10};

   int *ptr;

   ptr=arr;

   *(ptr+2)+=2;  

   printf ("%d,%d\n",*ptr,*(ptr+2));  

则程序段的输出结果为 

A)8,10          B)6,8         C)7,9          D)6,10

8.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是_____10____. 12

9.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.

A) p+1      B) *(p+3)     C) *(p+1)+3   D) *(p[0]+2))

10若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.

  a)*(a[i]+j)   b)(a+i)   c)*(a+j)  d)a[i]+j

11若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0)的值是___8_____.

12.有以下定义
char a[10],*b=a;
不能给数组a输入字符串的语句是()
A)gets(a)   B)gets(a[0])    C)gets(&a[0]);    D)gets(b);

13.下面程序段的运行结果是_________.

  char *s="abcde";

  s+=2;printf("%d",s);

  a)cde     b)字符'c'     c)字符'c'的地址     d)无确定的输出结果

14.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()
A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;
C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");

16.有以下程序 

main()

{

char a[]="programming",b[]="language";

char *p1,*p2;

int i;

p1=a;p2=b;

for(i=0;i<7;i++)

if(*(p1+i)==*(p2+i))

printf("%c",*(p1+i));

}

输出结果是() 

A)gm      B)rg         C)or        D)ga

17以下正确的程序段是_________.

  a)char str[20];                    b)char *p;

   scanf("%s",&str);                 scanf("%s",p);

  c)char str[20];                    d)char str[20],*p=str;

scanf("%s",&str[2]);                scanf("%s",p[2]);

18若有说明语句 

   char a[]="It is mine";

   char *p="It is mine";

  则以下不正确的叙述是________.

  a)a+1表示的是字符t的地址

  b)p指向另外的字符串时,字符串的长度不受限制

  c)p变量中存放的地址值可以改变

  d)a中只能存放10个字符

19下面程序的运行结果是_______.

  #include  <stdio.h>

  #include  <string.h>

  main()

  {  char *s1="AbDeG";

    char *s2="AbdEg";

    s1+=2;s2+=2;

   printf("%d\n",strcmp(s1,s2));

  }

  a)正数    b)负数   c)零   d)不确定的值

20、下列选项中声明了一个指针数组的是:

A)int *p[2];       B)int (*p)[2];  

C)typedef int* intPtr; intPtr p[2];

D)A和B

E)A和C

F)B和C

21、下面代码能通过编译的是:

A)int main()

{

int a[3]={1,2,3};

int *b[3]={&a[1],&a[2],&a[3]};

int **p = b;

return  0;

}

B)int main()

{

int a[3]={1,2,3};

int *b[3]={a[1],a[2],a[3]};

int **p = b;

return  0;

}

C)int main()

{

int a[3]={1,2,3};

int *b[3]={&a[1],&a[2],&a[3]};

int *p = b;

return  0;

}

D)int main()

{

int a[3]={1,2,3};

int *b[3]={&a[1],&a[2],&a[3]};

int *p = &b;

return  0;

}

22、若要对a进行++运算,则a应具有下面说明_______.

A) int a[3][2];            B) char *a[ ] = {12,ab};

C) char (*a)[3];    

23、若有以下说明语句:

char *language[ ] = {FORTRAN,BASIC,’’PASCAL,’’JAVA,C};

char **q;

q = language + 2;

则语句printf(%s\n, *q) 输出的是_______.

A) language[2]元素的地址;        

B)字符串PASCAL

C) language[2]元素的值,它是字符串PASCAL的首地址

D)格式说明不正确,无法得到确定的输出

24若有以下程序:

void main()

{

   char *a[3] = {"I","love","China"};

   char **ptr = a;

   printf("%c  %s" , *(*(a+1)+1), *(ptr+1) );

}

这段程序的输出是() 

A) I  l

B) o  o

C)o  love

D) I  love

25、对于语句int *pa[5];下列描述中正确的是_______.

A) pa是一个指向数组的指针,所指向的数组是5个int型元素

B) pa是一个指向某数组中第5个元素的指针,该元素是int型变量

C) pa [5]表示某个元素的第5个元素的值 

D) pa是一个具有5个元素的指针数组,每个元素是一个int型指针

26、若有以下定义,且0≤i<4,则不正确的赋值语句是_______.

int b[4][6], *p, *q[4];

A) q[i] = b[i];             B) p = b;

C) p = b[i]               D) q[i] = &b[0][0];

27.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素地址的正确引用是        。

A)*(p+2)            B)p[2]            C)p[1]+1             D)(p+1)+2

#include<stdio.h>
int main()
{
	int arr[3][4]={1,2,3,4,5};
	int (*p)[4]=arr;

	printf("p[i][j]\n");
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\n",p[i][j]);
		}
	}

	printf("*(p[i]+j)\n");
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\n",*(p[i]+j));
		}
	}
    
	printf("*(*(arr+i)+j)\n");
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\n",*(*(arr+i)+j));
		}
	}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int n=0;
	printf("您想要存放几个数:\n");
	//gets(n);	段错误
	scanf("%d",&n);
	int * arr=(void *)malloc(sizeof(arr)*n);
	if(NULL == arr)
	{
		printf("ERROR\n");
		return -1;
	}
	memset(arr,0,sizeof(arr)*n);
	printf("请输入数字:\n");
	for(int i=0;i<n;i++)
	{
		scanf("%d",arr+i);
	}
	printf("输出结果:\n");
	for(int i=0;i<n;i++)
	{
		printf("%d\n",*(arr+i));
	}
	free(arr);
	return 0;
}
#include<stdio.h>
int main()
{
	int arr[3][4]={1,1,3,4,5,6};
	int (*p)[4]=arr;
	printf("int arr[3][4]={1,1,3,4,5,6};int (*p)[4]=arr\n");
	printf("&arr[0][0]=%p\n",&arr[0][0]);
	printf("&arr[0]=%p\n",&arr[0]);
	printf("arr[0]=%p\n",arr[0]);
	printf("arr=%p\n",arr);
	printf("&arr=%p\n",&arr);
	printf("p=%p\n",p);
	printf("p++:\n");
	p++;
	printf("&arr[0][0]=%p\n",&arr[0][0]);
	printf("&arr[0]=%p\n",&arr[0]);
	printf("arr[0]=%p\n",arr[0]);
	printf("arr=%p\n",arr);
	printf("&arr=%p\n",&arr);
	printf("p=%p\n",p);
	printf("p--:\n");
	p--;
	printf("&arr[0][0]=%p\n",&arr[0][0]);
	printf("&arr[0]=%p\n",&arr[0]);
	printf("arr[0]=%p\n",arr[0]);
	printf("arr=%p\n",arr);
	printf("&arr=%p\n",&arr);
	printf("p=%p\n",p);
	printf("p+1:\n");
	p+1;
	printf("&arr[0][0]=%p\n",&arr[0][0]);
	printf("&arr[0]=%p\n",&arr[0]);
	printf("arr[0]=%p\n",arr[0]);
	printf("arr=%p\n",arr);
	printf("&arr=%p\n",&arr);
	printf("p=%p\n",p);
	printf("p-1:\n");
	p-1;
	printf("&arr[0][0]=%p\n",&arr[0][0]);
	printf("&arr[0]=%p\n",&arr[0]);
	printf("arr[0]=%p\n",arr[0]);
	printf("arr=%p\n",arr);
	printf("&arr=%p\n",&arr);
	printf("p=%p\n",p);
	return 0;
}

2022年11月4日

单选题(2×24=48分)

1.  要把高级语言编写的源程序转换为目标程序,需要使用(    )  

A)  编辑程序 B)驱动程序 C)诊断程序 D)编译程序 

2. 以下叙述中正确的是(    )

A)C语言程序将从源程序中第一个函数开始执行

B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束

D)main可作为用户标识符,用以命名任意一个函数作为主函数

3. 若变量a是int类型,并执行了语句:a=‘A'+1.6;,则正确的叙述是  (  )

A) a的值是字符B的ASCII 码         B)a的值是浮点型  

C)  不允许字符型和浮点型相加         D) a的值是字符‘A’的ASCII 值加上2。

4. 若变量已正确定义并赋值,以下符合C语言语法的表达式是(    )

A)a:=b+1  B)a=b=c+2  C)int 18.5%3   D)a=a+7=c+b

5. 下列可用于C语言用户标识符的一组是(    )

A)void, define, WORD  B)a3_b3, _123,Car  C)For, -abc, IF Case  D)2a, DO, sizeof

6若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句

是(    )

A)scanf("%d",a,b,c);                     B)scanf("%d%d%d",a,b,c);

C)scanf("%d",p);                        D)scanf("%d",&p);

7以下关于long、int和short类型数据占用内存大小的叙述中正确的是(    )

A)均占4个字节           B)根据数据的大小来决定所占内存的字节数

C)由用户自己定义        D)由C语言编译系统决定 

8若变量已正确定义,有以下程序段

i=0;

do{

printf("%d,",i);

} while(i++);

printf("%d\n",i)

其输出结果是(    )

A)0,0       B)0,1        C)1,1         D)程序进入无限循环

9有以下计算公式

若程序前面已在命令中包含math.h文件,不能够正确计算上述公式的程序段是(   )

A)if(x>=0) y=sqrt(x);                        B)y=sqrt(x)

else y=sqrt(-x);                                if(x<0) y=sqrt(-x);

C) if(x>=0)y=sqrt(x);                            D)y=sqrt(x>=0?x:-x);

  if(x<0)y=sqrt(-x);

10设有条件表达式:(EXP)?i++:j--,则以下表达式中(EXP)完全等价的是(    )

A)(EXP= =0)    B)(EXP!=0)     C)(EXP= =1)    D)(EXP!=1)

11有以下程序

#include<stdio.h>

int main(void)

{

int y=9;

for( ; y>0;y--){

if(y%3= =0)  printf("%d",--y);

  }

}

程序的运行结果是(  )

A)741         B)963           C)852           D)875421

12若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是(   )

A)函数的实参和其对应的形参共占同一存储单元

B)形参只是形式上的存在,不占用具体存储单元

C)同名的实参和形参占同一存储单元

D)函数的形参和实参分别占用不同的存储单元

13已知字符’A’的ASCⅡ代码值是65,字符变量c1的值是’A’,c2的值是’D’。执行语句

printf("%d,%d",c1,c2-2);后,输出结果是(   )

A)A,B       B)A,68        C)65,66        D)65,68

14以下叙述中错误的是(    )

A)改变函数形参的值,不会改变对应实参的值

B)函数可以返回地址值

C)可以给指针变量赋一个整数作为地址值 

D)当在程序的开头包含文件stdio.h 时,可以给指针变量赋NULL

15以下正确的字符串常量是( )

A)"\\\"         B)’abc’         C)Olympic Games         D)""

16设有定义:char p[]={’1’,’2’,’3’},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是(      )

A)sizeof(p)       B)sizeof(char)     C) sizeof(*q)        D)sizeof(p[0])

17有以下函数

int aaa(char *s)

{

char *t=s;  

while(*t++) ;

t--;

return(t-s);

}

以下关于aaa函数的功能叙述正确的是(      )

A)求字符串s的长度                  B)比较两个串的大小

C)将串s复制到串t                   D)求字符串s所占字节数

18若有定义语句:int a[3][6];  ,按在内存中的存放顺序,a数组的第10个元素是(    )

A)a[0][4]           B)a[1][3]           C)a[0][3]            D)a[1][4]

19有以下程序

#include<stdio.h>

void fun(char **p)

{

++p;

printf("%s\n",*p);

}

int main(void)

{

char *a[ ]={"Morning","Afternoon","Evening","Night"};

fun(a);

}

程序的运行结果是(  )

A)Afternoon      B)fternoon      C)Morning      D)orning

20若有定义语句:int a[2][3],*p[3];  ,则以下语句中正确的是(  )

A)p=a;       B)p[0]=a;       C) p[0]=&a[1][2];       D)p[1]=&a;

21有以下程序

#include<stdio.h>

int  fun(char s[])

{

int n=0;

while(*s<=’9’&&*s>=’0’){  

n=10*n+*s-’0’;

s++;

}

return(n);

}

int main(void)

{

char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};

printf("%d\n",fun(s));

}

程序运行的结果是(   )

A)9       B)61490          C)61          D)5

22以下能正确定义一维数组的选项是(  )  

A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5};  

C)char a={’A’,’B’,’C’}; D)int a[5]="0123";

23以下叙述中正确的是(  )  

A)预处理命令行必须位于源文件的开头  

B)在源文件的一行上可以有多条预处理命令  

C)宏名必须用大写字母表示  

D)宏替换不占用程序的运行时间  

24以下语句或语句组中,能正确进行字符串赋值的是  (    )  

A)char *sp;*sp="right!"; B)char s[10];s="right!";  

C)char s[10];*s="right!"; D)char *sp="right!";  

简答题(5×4+7=27分)

1.以下程序的功能是:输出a、b、c三个变量中的最小值.请填空。

#include<stido.h>

int    main(void)

{

int a,b,c,t1,t2;

scanf("%d%d%d",&a,&b,&c);

t1=a<b? _____;a:b 

t2=c<t1? ____; c:t1

printf("%d\n",t2);

}

2.以下程序的输出结果是____. 54321

#include  <stdio.h>

int    main(void)

{

int    n=12345, d;

while(n!=0){

d=n%10;

printf("%d",d);

n/=10;

}

}

3.已有定义如下:

struct node

{

    int data;

    struct node *next;

} *p;

以下语句调用malloc 函数,使指针p指向一个具有struct node类型的动态存储空

间。

p = (struct node *)malloc(_________________); sizeof(*p)

4.表达式(int)((double)5/2+2.5)的值是:____________ 5

5.写出以下两段程序的执行结果。如果程序无法编译,请指出出错部分并写明原因;如果程

序陷入死循环,请回答“死循环”。  如果执行结果出现内存错误,请指出出错部分并写明原

因。

第一个:

int    main(void)

{

  char s[ ]="man";

    int i;

    for(i=0;s[ i ];i++)

      printf("\n%c%c%c%c",s[ i ], *(s+i), *(i+s), i[s]);

} m m m m

a a a a

n n n n

第二个 :  

int    main(void)

{

char *cptr,c;

void *vptr,v;

c=10;  v=0;

cptr=&c; vptr=&v;

    printf("%c%v", c, v);

}

内存错误

没有void *指针

6、Test函数的运行结果如何?

Void GetMemory(char  **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

没有free函数,会造成内存泄漏

编程题(30分)

1、打印出所有的“水仙花”数。所谓“水仙花”数是指一个3位数,其各个位数字立方和等于该数本身。

for(i=100;i<=999;i++)

{

a=i/100; // 百位

b=i/10%10; // 十位

c=i%10; // 个位

If(a*a*a+b*b*b+c*c*c==i)

{

printf(%d\n,i);

}

 

本文章只做参考,请自行调试或运行代码

作者:徐子宸

班级:嵌入式22101班

培训机构:西安华清远见

未完待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值