C语言作业8
2018年9月计算机二级C语言考试章节习题及答案(8)

2018年9月计算机二级C语言考试章节习题及答案(8) 第2章 C程序设计的初步知识2.5 算术表达式1 [单选题] 以下不能正确计算代数式值的C语言表达式是( )。
A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)参考答案:A2 [单选题] 若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是( )。
A.1B.0C.2D.不知道a的值,不能确定参考答案:A参考解析:逻辑或”||”要求只要两边的运算对象有一个非零,结果就为真。
虽然不知道a的值,但是若a为l,则左边运算对象为1;若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。
3 [单选题] 设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )A.x=x*100+0.5/100.0;B.x=(x*100+0.5)/100.0;C.x=(int)(x*100+0.5)/100.0;D.x=(x/100+0.5)*100.0;4 [单选题] 表达式3.6-5/2+1.2+5%2的值是( )。
A.4.3B.4.8C.3.3D.3.8参考答案:D 。
参考解析:此题考核的是算术运算符的运算规则,算术运算符的结合方向为“自左至右”,先按运算符的优先级别高低次序执行,同时在C中两个整数相除或求余数其结果依旧为整数。
计算后结果为3.8。
5 [单选题] 已知字母A的ASCIl代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A.kk>='A'&&kk<='Z'B.!(kk>='A'||kk<='Z')C.(kk+32)>='a'&&(kk+32)<='z'D.isalpha(kk)&&(kk<91)参考答案:B6 [单选题] 当变量 c 的值不为 2、4、6时,值也为“真”的表达式是A.(c==2)||(c==4)||(c==6)B.(c>=2&&c<=6)||(c!=3)||(c!=5)C.(c>=2&&c<=6)&&!(c%2)D.(c>=2&&c<=6)&&(c%2!=1)参考答案:B参考解析:条件语句if(a>B.不成立,所以语句a=b;不执行,语句c=a;执行后, c=3,此时条件语句if(C!=A.不成立,所以语句c=b;不执行。
C语言程序设计 项目八

2. fread()函数、fwrite()函数 函数、 函数 函数
将一组数据,如一个数组元素,一个结构变量的值等一次性读写,其输入输 出函数是二进制形式输入输出的函数,在输入输出中不必进行数据的转换,输入 输出速度相对较快。 读写数据块函数调用的一般形式为: 读写数据块函数调用的一般形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 说明: buffer:对于fread()来说,指的是 读入数据的存放地址; 对于fwrite来说,是要输出数 据的地址。 size读写数据时,每笔数据的大小 count: 读写数据的笔数 fp: 文件指针
for(i=0;i<10;i++,pp++) fscanf(fp,"%s%d%d%d%f",pp->name,&pp>math,&pp->englist,&pp->chinese,&pp->avg);
fread(yy,sizeof(struct stu),10,fp);
【例8-2】从键盘中输入10个学生的姓名及数学、英语、语文三门课的成绩,计算每个同 学的平均分,然后将此10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中。 printf("请输入十个学生的数据\n"); 程序如下: /*输入十个同学的姓名、成绩并计算每个 输入十个同学的姓名、 输入十个同学的姓名 分析:编写此题的思路是: #include "stdio.h" 同学的平均分*/ 同学的平均分 #include "process.h" (1)需要定义一个结构体数组,用于存放10个同学的姓名、三门课的成绩及平均分; for(i=0;i<10;i++,pp++) /*定义结构体 定义结构体*/ 定义结构体 (2)在键盘上读入10个同学的姓名、三门课的成绩,然后计算每个同学的平均分; 打开件aa.txt {scanf("%s%d%d%d",pp->name,&ppstruct stu 输入的数据如下: (3)将10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中; >math,&pp->english,&pp->chinese); {char name[10]; pp->avg=(pp->math+pp->englist+ppint math,english,chinese; >chinese)/3.0;} float avg;} pp=student; main() /*将十个同学的姓名、三门课成绩、平均 将十个同学的姓名、三门课成绩、 将十个同学的姓名 {stu student[10],*pp; 分写入到文件aa.txt中*/ 分写入到文件 中 FILE *fp; for(i=0;i<10;i++,pp++) int i; fprintf(fp,"%s %d %d %d %.1f\n",pppp=student; >name,pp->math,pp->english,pp/*以写入的形式打开文件 以写入的形式打开文件aa.txt*/ 以写入的形式打开文件 >chinese,pp->avg); if((fp=fopen("aa.txt","w"))==NULL) fclose(fp); //关闭文件 {printf("打不开文件\n"); } exit(1); }
c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。
A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。
A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。
A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C 语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。
A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。
A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
C语言程序设计-第8章 练习题

一、单项选择题题目1标准输出设备显示器的文件流标识符是()。
a. stdinb. stdoutc. stderrd. stdio题目2表示文件结束符的符号常量EOF的值为()。
a. 0b. -1c. 1d. 127题目3假定一个磁盘数据文件占用n个字节的存储空间,则按字节进行编址的范围是()。
a. 1˜(n-1)b. 0˜(n-1)c. 0˜nd. 1˜n题目4在C语言中,为只写操作打开一个文本文件的方式为()。
b. "w"c. "r"d. "a"题目5在C语言中,文本文件的打开方式共有()。
a. 6b. 9c. 12d. 3题目6在C语言中,为读和写操作打开一个二进制文件,若文件不存在则自动建立空文件的打开方式为()。
a. "ab+"b. "w+"c. "rb+"d. "wb+"题目7从一个文本文件中读取以换行符结束的一个字符串的系统函数为()。
a. fgets()b. fputc()d. fputs()题目8向一个文本文件中写入一个字符的系统函数为()。
a. fputs()b. fputc()c. fgetc()d. fgets()题目9向一个二进制文件中写入数据的系统函数为()。
a. fputc()b. fwrite()c. fread()d. fputs()题目10从一个二进制文件中读取数据的系统函数为fread(),它的参数有()。
a. 2个b. 4个c. 3个d. 5个二、判断题题目11一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。
对错题目12当向字符文件输出一个换行符时,实际将输出的是回车符或换行符。
对错题目13C语言系统中提供一个用来描述文件属性的类型标识符为FILE。
对错题目14在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。
C语言程序设计及实验指导练习及习题参考答案(8--10)

C语言程序设计及实验指导练习及习题参考答案(8--10) 8练习参考答案1、练习8-1.如果有定义:intm,n=5,某p=&m;与m=n等价的语句是BA.m=某p;B.某p=某&n;C.m=&n;D.m=某某p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数um_diff(floatop1,floatop2,float某pum,float某pdiff),其中op1和op2是输入的两个数,某pum和某pdiff是计算得出的和与差。
解答:#includeintmain(void){floatop1,op2,um,diff;voidum_diff(floatop1,floatop2,float某pum,float某pdiff);printf(“inputop1andop2:“);canf(“%f%f”,&op1,&op2);um_d iff(op1,op2,&um,&diff);printf(“%f+%f=%f;%f-%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}voidum_diff(floatop1,floatop2,float某pum,float某pdiff){某pum=op1+op2;某pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:不能。
因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。
8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。
请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。
解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。
计算机c语言期末考试卷八

后,变量c 的数据类型是( D ).A .intB .charC .float D. double10.设n=10,i=4,则赋值运算“n%=i+1”执行后的n 值是( A ). A .0 B.1 C .2 D.3二.写程序运行结果(每题6,共18分)1.#include<stdio.h> main( ) {int s=0,i; i=1;while (i<=100) {s=s+i; i++;if (s>20) Break; }p rintf(“%d \n”,s); }运行结果: 212.#include<stdio.h> main(){int i=5,a=0; switch(i){case 1:a+=1;case 2:a+=2;break; case 3:a+=3; default:a+=4; }printf("%d\n",a);}运行结果:43.#include<stdio.h>main(){int i;i=1;while(i<=10){if(i%4==0)break;printf(“%d\n”,i);i++;}}运行结果:123三.程序填空(每题8分,共16分)1.我国1994年的人口是12亿,假设当时没有计划生育,按5%的年增长,那一年达到20亿?#include<stdio.h>main( ){int year;float s;year=1994;s=12;while (__s<20__) {year++;__s=s*1.05__;}printf(“year=%d\n”,year);}2.下面程序的功能是输出所有的水仙花数,填充程序空白处. #include<stdio.h>main(){int m,x,y,z;for(m=100;m<=999;m++){x=m/100;y=___m/10%10__;z=__m%10__;if(m==x*x*x+y*y*y+z*z*z)printf("%d\n",m);}}四.流程图(每题10分,共10分)1根据流程图写出对应的程序.#include<stdio.h> main() {int s,i; s=0; i=1; do{s=s+i; i++;} while(i<=100); printf(“s=%d\n ”,s);}五.编程题(每题12分,共36分)1.编写程序按公式c=2(a+b)求平行四边形周长. #include<stdio.h> main() {float a,b,c; printf(“a,b=”); scanf(“%f%f ”,&a,&b); c=2*(a+b);printf(“c=%f\n ”,c); }2.编写程序输入一个分数x(0--100)按下列情况输出其属于那个级别. x ≥80 优秀 60≤x<80 中等 x<60 不及格 #include<stdio.h> main() {float x; printf(“x=”);scanf(“%f ”,&x); if(x>=80)printf(“优秀”);else if(x>=60)printf(“中等”);else printf(“不及格”);}3.某班50人,编写程序输入该班级某门课程的成绩存入数组a,求该班级课程平均分.#include<stdio.h>main(){float a[50],sum,aver;int i;for(i=0;i<50;i++)scanf(“%f”,&a[i]);sum=0;for(i=0;i<50;i++)sum=sum+a[i];aver=sum/50;printf(“平均=%5.2f\n”,aver);}。
专升本C语言历年考试题及答案8
专升本C 语言历年考试题及答案江西财经大学2005年专升本选拔考试《C 语言程序设计》试卷(考试时间120分钟,总分100分)一、用C语言描述下列命题(共16分,每小题2分)1、a 、b 和c 均为整型变量,a 和b 中有一个大于c 。
2、数学公式:aac b 242-+-b 的C语言表达式(注:sqrt( )为开方函数)。
3、写出100内的自然数x ,能被3或7整除的表达式。
4、写出判断字符变量ch 是阿拉伯数字字符的表达式。
5、写出满足x<60或90≤x ≤100的C 语言表达式。
6、写出平面上的点(x,y)落在单位圆内的表达式。
7、数组p[10]的各元素用于保存指向char 型的指针,写出该数组的定义。
8、有名为max 的函数,其功能是对两个int 型参数x 、y 进行计算,返回其中的较大者,写出该函数的说明部分。
二、根据要求画出流程图或N-S图(共10分,每小题5分)1、用流程图或N-S 图表示以下算法。
输入x 的值,按下列函数计算y 的值,并输出y 的值。
00101<=>⎪⎩⎪⎨⎧-=x x x y 当当当 2、画出打印以下图案的算法流程图或N-S 图。
&& && & && & & &三、程序阅读题(共20分,每小题4分)1、# include <stdio.h>void main( ) {int i,sum=0;for(i=1;i<=30;i++)if(i%3!=0) continue;else sum=sum+i;printf(“sum=%d\n”,sum);}请叙述上面程序的功能,并写出程序的运行结果。
2、void main( ) {int a,b,x=1,y=1;scanf("%d%d",&a,&b);if (a>0) x=x+y;if (a<b) x=2*y;else if (a==b) y=5;else y=x+y;printf("x=%d,y=%d\n",x,y);}假设输入为: 2 -3<CR>, 则程序运行后的输出结果为: 3、void main() {int a[3][3]={2,4,6,8,10,12,14,16,18};int sum=0, i, j;for ( i=0; i<3; i++)for ( j=0; j<3; j++ )if (i==j) sum+=a[i][j];printf(“sum=%d\n”,sum) ;}请叙述上面程序的功能,并写出程序的运行结果。
《C语言程序设计(何钦铭颜晖主编)》习题8答案
P173习题8 第一题#include<stdio.h>int main(void){char ch;int a[10];int i,j,m;printf("请输入10个整数:\n");for(i=0;i<10;i++){printf("请输入%d第个数:",i+1);scanf("%d",&a[i]);}printf("请输入A或D:");scanf(" %c",&ch);if(ch=='A'){for(i=0;i<9;i++){for(j=i+1;j<10;j++){if(a[i]>a[j]){m=a[i];a[i]=a[j];a[j]=m;}}}}else if(ch=='D'){for(i=0;i<9;i++){for(j=i+1;j<10;j++){if(a[i]<a[j]){m=a[i];a[i]=a[j];a[j]=m;}}}}for(i=0;i<10;i++){printf("%d ",a[i]);}return 0;}第二题#include<stdio.h>int main(void){int a[10];int i,j,x;int search(int list[],int i,int x);printf("输入10个整数:");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("输入一个整数x:");scanf("%d",&x);j=0;for(i=0;i<10;i++){if(search(a,i,x)!=-1){j++;printf("%d",search(a,i,x));}else;}if(j==0)printf("-1");return 0;}int search(int list[],int i,int x){int j;j=0;if(x==list[i])j++;else;if(j==0)return -1;elsereturn i;}第三题#include<stdio.h>void houyi(int a[],int *p,int n,int m);int main(void){int a[20];int i,m,n;printf("请输入整数n:");scanf("%d",&n);printf("请输入%d个整数:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);printf("请输入您要后移的位数m:"); scanf("%d",&m);houyi(a,a,n,m);for(i=0;i<n;i++)printf("%d",a[i]);printf("\n");return 0;}void houyi(int a[],int *p,int n,int m) {int i;int b[20];for(i=0;i<n;i++)b[i]=a[i];for(i=0;i<n;i++){if(i<=n-m-1)*(p+i+m)=b[i];else*(p+(i+m)%n)=b[i];}}第四题#include<stdio.h>void swap2(int *,int *);void bubble(int a[],int n);int main(void){int n,a[8];int i;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);bubble(a,n);printf("After sorted,a[%d]=",n);for(i=0;i<n;i++)printf("%3d",a[i]);return 0;}void bubble(int a[],int n){int i,j,m;static int b[8];for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(a[j]>a[j+1])swap2(&a[j],&a[j+1]);for(m=0;m<n;m++){if(a[m]<=a[m+1])b[m]++;}}if(b[m]==n-1)break;}}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}第五题#include<stdio.h>#include<string.h>void mcopy(char *s,int m);int main(void){int i,m,l;char str[100];printf("请输入您要输入的字符串:");gets(str);printf("您将从原字符串的第m位复制新字符串,请输入m:\n");scanf("%d",&m);printf("复制后,新的字符串为:");mcopy(str,m);return 0;}void mcopy(char *s,int m){printf("%s\n",s+m-1);}第六题#include<stdio.h>#include<string.h>void delchar(char *,char c);int main(void){char str[80];char ch;printf("Enter a string:");gets(str);printf("Enter delete char:");scanf("%c",&ch);delchar(str,ch);printf("%s\n",str);return 0;}void delchar(char *s,char c){int i,j;char str1[80];j=0;for(i=0;s[i]!='\0';i++){if(s[i]!=c){str1[j]=s[i];j++;}}str1[j]='\0';for(i=0;str1[i]!='\0';i++,s++){*s=str1[i];}*s='\0';}第七题#include<stdio.h>#include<string.h>struct zfc{char str[80];};int main(void){int i,j;char str[80],str1[80];struct zfc s[5];for(i=0;i<5;i++){printf("请输入第%d个字符串:",i+1);scanf("%s",s[i].str);}for(i=0;i<=3;i++){for(j=i+1;j<=4;j++){if(strcmp(s[i].str,s[j].str)>0){strcpy(str1,s[i].str);strcpy(s[i].str,s[j].str);strcpy(s[j].str,str1);}}}for(i=0;i<5;i++){puts(s[i].str);}return 0;}第八题#include<stdio.h>#include<string.h>int main(void){int l,i;char str[80],str1[80];char *p,*q;p=str;q=str1;printf("请输入一串字符:");scanf("%s",str);l=strlen(str);for(i=0;*p!='\0';p++,i++){*(q+l-1-i)=*p;}*(q+l)='\0';if(strcmp(str,str1)==0)printf("输入的字符串是“回文”!\n");elseprintf("输入的字符串不是“回文”!\n");return 0;}第九题#include<stdio.h>#include<string.h>int main(void){char str[80];char *p;p=str;int n1,n2,n3,n4,n5;printf("输入一行文字:");gets(str);n1=n2=n3=n4=n5=0;for(;*p!='\0';p++){if((*p>='A')&&(*p<='Z'))n1++;else if((*p>='a')&&(*p<='z'))n2++;else if(*p==' ')n3++;else if((*p>='0')&&(*p<='9'))n4++;elsen5++;}printf("大写字母字符的个数为:%d\n",n1);printf("小写字母字符的个数为:%d\n",n2);printf("空格字符的个数为: %d\n",n3);printf("数字字符的个数为: %d\n",n4);printf("其他字符的个数为: %d\n",n5);return 0;}第十题#include<stdio.h>#include<string.h>int strcomp(char s1[80],char s2[80]);int main(void){int m;char str1[80],str2[80];printf("请输入第一个字符串:");scanf("%s",str1);printf("请输入第二个字符串:");scanf("%s",str2);m=strcomp(str1,str2);if(m==1)printf("str1>str2\n");else if(m==0)printf("str1=str2\n");elseprintf("str1<str2\n");return 0;}int strcomp(char s1[80],char s2[80]){int a;if(strcmp(s1,s2)>0)a=1;else if(strcmp(s1,s2)==0)a=0;elsea=-1;return a;}第十一题#include<stdio.h>#include<string.h>void fushu(char *p);int main(void){char str[80];printf("请输入一个英语名词单词:");scanf("%s",str);fushu(str);puts(str);return 0;}void fushu(char *p){int i,l;l=0;for(i=0;*(p+i)!='\0';i++){l++;}if(*(p+l-1)=='y'){*(p+l)='e';*(p+l+1)='s';*(p+l+2)='\0';}elseif((*(p+l-1)=='s')||(*(p+l-1)=='x')||((*(p+l-2)=='c')&&(*(p+l-1)=='h'))||((*(p+l-2)=='s')&&(*(p+l-1 )=='h'))){*(p+l)='e';*(p+l+1)='s';*(p+l+2)='\0';}else if(*(p+l-1)=='o'){*(p+l)='e';*(p+l+1)='s';*(p+l+2)='\0';}else{*(p+l)='s';*(p+l+1)='\0';}}第十二题#include<stdio.h>#include<stdlib.h>int main(void){int i,j,a,n,sum,average;int *p;printf("Enter n:");scanf("%d",&n);if((p=(int*)calloc(n,sizeof(int)))==NULL){printf("Not able to allocate memory.\n");exit(1);}printf("您将输入%d个学生的成绩!\n",n);for(i=0;i<n;i++){printf("请输入第%d个学生的成绩:",i+1);scanf("%d",p+i);}sum=0;for(i=0;i<n;i++)sum=sum+*(p+i);average=sum/n;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(*(p+i)>*(p+j)){a=*(p+i);*(p+i)=*(p+j);*(p+j)=a;}}}printf("学生的平均成绩是:%d\n",average);printf("学生的最高成绩是:%d\n",*(p+n-1));printf("学生的最低成绩是:%d\n",*p);return 0;}。
c语言第8章练习题--指针
1、int *p 的含义是(B)A.p是一个指针, 用来存放一个整型数B.p是一个指针, 用来存放一个整型数据在内存中的地址C.p是一个整型变量D. 以上都不对2、以下函数用来求出两整数之和,并通过形参将结果传回,请填空。
void func(int x,int y, ___int*____ z){ *z=x+y; }3、有如下程序段(B)int *p,a=10,b=1;p=&a; a=*p + b;执行该程序段后,a的值是A. 12B. 11C. 10D. 编译出错4、若己定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( C)A) p+1B) a+1C) a++D) ++p5、以下程序运行后的输出结果是(A)void main( ){ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<a+10;p++) printf("%d,",*p);}A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,1,6、下面程序的输出是(D)void prtv(int *x)printf("%d\n", ++*x);}main(){ int a=25;prtv(&a);}A) 23 B) 24 C) 25D) 267、有以下函数(B)char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值C) 一个临时存储单元的地址D) 形参p自身的地址值8、下列程序的输出结果是(7)#include<stdio.h>void fun (int *p1, int *p2){ if (*p1>*p2) printf ("%d\n",*p1);else printf ("%d\n",*p2);}void main ( ){ int a=3,b=7;fun (&a, &b);}9、下列程序的运行结果是(B)void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);}A) 6 3 B) 3 6 C) 编译出错D) 0 010、以下程序调用findmax函数返回数组中的最大值(B)findmax(int *a,int n){ int *p,*s;for(p=a,s=a; p-a<n; p++)if ( ) s=p;return(*s);}main(){ int x[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}在下划线处应填入的是(B)A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s11、下列程序段的输出结果是(A)void fun(int *x, int *y){ printf("%d %d", *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);}A) 2 1 4 3 B) 2 1 3 4 C) 1 2 1 2 D) 2 1 1 212、以下程序执行后输出的结果是___84________。
2016C语言习题全集及答案:第八单元结构体和共用体
第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。
A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。
A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。
A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。
A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。
A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 集合排序(选做)成绩: 5 / 折扣: 0.8现有若干个集合的数据,每个数据集合可以自选一个指标参加排序。
这些指标包含如下四种:•Min ,取集合中元素的最小值•Max ,取集合中元素的最大值•Mean ,取集合中元素的平均值,平均值的计算公式为:(V1+V2+…+Vn) / n •Median ,取集合中元素的中值,中值的计算公式为:(Vmin+Vmax) / 2读入数据后,请根据各个集合选择的指标对这些集合进行降序排列,每个集合内的元素请升序排列。
输入:每行一个集合。
[ ] 内为该集合选取的用于集合间排序的指标。
随后为集合内各个元素,元素个数不定,以空格分隔。
若输入行的第一个字符为“*”,则表示输入数据结束。
输出:每行输出一个集合。
{ }内为计算出该集合的排序指标值,随后为该集合的各个元素的升序排列。
测试输入期待的输出时间限制内存限制额外进程测试用例1以文本方式显示1.[Max]8 3 15↵2.[Min]9 10 1 2 7↵3.[Median]2 4↵4.[Mean]30 20 10↵5.*↵以文本方式显示1.{20}10 20 30↵2.{15}3 8 15↵3.{3}2 4↵4.{1}1 2 7 9 10↵1秒64M测试用例以文本方式显示1.[Max]12 344 9 25 65 76 3 0 23↵2.[Mean]178 1 349 32 32 567 23 322以文本方式显示1.{87686}12 1199 3292 12332 1234487686↵1秒64M#include<stdio.h>#include<string.h>#include<math.h> typedef struct line{char type[8];int typeValue;int data[100];int n_data;}line;int stringToInt(char str[]) {int returnValue=0;int n=strlen(str);for(int i=0;i<strlen(str);i++){returnValue=returnValue+((int)str[i]-48)*pow(10.0,--n);}return returnValue;}void inputToLineData(line * l,char input[]){int n,i;//line lengthn=strlen(input);for(i=0;i<n;i++){if(input[i+1]==']')break;l->type[i]=input[i+1];}l->type[i]='\0';l->n_data=0;int numStart=i+2;char str[100][10];int m=0,j=0;for(i=numStart;i<n;i++){if(input[i]==' ').{str[j][m]='\0';j++;m=0;l->n_data++;}elsestr[j][m++]=input[i];}str[j][m]='\0';l->n_data++;l->data[0]=0;for(i=0;i<l->n_data;i++){l->data[i]=stringToInt(str[i]);}}void sort(int data[],int n){int i,j,k;for(i=0;i<n;i++)for( j=0;j<n-1;j++){if(data[j]>data[j+1]){k=data[j];data[j]=data[j+1];data[j+1]=k;} } }int getTypevalue(line l){int i,j,k;if(strcmp(l.type,"Max")==0){int Max;Max=l.data[0];for(i=0;i<l.n_data;i++){if(l.data[i]>Max) Max=l.data[i];}return Max; }if(strcmp(l.type,"Min")==0){int Min;Min=l.data[0];for(i=0;i<l.n_data;i++){if(l.data[i]<Min) Min=l.data[i];return Min;}if(strcmp(l.type,"Median")==0){int Max;Max=l.data[0];for(i=0;i<l.n_data;i++){if(l.data[i]>Max) Max=l.data[i];}int Min;Min=l.data[0];for(i=0;i<l.n_data;i++){if(l.data[i]<Min) Min=l.data[i]; } return (Max+Min)/2;}if(strcmp(l.type,"Mean")==0){int sum=0;for(i=0;i<l.n_data;i++){sum=sum+l.data[i];return sum/l.n_data;} }void main(){line Line[100];int i,j,k;i=0;char input[100];do{gets(input);if(strlen(input)>1){inputToLineData(&Line[i],input);i++;}}while(strcmp(input,"*")!=0);int amount=i;for(i=0;i<amount;i++){sort(Line[i].data,Line[i].n_data);}for(i=0;i<amount;i++){Line[i].typeValue=getTypevalue(Line[i]);}line temp;for(i=0;i<amount;i++)for(j=0;j<amount-1;j++){if(Line[j].typeValue<Line[j+1].typeValue){temp=Line[j];Line[j]=Line[j+1];Line[j+1]=temp;}}for(i=0;i<amount;i++){printf("{%d}",Line[i].typeValue);for(j=0;j<Line[i].n_data;j++){if(j<Line[i].n_data-1)printf("%d ",Line[i].data[j]);elseprintf("%d",Line[i].data[j]);}printf("\n");} }3. 二叉排序树(选做)成绩: 5 / 折扣: 0.8撰写一个程序,能够构建字符串型的二叉排序树并在二叉排序树中查找节点。
所谓二叉排序树,简而言之,是一个每个节点可指向0、1 或2 个节点的递归的数据结构。
最上层的一个节点称为树根。
二叉排序树服从凡是比当前节点小的值都在其左下方,比当前节点大的值都在其右下方的规律。
该规律不仅适用于树的局部,也适用于整棵二叉排序树。
例如,在给定Kiwi, Banana, Apple, Melon, Berry 的输入字符串的顺序下,以此构建二叉排序树的过程为:建树后,请根据给定的字符串,查找树中是否有该节点。
若有,返回其节点在所在的层次数(根节点Kiwi的层次定义为0);若无,返回“Not Found”。
输入:每行一个字符串,作为要插入二叉排序树的值。
若单独一个*字符占一行,则表明用于建树的字符串输入数据结束。
随后以[Search]开始的若干行,代表要在树中查找某个字符串值,用于查找的字符串紧跟其后。
若输入行的第一个字符为“#”,则表示输入数据结束。
输出:输出每个要查找的值所在的层次数。
测试输入期待的输出时间限制内存限制额外进程测试用例1以文本方式显示1.Kiwi↵以文本方式显示1.Berry-2↵1秒64M 0#include<stdlib.h>#include<string.h>struct node{ char date[20];struct node *left;struct node *right;int floor;};int flag=0;int f(struct node *p,char t[]){if(p==NULL)return 0;else if(strcmp(p->date,t)==0){printf("%s-%d\n",t,p->floor);flag=1;} else{f(p->left,t);f(p->right,t);}}int main(){struct node *p0,*pnew,*ptemp;p0=(struct node*) malloc (sizeof (struct node));p0->left=NULL;p0->right=NULL;char temp[40];gets(temp);strcpy(p0->date,temp);p0->floor=0;gets(temp);while(temp[0]!='*'){pnew=(struct node*) malloc (sizeof (struct node));pnew->left=NULL;pnew->right=NULL;strcpy(pnew->date,temp);ptemp=p0;for(int i=1;;i++){if(strcmp(temp,ptemp->date)>0){if(ptemp->right==NULL){ptemp->right=pnew;pnew->floor=i;break;} elseptemp=ptemp->right;} else{if(ptemp->left==NULL){ptemp->left=pnew;pnew->floor=i;break;}elseptemp=ptemp->left;}}//forgets(temp);}//whilegets(temp);while(temp[0]!='#'){char t[40];strcpy(t,&temp[8]);flag=0;f(p0,t);if(flag==0)printf("%s-Not Found\n",t);gets(temp);}}1. 配料员(选做)成绩: 5 / 折扣: 0.8背景:你是一名室内装潢工程队的配料员。