错题集

1设有以下结构体类型说明和变量定义,则变量a在内存中所占的字节数是 。(VC环境中)
struct stud
{char num[6];
int s[4];
double ave;
}a;

标准答案:
32
我的答案
24
这个主要考的是结构体所占内存的相关内容
注:排列时要以最大字节数的类型为基准,来排列
不够的就补位。
此题最大字节数是8所以以8为基准第一排6+2
第二排8
第三排8
第四排8
所以一共占字节4*8=32.所以答案是32字节。

对于两个类型相同的指针变量,不能进行( )运算?

A: +
B: -
C: =
D: ==

标准答案:A 您的答案:D
注两个指针变量不能相加。

在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。

A: 地址传递
B: 单向值传递
C: 由实参传给形参,再由形参传回实参
D: 传递方式由用户指定

标准答案:B 您的答案:D .
形参之间的数据传递方式是单向值传递。
4.
若fp是指向某文件的指针,且已经读到文件的末尾,则函数feof(fp)的返回值是( )

A: EOF
B: NULL
C: 0
D: 非零值

标准答案:D 您的答案:A
注:feof函数可以检测文件尾 标志是否已经背读过。如果已经被读出,则表示文件已经结束,此时feof函数值为真(以1表示)。否则feof函数值为假(以0表示)。
5.
以下关于return语句的叙述中正确的是( )

A: 一个自定义函数中必须有一条return语句
B: 一个自定义函数中可以根据不同情况设置多条return语句
C: 定义成viod类型的函数中可以有带返回值的return语句
D: 没有return语句的自定义函数在执行结束时不能返回到调用处

标准答案:B 您的答案:C .
注:void函数类型不用返回值,所以就不用return语句;
6.
已知 int x=10, y=20, z=30; 以下语句执行后x, y, z的值是( )。
if(x>y)
z=x;x=y;y=z;

A: x=10,y=20,z=30 
B: x=20,y=30,z=30
C: x=20,y=30,z=10 
D: x=20,y=30,z=20

标准答案:B 您的答案:A .
注:注意前提条件。不能看错。不能遗漏。有判断语句if(x>y)先判断在执行;

若有以下定义,且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];

标准答案:B 您的答案:D .
注:p只是一个普通的指针(它可以指向一个数组,即可当成是数组的指针),而b却是一个指针的数组(注意是指针的数组,而不是数组的指针,故是一个数组),所以它肯定会出错了。
8

语句int(*prt)();的含义是____________。

A: prt是一个指向一维数组的指针变量
B: prt是指向int型数据的指针变量
C: prt是指向函数的指针,该函数返回一个int型数据
D: prt是一个函数名,该函数的返回值是指向int型数据的指针

标准答案:C 您的答案:D
注:
1、int§[3];------ptr为指向含3个元素的一维整形数组的指针变量(是指针)
2、int p[3];-------定义指针数组p,该数组由3个指向整型数据的指针元素组成(是数组)
3、int()[3];--------实际上可以看作是一种数据类型。也就是第一个(int§[3])中定义的p的数据类型
其实你要看他到底是什么,就是要看他最先和谁结合。 比如1中p先与结合,那就说明p本质是一个指针;而2中p先与后面的[3]结合,说明他本质是一个数组。

若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;

A: 声明变量p,其中*表示p是一个指针变量
B: 变量p经初始化,获得变量a的地址
C: 变量p只可以指向一个整形变量
D: 变量p的值为100

标准答案:D 您的答案:B
注:p是一个指针,他的值不是100,但是他指向整型变量a的地址,又因为a的地址里面存的是100所以*p的值为100,而变量p的值不为100.
10.

下面判断正确的是____________。

A: char *a=“china”;等价于char *a; a=“china”;
B: char str[10]={“china”};等价于char str[10];str[]={“china”};
C: char *s=”china”;等价于char *s; *s=”china”;
D: char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;

标准答案:A 您的答案:C
注:
在C选项中这个s=“china”,意思是把这个s=指向这个字符串首地址的值c;与之前的s="china"不同;
所以C选项错误;A选项正确;

11.

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

A: char s[6]={“ABCDE”};
B: char s[5]={‘A’,'B’,'C’,'D’,'E’};
C: char *s;s=”ABCDE”;
D: char *s; scanf(“%s”,s);

标准答案:B 您的答案:C
注:在选项B中在字符最后应该会有一个’\0’所以题目给的数组小了,所以此操作不正确;所以选B;

若有说明:char language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};
则表达式
language[1]>*language[3]比较的是______________。

A: 字符F和字符P
B: 字符串BASIC和字符串JAVA
C: 字符B和字符J
D: 字符串FORTRAN和字符串PASCAL

标准答案:C 您的答案:B
注:这个是字符数组只会取一个字符所以language[1]是B language[3]是J;
13.

有以下定义和语句,则对a数组元素地址的正确引用为________________。
int a[2][3], (*p)[3];
p=a;

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

标准答案:C 您的答案:B
注:选项C中p[1]指向了数组a的第二行,p[1]+1则指向了第二行的第二个数据元素,其他几个选项都不正确。
14.

若int (*p)[5];,其中,p是_______。

A: 5个指向整型变量的指针
B: 指向5个整型变量的函数指针
C: 一个指向具有5个整型元素的一维数组的指针
D: 具有5个指针元素的一维指针数组,每个元素都只能指向整型量

标准答案:C 您的答案:D
*注:像int (p)[5]这样定义的是数组指针,是可以看成五个整型元素的一维数组的指针。
15.

以下正确的定义语句和赋值语句是_________。

A: int b[3][5],(*p)[3],(*q)[5];p=b;q=b;
B: float b[3][5],*p[3];p[0]=b[0];p[2]=*b+4;
C: double b[3][5],s[5][3],*q;q=b;s=q;
D: int b[10],*q;char *s;q=b;s=b;

标准答案:B 您的答案:A
注:不同类型的指针和地址不能互相赋值;
16.

已有函数max(a,b),为了使函数指针变量p指向函数max,则下面选项中赋值方法正确的是( )。

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

标准答案:A 您的答案:D
注:指针是指向一个地址,所以要指向一个地址的话就直接把这个地址赋给这个指针,这个指针就可以直接指向这个函数。
17.

若有说明:int i, j=2,*p=&i;, 则能完成i=j赋值功能的语句是( )

A: i=*p
B: p=&j
C: i=&j
D: i=**p

标准答案:B 您的答案:A
注:把j地址里面的值赋给i,而p是指向i地址中的值,相当于i.&j就相当于j里面的值所以此题的答案选B。
18.

若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。

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

标准答案:B 您的答案:C
注:B选项搞出来是元素1的地址,不是对a数组元素的正确引用;所以选b选项;

指针、数组名、函数名都是地址。
标准答案:Y 您的答案:N
这些名都是地址
20.

语句*–p;执行之后p指向的内存单元被改变。
标准答案:N 您的答案:Y
内存单元是不会改变的.
21.
*后跟指针名,表示该指针变量所指针地址的_____。
标准答案:
值&!@内容

您的答案:
数值

是值
22.

在C程序中,指针变量能够赋 地址 值或 ___________ 值。
标准答案:
NULL&!@空

您的答案:
空值

是NULL\空
23.

若两个指针变量指向同一个数组的不同元素,则可以进行减法运算和____运算。
标准答案:
赋值&!@关系

您的答案:
加法
指针变量不可以相加只可以相减和赋值。
24.

所有的函数调用前都必须进行函数原型说明。
标准答案:N 您的答案:Y
注:被调用函数定义的位置在调用函数之前
.主函数 main()这些函数可以不用再声明;

25.

若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是( )。

A: “ab+”
B: “a”
C: “ab”
D: “a+”

标准答案:B 您的答案:D
二进制文本后面都有‘b’; r是(只读),w是只写,a是追加这些都是文本文件,他们后面加一个b是二进制文件,r+读写,w+读写,a+是读写,一样是文本文件里面的,二进制文本的是在后面加一个b在+号之间。

学校全体员工分为教师和行政人员两类。教师的数据包括:编号,姓名,职业(t),职称(教授professor,副教授associate professor,讲师lecturer等);行政人员的数据包括:编号,姓名,职业(w),部门号(100,200,300等)。要求输入若干人员的数据并能输出他们的资料,同时统计教师(tcount)和行政人员(wcount)的数量。使用动态内存分配函数实现。

输入格式:
输入第一行给出正整数n,随后给出n个员工的信息。

输出格式:
输出指定数量的员工信息,并在最后一行输出教师和行政人员的数量。

输入样例:
5
10000 jack t professor
20000 rose t associate professor
30000 mike w 100
40000 robin w 200
50000 lina t lecturer
输出样例:
10000 jack t professor
20000 rose t associate professor
30000 mike w 100
40000 robin w 200
50000 lina t lecturer
tcount = 3, wcount = 2
此题答案

#include<stdio.h>

struct str
{
	int num;
	char name[20];
	char p;
	union
	{
		char bumenhao[10];
		char zhicheng[50];
	}a;
}t[100]; \\定义结构体。
int main()
{
	int n,i,tcount=0,wcount=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{	scanf("%d %s %c",&t[i].num,t[i].name,&t[i].p)\\输入
		if(t[i].p=='w')
			gets(t[i].a.bumenhao);\\如果t[i]是w则是得到部门号
		else
			gets(t[i].a.zhicheng);\\如果t[i]是t则是得到职称
	}
	for(i=0;i<n;i++)
	{
		if(t[i].p=='w')
		{
	printf("%d %s %c%s\n",t[i].num,t[i].name,t[i].p,t[i].a.bumenhao);
		wcount++;\\统计行政人员数量
		}
		if(t[i].p=='t')
		{printf("%d %s %c%s\n",t[i].num,t[i].name,t[i].p,t[i].a.zhicheng);
		tcount++;\\统计教师数量
		}
	}
	printf("tcount = %d, wcount = %d\n",tcount,wcount);
	return 0;
}

1)记得在C语言中‘%’这个在运算中只求的是取余符号,例如 12%8=1…4 所以这个值就是4
还有一个就是‘%=’,例如 a%=3,就是a=a%3;记得!!!
2)int x=20; printf("%d\n",~x); 这个输出是-21 其中~的意思是二进制取反;20的二进制是
00010100取反之后为11101011=-21.记得!!!
3)在进制表达式中如果是0开头就是8进制 如果是0x开头就是16进制,例如x=023;
这个就是表示x 表示的是八进制的23 其实是表示是十进制里面的19;16进制以此类推
记得!!!

28.
**偶数提取
题目描述:
根据输入的整数,提取其中的偶数数字,构成新的数,并输出。
输入:
输入有多个用例,第一行为用例个数n,接下来每个用例占一行,即输入的整数。
输出:
对每一个用例,用一行输出对应整数上提取的偶数数字构成的新的整数,如果没有,则输出0
样例输入:
5
58
24789
26587
79
80
样例输出:
8
248
268
0
80
此题的答案

#include<stdio.h>
int main()
{
	char a[10];
	char b[10];
	int i,j,k,n,m=0;
	scanf("%d",&n);
	getchar();\\接收回车;
	for(i=0;i<n;i++)
	{
		m=0;\\判断他偶数的个数;
		gets(a);\\逐个输入字符;
		for(j=0;a[j]!='\0';++j){
			if((a[j]-'0')%2==0){\\判断是否是偶数;
				printf("%c",a[j]);\\是偶数则输出此数。
				m++;
			}
		}
		if(m==0)\\如果没有偶数就输出0;
		printf("0");
		printf("\n");
	}
	return 0;
}

29·.

输入整数的符号判断
对于输入的任意整数k,判断其符号。如果为正数输出“+”,如果为负数输出“-”,如果为0输出“0”。共有n个测试用例。请根据以上要求完成代码,并提交整个程序。
#include
using namespace std;
int main()
{
int i,n,k;
cin>>n;
for(i=0; _____________ ; i++)
{
cin>>k;
if( ___________ )
cout<<"+";
else if( _________ )
cout<<“0”;
else
cout<<"-";
cout<<endl;
}
return 0;

}
样例输入:
3
-5
2
0
样例输出:

0
此题答案为

#include<stdio.h>
int main()
{
	int n,i,k;
	scanf("%d",&n);
	for(i+0;i<n;i++)
	{
		scanf("%d",&k);
		if(k>0)\\判断他大于0就输出+号
		{
			printf("+\n");
		}
		else if(k<0)\\判断他小于0就输出-号
		{
			printf("-\n");
		}
		else\\其他就输出0
		{
			printf("0");
		}
	}

return 0;
}

注:此题看懂题目就可以做出来了。要看懂。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值