c笔试题

以下程序的输出是()。 

struct st { int x; int *y; } *p;
int dt[4] = { 10,20,30,40 };
struct st aa[4] = { 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0] };
void main()
{
    p = aa;
    printf("%d\n", ++(p->x));
}

A、10

B、11

C、51

D、60

答案:C

分析:aa是大小为4的结构体数组,p是一指向该结构体的指针,将数组名aa赋给

p,p将指向数组aa的第一个元素aa[0],p->x其实就是利用指针p来引用aa[0]的成员x,

其值为50,加1后输出的结果为51.故正确答案是C


 以下程序的输出是多少?

main() {
    int a[3] = { 0,1,2 };
    int *p;
    int *q;
    p = a;
    q = &a[2];
    printf("%d", a[q-p]);
    return 0;
}

A、0

B、1

C、2

D、未知

答案:C

分析: 这里q-p的实际运算是:(q的地址值-p的地址值)/sizeof(int),所以为2。


 若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是()

1.p=s; 
2.p=k;
3.p=s[0]; 
4.k=s;

A、124

B、1234

C、12

D、234

答案:A

分析:这道题主要就考指针类型是否一样。
char s[3][10]   s 是数组指针,类型为char (*)[3],所指向的每个数组长度为10;
char (*k)[3]     很明显k就是一个数组指针,类型也为 char (*)[3],但是所指向的每个数组的长度未知;
char *p           类型为char * 指针。
因此,在没有强制类型转换的情况下,只有类型完全相同的指针才能相互复制。
答案:1,2,4

 用 C 语言编写的源程序须经过编译连接后,生成扩展名为 .exe 的可执行文件,才能运行。

A、正确

B、错误

答案:B

分析:只有在windows环境下c源程序编译后才会生成.exe的可执行文件,Linux下生成的不是EXE文件。


 给定一个数组int arr[] = {3,8,3,9,9,7,7},筛选出其中没有重复的一个数。

方法一、先定义一个动态数组将重复的数据放入动态数组中,然后将原数组与动态数组进行比较,最后筛选出没有重复的数字。

 

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int arr[] = { 3,8,3,9,9,7,7 };//给定的数组
	int	len = sizeof(arr) / sizeof(arr[0]);//得到数组长度
	int value_arr[sizeof(arr) / sizeof(arr[0])];//放置重复数据的数组
	//将重复结果放在数组中
	int index = 0;
	for (int i = 0; i < len; i++)
	{
		for (int j = i + 1; j < len; j++)
		{
			bool flag = false;
			for (int z = 0; z < len; z++)
			{
				if (arr[i] == value_arr[z]) {
					flag = true;
					break;
				}
			}
			if (arr[i] == arr[j] && !flag)
			{
				value_arr[index++] = arr[i];
				break;
			}
		}
	}
	//筛选没有重复的数据
	for (int i = 0; i < len; i++)
	{
		bool flag = false;
		for (int j = 0; j < len; j++) {
			if (arr[i] == value_arr[j])
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			printf("%d\n", arr[i]);
		}
	}
	system("PAUSE");
	return 0;
}

  

方法二、将原数组进行排序,若有重复数据数据则从重复数据之后进行遍历。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int arr[] = { 3,8,3,9,9,7,7 };//给定的数组
	int	len = sizeof(arr) / sizeof(arr[0]);//得到数组长度
	//先给数组进行排序
	for (int i = 0; i < len; i++)
	{
		for (int j = i + 1; j < len; j++)
		{
			//升序
			if (arr[i] > arr[j])
			{
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	//筛选没有重复的数据
	for (int i = 0; i < len; i++)
	{
		if (i != 0 && i != len - 1 && len > 1) {
			if (arr[i] != arr[i - 1] && arr[i] != arr[i + 1]) {
				printf("%d\n", arr[i]);
			}
		}
		else if (len == 1)
		{
			printf("%d\n", arr[0]);
		}
		else
		{
			if (i == 0 && arr[0] != arr[1]) {
				printf("%d\n", arr[0]);
			}
			if (i == len - 1 && arr[len - 2] != arr[len - 1]) {
				printf("%d\n", arr[len - 1]);
			}
		}
	}
	system("PAUSE");
	return 0;
}

  


 

 

 

 

 

 

 

 

posted @ 2019-11-05 21:21  豌豆果果  阅读(310)  评论(0编辑  收藏  举报