20100524C语言第十一次作业
《精通C程序设计教程》第十、十一章部分习题答案-推荐下载
while(p&&p->quantity>s->quantity) { pr=p;p=p->next; } pr->next=s;s->next=p; } void Out(NodeTp *h) { NodeTp *p=h->next; while(p) { printf("%d,%d\n",p->no,p->quantity);p=p->next;} } void Ers(NodeTp *h) { NodeTp *p; while(h) { p=h;h=h->next;delete p;} } void main() { NodeTp *h,*s,*ps;int no,quantity; h=new NodeTp;h->next=NULL; while(1) { printf("Input no and quantity:");scanf("%d%d",&no,&quantity);
第11章c语言课后答案
2: /*打开文件,关闭文件的含义是什么?为什么要打开关闭文件?*/
答: 打开文件的含义:要把文件使用方式写入FILE结构体变量中;返回一个FILE结构体指针,指向该文件的FILE结构
体变量,通过该文件指针可以对文件进行操作。
关闭文件的含义:文件指针不再指向原来指向的文件。
为什么要打开文件:(1)要确定文件的使用方式;(2)要得到一个指向文件的指针;(3)还需检测文件是否存在,
磁盘是否出故障等。
为什么要关闭文件:(1)防止文件被误用;(2)具体系统中同时打开的文件的数目是有限的。
{ k=i;
for(j=i+1;j<n;j++)
if(stu1[i].ave<stu1[j].ave)k=j;
if(k!=i)
{ change=stu1[i];stu1[i]=stu1[j];stu1[j]=change;}
}
fp=fopen("stu2","wb");
exit(1);
}
printf("\nInput char: ");
while((str=fgetc(stdin))!='#')
fputc(str,fp);
fclose(fp);
fp=fopen("text.txt","r");
while((str=fgetc(fp))!=EOF)
for(i=0;i<n;i++)
{ printf("Input the message of %d student\n",i+1);
C语言程序设计第九-十一章习题参考答案
C语言第九章参考答案1.选择题:12345 67890 12ADCDB BCDDC BB2.填空题:(1)指针或者地址(2)110(3)①char *p; ②p=&ch; ③scanf("%c",p); ④*p='a'; ⑤printf("%c",*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 7ㄩ1(9)void (*p)(int * ,int*); (10)r+b[k] (11) '\0' 、n++; (12)aegi 3.改错题:(1) 第一处改正:* sub=x-y第二处改正:scanf("%f%f",&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2="\0"改为*p2='\0'(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int **b,int n)改为fun(int (*b)[N],int n)第二处:b[j][k]=k*j 改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array[20],int n,int m) ;main(){ int number[20],n,m,i;printf("How many numbers?"); /*共有多少个数*/scanf("%d",&n);printf("Input %d numbers:\n",n); /*输入n个数*/for(i=0;i<n;i++)scanf("%d",&number[i]);printf("How many place you want to move?"); /*后移多少个位置*/scanf("%d",&m);move(number,n,m); /*调用move函数*/ printf("Now,they are:\n");for(i=0;i<n;i++)printf("%d ",number[i]);}void move(int array[20],int n,int m) /*循环后移函数*/{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2 */#include<stdio.h>#include<string.h>#define TOTAL 6int mseek(char*str[],char xstr[],int n){ int i;for(i=0; i<n; i++){ if(strcmp(str[i],xstr)==0)return 1;}return 0;}main(){ char*name[TOTAL]={"Lining","Linshan","Tianyuan","Zhangqiang","Haipo","Fangbing"};char xname[20];printf("enter a name:");gets(xname);if(mseek(name,xname,TOTAL))printf("Found!\n");elseprintf("Not found!\n");}(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num[4]){ int i;for(i=0; i<4; i++) num[i]=0;while(*str!='\0'){ if(*str>='a' && *str<='z' || *str>='A' && *str<='Z')num[0]++;else if(*str==' ')num[1]++;else if(*str>='0' && *str<='9')num[2]++;elsenum[3]++;str++;}}#define N 80main(){ int string[N];int n[4],i;gets(string);fun(string,n);for(i=0; i<4; i++)printf("%d\t",n[i]);}(4)/*习题9-4-4 *//* 调试时,可这样输入数据:*//*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main(){ int a[5][5],*p,i,j;void change(int *p);printf("Input matrix:\n");for(i=0;i<5;i++) /*输入矩阵*/for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=&a[0][0]; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: \n");for(i=0;i<5;i++) /*输出已交换的矩阵*/{ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\n");}}void change(int *p) /*交换函数*/{ int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j<5;j++){ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}temp=*(p+12); /*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p; /*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i<5;i++) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第三最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; /*将第三最小值换给左下角元素*/ temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第四最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5 *//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#include <stdio.h>void avcour1(float score[][5]);void fali2(int num[4],float score[4][5]);void good(int num[4],float score[4][5]);main(){int i,j,num[4];//数组num代表学号float score[4][5];printf("Input NO. and scores: \n");for(i=0;i<4;i++){ printf("NO.");scanf("%d",&num[i]);printf("scores:");for(j=0;j<5;j++)scanf("%f",&score[i][j]);}printf("\n\n");avcour1(score); /*求出第一门课的平均成绩*/ printf("\n\n");fali2(num,score); /*找出2门课不及格的学生*/printf("\n\n");good(num,score); /*找出成绩好的学生*/}void avcour1(float score[][5]) /*第一门课的平均成绩的函数*/{ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+score[0][i]; /*累计每个学生的得分*/ average1=sum/4; /*计算平均成绩*/printf("course 1 average score: %6.2f. \n",average1);}void fali2(int num[4],float score[4][5])/*找两门以上课程不及格的学生的函数*/{ int i,j,k,label;float sum=0;printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ label=0;for(j=0;j<5;j++)if((score[i][j])<60.0) label++;if(label>=2){ printf("%5d",num[i]);for(k=0;k<5;k++){ printf("%10.2f",score[i][k]);sum+=score[i][k];}printf("%10.2f\n",sum/5);}}}void good(int num[4],float score[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/ { int i,j,k,n;float sum=0,aver[4];printf("= = = = = = = =Student whose score is good= = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ n=0;sum=0;for(j=0;j<5;j++){if((score[i][j])>85.0) n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]>=90)){ printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}(6)/*习题9-4-6*/#include <math.h>double sigma(double (*fn)(double),double l,double u){ double sum=0,d;for(d=l; d<u; d+=0.1)sum+=fn(d);return sum;}void main(){ double sum;sum=sigma(sin,0.1,1.0);printf("sum of sin from 0.1 to 1.0 is: %f\n",sum);sum=sigma(cos,0.5,3.0);printf("sum of cos from 0.5 to 3.0 is: %f\n",sum);}(7)/*习题9-4-7 */main(){ int i;char *month_name(int n);printf("input Month No.:\n");scanf("%d",&i);printf("Month No.:%2d --> %s\n",i,month_name(i)); /*调用指针函数month_name()*/ }char *month_name(int n)/*定义一个指针函数month_name(),返回一个指向字符串的指针*/{ static char *name[]={"Illegal Month","January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};return((n<1||n>12)?name[0]:name[n]);}(8)/*习题9-4-8 */#include <stdio.h>#include <string.h>#define N 10main(){ void sort(char *p[]);int i;char *p[N],str[N][20];for(i=0;i<N;i++)p[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input strings:\n");for(i=0;i<N;i++)scanf("%s",p[i]);sort(p);printf("Now, the sequence is:\n");for(i=0;i<N;i++)printf("%s\n",p[i]);}void sort(char *p[]){ int i,j;char *temp;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}(9)/*习题9-4-9 */#include <stdio.h>#define LINEMAX 20 /*定义字符串的最大长度*/main(){ void sort(char **p);int i;char **p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组pstr的第i 个元素*/printf("Input 5 strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(p);printf("strings sorted:\n");for(i=0;i<5;i++)printf("%s\n",pstr[i]);}void sort(char **p) /*冒泡法对5个字符串排序的函数*/ { int i,j;char *temp;for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/{ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}(10)void StrOR(char xx[][80],int maxline){ int i,righto,j,s,k;char temp[80];for(i=0; i<maxline; i++)for(j=strlen(xx[i])-1; j>=0; j--){ k=0; memset(temp,0,80);if(xx[i][j]=='o'){ righto=j;for(s=righto+1; s<strlen(xx[i]); s++)temp[k++]=xx[i][s];for(s=0;s<righto;s++)if(xx[i][s]!='o') temp[k++]=xx[i][s];strcpy(xx[i],temp);}else continue;}}C语言第十章参考答案1. 选择dccda cab2..填空(1)struct studentstrcmp(str,stu[i].name)==0break;(2)p=personp-person<3old=p->age;q->name,q->age(3)p!=NULLc++p->next(4)&per[i].body.eye&per[i].body.f.height&per[i].body.f.weight3.编程题(1)#include <stdio.h>struct data{ int year;int month;int day;};main(){ struct data a;int monthnum[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,sum=0;scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++)sum+=monthnum[i];sum+=a.day;if(a.year%4==0 && a.year%100!=0 ||a.year%400==0)sum+=1;printf("%d年%d月%d日is the %d day",a.year,a.month,a.day,sum); }(2)#include <stdio.h>#include <stdlib.h>struct study{ float chinese;float maths;float english;float avg;};main(){ struct study student;scanf("%f%f%f",&student.chinese,&student.maths,&student.english);student.avg=(student.chinese+student.maths+student.english)/3;printf("average score is %f\n",student.avg);}(3)#include <stdio.h>#include <stdlib.h>struct study{ int num;float chinese;float maths;float english;float avg;};main(){ struct study s[3];struct study *p;for(p=s;p<s+3;p++){ scanf("%d%f%f%f",&(p->num),&(p->chinese),&(p->maths),&(p->english));p->avg=(p->chinese+p->maths+p->english)/3;}for(p=s;p<s+3;p++)printf("%d %3.1f %3.1f %3.1f %3.1f\n",p->num,p->chinese,p->maths,p->english,p->a vg);}(4)#include <stdio.h>#include <string.h>#define N 3typedef struct{char dm[5]; /*产品代码*/char mc[11]; /* 产品名称*/int dj; /* 单价*/int sl; /* 数量*/long je; /* 金额*/} PRO;void SortDat(PRO sell[],int n){ int i,j;PRO xy;for(i=0; i<N-1; i++)for(j=i+1; j<N; j++)if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}void main(){ PRO sell[N];int i;for(i=0; i<N; i++){scanf("%s%s",sell[i].dm,sell[i].mc); //可这样输入,如:101 aaascanf("%d%d",&sell[i].dj,&sell[i].sl); //可这样输入,如:10 20sell[i].je=sell[i].dj*sell[i].sl;}SortDat(sell,N);printf("dm\t\tmc\t\tdj\tsl\tje\n");for(i=0; i<N; i++){printf("%s\t\t%s\t\t%d\t%d\t%ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}(5)#include <stdio.h>#include <stdlib.h>main(){int *pi;int i,j,t,n;printf("输入整数个数:");scanf("%d",&n);pi=(int *)malloc(n*sizeof(int));printf("输入整数:");for(i=0; i<n; i++)scanf("%d",&pi[i]);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(pi[i]>pi[j]){t=pi[i]; pi[i]=pi[j]; p i[j]=t;}for(i=0; i<n; i++)printf("%d ",pi[i]);printf("\n");free(pi);}#include <stdio.h>#include <stdlib.h>struct stu{ int num;char name[20];int age;struct stu *next;};void list(struct stu *head){ struct stu *p;printf("The list records are:\n");p=head;if(head!=NULL)do{ printf("%d\t%s\t%d\n",p->num,p->name,p->age);p=p->next;}while(p!=NULL);elseprintf("The list is null");}struct stu * insert(struct stu *head,struct stu *stud){ struct stu *p0,*p1,*p2;p1=head; /*p1指向链表第一个节点*/ p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原链表是空表*/{ head=p0;p0->next=NULL; /*p0作为头指针*/ }else{ while((p1!=NULL)&&(p0->num>=p1->num)){ p2=p1;p1=p1->next;} /*p1指针后移*/if(p1!=NULL){ if(head==p1) head=p0;/*插入链表开头*/else p2->next=p0; /*插入到p2节点之后*/p0->next=p1;}else{ p2->next=p0;p0->next=NULL;}/*插入到最后*/return head;}main(){ struct stu *newstu,*head;head=NULL;int num;scanf("%d",&num);while(num!=0){ newstu=(struct stu *)malloc(sizeof(struct stu));newstu->num=num;scanf("%s",newstu->name);scanf("%d",&newstu->age);head=insert(head,newstu);scanf("%d",&num);}list(head);}(7)#include <stdio.h>void partition(unsigned long int num){ union a{ unsigned short int part[2];unsigned long int w;}n,*p;p=&n;n.w=num;printf("long int=%lx\n",num);printf("low part num=%0x,high part num=%0x\n",p->part[0],p->part[1]); }main(){ unsigned long int x;x=0x23456789; //这是为了调试方便,应改为scanf函数partition(x);}C语言第十一章参考答案一、选择1.B2.A3.B4.C5.B6.C7.D8.C9.C、D 10.A 11.A 12.C 13.B二、填空1 :fopen(fname,"w")ch2:"r"fgetc(fp) 或getc(fp)3:"bi.dat"&jfp4:==NULLflag==1s[strlen(s)-1]=='\n'三、改错题1:第一处改为:long num=0;第二处改为: !feof(fp) 或!=0改为==02: 第一处改为:rewind(fp)第二处改为: fgetc(fp)!= '\n' '\0'后面加上&& feof(fp)!=1四、编程题(1)#include<stdio.h>#include <stdlib.h>#include <string.h>main(){FILE *fp;char str[100];int i=0;if((fp=fopen("myfile","w"))==NULL){ printf("Can not open the file.\n");exit(0);}printf("Input a string:\n");gets(str);while(str[i]!='!'){ if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("myfile","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}(2)#include<stdio.h>struct student{ char num[10];char name[8];int score[3];float ave;}stu[5];main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\nInput score of student %d:\n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++){ printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error\n");fclose(fp);fp=fopen("stud","r");for(i=0;i<5;i++){ fread(&stu[i],sizeof(struct student),1,fp);printf("%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}}(3)#include<stdio.h>#include <stdlib.h>main(){char s[80];int a;FILE *fp;if((fp=fopen("test","w"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(stdin,"%s%d",s,&a); //相当于scanffprintf(fp,"%s %d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(fp,"%s %d",s,&a);fprintf(stdout,"%s %d\n",s,a); //相当于printf fclose(fp);}(4)#include<stdio.h>#include <stdlib.h>main(){FILE *fp;int i,j,n,i1;char c[100],t,ch;if((fp=fopen("A","r"))==NULL){printf("Can not open the file.\n");exit(0);}printf("\nfile A:\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);i1=i;if((fp=fopen("B","r"))==NULL){ printf("\n Can not open the file.");exit(0);}printf("\nfile B:\n");for(i=i1;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);n=i;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(c[i]>c[j]){ t=c[i];c[i]=c[j];c[j]=t;}printf("\n file C:\n");fp=fopen("c","w");for(i=0;i<n;i++){ putc(c[i],fp);putchar(c[i]);}fclose(fp);}(5)#include<stdio.h>main(){FILE *fp1,*fp2;char ch;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");ch=fgetc(fp1);while(!feof(fp1)){putchar(ch);ch=fgetc(fp1);}rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}(6)#include<stdio.h>main(){FILE *fp; long position;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Sample data\n");position=ftell(fp);printf("position=%ld\n",position);fclose(fp);}第12章1.选择题(1)D (2)C (3)D (4)D (5)C(6)D (7)D (8)B (9)A (10).C2.填空题(1) //(2) public、private 、protected(3) 函数类型类名::函数名(形参表列) 或类型类名::函数名(参数表)(4) 内联函数(5) 构造函数(6) 类名, 创建对象时(7) 私有(8) 私有(9) 基类的构造函数成员对象的构造函数派生类本身的构造函数3.概念题(1)答:本质差别是C++是面向对象的,而C语言是面向过程的。
CPrimer 第11章泛型算法课后习题答案
第11章-泛型算法1.algorithm头文件定义了一个名为count的函数,其功能类似于find。
这个函数使用一对迭代器和一个值做参数,返回这个值出现的次数的统计结果。
编写程序读取一系列int型数据,并将它们存储到vector对象中然后统计某个指定的值出现了多少次。
// 11.17_11.1_int_to_vector_count.cpp : 定义控制台应用程序的入口点。
//#include"stdafx.h"#include<vector>#include<iostream>#include<algorithm>using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout << "\tInput some int numbers ( ctrl + z to end):\n\t ";vector<int> iVec;int iVal;while ( cin >> iVal )iVec.push_back( iVal );cout << "\n\tInput a num to search in the iVec: ";cin.clear();cin >> iVal;int iCnt = 0;if ( iCnt = count( iVec.begin(), iVec.end(), iVal )){cout << "\n\tThe value " << iVal << " occurs " << iCnt << " times." << endl;}system("pause");return 0;}2.重复前面的程序,但是,将读入的值存储到一个string类型的list对象中。
C语言第十一章习题答案
11.1#include <iostream>struct date{int year;int month;int day;}date;void main(){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31};int i,day_sum;printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);day_sum=0;for(i=0;i<date.month-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)&&(date.m onth>2))day_sum+=1;printf("\n\n该日在本年中是第%d天\n\n",day_sum);}11.2#include <iostream>struct date{int year;int month;}date;void main(){int days(int y,int m,int d);printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);printf("\n\n该日在本年中是第%d天\n\n",days(date.year,date.month,date.day));}int days(int y,int m,int d){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,day_sum;day_sum=0;for(i=0;i<m-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((y%4==0)&&(y%100!=0)||(y%400==0)&&(m>2))day_sum+=1;return day_sum;}11.3#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void print(struct stu *p);int i,j;struct stu *p;p=stu;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}print(stu);}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-8d%-8s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-8f",(p+i)->score[j]);}printf("\n\n");}}11.4#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void input(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);print(p);}void input(struct stu *p){int i,j;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-7d%-7s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-9.2f",(p+i)->score[j]);}printf("\n\n");}}11.5#include <iostream>#define N 3struct stu{char num[10];char name[10];float score[3];float average;}stu[N];void main(){void input(struct stu *p);void aver(struct stu *p);float aver_total(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);aver(p);print(p);}void input(struct stu *p){int i,j;printf("按顺序依次输入学生的学号,姓名,成绩1,成绩2,成绩3\n\n"); for(i=0;i<N;i++){scanf("%s%s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++)scanf("%f",&((p+i)->score[j]));}}void aver(struct stu *p){int i,j;float sum;for(i=0;i<N;i++){sum=0;for(j=0;j<3;j++){sum+=(p+i)->score[j];}(p+i)->average=sum/3;}}float aver_total(struct stu *p){float sum=0;for(;p<stu+N;p++)sum+=p->average;return (sum/N);}void print(struct stu *p){int i,j;struct stu *q;float max=0;printf("三门课的总平均成绩为:%f\n\n",aver_total(p));for(i=0;i<N;i++){if((p+i)->average>max){max=(p+i)->average;q=p+i;}}printf("最高分学生的数据为:\n\n");printf("学号姓名成绩1 成绩2 成绩3 平均成绩\n\n"); printf("%-7s%-7s",q->num,q->name);for(j=0;j<3;j++){printf("%-8.2f",q->score[j]);}printf("%-8.2f",q->average);printf("\n\n");}11.8#include <iostream>#include <malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{long int num;float score;struct student *next;}list_a,list_b;int n,sum;void main(){struct student *creat(void);struct student *insert(struct student *ha,struct student *hb); void print(struct student *head);struct student *ahead,*bhead,*abh;ahead=creat();sum=n;bhead=creat();sum=sum+n;abh=insert(ahead,bhead);print(abh);}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("输入学生的学号和成绩\n\n");printf("如果输入的学号为0,就停止输入\n\n");scanf("%ld%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%ld%f",&p1->num,&p1->score);}p2->next=NULL;return(head);}struct student *insert(struct student *ha,struct student *hb) {struct student *pa1,*pa2,*pb1,*pb2;pa1=pa2=ha;pb1=pb2=hb;if(ha==NULL&&hb!=NULL) ha=hb;else{while((pb1->num>pa1->num)&&(pa1->next!=NULL)){pa2=pa1;pa1=pa1->next;if(pb1->num<=pa1->num){if(ha==pa1) ha=pb1;else pa2->next=pb1;pb2=pb1;pb1=pb1->next;pa2=pa1;pa1=pb2;pb2->next=pa2;}}if((pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1;}return (ha);}void print(struct student *head){struct student *p;printf("\n\n共有%d条记录,分别为:\n\n",sum); p=head;if(head!=NULL)do{printf("%ld%8.2f\n",p->num,p->score);p=p->next;}while(p!=NULL);}11.9#include <iostream>#include <malloc.h>#define N 13struct person{int num;int next;}link[N+1];void main(){int i,count,h;for(i=1;i<=N;i++){if(i==N) link[i].next=1;else link[i].next=i+1;link[i].num=i;}printf("\n\n");count=0;h=N;printf("退出者依次是:\n\n");while(count<N-1){i=0;while(i!=3){h=link[h].next;if(link[h].num) i++;}printf("%d ",link[h].num);link[h].num=0;count++;}printf("\n\n最后的成员是:");for(i=1;i<=N;i++){if(link[i].num) printf("%d\n\n",link[i].num); }}11.10#include <iostream>#include <malloc.h>#define LEN sizeof(struct student)#define NULL 0struct student{long int num;char name[20];struct student *next;}a,b;int n;void main(){struct student *creat(void);struct student *dele(struct student *ahead,struct student *bhead); void print(struct student *head);struct student *p1,*p2;printf("输入a中同学的学号,姓名\n\n");p1=creat();printf("输入b中同学的学号,姓名\n\n");p2=creat();print(dele(p1,p2));}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);head=NULL;while(p1->num!=0){n+=1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);}p2->next=NULL;return(head);}struct student *dele(struct student *ahead,struct student *bhead) {struct student *ah,*bh;struct student *ap1,*ap2,*bp1,*bp2;ap1=ap2=ahead;bp1=bp2=bhead;while(ap1->next){while(bp1->next){if(ap1->num!=bp1->num){bp2=bp1;bp1=bp1->next;}else{if(ap1==ahead) ahead=ap1->next;else ap2->next=ap1;ap2=ap1;ap1=ap1->next;break;}}}return(ahead);}void print(struct student *head){struct student *p;printf("删除后a中学生学号及成绩分别为:\n\n"); p=head;if(head!=NULL){do{printf("%ld%s",p->num,p->name);p=p->next;}while(p!=NULL);}}。
第十一次作业讲解
1编写程序,用数组从键盘输入10个整数,求出它们的平均值、最大值和最小值。
分析:因为要输入10个整数,我们可以使用循环来做,在进入循环之前,我们先输入一个数,这个数在进行比较之前既是最大值max也是最小值min,进入循环输入数据以后,我们就可以用输入的数据和max以及min做比较,当它大于max我们就替换max的值,当它小于min我们就替换min,这样max和min里面始终存放的是最大值以及最小值。
main(){int a,max,min,i,s=0;scanf("%d",&a);max=a;min=a;s=s+a;for(i=1;i<=9;i++){scanf("%d",&a);s=s+a;if(a>max)max=a;if(a<min)min=a;}printf("max=%d\n",max);printf("min=%d\n",min);printf("average=%f\n",s/10.0);}2编写程序,从键盘输入10个整数,用选择排序法对它们按从大到小的循序排序并输出。
分析:因为题目要求使用选择排序法,所以大家需要弄清楚选择排序的原理。
因为选择排序需要把每一个数选出来和后面的数依次做比较,因此我们外层循环和内层循环的变量都要参与比较,所以外层循环变量和内层循环变量下标都应该从0开始。
main(){int a[10]={3,4,1,5,9,0,7,2,6,8},i,j,t;for(i=0;i<9;i++){for(j=i+1;j<=9;j++){if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}}}for(i=0;i<=9;i++)printf("%4d",a[i]);}3编写程序,求2+++……++分析:要想求出2的1次方到2的10次方的和,我们可以用循环,循环10次,每次把值加到和里面去。
C程序设计(第三版)习题答案(11章) 谭浩强著(4)_官田
for(j=0;j<3;j++)
printf("%7d",stu[i].score[j]);
printf("%6.2f\n",stu[i].avr);
}
11.2
struct dt
{int year;
int month;
int day;
}date;
main()
{
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
case 5:days=date.day+120;break;
case 6:days=date.day+151;break;
case 7:days=date.day+181;break;
case 8:days=date.day+212;break;
11.1
struct
{int year;
int month;
int day;
}date;
main()
{int days;
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
取消回复score\n");
scanf("%d",&stu[i].score[j]);
}
}
average=0;
max=0;
C编程题——精选推荐
一、顺序结构1、阅读下面的程序并做到:(1)能消除程序的语法错误,(2)能理解变量赋初值和常量的数据类型的重要性。
#include <stdio.h>int main(){ int a,b; float x,y;printf("a+b=%d\n", a+b);a=10;scanf("%d", b); /* 假定输入90 */printf("a+b=%d\n", a+b);x=45678*56789;printf("x=%f\n", x);y=5.7;printf("y=%d\n", y);}2、对于下面的程序,如果程序执行时,数据的输入格式如下,你能解释下面的输出结果吗?为了使得c1='A'和c2='a',假定程序不做修改,应如何修改数据的输入格式?假定数据的输入格式不变,又应如何修改程序?通过本练习你是否理解:一般情况下scanf的格式控制字符串中的普通字符不但起不到提示的作用,反而给用户的输入制造了麻烦。
输入为:a=3 b=7↙/* ↙表示回车*/8.5 6.1↙A a↙输出为:a=3 b=7x=8.5 y=6.1c1=c2=A程序为:#include <stdio.h>int main(){ int a, b; float x,y; char c1,c2;scanf("a=%d b=%d", &a,&b);scanf("%f %f", &x,&y);scanf("%c%c", &c1,&c2);printf("a=%d b=%d\n", a,b);printf("x=%0.1f y=%0.1f\n", x,y);printf("c1=%c c2=%c\n", c1,c2);}3、从键盘输入华氏温度f,屏幕输出对应的摄氏温度c。
浙师大 C语言 实验11指针+答案
上机实验十一指针班级学号姓名一.目的要求1.掌握指针的基本概念。
2.掌握指针变量的定义和初始化。
3.掌握用下标、数组名或指针等不同方式引用数组元素;4.掌握数组名作函数参数的方法5.掌握常用的字符串处理函数和字符处理函数;二.实验内容【实验题1】程序填空,交换指针变量p1,p2的指向。
# include <stdio.h>int main ( ){ int a=1,b=2, *p1, *p2, *pt;p1=&a; p2=&b;printf(“p1=%d, p2=%d \n”, p1,p2);//交换指针变量p1,p2的指向,即让p1指向b、p2指向apt= p1 ; p1=p2 ; p2=pt ; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2);}运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)【实验题2】程序填空,交换指针变量p1,p2所指变量的值。
# include <stdio.h>int main ( ){ int a=1,b=2, *p1, *p2, temp;p1=&a; p2=&b;printf(“*p1=%d, *p2=%d \n”, *p1,*p2);//交换p1,p2所指向的变量的值, 即交换a、b的值temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符*printf(“*p1=%d, *p2=%d \n”, *p1,*p2);}运行结果:(注意:指针前加*, 代表指针所指变量)【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
# include <stdio.h>int main ( ){ int a,b,c, *p1, *p2, *p3;scanf(“%d%d%d”,&a,&b,&c);// 令p1指向最大值p1=a>b? &a: &b ; //p1指向a,b中较大者if(c> *p1 ) p1=&c;//令p2指向最小值p2=a<b? &a:&b ; //p2指向a,b中较小者if(c< *p2 ) p2=&c;printf(“max=%d, min=%d”, *p1,*p2 );}运行结果:输入 1 2 3输出max=3, min=1【实验题4】程序填空:请用下标、数组名、指针等不同方法来输出数组元素。
C语言课后习题答案(最终).docx
1.将下列十进制数分别转化为二进制数、八进制数和十六进制数:(1)128 (2) 511 (3) 1024 (4) 65535 (5) 1048575答:(1)10000000、200、80(2)111111111> 777> IFF(3)10000000000> 2000、400⑷ 1111111111111111> 177777、FFFF(5) llllllllllllllllllllx 3777777、FFFFF2.将下列二进制数转化为十进制数和十六进制数:(1)1100110101B (2) 101101.1011B答:(1)821、335(2)45.6875、2D.B3.写出下列数的原码、反码、补码:15、-20、-27/32 答:(1) 00001111> 00000000、00001111(2)10010100、11101011> 11101100(3)1.1101100> 1.0010011^ 1.00101004.16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?丄6位补码的表示范围是多少?答:0〜65535、-128 —127^ -32768〜327675・1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。
答:结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
6. C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么?答:C语言程序属于应用程序,程序代码本身存放在应用程序区,程序运行吋处理的数据存放在应用程序数据区。
c语言网络教室第十章、第十一章答案
执行前:str[]="0123456";start=1 ;end=4
执行后:strr[]="0432156"
要求在该函数中不使用新的数组,没有循环。
注意:只需要编写递归函数 reverse,系统中已经设置好了main函数。
预设代码
strover.c
reverse(char str[],int x,int y)
if(x%2==1) printf("%d is odd number!\n",x);
scanf("%d",&x);}
}
10-2 求数列的第N项(递归)
成绩: 10 / 折扣: 0.8
已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即:
{x=0; y=m-1;
while(y-x>1)
{if(a[i]>b[(x+y)/2]) x=(x+y)/2;
if(a[i]<b[(x+y)/2])
{if((x+y)%2==1) y=(x+y)/2+1;
else y=(x+y)/2;}}
if(a[i]>b[x]&&a[i]<b[y])
}
10-3. 求最大公约数(递归)
成绩: 10 / 折扣: 0.8
请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。
= m 当 m<=n 且 n mod m =0(mod 表示求余)
第二行为串t
c语言第11章作业参考答案
11.1 数组元素a[i]的用指针的间访表示为:*(a+i)。
请写出:b[i][j][k]的指针表示;u[i][j][k][l][m][n]用指针的间访表示。
b[i][j][k] -> (*(b+i))[j][k] -> (*(*(b+i)+j))[k] -> *(*(*(b+i)+j)+k)u[i][j][k][l][m][n] -> (*(u+i))[j][k][l][m][n] -> (*(*(u+i)+j))[k][l][m][n] -> (*(*(*(u+i)+j)+k))[l][m][n] -> (*(*(*(*(u+i)+j)+k)+l))[m][n]-> (*(*(*(*(*(u+i)+j)+k)+l)+m))[n] -> *(*(*(*(*(*(u+i)+j)+k)+l)+m)+n) 11.2 设有声明:int a[2][3][4], *p;请写出用p间访a[i][j][k]的表达式。
(1)p=a; *(p+3*4*i+4*j+k)(2)p=a[i]; *(p+4*j+k)(3)p=a[i][j]; *(p+k)#include <stdio.h>int main(){int i,j,k,a[2][3][4], *p;for(i=0; i<2; i++)for(j=0; j<3; j++)for(k=0; k<4; k++)*(*(*(a+i)+j)+k)=i*100+j*10+k;i=1;j=2;k=3;printf("%d\n",a[i][j][k]);p=a;printf("%d\n", *(p+3*4*i+4*j+k));p=a[i];printf("%d\n", *(p+4*j+k));p=a[i][j];printf("%d\n", *(p+k));return 0;}11.3 设有声明:int a[2][3][4]; 请写出关于p的声明语句,使得可以用:(*(*(*(p+i)+j)+k)) 表示a[i][j][k]。
c语言第十一十二十三章课后题问题详解
(*p)++表示:先取地址中的容,将容表示的数字进行自增运算。
*p++表示:先对p的地址自增运算,再取其中的容。
结果:每一句printf语句分析说明:printf("%d,",*(++p));--------p自增取下一个地址,去除其中的容为2printf("%d,",*(p)++);--------引用p现在地址中的容为2,在进行地址的自增运算printf("%d,",*p);-------------引用地址的容为3printf("%d,",*p);------------应用现在的地址中的容为3printf("%d,",*p--);----------先引用p中的容为3,再进行自减运算printf("%d,",--(*p));--------先自减运算,再取容为1printf("%d\n",*p);-----------取p现在的地址中的容为111-2(1)#include <stdio.h>void Print(char *arr[],int len);int main(){char *pArray[]={"How","are","you"};int num=sizeof(pArray)/sizeof(int);printf("Total string numbers = %d\n",num);Print(pArray,num);return 0;}void Print(int *arr[],int len){int i;for(i=0; i<len; i++){printf("%s ",arr[i]);printf("\n");}错误分析:指针数组中的元素为地址,是一个整型,所以应为num=sizeof(pArray)/sizeof(int);而不是除以sizeof(char)结果:(2)#include <stdio.h>void OutputArray(int *pa,int n);void InputArray(int *pa,int n);void main(){int a[5];printf("Input five numbers:");InputArray(a,5);OutputArray(a,5);return 0;}void InputArray(int *pa,int n){int *a=pa;for(; pa<a+n; pa++){scanf("%d",pa);}}void OutputArray(int *pa,int n){int *a=pa;for(; pa<a+n;pa++){printf("%4d",*pa);}printf("\n");}结果:错误分析:For(; pa<pa+n; pa++)的语句中将指针循环变量更改了,破坏了循环结构,所以在写循环时为了防止指针循环变量被修改,应重新定义一个变量来标记传入的指针值。
C语言课内实践1011
C语⾔课内实践1011有问题请留⾔课内实践10【描述】输⼊⼀个正整数n(2≤n≤10)和n×n矩阵a中的元素,如果a是上三⾓矩阵,输出“Yes”,否则输出“No”。
【输⼊】第⼀⾏为正整数n,表⽰矩阵⼤⼩。
接着n⾏,每⼀⾏n个整数,整数以空格间隔。
【输出】输出“Yes”或“No”。
【输⼊⽰例】33 4 51 2 31 3 4【输出⽰例】No【提⽰】⽤⼆维数组表⽰n×n矩阵时(i表⽰⾏下标,j表⽰列下标),则:主对⾓线i==j,副对⾓线i + j == n – 1上三⾓矩阵i<=j下三⾓矩阵i>=j【来源】《程序设计基础——以C为例》第6章上机实验题5。
#include <stdio.h>#include <malloc.h>#include <string.h>#define ROW 10#define COL 10int main(){int n,m,t;int flag =0;scanf("%d",&n);int a[10][10]={0};/*int (*a)[COL] = (int(*)[n])malloc(sizeof(int) * COL * ROW);memset(a, 0, ROW * COL);*/for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%d",&a[i][j]);if((j<i)&&a[i][j]!=0){flag = 1;}}}if(flag==1){printf("No");}else{printf("Yes");}//free(a);return 0;}【描述】输⼊⼀个4×4的整数矩阵,求该矩阵的外围元素之和,主对⾓线元素之和以及副对⾓线元素之和。
C++程序作业答案11
计算机应用专业“C++语言程序设计”课程作业第一次作业一、填空题1.C++语言中的每条基本语句以;作为结束符,每条复合语句以 } 作为结束符。
2.用于输出表达式值的标准输出流对象是 cout ,用于从键盘上为变量输入值的标准入流对象是 cin 。
3.当不需要函数返回任何值时,则应把该函数类型定义为 void 。
4.执行“cout<<143<<’+’<<18<<’=’<<143+18<<endl;”语句后得到的输出结果为 143+18=161 。
5.执行“cout<<“ning”<<“chen”<<38<<endl;”语句后得到的输出结果为 ningchen38 。
6.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为main 。
7.C++源程序文件的缺省扩展名为 cpp ,由C++源程序文件编译而成的目标文件的缺省扩展名为 obj ,由C++目标文件连接而成的可执行文件的缺省扩展名为 exe 。
8.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用空格或逗号符号作为分隔符。
9.十进制数25表示成符号C++语言规则的八进制和十六进制数分别为 31 和 19 符号。
10.在C++语言中,用转义字符序列 \n 或操纵符 endl 表示输出一个换行符。
11.执行“cout<<char(’b’+2)<<endl;”语句后得到的输出结果为d 。
12.执行“cout<<char(’K’-3)<<endl;”语句后得到的输出结果为H 。
13.已知’A’~’Z’的ASCII码为65~90,当执行“int x=’H’+5;”语句后x的值为 77 。
14.已知’A’~’Z’的ASCII码为65~90,当执行“char ch=16*5+2;cout<<ch<<endl;语句序列后,得到的输出结果为 R 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如,输入测试数据"13,25,135,246,1357,2468"共6个正整数,则输出结果为:43,64,654,765,8675,9786。
(实习目的:掌握数组作为函数参数,整数的位操作。)
"gbcdfa4231"。
注: 程序中含有4处错误,每处错误的改正只涉及一行语句的修改或增加,或者一个头文件包含。
含有错误的源程序如下:
#include<stdio.h>
#include<string.h>
main()
{ char str[20];
gets(str);
adjust(str);
puts(str);
}
void adjust(char str[])
{ int i,j,k,len; char c;
len=strlen(str);
i=0;j=0;
for(;i<len-j;)
{ c=str[i];
if(isdigit(c))
i++;
else{
5. 附加题,有时间再做。
按以下要求编写程序:
(1) 编写函数void count(char a[], char w[][10], int n,int b[])。其功能是:统计w指向的数组中n个单词在a指向的字符串中各自出现的次数(将非字母字符看做单词分隔符),并将统计结果依次保存在b指向的数组中。
(实习目的:递归函数的编写,还有...。)
3. 按以下要求编写程序:
使用全局变量,编写一个函数,由实参传来一个字符串,统计此字符串中
字母、数字、空格和其他字符的个数,在主函数中输入字符串以及统计的
结果。
(实习目的:全要求编写程序:
(1) 编写函数void encode(int x[],int n, int y[]),其功能是:对x指向的数组中n个不超过4位的正整数逐个做加密处理,并将加密后的n个正整数保存在y指向的数组中。加密方法如下:(1)将正整数的每一位用该位数字加该位序号的值替换(序号规定:个位为1,十位为2,百位为3,千位为4),若结果大于9,则用该数除以10的余数替换。(2)交换最高位和最低位。
(2) 编写main()函数,采用数组定义的同时初始化的方式并将以下测试数据保存在数组中,调用count()函数做统计,并在屏幕上打印统计结果(每个单词及其出现次数)
测试数据为:a中的字符串"this is a book, that is an apple"
w中的单词为:"this","that","is","a","an","book"
相应的输出应该是:
this:1, that:1, is:2, a:1, an:1, book:1
(实习目的:字符串处理,数组作为函数参数,字符数组初始化,二维字符数组存储多个字符串。)
for(k=i+1;k<len-j;k++)
str[k-1]=str[k];
str[len-1]=c;
j++;
}
}
}
二、编程题
2. 按以下要求编写程序:
使用递归方法解决汉塔问题,打印出搬n个盘子的每一步骤,并要求不使用全局变量,统计出在搬n个盘子的过程中,hanoi()函数总共被调用了多少次。
C语言第十一次作业
一、改错题
(实习目的:程序阅读理解和程序调试技巧的掌握,数组作为函数参数,字符串和字符处理函数的巩固。)
1. 将一个仅有数字及字母组成的字符串中的字符从左向右按下列规则重新
排列:字母从字符串的左端开始向右摆放,数字从字符串的右端开始向左
摆放。
例如,若源字符串为"g1bc3d24fa",则重新排列后的字符串为: