函数指针刷题记录

发布于:2022-12-07 ⋅ 阅读:(137) ⋅ 点赞:(0)

函数指针


1. 下面哪个是函数指针

A.int* fun(int a, int b);//函数声明
B.int(*)fun(int a, int b);//等价于A,()无意义
C.int (*fun)(int a, int b);//函数指针
D.(int *)fun(int a, int n);//同A

定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?下面哪个是正确的?

A.int (*(*F)(int, int))(int)//正确
B.int //函数指针 :(*F)(int, int)
C.int (*(*F)(int, int))
D.*(*F)(int, int)(int)
    
   // 简化代码:
typedef int (*pf_t)(int);
==>pf_t (*p)(int);

在游戏设计中,经常会根据不同的游戏状态调用不同的函数,我们可以通过函数指针来实现这一功能,下面哪个是:

一个参数为int *,返回值为int的函数指针( )

A.int (*fun)(int)
B.int (*fun)(int *)//
C.int* fun(int *)
D.int* (*fun)(int *)

声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是( )

//数组指针,指向的数组10个元素,每个元素是函数指针
int (*p)(int*)
A.(int *p[10])(int*)
B.int [10]*p(int *)
C.int (*  (*p)[10]   )(int *)
          //指针
D.int ((int *)[10])*p

设有以下函数void fun(int n,char *s){……},则下面对函数指针的定义和赋值均是正确的是:( )

A.void (*pf)(intchar); pf=&fun;
B.void (*pf)(int n,char *s); pf=fun;//函数名就是函数地址
C.void *pf(); *pf=fun;
D.void *pf(); pf=fun;

2. 空心正方形图案

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“”组成的“空心”正方形,每个“”后面有一个空格。

image-20220926111351873

实心版本

int main()
{
	int n = 0;
	while (scanf("%d", &n) == 1)
	{
		int i = 0;
		int j = 0;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n; j++)
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

空心版本

int main()
{
	int n = 0;
	while (scanf("%d", &n) == 1)
	{
		int i = 0;
		int j = 0;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n; j++)
			{
				if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
					printf("* ");
				else
					printf("  ");
			}
			printf("\n");
		}
	}
	return 0;
}

3. 有序序列插入一个数

描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

image-20220926111707218

对数组只遍历一次

int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[n + 1];//C99变长数组
    int i = 0;
    //输入n个数字 
    for (i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    int k = 0;
    scanf("%d", &k);
    //插入
    int j = n - 1;
    for (; j >= 0; j--)
    {
        if (arr[j] > k)
            arr[j + 1] = arr[j];
        else
            break;
    }
    arr[j + 1] = k;
    for (j = 0; j < n + 1; j++)
        printf("%d ", arr[j]);
    return 0;
}
本文含有隐藏内容,请 开通VIP 后查看