第九次c语言作业
C语言实验9(附参考答案)
C语言实验9(附参考答案)实验9:选择结构(2)实验目的:(1)进一步掌握if语句和switch语句;(2)掌握用条件运算符实现选择;(3)掌握选择结构的嵌套,掌握简单的算法。
(4)能灵活应用下列语句:if,if-else,switch,break。
实验内容:1、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( C )。
A)A%2==1 B)!(A%2==0) C)!(A%2) D)A%2 2、以下程序的运行结果是 F 。
main() { } if(2*2==5<2*2==4) print(“T”); else printf(“F”);3、下列程序的运行结果是。
#include void main(void) { int x,y=1,z; if(y!=0) x=5;printf(“\\t%d\\n”,x); if(y==0) x=4; else x=5;printf(“\\t%d\\n”,x); x=1;1} if(y<0) if(y>0) x=4; else x=5; printf(“\\t%d\\n”,x); 4、根据程序的功能,将以下程序补充完整以下程序计算某年某月有几天。
其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。
请在内填入正确内容。
main() { int yy,mm,len; printf(“year,month=”);scanf(“%d %d”,&yy,&mm); switch(mm) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: len=31 ; break; case 4: case 6: case 9: case 11: len=30; break; case 2:if(yy%4==0&&yy0!=0||yy@0==0) len=29 ; else len=28 ; break; default: printf(“input error”); break; } printf(“the length of %d %dis %d\\n”,yy,mm,len); } 二、编程:21、(必做)试编程判断输入的正整数是否既是5又是7的整倍数。
C语言习题及答案(第九章)
9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。
解:#include "stdio.h"struct date{char month[10] ;int daynumber ;}main(){int i ;struct datea[12]={{"January",31},{"February",29},{"March",31},{"Aprial",30},{ "May",31},{"June",30},{"july",31},{"August",31},{"September",30}, {"October",31},{"November",30},{"December",31}} ;for(i=0;i<12;i++);printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ;}思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?9-4 编写程序求空间任一点到原点的距离,点用结构体描述。
并请考虑求空间中任意两点的距离的程序。
解:#include "stdio.h"#include "math.h"struct point{float x ;float y ;float z ;} main(){double d1,d2,d ;struct point p1,p2 ;printf("请输入第一个点的坐标:");scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z);printf("请输入第二个点的坐标:");scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z);d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z);d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z));printf("第一个点到原点的距离:%f\n",d1);printf("第二个点到原点的距离:%f\n",d2);printf("两点间的距离:%f\n",d);}9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。
c语言第九章题库及详解答案
c语言第九章题库及详解答案C语言第九章题库及详解答案一、选择题1. 在C语言中,以下哪个关键字用于定义数组?A. arrayB. listC. setD. define2. 以下哪个选项是正确的C语言数组声明?A. int myArray[];B. int myArray[10] = {};C. int myArray = 10;D. int myArray(10);3. 数组元素的默认初始化值是什么?A. 0B. 1C. -1D. 随机值4. 在C语言中,数组的索引是从哪个数字开始的?A. 0B. 1C. -1D. 105. 以下哪个函数可以用于计算数组中元素的个数?A. count()B. size()C. length()D. sizeof()二、填空题6. 在C语言中,声明一个具有10个整数元素的数组的语句是:________。
答案:int myArray[10];7. 如果数组的索引从0开始,那么数组myArray[10]的最后一个元素的索引是:________。
答案:98. 要初始化一个数组的所有元素为0,可以使用:________。
答案:int myArray[10] = {0};9. 在C语言中,可以使用________运算符来访问数组的元素。
答案:[]10. 当数组作为参数传递给函数时,实际上传递的是数组的________。
答案:首地址三、简答题11. 解释C语言中数组的内存分配方式。
答案:在C语言中,数组是连续存储在内存中的。
数组的内存分配是静态的,即在编译时分配。
数组的元素按照声明的顺序在内存中连续排列。
12. 说明数组和指针在C语言中的关系。
答案:在C语言中,数组名可以作为指针使用。
数组名代表数组的首地址。
当数组作为参数传递给函数时,数组名退化为指向数组第一个元素的指针。
四、编程题13. 编写一个C语言程序,实现对一个整数数组的排序。
答案:```c#include <stdio.h>void sortArray(int arr[], int size) {int i, j, temp;for (i = 0; i < size - 1; i++) {for (j = i + 1; j < size; j++) {if (arr[i] > arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}int main() {int myArray[] = {5, 3, 8, 2, 1};int size = sizeof(myArray) / sizeof(myArray[0]);sortArray(myArray, size);printf("Sorted array: ");for (int i = 0; i < size; i++) {printf("%d ", myArray[i]);}return 0;}```14. 编写一个C语言程序,实现查找数组中的最大值和最小值。
c语言程序设计课后习题答案 第9章
#include<stdio.h>struct student{int xuehao;char name[20];float yuwen,shuxue,yingyu,ave;};float aver(float yuwen,float shuxue,float yingyu){float y;y=(yuwen+shuxue+yingyu)/3.0;return y;}main(){struct student a;printf("Enter xuehao:\n");scanf("%d",&a.xuehao);printf("Enter name:\n");scanf("%s",&);printf("Enter yuwen:\n");scanf("%f",&a.yuwen);printf("Enter shuxue:\n");scanf("%f",&a.shuxue);printf("Enter yingyu:\n");scanf("%f",&a.yingyu);a.ave=aver(a.yuwen,a.shuxue,a.yingyu);printf("xuehao:%d name:%s yuwen:%f shuxue:%f yingyu:%f ave:%f\n",a.xuehao,,a.yuwen,a.shuxue,a.yingyu,a.ave);}/*练习9-6*/#include<stdio.h>struct student{int xuehao;char name[20];float yuwen,shuxue,yingyu,ave;};float aver(float yuwen,float shuxue,float yingyu){y=(yuwen+shuxue+yingyu)/3.0;return y;}main(){int i;struct student a;for(i=1;i<=100;i++){printf("请输入第%d个学生的信息:\n",i);printf("请输入学号:\n");scanf("%d",&a.xuehao);printf("请输入姓名:\n");scanf("%s",&);printf("请输入语文成绩:\n");scanf("%f",&a.yuwen);printf("请输入数学成绩:\n");scanf("%f",&a.shuxue);printf("请输入英语成绩:\n");scanf("%f",&a.yingyu);a.ave=aver(a.yuwen,a.shuxue,a.yingyu);printf("学号:%d 姓名:%s 语文:%f 数学:%f 英语:%f 平均分:%f\n",a.xuehao,,a.yuwen,a.shuxue,a.yingyu,a.ave);}}。
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语言是面向过程的。
C语言第九章习题带答案
练习9-1答案一、选择题1.typedef unsigned long LONG的作用是( D )。
A.建立了一种新的数据类型B.定义了一个整形变量C.定义了一个长整型变量D.定义了一个新的数据类型标识符2.下面的4个运算符中,优先级最低的是( D )。
A.( ) B.. C.-> D.++3.已知:struct{int i;char c;float a;} test;则sizeof(test)的值是( D )。
A.4 B.5 C.6 D.74.当声明一个结构变量时系统分配给它的内存是( A )。
A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大者所需的容量D.结构中最后一个成员所需内存量5.以下对结构类型变量的定义中错误的是( D )。
A.typedef struct student B.struct student{ i nt num; {int num;float age; float age;} STUDENT std1; } std1;C.struct D.struct{ i nt num; {int num;float age; float age;} std1; } student;struct student std1;6.根据下面的定义,能打印出字母M的语句是( D )。
struct person{char name[9];int age;};struct person class[10]={"John", 17, "Paul", 19, "Mary", 18, "adam", 16};A.printf("%c\n", class[3].name); B.printf("%c\n", class[3].name[1]);C.printf("%c\n", class[2].name[1]); D.printf("%c\n", class[2].name[0]); 7.以下scanf函数调用语句中对结构变量成员的错误引用是( D )。
C语言程序设计实验实验报告
C语⾔程序设计实验实验报告《C语⾔程序设计实验》实验报告实验九⽂件编程(⼀)班级:_07某某专业1班_学号:______姓名:___实验样例_____⽇期:___2008.6.10_____台州学院数信学院计算机系制作⼀、实验⽬的和要求综合使⽤基本结构、基本算法、函数、指针、结构体、链表等知识设计程序。
⼆、实验指导1、注意:本次实验为综合性实验,需要综合本课程以前所学内容,完成编制⼀个⼩型应⽤程序。
需要复习课本以前所学内容,浏览上课讲解的相关内容。
2、实验时间安排:准备实验⽅案,上课时上机编程,课余完成整个设计并完成实验报告。
3、实验具体要求:以⼀张假想的学⽣期中成绩表为实验对象,编制⼀个⼩型应⽤程序,可以考虑实现以下功能:(1)成绩修改;(2)成绩查询;(3)成绩统计;(4)成绩输⼊。
也可以实现其他⾃定义的功能。
界⾯采⽤简易菜单形式,可以分级显⽰。
实验需要进⾏以下步骤:需求分析、程序设计、程序调试、程序运⾏,并对程序运⾏效果进⾏分析,提出改进⽅案。
初步锻炼学⽣的程序设计能⼒、程序调试能⼒、对实验结果进⾏综合分析的能⼒。
4、实验成绩评价标准:参见成绩评定表。
四、实验报告内容(参见样本,请另附页)实验报告必须包含以下内容:1、对你设计的程序功能进⾏的较详细描述。
2、画出程序测试⽤的学⽣期中成绩表(包含:表头、若⼲⾏包含学⽣成绩等信息的数据⾏)。
3、给出程序清单(包含结构体的声明与定义、所有的函数声明、所有的全局变量、所有的函数定义、必要的注释。
注:如果程序过长,可以不⽤给出所有的函数定义,只给出主要的函数定义)。
4、运⾏结果(写出运⾏时的主界⾯、各模块的实现界⾯等,不作具体要求,但要求能清晰地体现出程序的功能)。
5、对你的设计作⼀个评价(可以包含你所花的时间、精⼒,你遇到的困难及如何解决的,你的设计过程所遇到的其他事情;必须包含你对设计的客观评价,以及提出的改进⽅案)。
1、程序功能描述:(略)2、成绩表样表:3、程序清单:(红⾊部分是和上⼀个程序的区别之处)#includestruct student /*期中成绩表的结构声明*/{int num;char name[20];char sex;float YuWen;float ShuXue;float YingYu;float totle;};#define MAX_STU_NUMBER 100 /*宏定义最⼤学⽣数为100⼈*/struct student Stu[MAX_STU_NUMBER]; /*⼀次性定义100个学⽣的存储空间*/int STU_NUMBER; /*存放学⽣数*/char *FileName = "chengji.txt"; /*成绩存放的⽂件*//*所有的函数声明:*/int SelectMainMenu(); /*显⽰并选择主菜单。
C语言习题九数组的定义和使用
习题九数组的定义和使用1. 有以下程序void f (int b[]){ int i;for(i=2;i<6;i++) b[i]* =2;}main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,B、1,2,6,8,10,12,7,8,9,10,C、1,2,3,4,10,12,14,16,9,10,D、1,2,6,8,10,12,14,16,9,10,解析:本题在调用函数时,实参是&a[0]的地址,即把a[0]的地址传给形参,由条件i=2且i<6得出函数将对a[2]开始的4个元素(3,4,5,6)进行乘以2操作,结果分别为:a[2]=6,a[3]=8,a[4]=10,a[5]=12。
a[0]、a[1]、a[6]、a[7]、a[8]、a[9]的值并没有发生变化,所以最后的输出结果为:1,2,6,8,10,12,7,8,9,10,。
故本题答案选B。
2. 有以下程序main(){ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/for(i=0;i<4;i++) printf("%d,",a[i][i]);}程序运行后的输出结果是______。
A、1,6,5,7,B、8,7,3,1,C、4,7,5,2,D、1,6,2,1,解析:本题首先定义了一个4行4列的二维数组a,并用了三层循环来进行按列由小到大排序操作。
C语言理论教材各章后习题参考答案第九章习题
第九章习题参考答案一、选择题9.1 答案:B9.2 答案:C9.3 答案:D9.4 答案:B9.5 答案:D9.6 答案:C9.7 答案:C9.8 答案:D9.9 答案:B9.10 答案:D二、读程序回答问题9.11 答案:C9.12 答案:A9.13 答案:A9.14 答案:D9.15 答案:C三、程序填空9.16答案:①FILE *fp;② "Ef9-16.txt","w"或"Ef9-16.txt","w+";③ch,fp。
9.17答案:①Ef9-17.dat;② 8*sizeof(char)。
9.18 答案:①fopen; ② SEEK_END或2。
9.19 答案:①fname; ②fp。
9.20 答案:①argc!=2; ②r; ③NULL; ④row++ ; ⑤fclose(fp)。
四、编写程序9.21 从键盘输入一行字符串,将其中的小字母全部转换成大写字母,然后输出到一个磁盘文件" Ef9-21.txt"中保存。
参考源程序如下:#include <stdio.h>void main( ){FILE *fp;char str[100];int i;if ((fp=fopen("Ef9-21.txt ", "w")) == NULL) {printf ("Cannot open the file.\n");exit(0);}printf ("Input a string:");gets (str); /* 读入一行字符串 */for (i=0; str[i]&&i<100; i++) { /* 处理该行中的每一个字符 */if (str[i] >= 'a' && str[i] <= 'z') /* 若是小写字母 */str[i] -= 'a' - 'A'; /* 将小写字母转换为大写字母 */fputc (str[i], fp); /* 将转换后的字符写入文件 */}fclose (fp); /* 结束文件输入操作关闭文件 */}9.22文件Ef9-22.txt中存放了一个学生各门课程的考试分数,数据之间以逗号分割。
c语言习题第九章答案
c语言习题第九章答案C语言习题第九章答案第九章是C语言学习中的一个重要章节,主要涉及指针和动态内存分配的知识。
在这一章中,我们将学习如何使用指针来操作内存,并且了解动态内存分配的概念和用法。
本文将为大家提供第九章习题的答案,帮助大家更好地理解和掌握这些知识。
1. 以下代码的输出结果是什么?```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *ptr = arr;printf("%d\n", *ptr++);printf("%d\n", *ptr++);printf("%d\n", *ptr++);return 0;}```答案:输出结果为1、2、3。
解析:在这段代码中,我们定义了一个整型数组arr,并且定义了一个指针ptr,将arr的首地址赋值给ptr。
在输出语句中,我们使用了后置自增运算符,这意味着先输出ptr指向的值,然后再将指针ptr的值加1。
因此,第一个输出语句输出的是arr[0]的值1,第二个输出语句输出的是arr[1]的值2,第三个输出语句输出的是arr[2]的值3。
2. 以下代码的输出结果是什么?```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *ptr = arr;printf("%d\n", *(ptr++));printf("%d\n", *(ptr++));printf("%d\n", *(ptr++));return 0;}```答案:输出结果为1、2、3。
解析:这段代码与上一题的代码非常相似,唯一的区别在于输出语句中对指针的解引用操作使用了括号。
这是因为后置自增运算符的优先级比解引用运算符高,为了保证先解引用再自增,我们需要使用括号来明确优先级。
c语言 第2,5,9章 习题与答案
一.选择题。 1.下列是用户自定义标识符的是 A)_w1 B)3_xy C)int D)LINE-3 答案:A 解析: C语言规定用户标识符由英文字母、数字和下划线组成,且 第一个字符必须是字母或下划线,由此可见选项B),D)是错的;此 外,C语言不允许用户将关键字作为标识符,而选项C)选项项中的int 是C语言的关键字。 2.C语言中最简单的数据类型包括 A)整型、实型、逻辑型 B)整型、实型、字符型 C)整型、字符型、逻辑型 D)字符型、实型、逻辑型 答案:B 解析: 本题考查C语言的数据类型。在C语言中,没有专门的逻辑型 数据类型,可以用0和1来表示逻辑值。所以,在本题的选择答案中,不 应该包括逻辑型。 3.假定int类型变量占用两个字节,其有定义:int x[10]= {0,2,4};,则数组x在内存中所占字节数是 A)3 B)6 C)10 D)20 答案:D 解析: x数组共有10个元素,在花括弧内只提供3个初值,这表示只 给前面的3个成员赋值,后7个元素的值为0,所以,一共有20个字节。 4.以下选项中不正确的实型常量是 A)1.607E-1 B)0.7204e C)-77.77 D)234e-2 答案:B 解析:实型常量表示时字母E或e前必须有数字,其后数字必需为整 数,故B错。 5.若变量已正确定义并赋值,以下符合C语言语法的表达式是 A)a:=b+1 B)a=b=c+2 C)int 18.5%3 D)a=a+7=c+b 答案:B 解析: 选项A)中包含一个不合法的运算符“:=”;选项C)应改为 (int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中 第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是
表达式或常量等。因此,正确答案是选项B),它实际上相当于 a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。 6.下列可用于C语言用户标识符的一组是 A)void, define, WORD B)a3_b3, _123,Car C)For, -abc, IF Case D)2a, DO, sizeof 答案:B 解析: C语言规定标识符只能由字母、数字和下划线三种字符组 成,且第一个字符必须为字母或下划线,排除选项C)和D)。C语言中 还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排 除选项A)。 7.C语言中运算对象必须是整型的运算符是 A)%= B)/ C)= D)<= 答案:A 解析: C语言规定:取余运算符的运算对象必须是整型,复合运算 符“%=”中包含%运算,它的运算对象也必须是整型。 8.若变量a,i已正确定义,且i已正确赋值,合法的语句是 A)a= =1 B)++i; C)a=a++=5; D) a=int(i); 答案:B 解析: 选项A是一个表达式,因为缺少分号,所以不是语句;选项 C)包含一个不合法的运算符“++=”;选项D)应改为a=(int)i;。 9.设x,y和z都是int型变量,且x=3,y=4,z=5,则下面表达式中, 值为0的表达式是 A)x&&y B)x<=y C)x||++y&&y-z D)! (x<y&&!z||1) 答案:D 解析: 该题考查逻辑与“&&”和逻辑或“||”以及逻辑非“!”符 号的用法。选项A)即3&&4为真,选项B)即3<=4为真,选项C)是一个 逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接 停止执行逻辑或右半部分程序,因为x的值为真,此时选项C)变为 1&&-1为真。选项D)不用计算,括号内逻辑或右边的值为1,因而括号 内的值为1,再进行逻辑非运算得0。 10.有以下程序 main() {int i=1,j=1,k=2; if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
数据结构(C语言版)习题及答案第九章
数据结构(C语言版)习题及答案第九章数据结构(C语言版)习题及答案习题一、选择题1、一组记录的排序码为〔46,79,56,38,40,84〕,那么利用堆排序的方法建立的初始堆为( B )。
A、79,46,56,38,40,80B、84,79,56,38,40,46C、84,79,56,46,40,38D、84,56,79,40,46,382、排序趟数与序列原始状态(原始排列)有关的排序方法是〔 ACD 〕方法。
A、插入排序B、选择排序C、冒泡排序D、快速排序3 、以下排序方法中,〔 B 〕是稳定的排序方法。
A、直接选择排序B、二分法插入排序C、希尔排序D、快速排序4、数据序列〔8,9,10,4,5,6,20,1,2〕只能是以下排序算法中( C )的两趟排序后的结果。
A、选择排序B、冒泡排序C、插入排序D、堆排序5、对序列(15,9,7,8,20,-1,4)进行排序,进行一趟排序后,数据的排列变为〔4,9,-1,8,20,7,15〕,那么采用的是〔 C 〕排序。
A、选择B、快速C、希尔D、冒泡6 、一组待排序记录的关键字为〔46,79,56,38,40,84〕,那么利用快速排序,以第一个记录为基准元素得到的一次划分结果为〔 C 〕。
A、(38,40,46,56,79,84)B、(40,38,46,79,56,84)C、(40,38,46,56,79,84)D、(40,38,46,84,56,79)7、用直接插入排序对下面四个序列进行排序〔由小到大〕,元素比拟次数最少的是〔 C 〕。
A、94,32,40,90,80,46,21,69B、32,40,21,46,69,94,90,80C、21,32,46,40,80,69,90,94D、90,69,80,46,21,32,94,408、假设用冒泡排序对关键字序列〔18,16,14,12,10,8〕进行从小到大的排序,所需进行的关键字比拟总次数是〔 B 〕。
C语言九次课后作业
第一次作业1.利用getchar()输入字符a,A,并用putchar()输出。
#include "stdio.h" void main(){char m; char n; m=getchar(); n=getchar(); putchar(m); putchar(n);}2 请编写一个程序,显示以下两行文字。
#include "stdio.h" void main(){ printf("I am a student\nI love China\n");3. (1)#include "stdio.h"void main(){int m,n; scanf("m=%d,n=%d",&m,&n); printf("%d,%d\n",m,n);}(2)#include "stdio.h"void main(){int m,n; scanf("m=%c,n=%c",&m,&n); printf("%c,%c\n",m,n);}(3)#include "stdio.h"void main(){signed m,n;scanf("m=%d,n=%d",&m,&n);printf("%d,%d\n",m,n);}(4)#include "stdio.h"void main(){float m,n; scanf("m=%f,n=%f",&m,&n); m+=9.999997; printf("%f,%f\n",m,n);}4. 编写程序,要求输入某职工的工资和奖金,并求出总收入(注意保留 2 位小数)显示输出。
(word完整版)C语言程序设计课后习题1-8参考答案
C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。
运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。
数据运算包括算术运算和逻辑运算。
控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。
输出设备正好与输入设备相反,是用来输出结果的部件。
2、简述计算机的工作原理。
答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。
整个过程由控制器进行控制。
3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。
系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。
这类软件一般与具体应用无关,是在系统一级上提供的服务。
系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。
另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。
在操作系统的基础上运行。
4、什么叫软件?说明软件与硬件之间的相互关系。
答:软件是指计算机程序及有关程序的技术文档资料。
两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。
在不太严格的情况下,认为程序就是软件。
硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。
c语言习题第九章答案
c语言习题第九章答案C语言习题第九章答案在学习C语言的过程中,习题是巩固知识的重要方式之一。
第九章的习题涉及了指针、结构体、文件操作等内容,是对前几章知识的综合运用和拓展。
下面我们将针对第九章的习题进行解答和讨论。
1. 请编写一个程序,输入10个学生的学号、姓名和成绩,然后按成绩从高到低输出学生的信息。
```c#include <stdio.h>#include <string.h>typedef struct {char id[10];char name[20];float score;} Student;void sort(Student *stu, int n) {int i, j;Student temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - 1 - i; j++) {if (stu[j].score < stu[j+1].score) {temp = stu[j];stu[j] = stu[j+1];stu[j+1] = temp;}}}}int main() {Student stu[10];int i;for (i = 0; i < 10; i++) {printf("请输入第%d个学生的学号、姓名和成绩:", i+1); scanf("%s %s %f", stu[i].id, stu[i].name, &stu[i].score);}sort(stu, 10);printf("按成绩从高到低输出学生的信息:\n");for (i = 0; i < 10; i++) {printf("%s %s %.1f\n", stu[i].id, stu[i].name, stu[i].score);}return 0;}```2. 请编写一个程序,将一个文件的内容复制到另一个文件。
《C语言程序设计》教材习题答案第9章
else //需要交换
result = funtion(min, max);
//结果
printf("两日期间相差的天数为:%d\n", result);
}
//比较两日期的大小
bool compear(DATE_P max, DATE_P min)
char name[10];
char sex[10];
int score[5];
int sum;
float average;
};
struct student stu[N],s;
int i,j;
for(i=0;i<N;i++)
{
stu[i].sum=0;
stu[i].average=0;
printf("please scanf num name sex score(1) score(2) score(3) score(4) score(5)\n");
5、有20个学生,每个学生的数据包括学号(num)、姓名(name)、性别(sex)、5门课程成绩(score[5])。要求编写一个程序,输入学生数据,计算并输出每个学生的总分和平均分。
#include <stdio.h>
#define N 2
void main()
{
struct student
{
int num;
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:result += 31;break;//大月31天,注:12月不会出现,所以忽略不写
c语言第九章题库及详解答案
c语言第九章题库及详解答案C语言第九章题库及详解答案一、选择题1. 下列哪个选项是C语言中的关键字?- A. `int`- B. `float`- C. `double`- D. `string`答案:A2. 在C语言中,哪个运算符用于计算两个数的乘积?- A. `+`- B. `-`- C. `*`- D. `/`答案:C3. 以下哪个语句是正确的C语言数组声明?- A. `int array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1};` - B. `int [10] array = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1};` - C. `int array[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1};`- D. 以上都是答案:D二、填空题1. 在C语言中,用于定义函数的关键字是______。
答案:void 或其他返回类型(根据函数定义)2. 以下代码段中,`printf`函数的返回类型是______。
```cint main() {printf("Hello, World!\n");return 0;}```答案:void三、简答题1. 请简述C语言中指针和引用的区别。
答案:在C语言中,指针是一个变量,它存储了另一个变量的内存地址。
指针可以被重新赋值为其他地址,并且可以通过指针来修改它所指向的变量的值。
而引用在C语言中并不存在,这是C++中的一个概念,它是一个别名,引用必须在定义时被初始化,并且不能被重新赋值为另一个变量的别名。
2. 解释C语言中的递归函数是如何工作的。
答案:递归函数是在其定义中调用自身的函数。
它通常用于解决可以被分解为相似子问题的问题。
递归函数工作时,首先检查是否有基本情况(base case),如果没有达到基本情况,它会进入递归调用,每次调用都会处理问题的一个更小的部分,直到达到基本情况,然后逐层返回结果。
C语言程序设计教程第九章习题答案
1、li 45 300.0chang 30 200.0chang2、#include<stdio.h>struct students{char sid[100];char name[100];float score[3];}student;void main(){ int i; float j;printf("\nPlease input sid: ");scanf("%s",student.sid);printf("\nPlease input name: ");scanf("%s",);printf("\nPlease input 3 score:(like1,1,1) ");/*输入逗号隔开*/scanf("%f,%f,%f",&student.score[0],&student.score[1],&student.score[2]); printf("\nsid = %s",student.sid);printf("\nname = %s",);j=(student.score[0]+student.score[1]+student.score[2])/3.0;printf("\naverage = %.2f",j);getch();}3、#include<stdio.h>#include<string.h>#define F sizeof(student)#define NULL 0typedef struct scores{ int english;int math;int c_language;int all;}TP;typedef struct students{ char sid[15];char name[15];TP score;struct students *next;}student;student *input(){ student *head,*p1,*p2;int n=0; char ch;clrscr();head=(student *)malloc(F);head->next=NULL;do{ n++;printf("\n\nPlease input %d student message: \n\n",n);printf("\t%d student sid: ",n);p1=(student *)malloc(F);p1->next=NULL;scanf("%s",p1->sid);printf("\n\t%d student name: ",n);scanf("%s",p1->name);printf("\n\t%d student scores(englesh,math,c_language): ",n);scanf("%d,%d,%d",&p1->score.english,&p1->score.math,&p1->score.c_language);p1->score.all=p1->score.english+p1->score.math+p1->score.c_language;if(n==1){ head->next=p1;p2=p1; }else{ p2->next=p1;p2=p1;}printf("\n\n\t\t\tContinue or back (press y/n): ");ch=getch();}while(ch=='y'||ch=='Y');return head;}void average1(student *head){ student *p; int j;clrscr();p=head->next;while(p){ j=p->score.all/3;printf("\n\nname: %s\taverage: %d",p->name,j);p=p->next;}printf("\n\n\nPress eny key return.");getch();}void average2(student *head){student *p;int n=0,temp1=0,temp2=0,temp3=0;p=head->next;while(p){ temp1+=p->score.english;temp2+=p->score.math;temp3+=p->score.c_language;p=p->next;n++;}printf("\n\naverage english is : %d\naverage math is : %d\naverage c_language is : %d\t",temp1/n,temp2/n,temp3/n);}student *sort(student *head){ student *head1,*p,*q,*r; int temp1=0,temp2=0,temp3=0,temp4; char s[15],n[15];head1=head;for(p=head1->next;p->next!=NULL;p=p->next){ r=p;for(q=p->next;q;q=q->next)if(q->score.all>r->score.all)r=q;if(r!=p){ strcpy(s,p->sid);strcpy(n,p->name);temp1=p->score.english;temp2=p->score.math;temp3=p->score.c_language;temp4=p->score.all;strcpy(p->sid,r->sid);strcpy(p->name,r->name);p->score.english=r->score.english;p->score.math=r->score.math;p->score.c_language=r->score.c_language;p->score.all=r->score.all;strcpy(r->sid,s);strcpy(r->name,n);r->score.english=temp1;r->score.math=temp2;r->score.c_language=temp3;r->score.all=temp4;}}return head1;}void output(student *head){ student *head2,*p;int i=1;clrscr();head2=sort(head);for(p=head2->next;p!=NULL;p=p->next)printf("\n\nname: %s\tsid: %s\tenglish: %d\tmath: %d\tc_language: %d\taverage: %d\tmingci: %d",p->name,p->sid,p->score.english,p->score.math,p->score.c_language, p->score.all/3,i++);average2(head);printf("\n\n\n\t\tPress eny key back.");getch();}void main(){ student *head,*p1,*p2;int i=0,j=1;head=input();do{ clrscr();printf("\n\n(1): average1.\n\n(2): average2.\n\n(3): sort.\n\n(4): output.\n\n\n Please choose: ");scanf("%d",&i);switch(i){ case 1: average1(head); break;case 2: clrscr();average2(head); printf("\n\n\nPress eny key retuen.");getch(); break;case 3: clrscr();p1=sort(head);for(p2=p1->next;p2!=NULL;p2=p2->next)printf("\n\t\tname: %s\tmingci:%d",p2->name,j++);printf("\n\n\nPress eny key back.");getch(); break;case 4: output(head); break;default: printf("\nYour choose is not right.");break;}}while(i!=-1);}4、#include<stdio.h>#include<string.h>#define NULL 0#define F sizeof(worker)typedef struct work{ char sid[15];char name[15];int money;struct work *next;}worker;int min=0,max=0;char a[15],b[15];worker *input(){ worker *head,*p,*q;int n=0;char ch;head=(worker *)malloc(F); head->next=0;do{ n++;p=(worker *)malloc(F); p->next=0;printf("\n\n\tPlease input %d worker message : ",n);printf("\n%d worker sid: ",n);scanf("%s",p->sid);printf("\n%d worker name: ",n);scanf("%s",p->name);printf("\n%d worker money: ",n);scanf("%d",&p->money);if(n==1){ head->next=p; q=p;max=p->money;strcpy(a,p->name);min=p->money;strcpy(b,p->name);}else{ q->next=p;if(p->money>max) {max=p->money;strcpy(a,p->name);}if(p->money<min) {min=p->money;strcpy(b,p->name);}q=p;}printf("\n\t\ty/n");ch=getch();}while(ch=='y'||ch=='Y');return head;}void output(){ clrscr();printf("\nThe max money is: %d\t\tname is: %s\n\n",max,a);printf("\nThe min money is: %d\t\tname is: %s",min,b);}void main(){input();output();getch();}5、6、#include"stdio.h"#define F sizeof(stu)#define NULL 0typedef struct student{int sid;int average;struct student *next;}stu;stu *head;stu *create(){ stu *p1,*p2;int n=0; char ch;head=(stu *)malloc(F);head->next=NULL;do{ n++;printf("\n\nPlease input %d student message: \n\n",n);printf("\t%d student sid: ",n);p1=(stu *)malloc(F);p1->next=NULL;scanf("%d",&p1->sid);printf("\n\t%d student average: ",n);scanf("%d",&p1->average);if(n==1){ head->next=p1;p2=p1; }else{ p2->next=p1;p2=p1;}printf("\n\n\t\t\tContinue or back (press y/n): ");ch=getch();}while(ch=='y'||ch=='Y');return head;}stu *select(stu *head,int x){stu *s;s=head->next;while(s){if(s->sid==x)break;s=s->next;}return s;}stu *insert(stu *head,int x,int y){stu *p,*r,*q;clrscr();p=head->next;r=(stu *)malloc(sizeof(stu));r->sid=x;r->average=y;if(p==NULL)/*如果插入空表*/{p=r;r->next=NULL;printf("\ninsert success!!");}else{ while(x>p->sid) /*找到插入的位置,按学号大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九次课作业:
请课后完成p816、p812、p822、p241、p243、p244、p245(p246*)、p247(p248*)、p249(p250*、p251*、p252*)
习题9-1
题码:章节:考查点:普通变量作为函数参数、函数返回值、素数算法难度:0
根据要求编写程序P816.C的指定部分:
程序P816.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:输入两个整数m和n,输出大于等于m(m>5)的n个素数,输出的各素数间以空格相隔。
注:素数(Prime umber),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
程序的运行效果应类似地如图1所示,图1中的17,5是从键盘输入的内容。
图1 程序运行效果示例
习题9-2
题码:章节:考查点:函数定义及调用难度:0
根据要求编写程序P811.C的指定部分:
程序P811.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:输入三角形的三边长a、b、c,求三角形面积area,并输出。
如果输入的三边构不成三角形,应给出“data error”的信息提示。
注:根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2。
程序的运行效果应类似地如图1和图2所示,图1中的3,4,5和图2中的3,4,8是从键盘输入的内容。
图1 程序运行效果示例图2 程序运行效果示例
习题9-3
题码:章节:考查点:函数定义及调用难度:0
根据要求编写程序P813.C的指定部分:
程序P813.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:有一递推数列,满足f(0)=0,f(1)=1,f(2)=2, f(n+1)=2f(n)+f(n-1)f(n-2) (n>=2), 编写程序求f(n)的值(n由键盘输入,13>=n>=2)。
程序的运行效果应类似地如图1所示,图1中的10是从键盘输入的内容。
图1 程序运行效果示例
习题9-4
题码:章节:考查点:数组名作为函数参数、数组元素逆序存放算法难度:0
根据要求编写程序P817.C的指定部分:
程序P817.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘输入一行可带空格的字符串(约定:字符数≤127字节),按逆序输出该字符串。
注意,程序中不能使用库函数strrev或使用同名的变量、函数、单词。
程序的运行效果应类似地如图1所示,图1中的abc xyz是从键盘输入的内容。
图1 程序运行效果示例
习题9-5
题码:章节:考查点:函数定义及调用难度:0
根据要求编写程序P814.C的指定部分:
程序P814.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:输入3行3列的矩阵,输出所有元素的累加和。
程序的运行效果应类似地如图1所示,图1中的
1 2 3
4 5 6
7 8 9
是从键盘输入的内容。
图1 程序运行效果示例
习题9-6
题码:章节:考查点:难度:1
根据要求编写程序P242.C的指定部分:
程序P242.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘读入若干个整数(读到-1或读满16个数均结束读入),然后倒序输出这些数。
程序的运行效果应类似地如图1所示,图1中的1 2 3 4 5 6 7 8 9 20 11 12 -1 13和图2中的1 31 3 4 5 6 7 8 21 10 11 12 13 14 15 16 17 18是从键盘输入的内容。
图1 程序运行效果示例(读到-1时的情况)
图2 程序运行效果示例(读满16个数时的情况)
习题9-7
题码:章节:考查点:难度:1
根据要求编写程序P253.C的指定部分:
程序P253.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,再读入一个数num(这些数均≥0),然后分别调用自定义函数在数组arrA 和arrB中查找大于num的最小数、输出查找结果。
程序的运行效果应类似地如图1所示,图1中的1 5 3 8 2、88 11 33 77 22 55 95 66和51是从键盘输入的内容。
图1 程序运行效果示例
完成类似题:(p254*)、p255(p256*)。