C语言第三章在线测试题目及答案
数据结构(C语言版)习题集答案 第三章
习题三3.1 3.10 3.133.5 3.6 3.15 3.17 3.19 3.243.29 3.313.5(1)给定操作序列P1P2P3…P i…P n(P k为S或X,k=1,2,…n )是合法的,当且仅当满足下列条件:a. 序列中包含的S的个数和X的个数相等;b. 对于任意的j(1≤j≤n);有P1P2P3…P j子序列中所包含的S的个数大于等于X的个数;(2)证明:设P1P2P3…P i…P n ,Q1Q2Q3…Q i…Q n是两个不同的合法序列;∵两者不同,∴ k=min{i| P i≠Q i , 1≤i≤n }且k>1, P k≠Q k(因P1,Q1肯定是S,否则不合法!)即,P1P2P3…P k-1 和Q1Q2Q3…Q k-1是相等的,但P k≠Q k由此可知:两个操作序列在前k-1步操作后输出序列和栈中所剩元素均相同,由于P k≠P k不妨设P k=X,而Q k=S;这样,在操作序列P1P2P3…P i…P n中的第k-1步后输出的第一个元素是目前栈中的元素,而对于操作序列Q1Q2Q3…Q i…Q n中的第k-1步后输出的第一个元素是目前还在栈外的元素。
所以输出序列不同。
即两个不同的合法操作序列,不可能得到相同的输出序列。
证毕!3.6 用反证法证明:假设存在这样的输出序列,P1…Pi…Pj…Pk…Pn,满足i<j<k,使Pj<Pk<Pi;因Pi 在这三个数中最大,且Pi最先出栈,按照题意所给进栈顺序,在Pi出栈时Pj 和Pk都还在栈中;又因,Pj <Pk,所以Pj比Pk先进栈,则出栈顺序应该是Pk先出栈而不是Pj先出栈,矛盾!证毕!3.10(1) 输出序列为:0,5,9,12,14,15(2)由于输入的数据个数不定,采用单链表存储输入的元素,又因是先输入的,后累加到累加器里,所以用链栈的形式存储。
(类型定义与书本上第二章相同)void test( ){LinkList L ,P;int x,sum;L=NULL; //建立空链表sum=0;printf(sum);scanf(x);//读入第一个数while(x){P=(LinkList)malloc(sizeof(LNode));//产生一个结点P->data=x;P->next=L; L=P;//插入在链头scanf(x);//读下一个数}while(L){sum+=sum+L->data;//取值累加printf(sum);//输出P=L->next; free(L); L=P;}}3.15 所用类型定义如下:#define Stack_Init_Size 100typedef struct stack{SElemType base0,base1,*top0,*top1;int StackSize ;} DuSqStack;void Inistack(DuSqStack &tws){tws.base0=( SElemType*)malloc(Stack_Init_Size*sizeof(SElemType));if(!tws.base0) exit(OVERFLOW);tws.top0= tws.base0;tws.base1=tws.top1=tws0.base0+ Stack_Init_Size-1;tws.StackSize= Stack_Init_Size;}// InistackStatus Push( DuSqStack &tws ,int i , SElemType x){//将元素x插在第i个栈中if (tws.top0>tws.top1) return (OVERFLOW);switch(i){case 0: *tws.top0=x; tws.top0++;break;case 1: *tws.top1=x; tws.top1--;break;}return OK;}// PushStatus Pop( DuSqStack &tws ,int i , SElemType &x){//将第i个栈的栈顶元素弹出,由x带回switch(i){case 0: if(tws.base0==tws.top0) return ERROR; x=*(--tws.top0);break; case 1: if(tws.base1==tws.top1) return ERROR; x=*(++tws.top0);break; }return OK;}// Pop3.17Status judge( ){//判断输入的字符序列是否为型如序列1&序列2,其中序列2是序列1的逆序列InitStack(S); 初始化栈Sc=getchar( );//读第一个字符while(c!= '&'&&c!= '@'){push(s,c); c=getchar( );}if(c!= '&') return FALSE;c=getchar( );//读下一个while(c!= '@'&& !EmptyStack(s)){pop(s,e);if(c!=e) return FALSE;c=getchar( );}if(c== '@'&& EmptyStack(s)) return TRUE;return FALSE;}// judge3.19Status judged(SqList L){//L为数据元素类型为字符的顺序存储的线性表,表示一个表达式,判断该表达//式的括号是否匹配InitStack(S);//初始化栈Sfor(j=0;j<L.length;j++){switch(L.elem[j]){case ‘(‘:case ‘[‘:case ‘{‘: push(S, L.elem[j]) ;break;case ‘)’:case ‘]’:case ‘}’: if(EmptyStack(S) return FALSE;else{ Pop(S,e);switch(L.elem[j]){case ‘)’:if(e!=’(‘ ) return FALSE;break;case ‘]’:if(e!=’[‘ ) return FALSE;break;case ‘}’:if(e!=’{‘ ) return FALSE;break;}}}}if(EmptyStack(S) return TRUE;else return FALSE;}// judged3.24int g(int m,int n){// 不考虑输入参数的非法性if(m==0 && n>=0) return 0;else if(m>0 && n>=0) return (g(m-1,2*n)+n);}// g3.29 类型定义#define MAX_Init_Size 100typedef struct {QElemType *base;int front,rear ,tag;} SqQueue;Status InitQueue(SqQueue &Q ){//初始化一个队列Q.base=( QelemType* )malloc(MAX_Init_Size*sizeof(QelemType));If(!Q.base) exit(OVERFLOW);G.front=Q.rear=Q.tag=0;//表示队列为空return OK;}// InitQueueStatus EnQueue(SqQueue &Q , QelemType x){//将元素x入队列, 若队列满则返回函数值ERROR,否则返回OKif((Q.front==Q.rear)&&(Q.tag==1)) return ERROR;Q.base[Q.rear]=x;Q.rear=(Q.rear+1)%MAX_Init_Size;if(Q.front==Q.rear) Q.tag=1;//尾指针追上头指针return OK;}// EnQueueStatus DelQueue(SqQueue &Q , QelemType &x){//删除队头元素,让x带回,若队列为空则返回函数值ERROR,否则返回OK if((Q.front==Q.rear)&&(Q.tag==0)) return ERROR;x=Q.base[Q.front];Q.front= (Q.front+1)% MAX_Init_Size;if(Q.front==Q.rear) Q.tag=0;//头指针追上尾指针return OK;}//DelQueue3.31Status Ispalindrome ( ){//判断输入的字符序列是否为回文,是返回TRUE ,否则返回FALSE InitStack(S);// 初始化栈SInitQueue(Q);//初始化一个队列Qc=getchar( );//读第一个字符while(c!= '@'){push(S,c); //入栈EnQueue(Q,c);//入队列c=getchar( );}while(!EmptyStack(S)){Pop(S,e);DelQueue(Q,c);if(c!=e) return FALSE;}return TRUE;}// Ispalindrome3.24Status g(int m,int n,int &s)//求递归函数g的值s{if(m==0&&n>=0) s=0;else if(m>0&&n>=0) s=n+g(m-1,2*n);else return ERROR;return OK;}//g3.29Status EnCyQueue(CyQueue &Q,int x)//带tag域的循环队列入队算法{if(Q.front==Q.rear&&Q.tag==1) //tag域的值为0表示"空",1表示"满" return OVERFLOW;Q.base[Q.rear]=x;Q.rear=(Q.rear+1)%MAXSIZE;if(Q.front==Q.rear) Q.tag=1; //队列满}//EnCyQueueStatus DeCyQueue(CyQueue &Q,int &x)//带tag域的循环队列出队算法{if(Q.front==Q.rear&&Q.tag==0) return INFEASIBLE;Q.front=(Q.front+1)%MAXSIZE;x=Q.base[Q.front];//if(Q.front==Q.rear) Q.tag=1; //队列空return OK;}//DeCyQueue分析:当循环队列容量较小而队列中每个元素占的空间较多时,此种表示方法可以节约较多的存储空间,较有价值.。
C语言程序设计(第3版)第3章习题参考答案
习题三参考答案(1)从键盘输入一个年份值,判断是否闰年。
设iYear为某一年份,iYear为闰年的条件为:iYear可以被4整除且不可以被100整除,或者iYear可以被400整除。
#include "Stdio.h"#include "Conio.h"int main(void){int iYear;printf("please input the year:");scanf("%d",&iYear);if(iYear%400==0||(iYear%4==0&&iYear%100!=0))printf("%d is leap",iYear);elseprintf("%d is not leap",iYear);getch();return 0;}(2)从键盘输入三个整数,按由小到大的顺序输出。
#include "stdio.h"main(){int i,j,k,max;scanf("%d%d%d",&i,&j,&k);max=i>j?i:j;max=max>k?max:k;printf("max=%d",max);getch();}(3)假设星期一至星期五每工作一小时的工资是20元,星期六和星期日每工作一小时的工资是平时的3倍,其中工资的4.5%是税金。
试编一程序从键盘输入星期序号(1,2,3,4,5,6,7,分别表示星期一至星期天)和工作小时数,计算该日的工资及应交税金。
#include "Stdio.h"#include "Conio.h"int main(void){int iWeek,iHours ;float fSalary,fTaxes;printf("please input the week number(1-7):");scanf("%d",&iWeek);printf("please input the work hours(1-12):");scanf("%d",&iHours);switch(iWeek){case 1:case 2:case 3:case 4:case 5:fSalary=20*iHours;fTaxes=fSalary*0.045;break;case 6:case 7:fSalary=3*20*iHours;fTaxes=fSalary*0.045;break;}printf("the salary is %f ,the taxes is %f",fSalary,fTaxes);getch();return 0;}(4)从键盘输入三角形的三条边长,判断是否构成三角形,如能则求出三角形的周长和面积并输出;如不能,输出不能构成三角形的信息。
C语言第三章在线测试题目及答案
第一题、单项选择题(每题1分,5道题共5分)?1、在C语言中,不正确的常量是:A、0xf6B、0876C、.5e-6D、+3e+2?2、要把高级语言编写的源程序转换为目标程序,需要使用:A、编辑程序B、驱动程序C、诊断程序D、编译程序?3、以下选项中,属于C语言的数据类型是:A、复数型B、逻辑型C、双精度型D、集合型?4、下列属于结构化算法基本结构的是()。
A、顺序结构,复合结构B、选择结构,嵌套结构C、顺序结构,循环结构D、复合结构,嵌套结构?5、调试C程序时正确的步骤应当是()。
A、编辑、编译、链接和运行B、编辑、链接、编译和运行C、链接、编辑、编译和运行D、编辑、链接、编译和运行第二题、多项选择题(每题2分,5道题共10分)?1、下列常数中能作为C的常量的是:A、0x4B、C、33D、03A?2、对于16位系统中,C语言中整数 -8在内存中的错误存储形式是:A、1111 1111 1111 1000B、1000 0000 0000 0000C、1000 0000 0000 1000D、1111 1111 1111 0111?3、下列关于C语言用户标识符的叙述中,不正确的叙述是:A、用户标识符中可以出现下划线和中划线(减号)B、用户标识符中不可以出现中划线,但可以出现下划线C、用户标识符中可以出现下划线,但不可以放在用户标识符的开头D、用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头?4、与汇编程序相比,C语言程序的优点包括( )。
A、更容易移植B、更容易阅读C、目标代码质量较高D、能够进行位操作?5、下列属于字符串的是( )A、“3 = y”B、“( x + y ) = 6”C、“y”D、“3”第三题、判断题(每题1分,5道题共5分)?1、在一个C程序中main函数必须出现在所有函数之前。
正确错误?2、一个C程序的执行是从main()函数开始,直到最后一个函数结束。
正确错误?3、int类型的数据范围不可能比float类型的大。
数据结构(C语言版)第三章习题解答
第三章习题解答1.分别写出对链栈的入栈和出栈操作的算法。
链栈的结点类型定义如下:Typedef struct stacknode {SElemtype data;struct stacknode *next;}stacknode, *linkstack;入栈操作:Status push( linkstack &S, SElemtype e){ p=(linkstack)malloc(sizeof(stacknode));If (!p) return ERROR;p->data=e;p->next=S;S=p;return OK;}出栈操作:Status pop(linkstack &S, SElemtype &e){ if (!S) return ERROR;p=s;s=p->next;free(p);return OK;}P24/3.15假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。
试编写实现这个双向栈tws的三个操作:初始化inistack(tws),入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么优缺点。
双栈的结构类型定义如下:typedef struct{Elemtype *base[2];Elemtype *top[2];}BDStacktype; //双向栈类型栈的初始化操作:status Init_Stack(BDStacktype &tws,int m)//初始化一个大小为m的双向栈tws{ tws.base[0]=(Elemtype*)malloc(m*sizeof(Elemtype));tws.base[1]=tws.base[0]+m-1;tws.top[0]=tws.base[0];tws.top[1]=tws.base[1];return OK;}入栈操作:Status push(BDStacktype &tws,int i,Elemtype x) // x入栈,i=0表示低端栈,i=1表示高端栈{ if (tws.top[0]>tws.top[1]) return OVERFLOW;//注意此时的栈满条件if (i==0) *tws.top[0]++=x;elseif (i==1) *tws.top[1]--=x;else return ERROR;return OK;}出栈操作:Status pop(BDStacktype &tws, int i, Elemtype &x) // x出栈,i=0表示低端栈,i=1表示高端栈{ if (i==0){ if (tws.top[0]==tws.base[0]) return OVERFLOW;x=*--tws.top[0];}else if (i==1){ if (tws.top[1]==tws.base[1]) return OVERFLOW;x=*++tws.top[1];}else return ERROR;return OK;}P24/3.18试写一个判别表达式中开、闭括号是否配对出现的算法。
c语言第三章习题答案
2 #include <stdio.h> int main() {
double tax,rate,deduction; int salary;
printf("输入月薪(0<=月薪):"); scanf("%d",&salary); if(salary<=3500){
rate=0; deduction=0; } else if(salary<=5000){ rate=0.03; deduction=0; } else if(salary<=8000){ rate=0.1; deduction=105;
}else if(salary<=83500){ rate=0.3; deduction=5505;
} else{
rate=0.45; deduction=13505; }
tax=rate*(salary-3500)-deduction; printf("个人所得税=%.2lf\n",tax);
return 0;
第三章 1 #include <stdio.h> #include <math.h> void main() {
double area,permeter; double a,b,c,s; printf("输入三角形的三边长:"); scanf("%lf%lf%lf",&a,&b,&c); s=(a+b+c)/2.0; if(a+b>c&&a+c>b&&b+c>a){
}
4#include <stdio.h> int main() {
计算机二级c语言第三章 顺序结构试题与答案
第三章顺序结构一、选择题1、以下叙述中错误的是A)C语句必须以分号结束B)复合语句在语法上被看作一条语句C)空语句出现在任何位置都不会影响程序运行D)赋值表达式末尾加分号就构成赋值语句2、以下能正确定义且赋初值的语句是A)int n1=n2=10; B)double c=32;C)float f=f+1.1; D)double x=12.3E2.5;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、以下非法的赋值语句是A)n=(i=2,++i); B)j++; C)++(i+1); D)x+=j;5、以下合法的赋值语句是A)x=y=100 B)d- -; C)x+y; D)c=int(a+b);6、有以下程序main(){ int m,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);printf("%d%d%d\n",m,n,p);}若想从键盘上输入数据,使变量m中的值为123,n中的值为456, p中的值为789,则正确的输入是A)m=123n=456p=789 B)123,456,789C)m=123,n=456,p=789 D)123 456 7897、有以下程序main(){ int m=0256,n=256;printf("%o %o\n",m,n);}程序运行后的输出结果是A)0256 0400 B)0256 256 C)256 400 D)400 4008、有以下程序{ int a=666,b=888;printf("%d\n",a,b);}程序运行后的输出结果是A)错误信息 B)666 C)888 D)666,8889、有以下程序main( ){int x=102,y=012;printf("%2d,%2d\n",x,y);}执行后输出结果是A)10,01 B)02,12 C)102,10 D)02,1010、有以下程序main(){ int a; char c=10;float f=100.0; double x;a=f/=c*=(x=6.5);printf("%d %d %3.1f %3.1f\n",a,c,f,x);}程序运行后的输出结果是A)1 65 1 6.5 B)1 65 1.5 6.5C)1 65 1.0 6.5 D)2 65 1.5 6.511、设有如下程序段:int x=2002,y=2003;printf("%d\n",(x,y));则以下叙述中正确的是A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出B)运行时产生出错信息C)输出值为2002D)输出值为200312、若有以下程序段int m=0xabc,n=0xabc;m-=n;printf("%X\n",m);执行后输出结果是A)0X0 B)0x0 C)0 D)0XABC13、设有定义:long x=-123456L;则以下能够正确输出变量x值的语句是A)printf("x=%d\n",x); B)printf("x=%ld\n",x);C)printf("x=%8dL\n",x); D)printf("x=%LD\n",x);14、以下程序段的输出结果是int a=1234;printf("%2d\n",a);A)12 B)34 C)1234 D)提示出错、无结果15、若变量已正确说明为float类型,要通过语句scanf("%f %f %f ",&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:A)10<回车> 22<回车> 33<回车> B)10.0,22.0,33.0<回车>C)10.0<回车> 22.0 33.0<回车> D)10 22<回车> 33<回车>16、有如下程序main0{ int y=3,x=3,z=1;printf("%d %d\n",(++x,y++),z+2);}运行该程序的输出结果是A)3 4 B)4 2 C)4 3 D)3 317、下列程序执行后的输出结果是(小数点后只写一位)main(){ double d; float f; long l; int i;i=f=1=d=20/3;printf("%d %ld %f %f\n", i,l,f,d);}A)6 6 6.0 6.0 B)6 6 6.7 6.7C)6 6 6.0 6.7 D)6 6 6.7 6.018、以下程序的输出结果是main( ){ int k=17;printf("%d,%o,%x \n",k,k,k);}A)17,021,0x11 B)17,17,17C)17,0x11,021 D)17,21,1119、若有以下定义和语句:int u=010,v=0x10,w=10;printf("%d,%d,%d\n",u,v,w);则输出结果是:A)8,16,10 B)10,10,10 C)8,8,10 D)8,10,1020、请读程序:#includemain(){ int a; float b, c;scanf("%2d%3f%4f",&a,&b,&c);printf("\na=%d, b=%f, c=%f\n", a, b,c);}若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是A)a=98, b=765, c=4321B)a=10, b=432, c=8765C)a=98, b=765.000000, c=4321.000000D)a=98, b=765.0, c=4321.021、以下程序的输出结果是# includemain(){ int a=1,b=4,c=2;float x=10..5 , y=4.0 , z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;A)14.000000 B)015.400000 C)13.700000 D)14.90000022、以下程序的输出结果是# includemain(){ int a=2,c=5;printf("a=%%d,b=%%d\n",a,c);}A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d23、执行下面程序中的输出语句,a的值是main(){ int a;printf("%d\n",(a=3*5,a*4,a+5));}A)65 B)20 C)15 D)10二、填空题:1、以下程序运行后的输出结果是main() { int x=0210; printf("%x\n",x); }2、以下程序运行后的输出结果是main(){ char c; int n=100;float f=10; double x;x=f*=n/=(c=50);}3、以下程序运行时若从键盘输入:10 20 30<回车>。
c语言程序设计第三章答案
c语言程序设计第三章答案第三章:运算符与表达式一、算术运算符在C语言中,算术运算符用于在表达式中执行各种数学运算。
常见的算术运算符有加法运算符(+)、减法运算符(-)、乘法运算符(*)和除法运算符(/)等。
1. 加法运算符(+)加法运算符用于将两个操作数相加,并返回它们的和。
例如,表达式a + b将返回a和b的和。
2. 减法运算符(-)减法运算符用于从第一个操作数中减去第二个操作数,并返回它们的差。
例如,表达式a - b将返回a和b的差。
3. 乘法运算符(*)乘法运算符用于将两个操作数相乘,并返回它们的积。
例如,表达式a * b将返回a和b的积。
4. 除法运算符(/)除法运算符用于将第一个操作数除以第二个操作数,并返回它们的商。
例如,表达式a / b将返回a除以b的商。
二、关系运算符关系运算符用于比较两个操作数并返回一个布尔值(真或假)。
常见的关系运算符有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)等。
1. 大于运算符(>)大于运算符用于检查第一个操作数是否大于第二个操作数。
如果是,则返回真(1),否则返回假(0)。
例如,表达式a > b将返回真或假。
2. 小于运算符(<)小于运算符用于检查第一个操作数是否小于第二个操作数。
如果是,则返回真(1),否则返回假(0)。
例如,表达式a < b将返回真或假。
3. 大于等于运算符(>=)大于等于运算符用于检查第一个操作数是否大于或等于第二个操作数。
如果是,则返回真(1),否则返回假(0)。
例如,表达式a >= b 将返回真或假。
4. 小于等于运算符(<=)小于等于运算符用于检查第一个操作数是否小于或等于第二个操作数。
如果是,则返回真(1),否则返回假(0)。
例如,表达式a <= b 将返回真或假。
5. 等于运算符(==)等于运算符用于检查两个操作数是否相等。
c语言第3章练习题答案
第3章练习题(一)标识符1.下列可用于C语言用户标识符的一组是( )。
CA) void, define, WORD B) a33,123,CarC) For, -abc, IFCase D) 2a, DO, sizeof2.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
BA) 大写字母B) 连接符C) 数字字符D) 下划线3.下面各选项中,均是C语言合法标识符的选项组是( )。
BA) 33 we auto B) _23 me _3ew C) _43 3e else D) ER -DF 324.以下叙述中错误的是( )。
AA) 用户所定义的标识符允许使用关键字B) 用户所定义的标识符应尽量做到"见名识意"C) 用户所定义的标识符中,大、小写字母代表不同标识D) 用户所定义的标识符必须以字母或下划线开头5.下面四个选项中,均是不合法的用户标识符的选项是( )。
CA) c_b goto int B) A P0 doC) float la0A D) 123 temp goto6.下列是用户自定义标识符的是( )。
AA) w1 B) 3xy C) int D) LINE-37.以下选项中合法的标识符是( )。
BA) 1_2 B) _12 C) 2-1 D) 12_8.以下可用作C语言用户标识符的是( )。
CA) void,define,WORD B) a3b3,123,IFC) FOR,_abc,Case D) 2a,Do,Sizeof9.正确的标识符是( )。
AA) y2 B) x=8 C) z.2 D) !at10.以下能作为C语言变量名的是( )。
DA) float B) char C) do D) Double11.请选出可用做C语言用户标识符的一组标识符( )。
BA) int B) a3b3 C) For D) 2adefine _123 3a DOWORD IF switch sizeof12.下列定义变量的语句中错误的是( )。
c语言答案第三章
第三章计习题解答3.1 用C语言描述下列命题。
(1) a小于b或小于c。
(2) a和b都大于c。
(3) a和b中有一个小于c。
(4) a是非正整数。
(5) a是奇数。
(6) a不能被b整除。
(7) 角A在第一或第三象限。
(8) a是一个带小数的正数,而b是一个带小数的负数。
[解答](1)a<b || a<c(2)a>c && b>c(3)a<c && b>=c || a>=c && b<c(4)a==(int)a && a<=0(5)a%2==1(6)a%b!=0(7)0<fmod(A,2*PI) && fmod(A,2*PI)<PI/2 || PI<fmod(A,2*PI) && fmod(A,2*PI)<3*PI/2(其中PI=3.14159265为圆周率)(8)a-(int)a>0 && b-(int)b<03.2 写出下列表达式的值。
(1) 1<4 && 4<7(2) 1<4 && 7<4(3) !(2<=5)(4) !(1<3)||(2<5)(5) !(4<=6) && (3<=7)[解答](1) 1 (2) 0 (3) 0 (4) 1 (5) 03.3 若x=3,y=z=4,求下列表达式的值。
(1) (z>=y>=x)? 1:0(2) z>=y && y>=x[解答](1) 0 (2) 13.4 若x=3,y=2,z=1,求下列表达式的值。
(1) x<y? y:x(2) x<y? x++:y++(3) z+=(x<y?x++:y++)[解答](1) 3 (2) 2 (3) 33.5 写出下面程序段的输出结果。
c语言程序设计第三章答案
第三章习题答案一、选择题(带**号的题选作)1) 以下叙述中正确的是()A) C语言的基本组成单位是语句B) C程序中的每一行只能写一条语句C) 简单C语句必须以分号结束D)C语句必须在一行内完成2)下列叙述中错误的是A)计算机不能直接执行用C语言编写的源程序B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件C) 后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行3) 计算机能直接执行的程序是()A)源程序 B)目标程序 C)汇编程序 D)可执行程序4)以下叙述中错误的是A)C语言是一种结构化程序设计语言B)结构化程序有顺序、分支、循环三种基本结构组成C)使用三种基本结构构成的程序只能解决简单问题D)结构化程序设计提倡模块化的设计方法5)对于一个正常运行的C程序,以下叙述中正确的是A)程序的执行总是从main函数开始,在main函数结束B)程序的执行总是从程序的第一个函数开始,在main函数结束C)程序的执行总是从main函数开始,在程序的最后一个函数中结束D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束6)以下叙述中正确的是A)C语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D)main可作为用户标识符,用以命名任意一个函数作为主函数7) 以下关于C语言的叙述中正确的是A) C语言中的注释不可以夹在变量名或关键字的中间B) C语言中的变量可以再使用之前的任何位置进行定义C) 在C语言算术的书写中,运算符两侧的运算数类型必须一致D) C语言的数值常量中夹带空格不影响常量值的正确表示8)以下叙述中错误的是A)C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数9)以下叙述中正确的是A) C程序中的注释只能出现在程序的开始位置和语句的后面B) C程序书写格式严格,要求一行内只能写一个语句C) C程序书写格式自由,一个语句可以写在多行上D) 用C语言编写的程序只能放在一个程序文件中10)C语言源程序名的后缀是A).exe B).C C).obj D).cp11)以下叙述中错误的是A)在程序中凡是以“#”开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#define MAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的12) 以下选项中不能作为C语言合法常量的是 ( )A) ‘cd’ B) 0.1e+6 C) “a” D)‘\011’13)一下选项中,能用作数据常量的是A)o115 B)0118 C)1.5e1.5 D)115L14) 以下选项中不属于字符常量的是A)'C' B)"C" C)'\xCC0' D)'\072' 15)以下合法的字符型常量是A)’\x13’B)’\018’C)”65” D)”\n”16) 以下不合法的字符常量是A)'\018' B)'\”' C) '\\' D) ‘\xcc' 17) 以下不合法的数值常量是A)011 B)1e1 C) 8.0E0.5 D) 0xabcd 18)以下选项中能表示合法常量的是A)整数:1,200 B)实数:1.5E2.0C)字符斜杠:‘\’ D)字符串:"\007"19) C源程序中不能表示的数制是()A) 二进制 B) 八进制 C) 十进制 D) 十六进制20) 以下选项中,合法的一组C语言数值常量是A)028 B)12. C).177 D)0x8A.5e-3 OXa23 4c1.5 10,000-0xf 4.5e0 Oabc 3.e521)以下不合法的用户标识符是A)j2_KEY B)Double C) 4d D) _8_22)一下选项中合法的标识符是A)1_1 B)1-1 C)_11 D)1_ _23) 以下选项中,能用作用户标识符的是A)void B)8_8 C)_0_ D)unsigned 24)按照C语言规定的用户标识符命名规则,不能出现在标识符中的是A)大写字母 B)连接符 C)数字字符 D)下划线25)可在C程序中用做用户标识符的一组标识符是A)and B)Date C)Hi D)case _2007 y-m-d Dr.Tom Bigl26) 以下C语言用户标示符中,不合法的是A)_1 B)AaBc C)a_b D)a--b 27)以下选项中不合法的标识符是A)print B)FOR C)&a D)_00 28)下列定义变量的语句错误的是()。
C语言第3章课后习题答案
程序如下: 程序如下: 习题3-13】答案 【习题 】 #include <stdio.h> void main( ) { float money; int national, count; printf(" printf("Input national or external: "); scanf("%d" scanf("%d",&national); printf(" printf("Input count of product: "); scanf("%d" scanf("%d",&count); if(national) /* 国内销售 */ if(count<=80) money=count*350.0; else money=count*350.0-(countmoney=count*350.0-(count-80.0)*20.0; else /* 国外销售 */ if( count<=1000) money=count*900.0; else money=count*900.0-(countmoney=count*900.0-(count-1000.0)*15.0; printf("total=%f" printf("total=%f",money); }
【习题3-14】方法 习题 】方法2
#include<stdio.h> void main() { char chr; char password; chr=getchar(); if(chr>='U'&&chr<='Z'||chr>='u'&&chr<='z') { password=chr+6password=chr+6-26; } else { password=chr+6; } printf("The character's password is %c",password); }
数据结构(C语言版)第3章同步训练答案
第三章一、填空题1、先进后出或者后进先出先进先出或者后进后出2、(rear-front+max)%max3、bceda二、选择题1、A2、D3、C三、应用题1、123 132 213 231 3212、用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况。
即尾数组已满但头数组还是空的;循环队列也是一种数组,只是它在逻辑上把数组的头和尾相连,形成循环队列,当数组尾满的时候,要判断数组头是否为空,不为空继续存放数据;可以有效的利用资源;3、将栈中元素逆序4、将队列中的元素分开,大于等于0的放到一个队列中,小于0的放到另一个队列中。
四、算法设计题1、#include "stdio.h"#include "string.h"typedef struct{int data[50];//进制设为整型int top;}seqstack;//栈的初始化void initstack(seqstack *s){s->top=-1;}//判断栈是否为空int empty(seqstack *s){if(s->top==-1)return 1;elsereturn 0;}//进栈操作void push(seqstack *s,int x){if(s->top==49)//栈的下标为0-49printf("overflow!\n");else{s->top++;s->data[s->top]=x;}}//出栈操作char pop(seqstack *s){int x;if(empty(s)){printf("underflow!\n");x='\0';}else{x=s->data[s->top];s->top--;}return x;}int ishw(char a[],int n){int i;char b[10];seqstack s;initstack(&s);for(i=0;i<n;i++)push(&s,a[i]);i=0;while(!empty(&s)){b[i]=pop(&s);i++;}b[i]='\0';if(strcmp(a,b)==0)return 1;elsereturn 0;}main(){char str[10];gets(str);if(ishw(str,strlen(str))==1)printf("是回文!");elseprintf("不是回文!");}2、#include "stdio.h"#include "stdlib.h"typedef struct stacknode{char data;struct stacknode *next;}StackNode;void InitStack(StackNode **top){*top=NULL;}void Push(StackNode **top,char x){//将元素x插入链栈头部StackNode *p=(StackNode *)malloc(sizeof(StackNode)); p->data=x;p->next=*top;//将新结点*p插入链栈头部*top=p;}int sum(StackNode **top){int n=0;while(*top!=NULL){n++;*top=(*top)->next;}return n;}main(){StackNode *top;char ch;InitStack(&top);while((ch=getchar())!='\n'){Push(&top,ch);}printf("%d",sum(&top)); }。
C语言程序设计教程第三章练习题题目
单选题1、若定义a=3,b=4,执行printf(“%d, %d”,(a,b),(b,a));的输出结果为().A.3,4B。
4,3C。
3,3D.4,42、如果要求在if后的判断条件是a不等于0,则下列选项中能正确表达这一关系的是()。
A.a<>0B。
!aC.a=0D.a3、为了避免嵌套的if—else语句的二义性,C语言规定else总是与()组成配对关系.A.缩排位置相同的ifB.在其之前未配对的ifC。
在其之前尚未配对的最近的ifD。
同一行上的if4、有定义int t = 0;则有循环while(t=1){…},则下列关于while循环语句的描述中正确的是()。
A.循环控制表达式的值为0B.循环控制表达式的值为1C.循环控制表达式的值不合法D.以上说法都不对5、若有定义:int x ,i;则下列for循环语句:for(i = 0,x = 0; i〈= 9 && x!=876;i++)scanf(“%d”,&x);下列选项中,描述正确的是()A.最多执行10次B。
最多执行9次C。
是无限循环D。
循环体一次也不执行6、关于下面的for循环语句int i,k;for(i = 0,k = -1;k = 1;i++,k++)printf(“*****");下列选项中,描述正确的是()A。
判断循环结束的条件非法B。
是无限循环C.只循环一次D.一次也不循环7、C语言程序的三种基本结构是()。
A。
顺序结构,选择结构,循环结构B.递归结构,循环结构,转移结构C。
嵌套结构,递归结构,顺序结构D.循环结构,转移结构,顺序结构8、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()。
A.a<>0B。
!aC。
a=0D.a9、两次运行下面的程序,如果从键盘上分别输入6和4,那么输出结果是()。
void main(){int x;scanf(”%d",&x);if (x++ > 5)printf(”%d",x);elseprintf("%d\n”,x-—);}A。
C语言练习题-第三章参考答案(已勘误)
C语言练习题---第三章1、有以下程序#include<stdio.h>main(){short c=124;c=c_______;printf(“%d\n”,C);}若要使程序的运行结果为248,应在下划线处填入的是A)>>2 B)|248 C)&0248 D)<<12、以下程序运行后的输出结果是2008。
#include<stdio.h>main(){int a=200,b=010;printf(”%d%d\n”,a,b);}3、有以下程序#include<stdio.h>main(){int x,y;Scanf(“%2d%ld”,&x,&y);printf(“%d\n”,x+y);}程序运行时输入:1234567程序的运行结果是34579。
4、有以下程序#include <stdio.h>Void main(){char a,b,c,d;scanf(”%c%c”,&a,&b);c=getchar(); d=getchar();printf(”%c%c%c%c\n”,a,b,c,d);}当执行程序时,按下列方式输入数据(从第一列开始,<CR>代表回车,注意:回车是一个字符)12<CR>34<CR>则输出结果是:()A、1234B、12C、12D、123 345、有以下程序,其中k的初值为八进制数#include <stdio.h>main(){int k=011;printf(”%d\n”,k++);}程序运行后的输出结果是D(A)12 (B)11 (C)10 (D)96、有以下程序(暂不做)#include<stdio.h>void fun (char*c,int d){*c=*c+1;d=d+1;printf(”%c,%c,”,*c,d);}main(){char b=’a’,a=’A’;fun(&b,a); printf(”%c,%c\n”,b,a);}程序运行后的输出结果是AA)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B7、以下程序#include <stdio.h>#define SUB(a) (a)-(a)main(){int a=2,b=3,c=5,d;d=SUB(a+b)*c;printf(”%d\n”,d);}程序运行后的结果是CA)0 B)-12 C)-20 D)108、有以下程序#include <stdio.h>main(){int a=2,b=2,c=2;printf(”%d\n”,a/b&c);}程序运行后的结果是CA)0 B)1 C)2 D)39、将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。
C语言第三章习题带答案
练习3-1答案一、选择题1.在C语言库函数中,可以输出double型变量x值的函数是( D )。
A.getchar B.scanf C.putchar D.printf 2.执行语句:printf("The program\'s name is c:\\tools\book.txt");后输出是( D )。
A.The program's name is c:tools book.txtB.The program's name is c:\tools book.txtC.The program's name is c:\\tools book.txtD.The program's name is c:\toolook.txt3.以下程序的输出结果是( D )。
(注:□表示空格)main(){printf("\n*s1=%15s*", "chinabeijing");printf("\n*s2=%-5s*", "chi");}A.*s1=chinabeijing□□□* B.*s1=chinabeijing□□□*s2=**chi* *s2=chi□□*C.*s1=*□□chinabeijing* D.*s1=□□□chinabeijing* *s2=□□chi* *s2=chi□□*4.选择程序的运行结果,①是( B )、②是( B )、③是( D )、④是( C )。
#include<stdio.h>main(){int a=-10, b=-3;printf("%d\n", a%b); /*输出①*/printf("%d\n", a/b*b); /*输出②*/printf("%d\n", -a%b); /*输出③*/printf("%d\n", a-=b+++1); /*输出④*/}①A.-2 B.-1 C.0 D.1②A.-10 B.-9 C.-8 D.0③A.-2 B.-1 C.0 D.1④A.-10 B.-9 C.-8 D.-75.以下C程序正确的运行结果是( D )。
c语言第三章题库及详解答案
c语言第三章题库及详解答案1. 以下哪个是C语言中的合法标识符?A. 3variableB. variable3C. _variableD. variable#答案:B, C2. C语言中,哪个关键字用于定义变量的存储类型?A. staticB. registerC. autoD. all of the above答案:D3. 以下哪个语句可以正确声明一个整型变量?A. int var;B. var int;C. int var=;D. int = var;答案:A4. 在C语言中,哪个运算符用于计算两个数的乘积?A. *B. /C. +D. -答案:A5. 以下哪个表达式的结果是非零的?A. 5 % 3B. 5 / 3C. 5 + 3D. 5 - 3答案:A6. 以下哪个选项是C语言中的逻辑运算符?A. &&B. ||C. !D. all of the above答案:D7. C语言中,哪个关键字用于定义函数?A. functionB. defC. voidD. int答案:D8. 以下哪个是C语言中的条件语句?A. ifB. switchC. caseD. default答案:A9. 在C语言中,哪个关键字用于实现循环?A. whileB. doC. forD. all of the above答案:D10. 以下哪个是C语言中的数组声明?A. int array[10];B. int [10] array;C. both A and BD. neither A nor B答案:C11. C语言中,哪个函数用于输入?A. printf()B. scanf()C. getchar()D. gets()答案:B12. 以下哪个是C语言中的字符串常量?A. "Hello World"B. 'Hello World'C. hello worldD. Hello World答案:A13. 在C语言中,哪个函数用于输出?A. printf()B. scanf()C. puts()D. sprintf()答案:A14. 以下哪个是C语言中的递归函数调用?A. func();B. func(func());C. func(1);D. func(func);答案:B15. C语言中,哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A16. 以下哪个是C语言中的位运算符?A. &B. |C. ^D. all of the above答案:D17. 在C语言中,哪个关键字用于定义枚举类型?A. enumB. structC. unionD. typedef答案:A18. 以下哪个是C语言中的指针变量?A. int *ptr;B. int ptr;C. ptr int;D. int (*ptr)();答案:A19. C语言中,哪个函数用于计算数组的长度?A. sizeof()B. length()C. size()D. count()答案:A20. 在C语言中,哪个关键字用于定义联合体?A. unionB. structC. enumD. typedef问题及答案到此结束。
C语言第三章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一题、单项选择题(每题1分,5道题共5分)
1、在C语言中,不正确的常量是:
A、0xf6
B、0876
C、.5e-6
D、+3e+2
2、要把高级语言编写的源程序转换为目标程序,需要使用:
A、编辑程序
B、驱动程序
C、诊断程序
D、编译程序
3、以下选项中,属于C语言的数据类型是:
A、复数型
B、逻辑型
C、双精度型
D、集合型
4、下列属于结构化算法基本结构的是()。
A、顺序结构,复合结构
B、选择结构,嵌套结构
C、顺序结构,循环结构
D、复合结构,嵌套结构
5、调试C程序时正确的步骤应当是()。
A、编辑、编译、链接和运行
B、编辑、链接、编译和运行
C、链接、编辑、编译和运行
D、编辑、链接、编译和运行第二题、多项选择题(每题2分,5道题共10分)
1、下列常数中能作为C的常量的是:
A、0x4
B、2.5e-2
C、33
D、03A
2、对于16位系统中,C语言中整数 -8在内存中的错误存储形式是:
A、1111 1111 1111 1000
B、1000 0000 0000 0000
C、1000 0000 0000 1000
D、1111 1111 1111 0111
3、下列关于C语言用户标识符的叙述中,不正确的叙述是:
A、用户标识符中可以出现下划线和中划线(减号)
B、用户标识符中不可以出现中划线,但可以出现下划线
C、用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D、用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
4、与汇编程序相比,C语言程序的优点包括( )。
A、更容易移植
B、更容易阅读
C、目标代码质量较高
D、能够进行位操作
5、下列属于字符串的是( )
A、“3 = y”
B、“( x + y ) = 6”
C、“y”
D、“3”
第三题、判断题(每题1分,5道题共5分)
1、在一个C程序中main函数必须出现在所有函数之前。
正确错误
2、一个C程序的执行是从main()函数开始,直到最后一个函数结束。
正确错误
3、int类型的数据范围不可能比float类型的大。
正确错误
4、只有先经过编译才可能生成可执行程序。
正确错误
5、变量名必须使用英文字母。
正确错误。