您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页c语言知识学习课后答案解析电子科技大学出版社

c语言知识学习课后答案解析电子科技大学出版社

来源:好走旅游网
* *

c语言程序设计教程答案 第一章 C语言概述 一、简答题 1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。 2.顺序结构,分支结构,循环结构 3.所谓算法就是为解决一个问题而采取的方法和步骤。 算法的特性:有穷性、确定性、输入、输出、可行性。 表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示;(4)用伪代码表示;(5)用计算机语言表示。

* *

二、算法 1. 瓶子A里盛有醋 瓶子B里盛有酱油 有一个空瓶C 将A中的醋倒入C 将B中的酱油倒入A 将C中的醋倒入B 2. 输入一个数放在a中 max = a 以下步骤重复9次: 输入一个数放在a中 如果a>max,max=a 打印max的值 3. 如果 temp=a a=b b=temp 如果 c>a temp = a a=c c=temp 否则 a如果 temp=b b=c c=temp c>b 打印a,b,c的值 4. i=1 sum=0 以下程序循环100遍: sum=sum+i i=i+1 打印sum的值 5. 如果(n除以3的余数为0 并且 n除以5的余数为0) n能够同时被3和5整除 否则 n不能够同时被3和5整除 6. i=101 以下语句循环50遍: j=2 flag=1 当j<(i除以2的整数部分)时循环以下语句: 如果i除以j的余数为零 * *

flag=0 退出该循环 如果flag==1 打印i的值 i=i+2 7. 如果m无实数解 三、编程题 1. main() { printf(“##############################\\n”); printf(“ How do you do? \\n”); printf(“##############################\\n”); } 2. main() { int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(“sum=%d”,a+b+c); } 第二章 数据类型与表达式 一、单项选择题 1. B 2. C 3. A 4. A 5. D 6. B 7.A 8.C 9.D 二、写出下列程序的运行结果 1. * *

aabb cc abc AN 2. ab 9798 3. 9,11,9,10 4. a=2,b=3,c=2 5. s1=2.500000 s2=3 三、编程题 main() { char c1='c',c2='h',c3='i',c4='n',c5='a'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf(\"%c%c%c%c%c\\n\} * *

第三章 顺序程序设计 选择题 1)B 2)D 3)D 4)A 5)A 6)B 7)B 8)A 9)D 10)C 11)D 12)A 填空题 1)b 2)261 3)25 21 37 4)abc 5)5.0,4,c=3 6)3 编程题 #define PI 3.1415926 main( ) { float h, r, l, sv, sz ; printf(“请输入圆的半径r,圆柱高h:\\n”) ; scanf(“%f,%f”,&r, &h) ; l=2* PI *r ; s= PI *r*r ; sv=3.0/4.0* PI *r*r*r ; sz= PI *r*r*h ; printf(“圆周长为:l=%6.2f, 圆面积为:s=%6.2f\\n”, l, s) ; printf(“求体积为:sv=%6.2f, 圆柱体积为:* *

sz=%6.2f\\n”, sv, sz) ; } 2、 main( ) { float c, f ; printf(“请输入一个华氏温度:\\n”) ; scanf(“%f”, &f) ; c=5.0/9.0*(f-32) ; printf(“摄氏温度为:%6.2f\\n”, c) ; } 第四章 循环程序设计 一、选择题 1.D 2.D 3.D 4.C 5.D 6.A 7.B 8.B 9.A 10.D.11.B 12.A 13.B 14.C 15.C 16.A 17.A 18.B 19.D 20.D 21.A 二、填空题 1.585858 2.0 3.18 4.8921 5.20,0 6.6 * *

7.1,3,2 8.Year%400==0 year%100!=0 count++ 三、编程题 1. main() { long a; scanf(“%ld”,&a); if (a>=10000&&a<=99999) printf(“这是个五位数”); else if (a>=1000&&a<=9999) printf(“这是个四位数”); else if (a>=100&&a<=999) printf(“这是个三位数”); else if (a>=10&&a<=99) printf(“这是个二位数”); else if (a>=0&&a<=9) printf(“这是个一位数”); else printf(“输入错误”); * *

} 3. main() { int a; int g,s,b;//个位、十位、百位 printf(\"水仙花数有:\\n\"); for(a=100;i<=999;a++) {g=a%10; s=a/10%10; b=a/100; if (a==g*g*g+s*s*s+b*b*b) printf(\"%d \} printf(\"\\n\"); } 4、 main() {int i,n; printf(\"input n:\"); scanf(\"%d\printf(\"\\n%d=\* *

for(i=2;i<=n;i++) {while(i!=n) if(n%i==0) {printf(\"%d*\else break; } printf(\"%d\\n\} 5、 #include “stdio.h” main() { char c; int w,x,y,z; w=x=y=z=0; while((c=getchar())!=’\\n’) { if((c>’a’&&c<’z’)||(c>’A’&&c<’Z’)) w++; else if (c==’ ’) x++; else if (c>’0’&&c<’9’) * *

y++; else z++; } printf(“英文字母个数:%d\\n”,w); printf(“空格个数:%d\\n”,x); printf(“数字个数:%d\\n”,y); printf(“其他字母个数:%d\\n”,z); } 6、main() { float h=100,t=100; int j; for(j=1;j<10;j++) { t=t/2; h=h+t*2; } printf(“共经过:%f 米\\n”,h); printf(“第十次反弹 %f 米\\n”,t/2); } 第五章 数 组 一、单项选择题 * *

1. B 2. A 3. C 4. C 5. D 6. B 7.C 8.B 9.C 10. B 二、写出下列程序的运行结果 1.S=368 2. ***** ***** ***** ***** ***** 3.S1=18 S2=10 4.!margorP 5. 数字0的出现次数是:3 数字1的出现次数是:2 数字2的出现次数是:2 数字3的出现次数是:2 数字4的出现次数是:0 数字5的出现次数是:1 数字6的出现次数是:1 数字7的出现次数是:1 * *

数字8的出现次数是:1 数字9的出现次数是:1 三、编程题 1.#include \"stdio.h\" main() {int a[11]; int i,j,t; printf(\"input 10 number:\\n\"); for (i=1;i<11;i++) scanf(\"%d\printf(\"\\n\"); for (i=1;i<=9;i++) for (j=1;j<=10-i;j++) if (a[j]printf(\"imput 10 sorted number:\\n\"); for (i=0;i<10;i++) scanf(\"%d\printf(\"input an integer:\\n\"); scanf(\"%d\for (i=9;i>=0&&a[i]>b;i--) a[i+1]=a[i]; a[i+1]=b; printf(\"sorted numbers:\\n\"); for (i=0;i<11;i++) printf(\"%5d\ } 3.#include \"stdio.h\" main() {int a[5],i,j,t; printf(\"input 5 integer:\\n\"); for (i=0;i<5;i++) /*输入5个整数*/ scanf(\"%d\for (i=0,j=4;iprintf(\"%5d\} 4.#include \"stdio.h\" main() {int i,j,a[10][10]={{1},{1,1}}; for (i=2;i<10;i++) /*给二维数组每个元素赋值*/ {a[i][0]=1; for (j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for (i=0;i<10;i++) /*输出二维数组*/ {for (j=0;j<=i;j++) printf(\"%-5d\printf(\"\\n\"); } } 5.#include \"stdio.h\" main() {int a[3][4],i,j,max,row,col; printf(\"input 3*4 matrix:\\n\"); * *

for (i=0;i<3;i++) /*输入3*4矩阵*/ for (j=0;j<4;j++) scanf(\"%d\max=a[0][0]; row=0; col=0; for (i=0;i<3;i++) /*寻找矩阵中的最大值及其行列号*/ for (j=0;j<4;j++) if (maxscanf(\"%d\for (i=0;i1.num用来统计单词个数*/ char c; printf(\"please input a string :\\n\"); while ((c=getchar())!='\\n') if (c==' ') word=0; else if (word==0) {word=1; num++;} printf(\"There are %d words in the line\\n\} 8.#include \"stdio.h\" main() {int i,j,uppn,lown,dign,span,othn; /*uppn,lown,dign,span,othn分别存放英文大写字母、小写字母、数字、空格和其他字符的个数*/ char text[3][80]; uppn=lown=dign=span=othn=0; for(i=0;i<3;i++) {gets(text[i]); for(j=0;j<80&&text[i][j]!='\\0';j++) {if(text[i][j]>='A'&&text[i][j]<='Z') uppn++; * *

else if(text[i][j]>='a'&&text[i][j]<='z') lown++; else if(text[i][j]>='0'&&text[i][j]<='9') dign++; else if(text[i][j]==' ') span++; else othn++; } } for(i=0;i<3;i++) printf(\"%s\\n\printf(\"uppn=%d\\n\printf(\"lown=%d\\n\printf(\"dign=%d\\n\printf(\"span=%d\\n\printf(\"othn=%d\\n\} 9.#include \"stdio.h\" main() {int i,j; char str1[20],str2[20]; * *

printf(\"input two strings:\\n\"); gets(str1); gets(str2); j=strlen(str1); /*求字符串1的长度*/ for (i=0;str2[i]!='\\0';i++,j++) /*字符串合并*/ str1[j]=str2[i]; str1[j]='\\0'; /*加上字符串结束标志*/ puts(str1); } 10.#include \"stdio.h\" main() {int i,n; char str1[20],str2[20]; printf(\"input two strings:(no more than 20 characters)\\n\"); gets(str1); gets(str2); n=strlen(str1)} 第六章 函数与编译预处理 一、单项选择题 1. C 2. B 3. B 4. B 5. A 6. B 7.A 8.C 9.D 10. A 二、写出下列程序的运行结果 1.9 2.4,B 8,B 3.-4.000000 4.a=6,b=5 5.48 三、编程题 1.main() { int prime(int n); int n; printf(\"input n(n>0):\\n\"); scanf(\"%d\if (prime(n)) printf(\"%d is a sushu\\n\else printf(\"%d is not a sushu\\n\} * *

int prime(int n) {int flag=1,i; for (i=2;i<=n/2&&flag==1;i++) if (n%i==0) flag=0; return(flag); } 2. #define N 3 convert(int array[3][3]) { int i,j,t; for (i=0;ifor (j=0;j #include main() {char str[100]; printf(\"input a string:\\n\") ; gets(str); * *

inverse(str); printf(\"the reversed string is:%s\\n\} inverse(char str[]) { char t; int i,j; for (i=0,j=strlen(str)-1;i concat(char str1[],char str2[]) { int i=0,j; while (str1[i]!='\\0') i++; for (j=0;str2[j]!='\\0';i++,j++) str1[i]=str2[j]; str1[i]='\\0'; * *

} main() { char str1[100],str2[100]; gets(str1);gets(str2); concat(str1,str2); puts(str1); } 5. main() {char str[80]; printf(\"input a string (4 ge shu zi zi fu):\\n\"); scanf(\"%s\insert(str); printf(\"result is:\\n%s\\n\} insert(char str[]) { int i; for (i=strlen(str);i>0;i--) { str[2*i]=str[i]; str[2*i-1]=' '; * *

} } 6. #include \"stdio.h\" int i,ndight,nwhite,nletter,nother; count(char str[]) { ndight=nwhite=nletter=nother=0; for (i=0;str[i]!='\\0';i++) if (str[i]>='0'&&str[i]<='9') ndight++; else ((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')) nletter++; else if (str[i]==' ') nwhite++; else nother++; } main() { char text[80]; printf(\"input a string:\\n\"); gets(text); if * *

count(text); printf(\"ndight=%d,nletter=%d,nwhite=%d,nother=%d\\n\} 7. #define N 10 #include sort(char str[]) {int i,j; char t; for (i=1;istr[j+1]) {t=str[j];str[j]=str[j+1] ;str[j+1]=t;} } main() { char str[N]; int i ; printf(\"Input 10 ge zi fu:\\n\"); gets(str); sort(str); printf(\"The sorted result:\\n\") ; * *

for(i=0;i #include #define N 10 void input_e(int num[],char name[N][8]) {int i; for (i=0;ichar temp2[8]; for (i=0;ibott=N-1; if ((nnum[N-1])) find=-1; while ((find==0)&&(top<=bott)) {mid=(bott+top)/2; if (n==num[mid]) {find=1; printf(\"%d name is:%s\\n\else if (n{printf(\"please input chazhao de gonghao:\"); /*输入查找的工号*/ scanf(\"%d\search(number,num,name); printf(\"continue Y/N?\"); /*是否继续查找*/ getchar(); c=getchar(); if (c=='N'||c=='n') flag=0; } } 9. #include \"stdio.h\" #define MAX 10 main() { char str[MAX]; char c; int i; i=0; printf(\"input number(16 jinzhi): \"); /*输入一个十六进制的数*/ while((c=getchar())!='\\n'&&i{ str[i]=c; i++; } str[i]='\\0'; printf(\"result is :%d\\n\} int htod(char s[]) { int i,n; n=0; for(i=0;s[i]!='\\0';i++) {if (s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; if (s[i]>='a'&&s[i]<='f') n=n*16+s[i]-'a'+10; if (s[i]>='A'&&s[i]<='F') n=n*16+s[i]-'A'+10; } return(n); } 10. #define SWAP(a,b) t=a;a=b;b=t main() * *

{ int a,b,t; printf(\"input a,b:\") ; scanf(\"%d,%d\SWAP(a,b); printf(\"result:a=%d,b=%d\\n\} 11. #define SURPLUS(a,b) ((a)%(b)) main() { int a,b; printf(\"input a,b:\"); scanf(\"%d,%d\printf(\"result is: %d\\n\} 12. main() { int a,b,c; printf(\"input a,b,c:\"); scanf(\"%d,%d,%d\printf(\"max=%d\\n\} * *

int max(int x,int y,int z) { int t; t=(x>y ? x : y); return(t>z?t:z); } #define MAX(x,y) ((x)>(y)?(x):(y)) main() { int a,b,c; printf(\"input a,b,c:\"); scanf(\"%d,%d,%d\printf(\"max=%d\\n\} 13. #include \"stdio.h\" #define CHANGE 1 #define MAX 80 main() { char str[MAX]; int i; printf(\"input a string:\\n\"); * *

gets(str); #if (CHANGE) { for (i=0;str[i]!='\\0';i++) if (str[i]>='a'&&str[i]<'z'||str[i]>='A'&&str[i]<'Z') str[i]=str[i]+1; else if (str[i]=='z'||str[i]=='Z') str[i]=str[i]-25; } #endif printf(\"%s\\n\} 第七章 指针 一、选择题 1)A 2)D 3)D 4)C 5)B 6)B 7)B 8)C 9)B 10)C 11)A 12)A 13)A 14)C 15)B 16)A 17)C 18)B 19)D 20)B 二、阅读下面程序,写出程序运行结果 1)abcdeedcba 2)1113151719 3)(TurboC中是11,9 7,11 ) (VisualC是9,9 7,11) 4)3 6 5)6385 * *

三、编程题 1、main( ) { int a[10],i,temp,*p=a; printf(\"Please input array a:\\n\"); for(i=0;i<10;i++) scanf(\"%d\printf(\"array a:\\n\"); for(i=0;i<10;i++) printf(\"%4d\for(i=0;i<5;i++) { temp=p[i]; p[i]=p[10-i-1]; p[10-i-1]=temp; } printf(\"\\n Now array a:\\n\"); for(i=0;i<10;i++) printf(\"%4d\} 2、main( ) { int a[3][3],*p,i,j; printf(\"please input matrix:\\n\"); for(i=0;i<3;i++) * *

for(j=0;j<3;j++) scanf(\"%d\p=&a[0][0]; move(p); printf(\"\\n Now matrix:\\n\"); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\"%4d\printf(\"\\n\"); } } move(int *q) { int i,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(q+3*i+j); *(q+3*i+j)=*(q+3*j+i); *(q+3*j+i)=t; } } 3、#include #include * *

#include #include main( ) { int binary(); void insert(); char *temp,*ptr1[6]={\"BASIC\\int i; ptr1[5]=malloc(20); printf(\"\\n\"); printf(\"original string:\\n\"); for(i=0;i<5;i++) printf(\"%s\\n\printf(\"input search string:\\n\"); temp=malloc(20); gets(temp); i=binary(ptr1,temp,5); printf(\"i=%d\\n\insert(ptr1,temp,5,i); printf(\"output strings:\\n\"); * *

for(i=0;i<6;i++) printf(\"%s\\n\} int binary(char *ptr[],char *str,int n) {int hig,low,mid; low=0; hig=n-1; if(strcmp(str,ptr[0])<0) return(0); if(strcmp(str,ptr[hig])>0) return(n); while(low<=hig) { mid=(low+hig)/2; if(strcmp(str,ptr[mid])<0) hig=mid-1; else if(strcmp(str,ptr[mid])>0) low=mid+1; else return(mid); } return(low); } void insert(char *ptr[],char *str,int n,int i) { * *

int j; for(j=n;j>i;j--) strcpy(ptr[j],ptr[j-1]); strcpy(ptr[i],str); } 4、main( ) { int i; char *p[6],str[6][20]; for(i=0;i<6;i++) p[i]=str[i]; printf(\"Input 6 strings:\\n\"); for(i=0;i<6;i++) scanf(\"%s\sort(p); printf(\"Now the strings:\\n\"); for(i=0;i<6;i++) printf(\"%s\\n\} sort(char *q[ ]) { int i,j; char *t; for(i=0;i<5;i++) * *

for(j=0;j<5-i;j++) if(strcmp(*(q+j),*(q+j+1))>0) { t=*(q+j); *(q+j)=*(q+j+1); *(q+j+1)=t; } } 5、main( ) { int m; char str1[20],str2[20],*p1,*p2; printf(\"please input two strings:\\n\"); scanf(\"%s\scanf(\"%s\p1=str1; p2=str2; m=stringcmp(p1,p2); printf(\"result is %d:\\n\} stringcmp(char *p1,char *p2) { int i=0; while(*(p1+i)==*(p2+i)) if(*(p1+(i++))=='\\0') return(0); * *

return((*p1+i)-*(p2+i)); } 6、main( ) { char str1[30],str2[30],str3[100]; int i=0,j=0,k=0; printf(\"please input two strings:\\n\"); scanf(\"%s\scanf(\"%s\while(str1[i]!='\\0' && str2[j]!='\\0') { str3[k++]=str1[i++]; str3[k++]=str2[j++]; } while(str1[i]!='\\0') str3[k++]=str1[i++]; while(str2[j]!='\\0') str3[k++]=str2[j++]; str3[k]='\\0'; printf(\"\\n%s\\n\} 第八章 结构体 一、选择题 1、C 2、B 3、C 4、D 5、* *

B 6、A 7、D 8、C 9、C 10、B 二、填空题 1、34 2、0 3、51 4、10,x 5、364041 三、编程题 1、 struct complex { float x; /*实部*/ float y; /*虚部*/ } main() { struct complex c1={5,3},c2={2,6}; float t1,t2; t1=c1.x*c2.x - c1.y*c2.y; t2=c1.x*2.y + c1.y*c2.x; printf(“The two complexs product is:”); printf(“%.2f%+.2f i\\n”,t1,t2); } * *

2. struct student { char name[10]; /*姓名*/ int number; /*学号*/ float x; /*成绩*/ float y; /*成绩*/ } main( ) { struct student s[45]; int i; void max(); void average(); void sort(); for (i=0;i<45;i++) scanf(“%s%d%f%d”,s[i].name,&s[i].number,&s[i].x,&s[i].y); /*输入学生的姓名、学号、两门课程成绩*/ max(s,45); average(s,45); sort(s,45); } * *

void max(struct student *a,int n) { float temp; char na[10]; int i ,num; temp=a[0].x+a[0].y; for (i=1;i{ s1+=b[i].x; s2+=b[i].y; } aver1=s1/45; aver2=s2/45; for(i=0;i<45;i++) if(b[i].xk=j; if(k!=i) { temp=c[i]; c[i]=c[k]; c[k]=temp; } for(i=0;ip1=( Part * ) malloc (sizeof(struct Ljian)); /*创建第一个结点*/ scanf(“%d%d”,&p1->pname,&p1->wnum); p1->next=NULL; while(n<=10) /*将结点加入链表*/ { if(n==1) head=p1; /*是第一个结点,作表头*/ else p2->next=p1; /*不是第一个结点,作表尾*/ p2=p1; p1=( Part *) malloc(sizeof(struct Ljian)); /*开辟下一个结点*/ scanf(“%d%d”,&p1->pname,&p1->wnum); p1->next=NULL; n++; } } 4. #include #include #include * *

#define LEN sizeof(struct student) typedef struct student { long num; /*学号*/ float score; /*成绩*/ struct student *next; } STU; /*用户自定义学生结构体类型*/ STU *Create ( ) /*创建链表* / { int n=0; STU *p1,*p2,*head; head=NULL; p1=(STU *)malloc(LEN); /*创建第一个结点*/ scanf(\"%ld,%f\p1->next=NULL; while(p1->num!=0) /*将结点加入链表*/ { ++n; if(n==1) /*是第一个结点,作表头*/ head=p1; else /*不是第一个结点,作表尾*/ p2->next=p1; p2=p1; * *

p1=(STU *)malloc(LEN); /*开辟下一个结点*/ scanf(\"%ld,%f\p1->next=NULL; } free(p1); /*释放最后一个结点所占的内存*/ return (head); /*返回链表的头指针*/ } void print(STU *head) /*输出链表* / { STU *p; p=head; do { printf(\"%ld\%5.1f\\n\p=p->next; }while(p!=NULL); } STU *merge(STU *p1,STU *p2) /*合并链表* / { STU *p,*head , *s1,*s2; * *

s1=p1; s2=p2; while(s1->next!=NULL) s1=s1->next;/*将指针s1指向链表1的最后一个节点*/ while(s2->next!=NULL) s2=s2->next;/*将指针s2指向链表2的最后一个节点*/ if(s1->numnum) { s1->next=p2; head=p1; }/*因为两个链表都是按学号升序排列,如果链表1的最后一个节点中的学号小于链表2的第一个节点中的学号,则直接将链表2插入到链表1的后面*/ else if(s2->numnum) { s2->next=p1; head=p2; }/*如果链表2的最后一个节点中的学号小于链表1的第一个节点中的学号,则直接将链表1插入到链表2的后面*/ else * *

{ if(p1->numnum) /*确定两个链表的顺序* / { head=p=p1;p1=p1->next;} else { head=p=p2;p2=p2->next;} while(p1!=NULL && p2!=NULL) if(p1->numnum) { p->next=p1; p=p1; p1=p1->next; } else { p->next=p2; p=p2; p2=p2->next; } if(p1!=NULL) p->next=p1;/*如果链表2的节点插入完,则将链表1* *

直接插到后面*/ else p->next=p2; /*如果链表1的节点插入完,则将链表2直接插到后面*/ } return head; } ***注:红字部分仅仅是对程序的改进,删掉也不影响程序的功能和运行**** void main() { STU *listA,* listB,*head; printf(\"Please input first link listA information:\\n\"); listA =Create ( ); print(listA); printf(\"\\nPlease information:\\n\"); listB =Create ( ) ; print(listB); printf(\"\\nThe merged link is:\\n\"); head=merge(listA, listB); print(head); input second link listB * *

getch( ); /*为便于观察结果,等待键入任意键*/ }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务