C语言练习题(带答案)-绝对经典题目不看后悔
C经典编程100题~附答案

C语言经典程序100题(完整版)【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:#include "stdio.h"#include "conio.h"main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}getch();}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:#include "stdio.h"#include "conio.h"main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0. 1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);getch();}==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
c语言的考试题目答案及解析

c语言的考试题目答案及解析1. 题目:以下哪个选项是C语言中的合法变量名?A. 2variableB. variable2C. _variableD. variable-2答案:C解析:在C语言中,变量名必须以字母或下划线开头,不能以数字开头。
因此,选项A和D是不合法的。
选项B虽然以字母开头,但是数字紧跟字母,没有下划线或空格分隔,所以也是不合法的。
选项C 以下划线开头,符合变量命名规则。
2. 题目:以下哪个选项是C语言中正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!"D. "Hello, World!"答案:A解析:在C语言中,字符串字面量应该用双引号括起来。
选项B使用了单引号,这是用于字符字面量的,而不是字符串。
选项C和D是重复的,并且由于格式问题,它们可能没有正确显示,但假设它们是正确的字符串字面量,那么答案应该是A,因为它是第一个出现的合法字符串字面量。
3. 题目:以下哪个选项是C语言中正确的函数声明?A. int function(int x) {}B. void function() {}C. int function(int x, int y) {}D. All of the above答案:D解析:在C语言中,函数声明可以包含参数列表,也可以没有参数。
选项A和C都包含了参数列表,并且参数类型是int,这是合法的。
选项B没有参数列表,并且指定了返回类型为void,这也是合法的。
因此,所有选项都是正确的函数声明。
4. 题目:以下哪个选项是C语言中正确的条件语句?A. if (x > 0) { ... }B. if x > 0 { ... }C. if (x > 0) { ... } else { ... }D. if (x > 0) { ... } elseif { ... }答案:C解析:在C语言中,条件语句必须使用if关键字,并且条件表达式需要用括号括起来。
c语言考试题及答案

c语言考试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言的描述中,错误的是:A. C语言是一种高级语言B. C语言可以直接被计算机执行C. C语言具有结构化的特点D. C语言具有跨平台的特性答案:B2. C语言中,用于定义一个整型变量的关键字是:A. intB. floatC. doubleD. char答案:A3. 在C语言中,以下哪个运算符用于取模运算?A. %B. /C. *D. -答案:A4. 下列关于数组的描述中,正确的是:A. 数组必须在程序开始时初始化B. 数组的元素可以是不同的数据类型C. 数组的索引从1开始D. 数组的声明必须指定数组的大小答案:D5. 在C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. functionD. define答案:B6. C语言中,用于表示逻辑“与”操作的运算符是:A. &&B. ||C. !D. &答案:A7. 下列哪个选项是C语言中合法的注释?A. // 这是一个注释B. /* 这是一个注释 */C. // 这是一个注释/* 这是一个注释 */D. /* 这是一个注释 */答案:A8. C语言中,用于定义一个空指针的值是:A. NULLB. 0C. falseD. none答案:A9. 下列关于指针的描述中,错误的是:A. 指针可以存储变量的地址B. 指针可以存储函数的地址C. 指针可以存储数组的索引D. 指针可以存储指针的地址答案:C10. 在C语言中,用于定义一个字符型指针的声明是:A. char *ptr;B. int *ptr;C. float *ptr;D. double *ptr;答案:A二、填空题(每题2分,共20分)1. 在C语言中,定义一个整型数组的语法是:______ int array[10];。
答案:int2. 如果一个变量的值是10,那么表达式sizeof(&var)的结果是:______。
C语言基础练习题(含问题详解)

目录第1-3章 C语言基础知识习题 (2)1 选择题 (2)2 填空题 (7)3 答案及部分解析 (9)第4章选择结构习题 (11)1 选择题 (11)2 填空题 (17)3 答案及部分解析 (24)第5章循环结构习题 (27)1 选择题 (27)2 填空题: (33)3 答案及部分解题分析 (40)第6章数组习题 (42)1. 单项选择题 (42)2. 填空题 (45)3. 判断题 (46)4. 程序填空题 (46)5. 阅读程序,分析程序的功能。
(50)第7章函数习题 (56)1. 单项选择题 (56)2. 填空题 (57)3. 判断题 (58)4. 程序填空题 (59)5. 写出下列程序运行结果 (60)第8章指针习题 (68)1 选择题 (68)2 填空题 (70)第1-3章 C语言基础知识习题1 选择题1. 以下不是C语言的特点的是()。
A、语言简洁紧凑B、能够编制出功能复杂的程序C、C语言可以直接对硬件操作D、C语言移植性好2. 下列字符序列中,不可用作C语言标识符的是()。
A.abc123 B.no.1 C._123_ D._ok3. 正确的C语言标识符是()。
A._buy_2 B.2_buy C.?_buy D.buy?4. 请选出可用作C语言用户标识符的一组标识符()。
A.void B.a3_b3 C.For D.2adefine _123 -abc DOWORD IF Case sizeof5. 下列符号中,不属于转义字符的是()。
A.\\ B.\0xAA C.\t D.\06. 不属于C语言关键字的是()。
A.int B.break C.while D.character7. 是C语言提供的合法关键字的是()。
A.Float B.signed C.integer D.Char8. 以下不能定义为用户标示符的是()。
A.scanf B.Void C._3com_ D.int9. 一个C程序是由()。
C语言练习题(带答案)-绝对经典题目不看后悔之欧阳家百创编

1单选题欧阳家百(2021.03.07)1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从 C开始执行。
A) 程序中第一条可执行语句 B) 程序中第一个函数C) 程序中的main函数 D) 包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main( )函数中定义C、C语言程序总是从main( )函数开始执行D、C语言程序中的main( )函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)。
A) C程序的工作过程是编辑、编译、连接、运行B) C语言不区分大小写。
C) C程序的三种基本结构是顺序、选择、循环D) C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.int t5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是( B)。
A)3ax B)x C)case D)-e2 E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A) %x B) a+b C) a123 D) 123选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print _3d db8 aBcB、I\am one_half start$it 3paiC、str_1 Cpp pow whileD、Pxq My->book line# His.age选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
c语言习题及详解答案

c语言习题及详解答案C语言是一种广泛使用的编程语言,以其结构化、可移植和高效性而著称。
以下是一些C语言的习题以及相应的详解答案。
# 习题1:求和问题编写一个C程序,输入两个整数,输出它们的和。
解答:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("这两个整数的和是:%d\n", sum);return 0;}```# 习题2:判断素数编写一个C程序,判断一个整数是否为素数。
解答:```c#include <stdio.h>#include <math.h>int isPrime(int n) {if (n <= 1) return 0;for (int i = 2; i <= sqrt(n); i++) {if (n % i == 0) return 0;}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d 是素数。
\n", num);} else {printf("%d 不是素数。
\n", num);}return 0;}```# 习题3:字符串反转编写一个C程序,输入一个字符串,然后输出它的反转。
解答:```c#include <stdio.h>#include <string.h>void reverseString(char str[]) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);reverseString(str);printf("反转后的字符串是:%s\n", str);return 0;}```# 习题4:数组排序编写一个C程序,输入一个整数数组,然后使用冒泡排序算法对其进行排序。
c语言试题及答案

c语言试题及答案C语言试题及答案一、选择题1. 在C语言中,以下哪个是正确的数据类型?A. 整数型B. 浮点型C. 字符型D. 所有选项答案:D2. 以下哪个是C语言中的逻辑运算符?A. &&B. ||C. !D. 所有选项答案:D3. 在C语言中,哪个关键字用于定义一个函数?A. intB. voidC. functionD. return答案:A二、填空题1. 在C语言中,一个基本的程序结构由_____、_____、_____三个部分组成。
答案:预处理指令;函数定义;语句2. 一个C语言程序总是从_____函数开始执行。
答案:main3. 在C语言中,若要实现循环,可以使用_____、_____、_____等循环结构。
答案:for;while;do-while三、简答题1. 简述C语言中数组的定义和使用。
答案:在C语言中,数组是一种数据结构,用于存储具有相同数据类型的元素集合。
数组定义的一般形式为:类型名数组名[常量表达式],其中类型名是数组元素的数据类型,数组名是数组的标识符,常量表达式是数组中元素的数量。
数组的使用包括初始化、访问和修改元素等。
2. 解释C语言中的指针及其作用。
答案:指针是C语言中一种特殊的变量,它存储了另一个变量的内存地址。
指针的主要作用是直接访问和操作内存地址,从而可以更灵活地处理数据。
指针的使用包括指针的声明、指针的初始化、指针的运算等。
四、编程题1. 编写一个C语言程序,实现求两个整数的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和是:%d\n", sum); return 0;}```2. 编写一个C语言程序,实现字符串的反转。
c语言经典编程试题12例(带答案)

int i,num=0;
float a[10],sum=0.0;
printf("请输入10个数\n");
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<10;i++)
if(i>=0)
{
num++;
sum+=a[i];
}
printf("10个数中非负数的个数为:%d\n",num);
void main()
{
char a[50];
char *p,*q;
printf("请输入一个字符串:");
gets(a);
for(p=a;*p!=0;)
if(*p=='a')
{
q=p;
while(*p)
{
*p=*(p+1);
p++;
}
p=q;
}
else
p++;
printf("%s\n",a);
}
12、一个皮球从100米的高度自由落下,每次落地后反弹回原来高度的一半,再落下,在反弹。求当它第10次落地时,共经过了多少米,第十次反弹多高?
printf("100之内偶数的和位: %d\n",sum);
}
7、求1*2*3+3*4*5+…99*100*101的值。
解题思路:
定义一个变量从1到101,再有标志变量j确定乘够3个数之后便重新开始下一次乘积。跳出循环后加上最后一次乘积。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1单选题1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从C开始执行。
A) 程序中第一条可执行语句B) 程序中第一个函数C) 程序中的main函数D) 包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main( )函数中定义C、C语言程序总是从main( )函数开始执行D、C语言程序中的main( )函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)。
A) C程序的工作过程是编辑、编译、连接、运行B) C语言不区分大小写。
C) C程序的三种基本结构是顺序、选择、循环D) C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.int t5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是(B)。
A)3ax B)x C)case D)-e2 E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A)%x B)a+b C)a123 D)123选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print _3d db8 aBcB、I\am one_half start$it 3paiC、str_1 Cpp pow whileD、Pxq My->book line# His.age选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
A、整型、实型、逻辑型B、整型、实型、逻辑型、字符型C、整型、字符型、逻辑型D、整型、实型、字符型10.在C语言程序中,表达式5%2的结果是C。
A)2.5 B)2 C)1 D)3详见教材P52~53.%为求余运算符,该运算符只能对整型数据进行运算。
且符号与被模数相同。
5%2=1;5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;/为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=211.如果int a=3,b=4;则条件表达式"a<b? a:b"的值是__A__。
A) 3 B) 4 C) 0 D) 1详见教材P97.表达式1?表达式2:表达式3先计算表达式1,若表达式1成立,则选择计算表达式2,并表达式2的值作为整个大表达式的值;若表达式1不成立,则选择计算表达式3,并将表达式3的值作为整个大表达式的值此题中的a<b相当于表达式1,a相当于表达式2,b相当于表达式3.a为3,b为4。
a<b表达式1成立,因此计算表达式2,并将表达式2的值即a中的值,并作为整个表达式的值,因此整个表达式的值为312.若int x=2,y=3,z=4 则表达式x<z?y:z的结果是( B).A)4 B)3 C)2 D)0 E)113.C语言中,关系表达式和逻辑表达式的值是(B)。
A) 0 B) 0或1 C) 1 D) ‘T’或’F’14. 下面( D)表达式的值为4.A) 11/3 B) 11.0/3C) (float)11/3 D) (int)(11.0/3+0.5)14~16题为同一类型详见教材P54~56.(1)相同数据类型的元素进行数学运算(+、-、*、/)得到结果还保持原数据类型。
(2)不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转换为高精度的数据类型。
选项A,11与3为两个整数,11/3结果的数据类型也应为整数,因此将3.666666的小数部分全部舍掉,仅保留整数,因此11/3=3.选项B,11.0为实数,3为整数,因此首先要统一数据类型,将整型数据3转换为3.0,转换后数据类型统一为实型数据,选项B变为11.0/3.0,结果的数据类型也应为实型数据,因此选项B 11.0 /3=3.666666选项C,先将整数11强制类型转换,转换为实型11.0,因此选项C变为11.0/3,其后计算过程、结果与选项B同选项D,首先计算11.0/3,其计算过程、结果与选项B同,得到 3.666666;再计算3.666666+0.5=4.166666,最后将4.166666强制类型转换为整型,即将其小数部分全部舍掉,结果为415.设整型变量a=2,则执行下列语句后,浮点型变量b的值不为0.5的是(B)A.b=1.0/aB.b=(float)(1/a)C.b=1/(float)aD.b=1/(a*1.0)16. 若“int n; float f=13.8;”,则执行“n=(int)f%3”后,n的值是(A)A.1B.4C.4.333333D.4.6“(int)f“表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为117. 以下对一维数组a的正确说明是:DA)char a(10);B) int a[];C)int k=5,a[k];D)char a[3]={‘a’,’b’,’c’};详见教材P143~144,一维数组的定义、初始化类型符数组名[常量表达式]类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;常量表达式是指数组的长度(数组中包含元素的个数),其值只能是整数,不可以是变量,而且从1开始计数。
选项A,常量表达式只能放在中括号[ ]中选项B,只有在对数组初始化(即赋值)的时候才可以省略数组的长度,B中并未对a进行初始化。
选项C,常量表达式不能为变量。
18.以下能对一维数组a进行初始化的语句是: ( C)A. int a[5]=(0,1,2,3,4,)B. int a(5)={}C. int a[3]={0,1,2}D. int a{5}={10*1}详见教材P145,一维数组的定义、初始化选项B,D,常量表达式只能放在中括号[ ]中选项A,数组可以看做是若干个相同数据类型元素的有序集合,因此以集合的形式对其初始化,使用{ }对其初始化,选项A用了().19.在C语言中对一维整型数组的正确定义为D。
A)int a(10); B)int n=10,a[n];C)int n;a[n]; D)#define N 10int a[N];20、已知:int a[10]; 则对a数组元素的正确引用是( D )。
A、a[10]B、a[3.5]C、a(5)D、a[0]详见教材P144,数组元素的引用数组名[下标]引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数int a[10]表示定义了一个包含10个整型数据的数组a,数组元素的逻辑地址下标范围为0~9,即a[0] 表示组中第1个元素; a[1] 表示组中第2个元素; a[2] 表示组中第3个元素; ......;a[9] 表示组中第10个元素.选项A,超过了数组a的逻辑地址下标范围;选项B,逻辑地址下标只能为整数选项C,逻辑地址下标只能放在[ ]中21.若有以下数组说明,则i=10;a[a[i]]元素数值是(C)。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};A.10B.9C.6D.5先算a[a[i]]内层的a[i],由于i=10,因此a[i]即a[10].a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9]a[9]对应下面数组中的元素为6. 因此a[9]即为622.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B)A. 2B. 3C. 4D.无确定值5 7 D) 36 9二维数组的一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有几个大括号,数组就有几行23.对二维数组的正确定义是(C)详见教材P149~152,二维数组的定义、初始化类型符数组名[常量表达式][常量表达式]二维数组可以看做是矩阵类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;第一个常量表达式是指数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。
一维数组初始化时可以省略数组长度二维数组初始化时可以省略行数,但不能省略列数选项A,B,都省略了列数选项D,不符合二维数组定义的一般形式,行、列常量表达式应该放在不同的[]中A.int a[ ] [ ]={1,2,3,4,5,6};B.int a[2] [ ]={1,2,3,4,5,6};C.int a[ ] [3]={1,2,3,4,5,6};D.int a[2,3]={1,2,3,4,5,6};24.已知int a[3][4];则对数组元素引用正确的是__C___A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1)详见教材P150,数组元素的引用数组名[下标] [下标]引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数第一个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。
本题图示详见P149图6.7因此a的行逻辑地址范围0~2;a的列逻辑地址范围0~3;选项A,列逻辑地址下标超过范围选项B,D,的引用形式不正确。
25.C语言中函数返回值的类型是由A决定的.A)函数定义时指定的类型B) return语句中的表达式类型C) 调用该函数时的实参的数据类型D) 形参的数据类型26. 在C语言中,函数的数据类型是指( A )A 函数返回值的数据类型 B. 函数形参的数据类型C 调用该函数时的实参的数据类型 D.任意指定的数据类型27. 在函数调用时,以下说法正确的是(B)A.函数调用后必须带回返回值B.实际参数和形式参数可以同名C.函数间的数据传递不可以使用全局变量D.主调函数和被调函数总是在同一个文件里28. 在C语言中,表示静态存储类别的关键字是: (C)A) auto B) register C) static D) extern29.未指定存储类别的变量,其隐含的存储类别为(A)。
A)auto B)static C)extern D)register30. 若有以下说明语句:struct student{ int num;char name[ ];float score;}stu;则下面的叙述不正确的是: ( D )A. struct是结构体类型的关键字B. struct student 是用户定义的结构体类型C. num, score都是结构体成员名D. stu是用户定义的结构体类型名31.若有以下说明语句:struct date{ int year;int month;int day;}brithday;则下面的叙述不正确的是__C___.A) struct是声明结构体类型时用的关键字B) struct date 是用户定义的结构体类型名C) brithday是用户定义的结构体类型名D) year,day 都是结构体成员名32. 以下对结构变量stul中成员age的非法引用是Bstruct student{ int age;int num;}stu1,*p;p=&stu1;A) stu1.age B) student.age C) p->age D) (*p).age33.设有如下定义:struck sk{ int a;float b;}data;int *p;若要使P指向data中的a域,正确的赋值语句是CA) p=&a; B) p=data.a; C) p=&data.a; D)*p=data.a;34.设有以下说明语句:typedef struct stu{ int a;float b;} stutype;则下面叙述中错误的是(D)。