C语言第八次作业答案

合集下载

C语言第8次实训题目及参考答案

C语言第8次实训题目及参考答案
if(sushu(i)==1) {
if(sushu(i+2)==1) {
printf("%d %d\n",i,i+2); count++; } } } printf("200~1000 范围内容一共%d 对双胞胎数\n",count); }
t=t*a; } return t; } void main() { int n,m,i,j,s=0;//i 是底数,j 是指数 scanf("%d,%d",&n,&m); for(i=n,j=m;i<=m;i++,j--) {
s+=mi(i,j); } printf("s=%ld",s); }
4、求[200,1000]的双胞胎数的对数。双胞胎数:两素数差为 2 称为双胞胎数。 提示:在第 2 题的基础上进行修改:自定义函数不变,在 main()函数中实现对双胞胎数的 判断:如果 a 是素数,再进一步判断 a+2 是不 0 是素数。如果 a+2 也是素数,则 a、a+2 为 双胞胎数。 参考代码: int sushu(int i) {
for(j=2;j*j<=i;j++) {
if(i%j==0) {
flag=0; break; } } return flag; }
#include <stdio.h> void main() {
int i,count=0; for(i=200;i>=2;i--) {
if(sushu(i)==1) {
printf("%d ",i); count++; }

《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第八章练习题答案第8章排序1.选择题(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序答案:C(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序答案:D(3)对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最多。

A.从小到大排列好的B.从大到小排列好的C.元素无序D.元素基本有序答案:B解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。

(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为()。

A.n+1B.n C.n-1D.n(n-1)/2答案:D解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次……最后一次比较1次,即(n-1)+(n-2)+…+1=n(n-1)/2。

(5)快速排序在下列()情况下最易发挥其长处。

A.被排序的数据中含有多个相同排序码B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中的最大值和最小值相差悬殊答案:C解释:B选项是快速排序的最坏情况。

(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()。

A.O(n)B.O(n2)C.O(nlog2n)D.O(n3)答案:B解释:快速排序的平均时间复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好序的情况下,时间复杂度为O(n2)。

(7)若一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。

A.38,40,46,56,79,84B.40,38,46,79,56,84C.40,38,46,56,79,84D.40,38,46,84,56,79答案:C(8)下列关键字序列中,()是堆。

C语言程序设计(谭浩强)第八章详细课后答案

C语言程序设计(谭浩强)第八章详细课后答案

#if 0 //8.1#include<stdio.h>#include<math.h>void main(){int Common_divisor(int a,int b);int Common_mutiple(int m,int n);int result_1,result_2;int number_1,number_2;printf("Enter number_1 and number_2 value:");scanf("%d,%d",&number_1,&number_2);result_1 = Common_divisor(number_1,number_2);result_2 = Common_mutiple(number_1,number_2);printf("最大公约数:%d\n最小公倍数:%d\n",result_1,result_2); }int Common_divisor(int a,int b){int r = 1;while(r != 0){if(a>b){r = a%b;a = b;b = r;if(r == 0){return a;break;}}else{r = b%a;b = a;if(r == 0){return b;break;}a = r;}}}int Common_mutiple(int m,int n){int Common_divisor(int a,int b);int temp = 0,result = 0;temp = Common_divisor(m,n);result = (m*n)/temp;return result;}#endif#if 0 //8.2#include<stdio.h>#include<math.h>float result_1 =0.0,result_2 = 0.0;void main(){void Funvtion_1(float a,float b,float temp);void Function_2(float a,float b);float a,b,c;float temp;printf("Enter a,b,c value:");scanf("%f,%f,%f",&a,&b,&c);temp = b*b-4*a*c;if(temp > 0){Funvtion_1(a,b,temp);printf("x1 = %.3f,x2 = %.3f\n",result_1,result_2);}else if(temp < 0){printf("此函数没有根!\n");}else{Function_2(a,b);printf("x1 = x2 = %.3f\n",result_1);}}void Funvtion_1(float a,float b,float temp){result_1 = (-b+temp)/(2*a);result_2 = (-b-temp)/(2*a); }void Function_2(float a,float b) {result_1 = (-b)/(2*a);}#endif#if 0 //8.3#include<stdio.h>#include<math.h>void main(){void Prime(int n);int m;printf("Enter m value:");scanf("%d",&m);Prime(m);}void Prime(int n){int i = 0 ,k;k = (int)sqrt(n);for(i = 2; i <= k;i++){if(n%i == 0){break;}}if(i > k){printf("The number %d is a prime!\n",n);}else{printf("The number %d isn't a prime!\n",n);}}#endif#if 0#include<stdio.h>#include<math.h>int c[3][3];void main(){void Function(int b[3][3]);int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};int i,j;// int d[3][3];int k = sizeof(a[2])/sizeof(int); //列数int n = sizeof(a)/sizeof(int);for(i = 0; i < n/k;i++){for(j = 0;j < k;j++){printf("%d ",a[i][j]);}printf("\n");}Function(a);for(i = 0; i < k;i++){for(j = 0;j < n/k;j++){printf("%d ",c[i][j]);}printf("\n");}}void Function(int b[3][3]){int i = 0,j = 0;int k = sizeof(b[3])/sizeof(int);int n = sizeof(b)/sizeof(int);for(i = 0;i < k ;++i){for(j = 0;j < k; ++j){c[j][i] = b[i][j];}}}#endif#if 0#include<stdio.h>#include<math.h>#include<string.h>void main(){void Function(char a[100],char b[100]);char a[100];extern int b[100];int n = sizeof(a);printf("Enter a Array:");gets(a);Function(a,b);}void Function(char a[],char b[]){int i = 0;int n = sizeof(a)/sizeof(char);int m = strlen(a);for(i = 0; i < m;i++){b[i] = a[m-1-i];}//printf("put b Array:");//puts(b);for(i = 0;i < m;i++){putchar(b[i]);}}#endif#if 0 //8.6#include<stdio.h>#include<math.h>void main(){char a[20];char b[10];printf("Enter string a value:");gets(a);printf("Enter string b value:");gets(b);strcat(a,b);puts(a);}#endif#if 0 //8.6#include<stdio.h>#include<math.h>#include<string.h>int a[20];void main(){void Connect(char a[],char b[]);char b[10];printf("Enter string a value:");gets(a);printf("Enter string b value:");gets(b);Connect(a,b);// puts(a);printf("%s",a);}void Connect(char a[],char b[]) {int i = 0;int j = 0;while(a[i] != '\0'){i++;}while(b[j] != '\0'){a[i++] = b[j++];}// a[i] = '\0';}#endif#if 0//8.7#include<stdio.h>#include<math.h>#include<string.h>char b[100];void main(){void Research_vowel(char a[]);char a[50];printf("Enter string a value:");gets(a);Research_vowel(a);puts(b);}void Research_vowel(char a[]){int i = 0,j = 0;for(; i < strlen(a);i++){if(a[i] == 'a'|| a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u'){b[j] = a[i];j++;}}#endif#if 0//8.8#include<stdio.h>#include<math.h>char a[4];void main(){void Divide(int n);int n = 0,i = 0;printf("Enter n value(<10000):");scanf("%d",&n);Divide(n);for(;i<4;i++){printf("%d ",a[i]);}printf("\n");}void Divide(int n)int i = 0,c = 0,b = 0,m = 1000;while(m >= 1){c = n/m;b = n%m;m = m/10;a[i] = c;n = b;i++;}}#endif#if 0//8.9#include<stdio.h>#include<math.h>#include<string.h>int m = 0,n = 0,r = 0,l = 0;void main(){void Research_number(char a[]);char a[50];int i = 0;printf("enter string value:");gets(a);/*for(;i<strlen(a);i++){printf("%c",a[i]);}*/puts(a);puts("");Research_number(a);printf("字母个数是:%d,数字个数是:%d,空格个数是:%d,其它:%d\n",m,n,r,l);}void Research_number(char a[]){int i = 0;for(i = 0;i<strlen(a);i++){if((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')){m++;}else if(a[i] > 47 && a[i] < 58){n++;}else if(a[i] == 32){r++;}else{l++;}}}#endif#if 0 //8.10#include<stdio.h>#include<math.h>#include<string.h>void main(){void Array(char a[]);char b[20];printf("Enter b string(<20):");gets(b);printf("Longest word is : ");Array(b);}void Array(char a[]){int i = 0,place = 0,point = 0,length = 1; //point表示最长单词的开始位置place表示最长单词最后的一个位置int max = 0,j = 0;int flag = 0; //为0 时是空格为1时是单词max = length;for(i = 0;i<=strlen(a);i++){if(a[i] != ' ' && a[i] != '\0'){if(0 == flag){j = i;flag = 1;}elselength++; //这个题让我做的非常的难过以后要好好的复习}else{flag = 0;if(max < length){max = length;point = j;place = i;}length = 1;}}for(i = point;i <= place;i++){printf("%c",a[i]);}printf("\n");}/*int judge_words(char b[20]){int i = 0,flag = 1;for(i = 0;i < strlen(b); i++){if((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')){flag = 1;}else{flag = 0;}}}*/#if 0 //8.11#include<stdio.h>#include<math.h>void main(){void bubbling(char a[]);char a[10];printf("enter string a value:");gets(a);bubbling(a);puts(a);}void bubbling(char a[]){int i = 0,j = 0;char temp;for(i = 0;i<strlen(a) - 1;i++){for( j = 0;j<strlen(a)-1-i;j++)if(a[j] > a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}#endif#if 0 //8.12#include<stdio.h>#include<math.h>void main(){float Function(float x);float x = 1.5,x1 = 0.0;x1 = Function(x);printf("%.3f\n",x1);}float Function(float x){float x1;float y,y1;while(fabs(y1)>=1e-6){x = x1;y1 = x*x*x+2*x*x+3*x+4;y = 3*x*x+4*x+3;x1 = x - (y1/y);}return x1;}#endif#if 0//8.13#include<stdio.h>#include<math.h>void main(){float p(float x,int n);float x = 0.0,result = 0.0;int n = 0;printf("Enter x and n value:");scanf("%f,%d",&x,&n);result = p(x,n);printf("p(x) value :%.3f\n",result);}float p(float x,int n){float y = 0.0;if(n == 0){y = 0;}else if(n == 1){y = x;}else{y = ((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-2))/n;}return y;}#endif#if 0//8.14#include<stdio.h>#include<math.h>int r = 0,l = 0;void main(){float* EStudent_aver(float scores[10][5]);float* EClass_aver(float scores[10][5]);float Maxscore(float scores[10][5]);float variance(float scores[10][5]);float scores[10][5] = {{76,43,46,73,46},{34,67,89,32,47},{31,68,73,16,87},{31,67,31,37,63},{16 ,37,61,67,86},{31,34,60,49,29},{89,89,87,87,98},{97,34,89,42,89},{45,67,34,18,64},{ 32,16,87,42,15}};float *Student_aver,*Class_aver,Student_max = 0.0,aver_variance = 0.0;int i = 0,j = 0,k = 0;/* char Student_name[] = {"Zhanghua Xiaoming Ligang Xiaotao Zhangsan Xiaoqiang CBC Baixu Gongcheng BOBO "};char score_name[] = {"Chinese Math English Chemitry WuLi"};printf("\t");for(i = 0;i < strlen(score_name);i++){printf("%c",score_name[i]);}puts("");for(i = 0;i < strlen(Student_name);i++){printf("%c",Student_name[i]);if(Student_name[i] == 32){for(j = 0;j < 5;j++){printf(" %.0f\t",scores[k][j]);}k++;puts("");}}*//* printf("\n");for(i = 0; i < 10;i++){for(j = 0;j < 5;j++){printf(" %.0f\t",scores[i][j]);}puts("");}*/// float scores[10][5];printf("NO. course1 course2 course3 course4 course5\n");for(i = 0;i < 10;i++){printf("No.%2d\t",i+1);for(j = 0;j < 5;j++){printf("%.2f\t ",scores[i][j]);}puts("");}Student_aver = EStudent_aver(scores);Class_aver = EClass_aver(scores);Student_max = Maxscore(scores);aver_variance = variance(scores);printf("Student_aver:\n");for(i = 0;i < 10;i++){printf("%.2f ",Student_aver[i]);}printf("\nClass_aver:\n");for(i = 0 ;i < 5;i++){printf("%.2f ",Class_aver[i]);}printf("\n");printf("The Max Score:\n %.2f Name: No.%d , Course: course%d\n",Student_max,r,l);printf("Student average Variance: \n %.2f\n",aver_variance);}float * EStudent_aver(float scores[10][5]){static float aver[10],sum = 0.0;int i = 0,j = 0;for(i = 0;i < 10;i++){for(j = 0; j < 5; j++){sum += scores[i][j];}aver[i] = sum/5;sum = 0;}return aver;}float* EClass_aver(float scores[10][5]) {static float aver_1[5],sum = 0.0;int i = 0,j = 0;for(j = 0;j<5;j++){for(i = 0;i<10;i++){sum +=scores[i][j];}aver_1[j] = sum/10;sum = 0;}return aver_1;}float Maxscore(float scores[10][5]) {int i = 0,j = 0;float max = scores[0][0];for(i = 0;i < 10;i++){for(j = 0;j < 5;j++){if(max < scores[i][j]){max = scores[i][j];r = i + 1;l = j + 1;}}}return max;}float variance(float scores[10][5]){float* EStudent_aver(float scores[10][5]);float s = 0.0;float sum_1 = 0.0,sum_2 = 0.0;float number_1 = 0.0,number_2 = 0.0;float* student_aver;int i = 0,j = 0;student_aver = EStudent_aver(scores);for(i = 0;i<10;i++){sum_1 += student_aver[i]*student_aver[i];sum_2 += student_aver[i];}number_1 = sum_1/10;number_2 = (sum_2/10)*(sum_2/10);s = number_1 - number_2;return s;}#endif#if 0 //测试static#include<stdio.h>#include<math.h>static j;void f1(){static i = 0;i++;}void f2(){j = 0;j++;}void main(){int k = 0;for(k = 0;k < 10;k++){f1();f2();}}#endif#if 0//8.16#include<stdio.h>#include<math.h>void main(){void Change(int n);int m = 0;printf("Enter ox number:");scanf("%x",&m);// printf("%d\n",m);Change(m);}void Change(int n){//int m;printf("十进制是: %d\n",n); }#endif#if 0//8.17#include<stdio.h>#include<math.h>void main(){void Function(int n);int m;printf("Input a integer:");scanf("%d",&m);Function(m);}void Function(int n){int i;/* if(n!=0){ch[i] = n%10;temp = n/10;i++;Function(temp);}else{ch[i] = 0;}return ch;*/i = n/10;if(i != 0){Function(i);}putchar(n%10+'0');putchar(32);}#endif#if 0 //今天是今年的多少天#include<stdio.h>#include<math.h>void main(){int i = 1,d = 0,sum = 0;int year,month,day;printf("Enter year and month and day(2012/08/19):");scanf("%d/%d/%d",&year,&month,&day);sum = day;for(;i<month;i++){switch(i){case 1:case 3:case 5:case 7:case 8:case 10:case 12: d = 31; break;case 2:if(year%400 == 0 || year%4 == 0 && year%100!=0){d = 29;}else{d = 28;}break;case 4:case 6:case 9:case 11: d = 30;break;}sum += d;}printf("The %d of The year dates!\n",sum); }#endif#if 0 //8.15#include<stdio.h>#define N 10void main(){void Enter_massage(char staff_name[N][10],int staff_number[N]);void Sort(char staff_name[N][10],int staff_number[N]);int middle_search(int staff_number[N],int number);int number,temp = 0;char staff_name[N][10];int staff_number[N];Enter_massage(staff_name,staff_number);//输入信息Sort(staff_name,staff_number);printf("Enter search staff_number:");scanf("%d",&number);temp = middle_search(staff_number,number);printf("The staff number is : %d\n",staff_number[temp]);printf("The staff name is : %s\n",staff_name[temp]);}void Enter_massage(char staff_name[N][10],int staff_number[N]) {int i;for(i = 0;i < N;i++){printf("Enter Staff number No.:");scanf("%d",&staff_number[i]);fflush(stdin);printf("Input staff name:");gets(staff_name[i]);}}void Sort(char staff_name[N][10],int staff_number[N]) {int i,j;int temp1;char temp[N][10];for(i = 0;i < N - 1; i++){for(j = 0;j < N - 1 - i; j++){if(staff_number[j]>staff_number[j+1]){temp1 = staff_number[j];strcpy(temp[j],staff_name[j]);staff_number[j] = staff_number[j+1];strcpy(staff_name[j],staff_name[j+1]);staff_number[j+1] = temp1;strcpy(staff_name[j+1],temp[j]);}}/*if(staff_number[i]<staff_number[i+1]){temp1 = staff_number[i];staff_number[i] = staff_number[i+1];staff_number[i+1] = temp1;}*/}for(i = 0;i < N;i++){printf("staff number is : %d\n",staff_number[i]);printf("staff name is %s\n",staff_name[i]);}}int middle_search(int staff_number[N],int number) //折半查找法!{int min = 0,high = 0,mid = 0;int i = 0;min = 0;high = N - 1;while(min <= high){mid = (min+high)/2;if(staff_number[mid] > number){high = mid - 1;}else if(staff_number[mid] < number){min = mid + 1;}else{return mid;}}}#endif/*fasdfa the world helloint flag=0;flag=1;//letterflag=0;//space*/#if 0 //有问题输出的是不对的!为什么指针值temp+1的值不是指向的name[1]这一行的首地址而是++后指向的是name[0]下一列的地址呢?#include<stdio.h>void main(){char name[5][10];char temp[5][10];int i = 0;// temp = &name[0];for(i = 0;i < 5;i++){gets(name[i]);strcpy(temp[i],name[i]);}for(i = 0;i < 5;i++){//puts(name[i]);puts(temp[i]);}}#endif#if 0 //看不懂的程序8.15 #define N 10find(a,b)int a[],b[];{int i,j,s,t,c[N][2];for(i=0;i<N;i++){c[i][1]=a[i];c[i][1]=i;} for(i=0;i<N;i++)for(j=0;j<N-i-1;j++)if(c[i][0]>c[i+1][0]){t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t;s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;}for(i=0;i<N;i++)b[i]=c[i][1];return;}lookfor(h,k)int h[],k;{int i,j;for(i=0;i<N;i++)if(h[i]-k==0) j=i;return j;}main(){int number[N],x[N],i,j,u,p;char name[N][20];for(i=0;i<N;i++){gets(name[i]);scanf("%d",&number[i]);} scanf("%d",&p);find(number,x);u=lookfor(number,p);for(i=0;i<N;i++){printf("%d",number[i]);puts(name[x[i]]);}puts(name[x[u]]);}#endif#if 1 //16进制转换成10进制#include<stdio.h>#include<math.h>#define N 10int flag = 1;void main(){extern int sum;int convert(char str[],int n);char str[N];int s = 0,n = 0;puts("Enter 16 OX number:");gets(str);n = strlen(str);s = convert(str,n);if(1 == flag){printf("10 d number is : %d\n",s);}else{printf("The number isn't OX \n");}}int convert(char str[],int n){int i,j = 0;int sum = 0;for(i = n - 1;i > -1;i--,j++){if(str[i] > 47 && str[i] < 58){sum = sum + (str[i] - 48) * (int)pow(16,j);}else if(str[i] > 64 && str[i] < 71){sum = sum + (str[i] - 55)* (int)pow(16,j);}else if(str[i] > 96 && str[i] < 103){sum = sum + (str[i] - 87) * (int)pow(16,j);}else{flag = 0;}}return sum;}#endif#if 0#include<stdio.h>#include<math.h>void main(){printf("%d\n",(int)pow(2,0)); }#endif。

C语言第八次作业答案

C语言第八次作业答案

9.2 文件的打开和关闭
文件类型(FILE)指针 fopen函数 fclose函数
文件类型(FILE)指针
FILE类型 处理一个文件应知它的各种信息,这些信息由系统将其构 成一个结构体类型,取名 FILE,谓之文件类型,其定义 放在stdio.h头文件中。
typedef struct { short level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ short bsize; /* Buffer size */ unsigned char *buffer; /* Data transfer buffer */ unsigned char *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE;
fopen-文件打开函数
原型:FILE *fopen ( char *filename, char *mode ); 调用时: • filename(文件名)为要打开文件的文件名(字符 串),可写成: "test.dat" 或定义过 char s[ ] ="test.dat"; 则写 s ; 或定义过 char *pc ="test.dat"; 则写 pc ; 或定义过 #define ff "test.dat"; 则写 ff 。

北航大一上c语言第四五六七八次作业

北航大一上c语言第四五六七八次作业

3. 字母频率统计【问题描述】编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。

【输入形式】在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示结束。

【输出形式】在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*”字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高度以出现最多的字母次数为准),在最后一行依次输出26个小写字母。

【样例输入】The computing world has undergone arevolution since the publication ofThe C Programming Language in 1978.【样例输出】【样例说明】在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符"*"。

出现次数最多的是字母n,所以柱状图的高度为9个字符。

字母j没有出现,所以其上都为空格字符。

【评分标准】该题要求输出柱状图表示的字母出现次数,共有5个测试点。

上传C语言文件名为bar.c。

【输入形式】从标准输入读取顶点坐标。

格式为:第一行是点的个数N(3≤N≤15),后面紧接着N 行,每行两个数字(由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。

所有点的坐标互不相同,且按顺时针次序给出。

输入数据确保该多边形是一个凸多边形。

【输出形式】向标准输出打印一个浮点数,是该多边形的面积。

该浮点数保留两位小数。

【输入样例】 43 330101 2【输出样例】5.00【样例说明】输入数据表示了如图所示的四边形。

其面积为5.00。

提示:求三角形面积可用海伦公式,求平方根可用<math.h>头文件中定义的sqrt函数。

【评分标准】结果完全正确得20分,每个测试点4分。

提交程序名为:points.c。

南航C语言课后习题08答案

南航C语言课后习题08答案

5.答案 #include <stdio.h> #include <math.h> struct coordinate { double x; double y; double z; }; main( ) { void Print(struct coordinate x); struct coordinate Input(); double distance(struct coordinate x,struct coordinate y); struct coordinate a,b;
Байду номын сангаас
score 78 89 78 99
4444 */
dddd
99
2.答案 #include <stdio.h> #include <ctype.h> int daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; struct data { int year, month, day; }dt; int day_of_year(int year, int month, int day) { int i, leap; leap=((year%4==0&&year%100!=0)||year%400==0); for(i=1; i<month; i++) day+=daytab[leap][i]; return day; } void inver(char s[]) { int i=0; while(isdigit(s[i])) { dt.year=dt.year*10+s[i]-'0'; i++; } i++; while(isdigit(s[i])) { dt.month=dt.month*10+s[i]-'0'; i++; } i++; while(isdigit(s[i])&&s[i]) { dt.day=dt.day*10+s[i]-'0'; i++; } } main( ) {

(word完整版)C语言程序设计课后习题1-8参考答案

(word完整版)C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。

运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。

数据运算包括算术运算和逻辑运算。

控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。

输出设备正好与输入设备相反,是用来输出结果的部件。

2、简述计算机的工作原理。

答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。

整个过程由控制器进行控制。

3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。

系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。

这类软件一般与具体应用无关,是在系统一级上提供的服务。

系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。

另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。

在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。

答:软件是指计算机程序及有关程序的技术文档资料。

两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

在不太严格的情况下,认为程序就是软件。

硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]第一篇:C语言第八章习题带答案-2012.11.6更新练习8答案选择题1.在程序中要使用语句:printf(“%sn”, STRING);输出一个长度为5个字符的提示信息“OK!”,则应使用宏定义语句(D)。

A.#define STRING “OK!”B.#define STRING “"OK!”“C.#define STRING ”OK!“D.#define STRING ”“OK!”“2.以下正确的描述为(C)。

A.每个C语言程序必须在开头用预处理命令#includeB.预处理命令必须位于C源程序的首部C.在C语言中预处理命令都以”#“开头D.C语言的预处理命令只能实现宏定义和条件编译的功能3.C语言的编译系统中宏命令是(D)。

A.在程序运行时进行代换处理的B.在程序连接时进行处理的C.和源程序中其他C语句同时进行编译的D.在对源程序中其他成分正式编译之前进行处理的4.从下列选项中选择不会引起二义性的宏定义是(D)。

A.#define POWER(x)x*xB.#define POWER(x)(x)*(x)C.#define POWER(x)(x*x)D.#define POWER(x)((x)*(x))5.若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执行以下printf语句后,输出结果是(D)。

int a;a=Y;printf(”%d,“, Z);printf(”%dn“,--a);A.7,6B.12,6C.12,5D.7,56.若a、b、c、d、t均为int型变量,则执行以下程序段后结果为(C)。

#define MAX(A, B)(A)>(B)?(A):(B)#define PRINT(Y)printf(”Y=%dn", Y)……a=1;b=2;c=3;d=4;t=MAX(a+b, c+d);PRINT(t);A.Y=3B.存在语法错误 C.Y=7D.Y=0第二篇:第二章习题带答案一、单项选择题1、下列关于国内信用证的说法中,错误的是()。

C语言课后习题答案第八章

C语言课后习题答案第八章

作业八:函数程序设计答案〔一〕选择题〔30分〕1.以下正确的函数定义形式是A__。

A)double fun(int x,int y)B)double fun(int x;int y)C)double fun(int x,int y);D)double fun(int x,y);2.以下正确的函数形式是D__。

A)double fun(int x,int y){ z=x+y; return z; }B)fun(int x,y){ int z; return z; }C)fun(x,y){ int x,y; double z; z=x+y; return z; }D)double fun(int x,int y){ double z; z=x+y; return z; }〔重要〕3.以下正确的说法是A__。

在C语言中A〕实参和及其对应的形参各占用独立的存储单元B〕实参和及其对应的形参共占用一个存储单元C〕只有当实参和及其对应的形参同名时才共占用存储单元D〕形参是虚拟的,不占用存储单元4.假设调用一个函数,且此函数中没有return语句,那么正确的说法是D__。

该函数A〕没有返回值B〕返回假设干个系统默认值C〕能返回一个用户所希望的函数值D〕返回一个不确定的值〔重要〕5.以下不正确的说法是B__。

C语言规定A〕实参可以是常量、变量或表达式B〕形参可以是常量、变量或表达式C〕实参可以为任意类型D〕形参应及其对应的实参类型一致6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是B__。

A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式7.以下程序有语法性错误,有关错误原因的正确说法是C__。

main()int G=5,k;void Prt_char();k=Prt_char(G);A)语句void prt_char();有错,它是函数调用语句,不能用void说明B)变量名不能使用大写字母C)函数说明和函数调用语句之间有矛盾D)函数名不能使用下划线8.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是B__。

C语言程序设计 – 第 08 章课后习题

C语言程序设计 – 第 08 章课后习题

C语言程序设计– 第八章课后习题一、选择题1. 以下程序中for循环执行的次数是(C)# include <stdio.h># define N 2# define M N+1# define NUM (M+1)*M/2main(){int i;for (i = 1; i <= NUM; i++)printf("%d", i);}A. 5B. 6C. 8D. 9(解释:#define 定义的宏名在预处理时将进行简单的替换,因此NUM = (M+1) * M / 2 = (N+1+1) * N + 1 / 2 = (2+1+1) * 2 + 1 / 2,转成整型就是8。

特别注意:它不会自动添加括号!)2. 以下程序的输出结果是(A)# include <stdio.h># define MIN(x, y) (x) < (y) ? (x) : (y)main(){int i, j, k;i = 10; j = 15; k = 10 * MIN(i, j);printf("%d\n", k);}A. 15B. 100C. 10D. 150(解释:#define 定义的宏名在预处理时将进行简单的替换,因此k = 10 * (10) < (15) ? (10) : (15);即k = 100 < 15? 10 : 15 = 15。

特别注意:它不会自动添加括号!)3. 以下程序的输出结果是(B)# include <stdio.h># define FUDGF(y) 2.84 + y# define PR(a) printf("%d", (int)(a));# define PRINT1(a) PR(a); putchar('\n');main(){int x = 2;PRINT1(FUDGF(5) * x);/**手动替换宏:* PRINT1(FUDGF(5) * x);* >PR(FUDGF(5) * x); putchar('\n');* >>PR(2.84 + 5 * x); putchar('\n');* >>>printf("%d", (int)(2.84 + 5 * x));; putchar('\n');*/}A. 11B. 12C. 13D. 15(解释:参见注释。

C语言程序设计任务驱动式教程配套习题8

C语言程序设计任务驱动式教程配套习题8

C语言程序设计课后思考与训练计算机技术系第一单元一.讨论题(一)讨论C程序地结构是由哪几个部分组成地。

(二)C语言注释地作用。

二.选择题(一)C 语言属于下列哪类计算机语言?A, 汇编语言B, 高级语言C, 机器语言D, 以上均不属于(二)一个C程序是由( )。

A.一个主程序与若干子程序组成B.一个或多个函数组成C.若干过程组成D.若干子程序组成(三)一个C程序地执行是从( )。

A.main函数开始,直到main函数结束B.第一个函数开始,直到最后一个函数结束C.第一个语句开始,直到最后一个语句结束D.main函数开始,直到最后一个函数结束(四)C语言语句地结束符是( )。

A.回车符B.分号C.句号D.逗号(五)以下说法正确地是( )。

A.C程序地注释可以出现在程序地任何位置,它对程序地编译与运行不起任何作用B.C程序地注释只能是一行C.C程序地注释不能是文文字信息D.C程序地注释存在地错误会被编译器检查出来(六)以下说法正确地是( )。

A.C程序地所有标识符都需要小写B.C程序关键字需要小写,其它标识符不区分大小写C.C程序所有标识符都不区分大小写D.C程序关键字需要小写,其它标识符区分大小写三.填空题(一)C语言源程序文件地后缀是 ,编译后生成目地文件地扩展名是 ,经过连接后生成可执行文件地扩展名是 。

(二)C程序多行注释是由 与 所界定地文字信息组成地。

(三)源程序地执行要经过 , , 与 四个步骤。

四.编程题(一)试编写一个C程序并上机调试,运行后能输出以下信息。

**************************************This is my first program.**************************************(二)编写程序,用"*"输出字母C。

第二单元一.讨论题(一)C语言为什么规定对所有用到地变量都要"先定义,后使用"?(二)定义变量时一定要赋初值吗?不赋初值地变量一定不能用吗?(三)不同类型数据之间在行运算时,结果类型应该如何确定?二.选择题(一)以下正确地C语言标识符是( )。

c语言第八章课后题答案

c语言第八章课后题答案
{
for(j=0; j<ROW; j++)
{
printf("%6d",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[ROW][COL],b[COL][ROW],c[ROW][ROW],i,j;
printf("Input 2*3 matrix a:\n");
for(i=0; i<ROW; i++)
printf("%d",x);
return 0;
}
结果:
分析:调用函数时只发生值的传递,形参与实参之间再也没有关系,子函数一旦退出,内部变量就释放空间
(2)
#include <stdio.h>
void Func(int b[])
{
int j;
for(j=0; j<4; j++)
{
b[j]=j;
}
}
int main()
int i;
int m;
srand(time(NULL)); /*注意:只能将产生随机数种子写在循环外面*/
for(i=0; i<6000; i++)
{
m=rand()%6+1;
switch (m)
{
case 1:
a++;
break;
case 2:
b++;
break;
case 3:
c++;
break;
printf("Results:\n");

C语言课后习题答案(第1-8章)

C语言课后习题答案(第1-8章)

第1章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中的醋倒入B2.输入一个数放在a中max = a以下步骤重复9次:输入一个数放在a中如果a>max,max=b打印max的值3.如果a<btemp=aa=bb=temp如果c>atemp1=atemp2=ba=cb=temp1c=temp2否则如果c>btemp=bb=cc=temp打印a,b,c的值4.i=1sum=0sum=sum+ii=i+1打印sum 的值5.如果(n 除以3的余数为0 并且 n 除以5的余数为0)n 能够同时被3和5整除否则n 不能够同时被3和5整除6.i=101以下语句循环50遍:j=2flag=1当j<(i 除以2的整数部分)时循环以下语句:如果i 除以j 的余数为零flag=0退出该循环如果flag=1打印i 的值i=i+17.如果m<ntemp=mm=nn=tempi=nj=1做以下循环,直到m 能够被i/j 整除:如果i 能够被j 整除并且m 能够被i/j 整除i/j 即是m 和n 的最大公约数跳出循环否则j=j+1打印i/j 的值8.data=b*b —4*a*c如果data >0否则如果data=0x1=x2=—b/2否则无实数解三、编程题1.main (){adata b x 2)(1+-=a data b x 2)(2--=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. B2. C3. A4. A5. D6. B7.B8.A9.C 10. D二、写出下列程序的运行结果1.aabb cc abcAN2.ab97983. 9,11,9,104.a=2,b=3,c=25.s1=2.500000s2=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",c1,c2,c3,c4,c5);}第三章顺序程序设计选择题1)B 2)D 3)D 4)A 5)B 6)A 7)B 8)A 9)D 10)D 11)C 12)D 13)A填空题1)b 2)261 3)25 21 37 4)abc 5)5.0,4,c=3 6)3编程题#define pi 3.1415926main( ){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.D2.D3.D4.C5.D6.A7.B8.B9.A 10.D.11.B 12.A 13.B 14.C 15.C 16.C 17.D 18.B19.D 20.D 21.A二、填空题1.5858582.03.204.89215.20,07.1,3,28.Year%400==0year%100!=0count++三、编程题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(“这是个一位数”);elseprintf(“输入错误”);}2.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 ",a);}printf("\n");}4、main(){int i,n;printf("input n:");scanf("%d",&n);for(i=2;i<=n;i++){while(i!=n)if(n%i==0){printf("%d*",i);n/=i;}else break;}printf("%d\n",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;int j;for(j=1;j<10;j++){t=h/2;h+=(t*2);}printf(“共经过:%f 米\n”,h);printf(“第十次反弹 %f 米\n”,t);}第五章数组一、单项选择题1. B2. A3. C4. C5. D6. B7.C8.B9.C 10. B二、写出下列程序的运行结果1.S=3682.*************************3.S1=18S2=104.!margorP5.数字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",&a[i]);printf("\n");for (i=1;i<=9;i++)for (j=1;j<=10-i;j++)if (a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("the sorted number is:\n");for (i=1;i<11;i++)printf("%4d",a[i]);2.#include "stdio.h"main(){int a[11],i,b;printf("imput 10 sorted number:\n");for (i=0;i<10;i++)scanf("%d",&a[i]);printf("input an integer:\n");scanf("%d",&b);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",a[i]);}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",&a[i]);for (i=0,j=4;i<j;i++,j--) /*逆序存放*/{t=a[i];a[i]=a[j];a[j]=t;}for (i=0;i<5;i++) /*逆序存放后重新输出*/printf("%5d",a[i]);}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",a[i][j]);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",&a[i][j]);max=a[0][0]; row=0; col=0;for (i=0;i<3;i++) /*寻找矩阵中的最大值及其行列号*/ for (j=0;j<4;j++)if (max<a[i][j]){max=a[i][j]; row=i, col=j;}printf("\n数组中最大的数是%d,其行号是%d,列号是%d\n",max,row,col);}6.#define N 3#define M 4#include "stdio.h"main(){int a[N][M],i,j,k,max,row,col;printf("input %d*%d matrix: \n",N,M);for (i=0;i<N;i++) /*输入二维矩阵*/for (j=0;j<M;j++)scanf("%d",&a[i][j]);for (i=0;i<N;i++) /*求鞍点*/{max=a[i][0]; row=i; col=0;for(j=1;j<M;j++) /*求矩阵中每一行的最大值及其所行列号*/ if (max<a[i][j]){max=a[i][j]; col=j;}for (k=0;k<N;k++) /*判断每一行的最大值在其所在列是否最大*/ if (a[k][col]<max)break;if (k==N) /*得到鞍点*/{printf("the point is %d,row=%d,col=%d\n",max,row,col);break;}}if (i==N) /*没有鞍点*/printf("no point\n");}7.#include "stdio.h"main()/*word=0表示未出现单词,如出现单词就置word为1.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",num);}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++;elseothn++;}}for(i=0;i<3;i++)printf("%s\n",text[i]);printf("uppn=%d\n",uppn);printf("lown=%d\n",lown);printf("dign=%d\n",dign);printf("span=%d\n",span);printf("othn=%d\n",othn);}9.#include "stdio.h"main()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)<strlen(str2)?strlen(str1):strlen(str2); /*n中存放较短字符串的长度*/for (i=0;i<n&&str1[i]==str2[i];i++);printf("%d\n",str1[i]-str2[i]);}第六章函数与编译预处理一、单项选择题1. C2. B3. B4. B5. A6. B7.A8.C9.D 10. A二、写出下列程序的运行结果1.92.4,B8,B3.-4.0000004.a=6,b=55.48三、编程题1.main(){int n;printf("input n(n>0):\n");scanf("%d",&n);if (prime(n))printf("%d is a sushu\n",n);else printf("%d is not a sushu\n",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 3convert(int array[3][3]){ int i,j,t;for (i=0;i<N-1;i++)for (j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i]; array[j][i]=t;}}main(){int i,j;int a[N][N];printf("input a:\n");for (i=0;i<N;i++)for (j=0;j<N;j++)scanf("%d",&a[i][j]);printf("Array a:\n");for (i=0;i<N;i++){for (j=0;j<N;j++)printf("%5d",a[i][j]);printf("\n");}convert(a);printf("a de zhuanzhi is:\n"); for (i=0;i<N;i++){for (j=0;j<N;j++)printf("%5d",a[i][j]);printf("\n");}}3. #include <stdio.h>#include <string.h>main(){char str[100];printf("input a string:\n") ;gets(str);inverse(str);printf("the reversed string is:%s\n",str);}inverse(char str[]){char t;int i,j;for (i=0,j=strlen(str)-1;i<j;i++,j--){t=str[i];str[i]=str[j];str[j]=t;}}4. #include <stdio.h>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",str);insert(str);printf("result is:\n%s\n",str);}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 if ((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);count(text);printf("ndight=%d,nletter=%d,nwhite=%d,nother=%d\n",ndight,nletter,nwhite,nothe r);}7. #define N 10#include <stdio.h>sort(char str[]){int i,j;char t;for (i=1;i<N;i++)for (j=0;j<N-i;j++)if (str[j]>str[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<N;i++)printf("%c",str[i]);}8. #include <stdio.h>#include <string.h>#define N 10void input_e(int num[],char name[N][8]){int i;for (i=0;i<N;i++){ printf("input gong hao:");scanf("%d",&num[i]);printf("input name:");getchar();gets(name[i]);}for (i=0;i<N;i++)printf("%5d%10s\n",num[i],name[i]);}void sort(int num[],char name[N][8]) /*选择法排序*/{int i,j,min,temp1;char temp2[8];for (i=0;i<N-1;i++){min=i;for (j=i+1;j<N;j++)if (num[j]<num[min]) min=j;temp1=num[i];strcpy(temp2,name[i]);num[i]=num[min];strcpy(name[i],name[min]);num[min]=temp1;strcpy(name[min],temp2);}printf("the sorted result:\n");for (i=0;i<N;i++)printf("%5d%10s\n",num[i],name[i]);}void search(int n,int num[],char name[N][8]) /*折半查找法*/ {int top,bott,mid,find;find=0;top=0;bott=N-1;if ((n<num[0])||(n>num[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",n,name[mid]);}else if (n<num[mid])bott=mid-1;else top=mid+1;}if ((find==-1)||(find==0))printf("%d is not found.\n",n);}main(){int num[N],number,c,flag;char name[N][8];input_e(num,name);sort(num,name);for (flag=1;flag;){printf("please input chazhao de gonghao:"); /*输入查找的工号*/ scanf("%d",&number);search(number,num,name);printf("continue Y/N?"); /*是否继续查找*/getchar();c=getchar();if (c=='N'||c=='n')flag=0;}}9. #include "stdio.h"#define MAX 10main(){char str[MAX];char c;int i;i=0;printf("input number(16 jinzhi): "); /*输入一个十六进制的数*/while((c=getchar())!='\n'&&i<MAX){ str[i]=c;i++;}str[i]='\0';printf("result is :%d\n",htod(str));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=tmain(){int a,b,t;printf("input a,b:") ;scanf("%d,%d",&a,&b);SWAP(a,b);printf("result:a=%d,b=%d\n",a,b);}11. #define SURPLUS(a,b) ((a)%(b)) main(){int a,b;printf("input a,b:");scanf("%d,%d",&a,&b);printf("result is: %d\n",SURPLUS(a,b)); }12. main(){int a,b,c;printf("input a,b,c:");scanf("%d,%d,%d",&a,&b,&c);printf("max=%d\n",max(a,b,c));}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",&a,&b,&c);printf("max=%d\n",MAX(MAX(a,b),c));}13. #include "stdio.h"#define CHANGE 1#define MAX 80main(){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;}#endifprintf("%s\n",str);}第七章指针一、选择题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) 11,97,114)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",&a[i]);printf("array a:\n");for(i=0;i<10;i++)printf("%4d",a[i]);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",a[i]);}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",&a[i][j]);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",a[i][j]);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 <stdlib.h>#include <alloc.h>#include <string.h>#include <stdio.h>main( ){int binary();void insert();char *temp,*ptr1[6]={"BASIC","DATA","PASCAL","SQL","USE"}; int i;ptr1[5]=malloc(20);printf("\n");printf("original string:\n");for(i=0;i<5;i++)printf("%s\n",ptr1[i]);printf("input search string:\n");temp=malloc(20);gets(temp);i=binary(ptr1,temp,5);printf("i=%d\n",i);insert(ptr1,temp,5,i);printf("output strings:\n");for(i=0;i<6;i++)printf("%s\n",ptr1[i]);}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",p[i]);sort(p);printf("Now the strings:\n");for(i=0;i<6;i++)printf("%s\n",p[i]);}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",str1);scanf("%s",str2);p1=str1;p2=str2;m=stringcmp(p1,p2);printf("result is %d:\n",m);}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",str1);scanf("%s",str2);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",str3);}第八章结构体一、选择题1、C2、B3、C4、D5、B6、A7、D8、C9、C 10、B二、填空题1、342、03、514、10,x5、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<n;i++)if(temp<a[i].x+a[i].y) /*求总分最高的学生、学号*/{temp=a[i].x+a[i].y;strcmp(na,a[i].name);num=a[i].number;}printf(“%s,%d”,na,num);}void average(struct student *b,int n){float aver1,aver2,s1,s2;int i ;s1=s2=0;for(i=0;i<45;i++) /*求每门课程的总成绩*/{s1+=b[i].x;s2+=b[i].y;}aver1=s1/45;aver2=s2/45;for(i=0;i<45;i++)if(b[i].x<aver1&&b[i].y<aver2)/*输出两门课程都低于平均成绩的学生*/printf(“%s,%d\n”,b[i].name,b[i].number);}void sort(struct student *c,int n){float t;int i,j ;struct student temp;for (i=0;i<n-1;i++) /*改进的选择法排序可参考课本P89页*/ {k=i ;for(j=i+1;j<n;j++)if(c[k].x<c[j].x)k=j;if(k!=i){temp=c[i];c[i]=c[k];c[k]=temp;}for(i=0;i<n;i++)printf(“%s,%.2f\n”,c[i].n,c[i].x);}3. typedef struct Ljian{int pname;int wnum;struct Ljian *next;}Part;/*用户自定义零件结构体类型*/# include “stdio.h”main( ){int n=1;Part *head,*p1,*p2;head=NULL;p1=( Part * ) malloc (sizeof(struct Ljian));/*创建第一个结点*/scanf(“%d%d”,&p1->pname,&p1->wnum);p1->next=NULL;while(n<=10) /*将结点加入链表*/{if(n==1)head=p1; /*是第一个结点,作表头*/elsep2->next=p1; /*不是第一个结点,作表尾*/p2=p1;p1=( Part *) malloc(sizeof(struct Ljian));/*开辟下一个结点*/scanf(“%d%d”,&p1->pname,&p1->wnum);p1->next=NULL;n++;}}4.#include<stdlib.h>#include<stdio.h>#include<conio.h>#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->num,&p1->score);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->num,&p1->score);p1->next=NULL;}free(p1); /*释放最后一个结点所占的存*/ return (head); /*返回链表的头指针*/}void print(STU *head) /*输出链表* /{STU *p;p=head;do{printf("%ld\t%5.1f\n",p->num,p->score);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->num<p2->num){s1->next=p2;head=p1;}/*因为两个链表都是按学号升序排列,如果链表1的最后一个节点中的学号小于链表2的第一个节点中的学号,则直接将链表2插入到链表1的后面*/else if(s2->num<p1->num){s2->next=p1;head=p2;}/*如果链表2的最后一个节点中的学号小于链表1的第一个节点中的学号,则直接将链表1插入到链表2的后面*/else{ if(p1->num<p2->num) /*确定两个链表的顺序* /{head=p=p1;p1=p1->next;}else{head=p=p2;p2=p2->next;}while(p1!=NULL && p2!=NULL)if(p1->num<p2->num){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直接插到后面*/elsep->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 input second link listB information:\n");listB =Create ( ) ;print(listB);printf("\nThe merged link is:\n");head=merge(listA, listB);print(head);getch( ); /*为便于观察结果,等待键入任意键*/}。

谭浩强C语言完整详细答案(第8章)

谭浩强C语言完整详细答案(第8章)

谭浩强C语言答案8.1//最大公约数与最小公倍数#include<stdio.h>int gys(int a,int b){int m,n,t,r;if(a<b){t=a;a=b;b=t;}n=a;m=b;while((r=m%n)!=0){m=a;n=r;}return(n);}int gbs(int a,int b){int k;k=a*b/gys(a,b);return k;}void main(){int a,b;printf("请输入两个整数:\n");scanf("%d%d",&a,&b);printf("最大公约数是:%d\n",gys(a,b));printf("最小公倍数是:%d\n",gbs(a,b));}8.2//一元二次方程根的情况#include<stdio.h>#include<math.h>void gen(float a,float b,float c){float k1,k2;if(b*b-4*a*c<0)printf("该函数没有实数根!\n");else if(b*b-4*a*c==0){k1=-b+sqrt(b*b-4*a*c);printf("该函数有两个相同的根为:%3.2f",k1/2);printf("\n");}else{k1=(-b+sqrt(b*b-4*a*c))/(2*a);k2=(-b-sqrt(b*b-4*a*c))/(2*a);printf("该函数有两个不同的根为:%3.2f,%3.2f",k1,k2);printf("\n");}}void main(){float a,b,c;printf("请输入三个实数:\n");scanf("%f%f%f",&a,&b,&c);gen(a,b,c);}8.3//是否为素数#include<stdio.h>#include<math.h>void sushu(int a){int i;for(i=2;i<=a-1;i++)if(a%i==0) {printf("%d不是素数",a);break;}else {printf("%d是素数",a);break;}}void main(){int a;printf("请输入一个实数:\n");scanf("%d",&a);sushu(a);}8.4//矩阵转置#include<stdio.h>#include<math.h>#define N 3int array[N][N];convert(array)int array[3][3];{int i,j,t;for(i=0;i<N;i++)for(j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}void main(){int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&array[i][j]);convert(array);for(i=0;i<N;i++){printf("\n");for(j=0;j<N;j++)printf("%5d",array[i][j]);}}8.5//字符串反向输出#include<stdio.h>//#include<string.h>#include<math.h>void string(char a[]){int i,k;char b[10];for(i=0;a[i]!=0;i++);k=i;for(i=0;i<k;i++)b[i]=a[k-i-1];b[i]=0;//结束字符串标志printf("%s",b);}void main(){char a[10];printf("请输入一个字符串:\n");scanf("%s",a);printf("倒序后的字符串为:\n");string(a);}8.6//连接两个字符串#include<stdio.h>#include<string.h>#include<math.h>char concate(char str1[],char str2[],char str[]) {int i,j;for(i=0;str1[i]!='\0';i++)str[i]=str1[i];for(j=0;str2[j]!='\0';j++)str[i+j]=str2[j];str[i+j]='\0';}main(){char s1[100],s2[100],s[100];scanf("%s",s1);scanf("%s",s2);concate(s1,s2,s);printf("\ns=%s",s);}8.7//找出字符串中的元音字母#include<stdio.h>#include<string.h>#include<math.h>char find(char str1[],char str2[]){int i,j=0;for(i=0;str1[i]!=0;i++){if(str1[i]=='a'||str1[i]=='A'||str1[i]=='e'||str1[i]=='E'||str1[i]=='i'||str1[i]=='I'||str1[i]=='o'||str1[i]=='O'||str1[i]=='u'||str1[i]=='U')str2[j++]=str1[i];else continue;}str2[j]='\0';printf("%s中元音字母是%s\n",str1,str2);}main(){char str1[100],str2[100];scanf("%s",str1);find(str1,str2);}8.8//输入数字1990输出1 9 9 0#include<stdio.h>#include<string.h>void main(){char str[80];scanf("%s",str);insert(str);}insert(str)char str[];{int i;for(i=strlen(str);i>0;i--){str[i*2]=str[i];str[i*2-1]=' ';}printf("%s\n",str);}8.9//统计字母,数字,空格,和其他字符的个数#include<stdio.h>#include<string.h>int alph,digit,space,others;void main(){char text[80];gets(text);alph=0,digit=0,space=0,others=0;count(text);printf("\nalph=%d,digit=%d,space=%d,others=%d\n",alph,digit,space,others);}count(char str[]){int i;for(i=0;str[i]!='\0';i++)if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))alph++;else if(str[i]>='0'&&str[i]<='9')digit++;else if(strcmp(str[i],' ')==0)space++;else others++;}8.10//输出最长单词#include<stdio.h>#include<string.h>int zimu(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))return(1);elsereturn(0);}int longest(char string[]){int i,point,point1,num=0,nummax=0,flag=1;for(i=0;i<=strlen(string);i++)if(zimu(string[i]))//是字母则记下起始位置和长度if(flag){point=i;flag=0;}elsenum++;else //不是字母则比较长度重新记下初始位置{flag=1;if(num>nummax){nummax=num;point1=point;}}return point1;}void main(){int i;char line[100];gets(line);for(i=longest(line);zimu(line[i]);i++)printf("%c",line[i]);printf("\n");}8.11//冒泡法字符串排序#include<stdio.h>#include<string.h>#define N 10char str[N];main(){int i,flag;for(flag=1;flag==1;){scanf("%s",str);if(strlen(str)>N)printf("input error");else flag=0;}sort(str);for(i=0;i<N;i++)printf("%c",str[i]);sort(char str[N]){int i,j;char t;for(j=1;j<N;j++)for(i=0;(i<N-j)&&(str[i]!='\0');i++)if(str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}}8.12//找根的值,一元三次方程牛顿迭代公式法#include<stdio.h>#include<string.h>#include<math.h>float solut(float a,float b,float c,float d){float x=1,x0,f,f1;do{x0=x;f=((a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;}while(fabs(x-x0)>=1e-5);return(x);}void main(){float a,b,c,d;scanf("%f,%f,%f,%f",&a,&b,&c,&d);printf("x=%10.7f\n",solut(a,b,c,d));}8.13//递归法#include<stdio.h>#include<string.h>#include<math.h>void main()int x,n;float p();scanf("%d,%d",&n,&x);printf("P%d(%d)=%10.2f\n",n,x,p(n,x));}float p(int tn,int tx){if(tn==0)return(1);else if(tn==1)return(tx);elsereturn(((2*tn-1)*tx*p((tn-1),tx)-(tn-1)*p((tn-2),tx))/tn);}8.14//输入10个学生5门课的成绩,分别用函数求(1)每个学生的平均分(2)每门课的平均分(3)招出最高分的学生和课程(4)求平均方差//输入10个学生5门课的成绩,分别用函数求(1)每个学生的平均分(2)每门课的平均分(3)招出最高分的学生和课程(4)求平均方差#include<stdio.h>#include<string.h>#include<math.h>#define N 4#define M 4float score[N][M];float a_stu[N],a_cor[M];main(){int i,j,r,c;float h;float s_diff();float highest();input_stu();avr_stu();avr_cor();printf("\n人数科目 1 2 3 4 平均分");for(i=0;i<N;i++){printf("\nNO%2d",i+1);for(j=0;j<M;j++)printf("%8.2f",score[i][j]);//每个学生的各门成绩printf("%8.2f",a_stu[i]); //每个学生的平均成绩}printf("\n课程平均成绩");for(j=0;j<M;j++)printf("%8.2f",a_cor[j]);h=highest(&r,&c);printf("\n最高分为%8.2f在第%d行第%d列\n",h,r,c);printf("\n平均分方差为%8.2f\n",s_diff());}/*输入是个学生的成绩*/input_stu(){int i,j;float x;for(i=0;i<N;i++){printf("请输入第%d个学生的成绩:\n",i+1);for(j=0;j<M;j++){scanf("%f",&x);score[i][j]=x;}}}/*输出每个学生的平均成绩*/avr_stu(){int i,j;float s;for(i=0;i<N;i++){for(j=0,s=0;j<M;j++)s+=score[i][j];a_stu[i]=s/5.0;}}/*输出每门课的平均成绩*/avr_cor(){int i,j;float s;for(j=0;j<M;j++){for(i=0,s=0;i<N;i++)s+=score[i][j];a_cor[j]=s/(float)N;}}/*求最高分和它属于哪个学生,哪门课*/float highest(int *r,int *c){float high;int i,j;high=score[0][0];for(i=0;i<N;i++)for(j=0;j<M;j++)if(score[i][j]>high){high=score[i][j];*r=i+1;//用指针实现双向传递很经典,也可该用全局变量*c=j+1;}return(high);}float s_diff(){int i,j;float sumx=0.0,sumxn=0.0;for(i=0;i<N;i++){sumx+=a_stu[i]*a_stu[i];sumxn+=a_stu[i];}return(sumx/N-(sumxn/N)*(sumxn/N));}8.15//输入10个职工的姓名和职工号按职工号由小到大排列,姓名顺序也随之调整//输入一个职工号用折半法找出该职工的姓名#include<stdio.h>#include<string.h>#include<math.h>#define N 3void input_e(num,name)int num[];char name[N][8];{int i;for(i=0;i<N;i++){printf("\ninput No.");scanf("%d",&num[i]);printf("input name:");getchar();gets(name[i]);}}void sort(num,name)int num[];char name[N][8];{int i,j,min,temp1;char temp2[8];for(i=0;i<N-1;i++){min=i;for(j=i;j<N;j++)if(num[min]>num[j])min=j;temp1=num[i];num[i]=num[min];num[min]=temp1;strcpy(temp2,name[i]);strcpy(name[i],name[min]);strcpy(name[min],temp2);}for(i=0;i<N;i++)printf("\n%5d%10s",num[i],name[i]); }void search(n,num,name)int n,num[];char name[N][8];{int top,bott,min,loca;loca=0;top=0;bott=N-1;if((n<num[0])||(n>num[N-1])) loca=-1;while((loca==0)&&(top<=bott)){min=(bott+top)/2;if(n==num[min]){loca=min;printf("number=%d,name=%s\n",n,name[loca]);}else if(n<num[min]) bott=min-1;else top=min+1;}if(loca==0||loca==-1)printf("number=%d is not in table\n",n);}main(){int num[N],number,flag,c,n;char name[N][8];input_e(num,name);sort(num,name);for(flag=1;flag;){scanf("%d",&number);search(number,num,name);printf("continueY/N!");c=getchar();if(c=='N'||c=='n')flag=0;}}8.16//输入16进制输出10进制#include<stdio.h>#include<string.h>#include<math.h>#define MAX 1000main(){int c,i,flag,flag1;char t[MAX];i=0;flag=0;flag1=1;while((c=getchar())!='\0'&&i<MAX&&flag1){if(c>='0'&&c<='9'||c>='A'&&c<='F'||c>='a'&&c<='f'){flag=1;t[i++]=c;}else if(flag){t[i]='\0';printf("\nnumber=%d\n",htoi(t));printf("continue");c=getchar();if(c=='n'||c=='N')flag1=0;else {flag=0; i=0; }}}}htoi(s)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);}8.17//递归法#include<stdio.h>void convert(n)int n;{int i;if((i=n/10)!=0)convert(i);putchar(n%10+'0');}main(){int number;scanf("%d",&number);if(number<0){putchar('-');number=-number;}convert(number);}8.18//年月日具体是多少天#include<stdio.h>#include<string.h>#include<math.h>void main(){int year,month,day;int days;int sum_day();int leap();scanf("\n%d%d%d",&year,&month,&day);days=sum_day(month,day);if(leap(year)&&(month>=3)){days+=1;printf("%d年共有366天该天是其中的%d天",days);}elseprintf("%d年共有365天该天是其中的%d天",days); }static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /*总天数*/int sum_day(int month,int day){int i;for(i=1;i<month;i++)day+=day_tab[i];return(day);}/*是否为闰年*/int leap(int year){int leap;leap=year%4==0&&year%100!=0||year%400==0;return(leap);}。

C语言课后习题答案(第1-8章)

C语言课后习题答案(第1-8章)

C语言课后习题答案(第1-8章)1.有的编程题答案有多种,只给出一种参考答案。

2.结合课本学习编程思想与技巧。

第一章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中的醋倒入B2.输入一个数放在a中max = a以下步骤重复9次:输入一个数放在a中如果a>max,max=a打印max的值3.如果a<b< bdsfid="85" p=""></b<>temp=aa=bb=temp如果c>atemp = aa=cc=temp否则如果c>btemp=bb=cc=temp打印a,b,c的值4.i=1sum=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做以下循环,直到m,n 能够被i 整除:如果m 能够被i 整除并且n 能够被i 整除 i 即是m 和n 的最大公约数跳出循环否则 i=i-1 打印i 的值8.data=b*b —4*a*c 如果data >0否则如果data=0 x1=x2=—b/2 否则无实数解三、编程题1.main () { a data b x 2)(1+-=adata b x 2)(2--=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. B2. C3. A4. A5. D6. B7.A8.C9.D二、写出下列程序的运行结果1.aabb cc abcAN2.ab97983. 9,11,9,104.a=2,b=3,c=25.s1=2.500000s2=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",c1,c2,c3,c4,c5);}第三章顺序程序设计选择题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.1415926main( ){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.D2.D3.D4.C5.D6.A7.B8.B9.A 10.D.11.B 12.A 13.B 14.C 15.C 16.A 17.A 18.B 19.D 20.D21.A二、填空题1.5858582.03.184.89215.20,06.67.1,3,28.Year%400==0year%100!=0count++三、编程题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(“这是个一位数”);elseprintf(“输入错误”);}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 ",a);}printf("\n");}4、main(){int i,n;printf("input n:");scanf("%d",&n);printf("\n%d=",n);for(i=2;i<=n;i++){while(i!=n)if(n%i==0){printf("%d*",i);n/=i;} else break;}printf("%d\n",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. B2. A3. C4. C5. D6. B7.C8.B9.C 10. B二、写出下列程序的运行结果1.S=3682.*************************3.S1=18S2=104.!margorP5.数字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",&a[i]);printf("\n");for (i=1;i<=9;i++)for (j=1;j<=10-i;j++)if (a[j]<a[j+1])< bdsfid="320" p=""></a[j+1])<> {t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("the sorted number is:\n");for (i=1;i<11;i++)printf("%4d",a[i]);}2.#include "stdio.h"main(){int a[11],i,b;printf("imput 10 sorted number:\n");for (i=0;i<10;i++)scanf("%d",&a[i]);printf("input an integer:\n");scanf("%d",&b);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",a[i]);}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",&a[i]);for (i=0,j=4;i<="" bdsfid="348" p="">{t=a[i];a[i]=a[j];a[j]=t;}for (i=0;i<5;i++) /*逆序存放后重新输出*/printf("%5d",a[i]);}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",a[i][j]);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",&a[i][j]);max=a[0][0]; row=0; col=0;for (i=0;i<3;i++) /*寻找矩阵中的最大值及其行列号*/ for (j=0;j<4;j++)if (max<a[i][j])< bdsfid="376" p=""></a[i][j])<>{max=a[i][j]; row=i, col=j;}printf("\n数组中最大的数是%d,其行号是%d,列号是%d\n",max,row,col);}6.#define N 3#define M 4#include "stdio.h"main(){int a[N][M],i,j,k,max,row,col;printf("input %d*%d matrix: \n",N,M);for (i=0;i<="" bdsfid="387" p="">for (j=0;j<m;j++)< bdsfid="389" p=""></m;j++)<>scanf("%d",&a[i][j]);for (i=0;i<="" bdsfid="392" p="">{max=a[i][0]; row=i; col=0;for(j=1;j<a[i][j])<="" *求矩阵中每一行的最大值及其所行列号*="" bdsfid="395" if="" p="">{max=a[i][j]; col=j;}for (k=0;k<max)<="" *判断每一行的最大值在其所在列是否最大*="" bdsfid="398" if="" p="">break;if (k==N) /*得到鞍点*/{printf("the point is %d,row=%d,col=%d\n",max,row,col);break;}}if (i==N) /*没有鞍点*/printf("no point\n");}7.#include "stdio.h"{int num=0,word=0;/*word=0表示未出现单词,如出现单词就置word为1.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",num);}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++;elseothn++;}}for(i=0;i<3;i++)printf("%s\n",text[i]);printf("uppn=%d\n",uppn);printf("lown=%d\n",lown);printf("dign=%d\n",dign);printf("span=%d\n",span);printf("othn=%d\n",othn);}9.#include "stdio.h"{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)printf("%d\n",str1[i]-str2[i]);}第六章函数与编译预处理一、单项选择题1. C2. B3. B4. B5. A6. B7.A8.C9.D 10. A二、写出下列程序的运行结果1.92.4,B8,B3.-4.0000004.a=6,b=55.48三、编程题1.main(){ int prime(int n);int n;printf("input n(n>0):\n");scanf("%d",&n);if (prime(n))printf("%d is a sushu\n",n);else printf("%d is not a sushu\n",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 3convert(int array[3][3]){ int i,j,t;for (i=0;i<n-1;i++)< bdsfid="507" p=""></n-1;i++)<> for (j=i+1;j<n;j++)< bdsfid="509" p=""></n;j++)<> {t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}main(){int i,j;int a[N][N];printf("input a:\n");for (i=0;i<n;i++)< bdsfid="520" p=""></n;i++)<>for (j=0;j<n;j++)< bdsfid="522" p=""></n;j++)<> scanf("%d",&a[i][j]);printf("Array a:\n");for (i=0;i<n;i++)< bdsfid="526" p=""></n;i++)<> {for (j=0;j<n;j++)< bdsfid="528" p=""></n;j++)<> printf("%5d",a[i][j]);printf("\n");}convert(a);printf("a de zhuanzhi is:\n");for (i=0;i<n;i++)< bdsfid="535" p=""></n;i++)<>{for (j=0;j<n;j++)< bdsfid="537" p=""></n;j++)<>printf("%5d",a[i][j]);printf("\n");}}3. #include#includemain(){char str[100];printf("input a string:\n") ;gets(str);inverse(str);printf("the reversed string is:%s\n",str);}inverse(char str[]){char t;int i,j;for (i=0,j=strlen(str)-1;i<j;i++,j--)< bdsfid="558" p=""></j;i++,j--)<>{t=str[i];str[i]=str[j];str[j]=t;}4. #includeconcat(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",str); insert(str);printf("result is:\n%s\n",str);}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 if ((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);count(text);printf("ndight=%d,nletter=%d,nwhite=%d,nother=%d\n",n dight,nletter,nwhite,nother); }7. #define N 10#includesort(char str[]){int i,j;char t;for (i=1;i<n;i++)< bdsfid="625" p=""></n;i++)<>for (j=0;j<n-i;j++)< bdsfid="627" p=""></n-i;j++)<> if (str[j]>str[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);printf("The sorted result:\n") ;for(i=0;i<n;i++)< bdsfid="639" p=""></n;i++)<> printf("%c",str[i]);}8.这题较复杂#include#include#define N 10void input_e(int num[],char name[N][8]){int i;for (i=0;i<n;i++)< bdsfid="651" p=""></n;i++)<> { printf("input gong hao:");scanf("%d",&num[i]);printf("input name:");getchar();gets(name[i]);}for (i=0;i<n;i++)< bdsfid="659" p=""></n;i++)<> printf("%5d%10s\n",num[i],name[i]);}void sort(int num[],char name[N][8]) /*选择法排序*/{int i,j,min,temp1;char temp2[8];for (i=0;i<n-1;i++)< bdsfid="666" p=""></n-1;i++)<> {min=i;for (j=i+1;j<n;j++)< bdsfid="669" p=""></n;j++)<>if (num[j]temp1=num[i];strcpy(temp2,name[i]);num[i]=num[min];strcpy(name[i],name[min]);num[min]=temp1;strcpy(name[min],temp2);}printf("the sorted result:\n");for (i=0;i<n;i++)< bdsfid="681" p=""></n;i++)<>printf("%5d%10s\n",num[i],name[i]);}void search(int n,int num[],char name[N][8]) /*折半查找法*/ { int top,bott,mid,find;bott=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",n,name[mid]);}else if (n<num[mid])< bdsfid="695" p=""></num[mid])<> bott=mid-1;else top=mid+1;}if ((find==-1)||(find==0))printf("%d is not found.\n",n);}main(){int num[N],number,c,flag;char name[N][8];input_e(num,name);sort(num,name);for (flag=1;flag;){printf("please input chazhao de gonghao:"); /*输入查找的工号*/ scanf("%d",&number);search(number,num,name);printf("continue Y/N?"); /*是否继续查找*/getchar();c=getchar();if (c=='N'||c=='n')flag=0;}}9. #include "stdio.h"#define MAX 10main(){char str[MAX];char c;int i;i=0;printf("input number(16 jinzhi): "); /*输入一个十六进制的数*/while((c=getchar())!='\n'&&i<max)< bdsfid="727" p=""></max)<>{ str[i]=c;i++;printf("result is :%d\n",htod(str));}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 SW AP(a,b) t=a;a=b;b=t main(){int a,b,t;printf("input a,b:") ;scanf("%d,%d",&a,&b);SW AP(a,b);printf("result:a=%d,b=%d\n",a,b);}11. #define SURPLUS(a,b) ((a)%(b)) main(){int a,b;printf("input a,b:");scanf("%d,%d",&a,&b);printf("result is: %d\n",SURPLUS(a,b)); } 12. main(){int a,b,c;printf("input a,b,c:");scanf("%d,%d,%d",&a,&b,&c);printf("max=%d\n",max(a,b,c));}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",&a,&b,&c);printf("max=%d\n",MAX(MAX(a,b),c)); }13. #include "stdio.h"#define CHANGE 1#define MAX 80main(){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;}#endifprintf("%s\n",str);}第七章指针一、选择题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",&a[i]);printf("array a:\n");for(i=0;i<10;i++)printf("%4d",a[i]);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",a[i]);}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",&a[i][j]);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",a[i][j]);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。

《C语言程序设计》课后习题答案第八章

《C语言程序设计》课后习题答案第八章

8.1 编写两个函数,分别求两个证书的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果,两个整数由键盘输入。

void main(){ int Mgy(int x,int y);int Mgb(int z);int a,b,mgy,mgb;printf("请输入两个数:\n");scanf("%d,%d",&a,&b);mgy=Mgy(a,b);mgb=Mgb(a,b,mgy);printf("两个数的最大公约数为%d,最小公倍数为%d\n",mgy,mgb);}int Mgy(int x,int y){ int r,temp;if(x<y){ temp=x;x=y;y=temp;}while(x%y!=0){ r=x%y;x=y;y=r;}return y;}int Mgb(int x,int y,int z){ return (x*y/z);}8.2 求方程ax²+bx+c=0的根,用三个函数分别求当b²-4ac大于零、等于零和小于零时的根,8.3编写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。

#include<math.h>void main(){ int Isprime(int a);int m,temp=0;printf("请输入一个数:\n");scanf("%d",&m);temp=Isprime(m);if(temp==0) printf("%d不是素数。

\n",m);else printf("%d是素数。

\n",m);}int Isprime(int a){ int i,k,flag;if(a==0||a==1) flag=0;else{ k=sqrt(a);for(i=2;i<=k;i++)if(a%i==0) flag=0; }return flag; }8.8 写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一格空8.9编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符8.10 写一个函数,输入一行字符,将此字符串中最长的单词输出。

c语言程序设计第五版课后答案谭浩强第八章课后答案

c语言程序设计第五版课后答案谭浩强第八章课后答案

c语⾔程序设计第五版课后答案谭浩强第⼋章课后答案c语⾔程序设计第五版课后答案谭浩强习题答案第⼋章善于利⽤指针本章习题均要求使⽤指针⽅法处理。

1. 输⼊3个整数,要求按由⼩到⼤的顺序输出。

解题思路:先获取到三个变量的地址,然后获取三个数据,通过指针进⾏⽐较转换即可答案:#include <stdio.h>void swap(int *p_a, int *p_b){int temp = *p_a;*p_a = *p_b;*p_b = temp;}int main(){int a, b, c, *p_a = &a, *p_b = &b, *p_c = &c; // 获取每个变量空间的地址printf("Please enter three numbers:");scanf_s("%d%d%d", p_a, p_b, p_c);if (*p_a > *p_b) {swap(p_a, p_b);//通过指针进⾏指向空间内的数据交换}if (*p_a > *p_c) {swap(p_a, p_c);}if (*p_b > *p_c) {swap(p_b, p_c);}printf("%d %d %d\n", *p_a, *p_b, *p_c);system("pause");return 0;}2. 输⼊3个字符串,要求按由⼩到⼤的顺序输出。

解题思路:字符串的⽐较可以使⽤strcmp函数,返回值>0表⽰⼤于,返回值⼩于0表⽰⼩于,返回追等于0表⽰相同。

其他的⽐较排序思路与数字的排序交换没有区别,逐个进⾏⽐较先找出最⼤的,然后找出第⼆⼤的。

答案:#include <stdio.h>int main(){char str[3][32];char *p[3];printf("Please enter three strings:");for (int i = 0; i < 3; i++) {p[i] = str[i];scanf_s("%s", p[i], 32);//后边的数字限制缓冲区边界,防⽌缓冲区溢出访问越界}//让p[0]和p[1]/p[2]分别进⾏⽐较,找出最⼤的字符串,i+1之后,则让p[1]和p[2]进⾏⽐较,找出第⼆⼤//i循环总个数-1次,最后⼀个是不需要⽐较的for (int i = 0; i < 2; i++) {for (int j = i + 1; j < 3; j++) {if (strcmp(p[i], p[j]) > 0) {char *tmp = p[i]; p[i] = p[j]; p[j] = tmp;}}}printf("%s %s %s\n", p[0], p[1], p[2]);system("pause");return 0;}3. 输⼊10个整数,将其中最⼩的数与第⼀个数对换, 把最⼤的数与最后⼀个数对换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档