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;
}
注:此题看懂题目就可以做出来了。要看懂。