C语言第9次实训题目及参考答案
- 格式:pdf
- 大小:66.26 KB
- 文档页数:2
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的整倍数。
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个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。
实验2答案五.程序改错#include<stdi o.h>int main(void){int x=3,y;y = x*x;printf("%d = %d * %d\n",y,x,x); /* 输出*/printf("%d * %d = %d\n",x,x,y);return 0;}六、一般编程题6.1#include<stdio.h>int main(void){int x,y;printf("Input x: ");scanf("%d",&x);printf("Input y: ");scanf("%d",&y);printf("%d + %d = %d\n",x,y,x+y);printf("%d - %d = %d\n",x,y,x-y);printf("%d * %d = %d\n",x,y,x*y);printf("%d / %d = %d\n",x,y,x/y);printf("%d %% %d = %d\n",x,y,x%y);return 0;}6.2#include<stdio.h>int main(void){ float x; double y;printf("Input x: ");scanf("%f",&x);printf("Input y: ");scanf("%lf",&y);printf("%f + %f = %f\n",x,y,x+y);printf("%f - %f = %f\n",x,y,x-y);printf("%f * %f = %f\n",x,y,x*y);printf("%f / %f = %f\n",x,y,x/y);return 0;}6.3#include<stdio.h>int main(void){ char c;printf("Input c: ");scanf("%c",&c);printf("%c\n",c+32);return 0;}6.4#include<stdio.h>int main(void){int celsius,fahr;fahr = 150;celsius = 5*fahr/9 - 5*32/9;printf("fahr = %d, celsius = %d\n", fahr, celsius);return 0;} 如果使用公式9)32(5-⨯=f c 计算结果不一样,celsius = 65。
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语言第九章参考答案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~12答案实验9 指针概念及指针与一维数组的关系任务一1.阅读分析下面程序,写出运行结果,理解指针概念及“*”与“&”的含义。
a=100,b+2=12*p1=100,*p2+2=122.上机验证下列程序的运行结果。
a=5,b=7,p1=1245052,p2=1245048&a=1245052,5,&b=1245048,b=73.分析下面程序,并运行,理解用指针变量进行输入、输出。
输入并验证输出结果即可4.编写程序,实现从键盘输入两个数,输出时从大到小排列(利用指针概念)。
5,9a=5,b=9max=9,min=5任务2 使用指针访问一维数组1.阅读分析下面程序,写出运行结果,理解指针与数组关系。
s=92.阅读下面程序,理解指针、数组的多种表示法。
a[0]=1p[0]=1*(p+0)=1*(a+0)=1a[1]=2p[1]=2*(p+1)=2*(a+1)=2a[2]=3p[2]=3*(p+2)=3*(a+2)=33.在空格中填上语句,以实现字符串复制的功能。
*p2=*p1;p2++;p1++;4.下面程序完成从键盘输入两个字符串a和b,再将a和b的对应位置字符中的较大者存放在数组c中,当一个字符串结束时停止比较,此时将另一个字符串剩下的字符直接放在数组c的后面,填空完成该程序。
#include#includevoid main( ){int k=0;char a[80],b[80],c[80]={'\0'},*p,*q;p=a;q=b;gets(a);gets(b);while(*p!='\0'&&*q!='\0'){if(*p>*q) c[k]=*p;else c[k]=*q;p++;q++;k++;}if(*p!= '\0') strcat(c,p);else strcat(c,q);puts(c );}5.指出下面程序的问题所在(输出a数组的10个元素),理解指针与数组下标的关系及指针变化情况。
练习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语言程序设计及实验指导练习及习题参考答案(8--10) 8练习参考答案1、练习8-1.如果有定义:intm,n=5,某p=&m;与m=n等价的语句是BA.m=某p;B.某p=某&n;C.m=&n;D.m=某某p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数um_diff(floatop1,floatop2,float某pum,float某pdiff),其中op1和op2是输入的两个数,某pum和某pdiff是计算得出的和与差。
解答:#includeintmain(void){floatop1,op2,um,diff;voidum_diff(floatop1,floatop2,float某pum,float某pdiff);printf(“inputop1andop2:“);canf(“%f%f”,&op1,&op2);um_d iff(op1,op2,&um,&diff);printf(“%f+%f=%f;%f-%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}voidum_diff(floatop1,floatop2,float某pum,float某pdiff){某pum=op1+op2;某pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:不能。
因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。
8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。
请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。
解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。
第九章习题参考答案一、选择题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语言学习中的一个重要章节,主要涉及指针和动态内存分配的知识。
在这一章中,我们将学习如何使用指针来操作内存,并且了解动态内存分配的概念和用法。
本文将为大家提供第九章习题的答案,帮助大家更好地理解和掌握这些知识。
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。
解析:这段代码与上一题的代码非常相似,唯一的区别在于输出语句中对指针的解引用操作使用了括号。
这是因为后置自增运算符的优先级比解引用运算符高,为了保证先解引用再自增,我们需要使用括号来明确优先级。
第一次作业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 位小数)显示输出。
注意事项:1、本试卷共12 页,满分为100 分,考试时间为110 分钟。
2、标准答题卡使用2B铅笔涂写;文字题答题时请使用蓝、黑钢笔或圆珠笔,不得使用红颜色墨水笔。
题目一二三四总分分数核对得分阅卷人读卡一、单项选择题:(每题 1 分,共40 分)(说明:请将正确答案按照题干上【】内的序号涂写“标准答题卡”)一、单项选择题:(每题 1 分,共40 分)1. A2. C3. A4. B5. B6. C7. D8. A9. B 10. A 11. B 12. B 13. B 14. B 15. C 16. B 17. C 18. B 19. D 20. D 21. D 22. C 23. D 24. B 25. D 26. B 27. B 28. D 29. B 30. B 31. C 32. B 33. A 34. B 35. C 36. B 37. B 38. D 39. B 40. C1.以下标识符中,合法的变量名是【1】。
A) g_1 B) 3d C) u-d D) a&b2.以下叙述正确的是【2】。
A)在C程序中,main()函数必须位于程序的最前面B) C程序的每行中只能写一条语句C) C语言本身没有输入输出语句D)在C程序中,注释说明只能位于一条语句的后面3.若k,g均为int型变量,则以下语句的输出为【3】。
int k,g;k=017;g=111;printf("%d, ",k);printf("%x\n",g);A) 15,6f B) f,6f C) f,111 D) 15,1114.表达式sizeof(double)是【4】。
A) 一个双精度型表达式B) 一个整型表达式C) 一种函数调用D) 一个不合法的表达式5.设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为【5】。
第9章数据库与数据访问技术一、判断题1. √2. √3. ×4. √5. ×6. ×7. √8. √9. ×10.×11.√12.√13.√14.√15.√16.×17.×18.×19.√20.√21.√22.×二、选择题1.A2.D3.C4.B5.C6.A7.C8.D9.D 10.C 11.A 12.D 13.A 14.B 15.B 16.C三、程序设计题程序1.(1)数据访问控件以及数据绑定控件的相关属性设置如下Data1:Connect("Access")、DatabaseName("d:\学籍.mdb")、RecordSource("学生)" Text1:DataSource("Data1")、DataField("学号")Text2:DataSource("Data1")、DataField("姓名")Check1:DataSource("Data1")、DataField("性别")Text3:DataSource("Data1")、DataField("出生日期)Text4:DataSource("Data1")、DataField("奖学金")Text5:DataSource("Data1")、DataField("简历")OLE1:DataSource("Data1")、DataField("照片")Adodc1:ConnectionString("Provider = Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info = False") CommandType("1-adCmdText")、RecordSource("select * from 成绩") DataGrid1:DataSource("Adodc1")(2)主要事件过程代码Option ExplicitPrivate Sub Form_Load()Caption = "学籍信息编辑浏览"Label1.Caption = "学号:" : Label2.Caption = "姓名:"Label3.Caption = "出生年月:" : Label4.Caption = "奖学金:"Label5.Caption = "简历:" : Label6.Caption = "照片:"Check1.Caption = "性别(选中表示男,否则为女)"Label7.Caption = "成绩信息查询显示": Adodc1.Visible = FalseEnd SubPrivate Sub Data1_Reposition()Adodc1.RecordSource = "select 成绩.课程号,课程名,成绩from 学生,课程,成绩" _ & "where 学生.学号= 成绩.学号and " & "成绩.课程号= 课程.课程号and " & _ "成绩.学号='" & Data1.Recordset("学号") & "'" & " order by 成绩.课程号" Label7.Caption = Trim(Data1.Recordset("姓名")) & "成绩信息查询显示" Adodc1.RefreshEnd Sub程序2.(1)数据访问控件以及数据绑定控件的相关属性设置如下:Adodc1:ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info = False"CommandType("1-adCmdText")、RecordSource("select * from 学生)DataGrid1:DataSource("Adodc1")(2)主要事件过程代码Option ExplicitPrivate Sub Form_Load()Dim i As IntegerCaption = "学籍信息查询浏览": Adodc1.Visible = FalseLabel1.Caption = "选择查询方式:": Combo1.Text = "全部都显示"Label2.Caption = "全部表文件数据浏览表格:" : Label3.Visible = False Text1.Visible = False: Text1.Text = ""For i = 0 To 2Combo1.AddItem Mid("全部都显示按学号查询按姓名查询", 5 * i + 1, 5) Next iEnd SubPrivate Sub Combo1_Click()Select Case Combo1.ListIndexCase 0Text1.Visible = False: Label3.Visible = FalseAdodc1.RecordSource = "select * from 学生"Label2.Caption = "全部表文件数据浏览表格:": Adodc1.Refresh Case 1Label3.Caption = "输入查询条件(学号):" : Text1.Visible = True Label3.Visible = True: Text1.SetFocusCase 2Label3.Caption = "输入查询条件(姓名):" : Text1.Visible = True Label3.Visible = True: Text1.SetFocusEnd SelectEnd SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyReturn ThenIf Combo1.ListIndex = 1 ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset.Find "学号='" & Text1.Text & "'"If Adodc1.Recordset.EOF ThenAdodc1.RecordSource = "select * from 学生"Label2.Caption = "全部表文件数据浏览表格:"Adodc1.Refresh: MsgBox "查无此人!"ElseAdodc1.RecordSource = "select * from 学生 " & "where _学号='" & Text1.Text & "'"Label2.Caption = "学生" + Text1.Text + "的数据浏览表格:"End IfElseAdodc1.Recordset.MoveFirstAdodc1.Recordset.Find "姓名='" & Text1.Text & "'"If Adodc1.Recordset.EOF ThenAdodc1.RecordSource = "select * from 学生"Label2.Caption = "全部表文件数据浏览表格:"Adodc1.Refresh: MsgBox "查无此人!"ElseAdodc1.RecordSource = "select * from 学生 " & _"where 姓名='" & Text1.Text & "'"End IfEnd IfAdodc1.RefreshEnd IfEnd Sub程序3.(1)数据访问控件以及数据绑定控件的相关属性设置如下:Adodc1(xs):ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info=False")CommandType("2-adCmdTable")、RecordSource("学生")Adodc2(kc):ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info=False")CommandType("2-adCmdTable")、RecordSource("课程")Adodc3(cjcx):ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info=False")CommandType("1-adCmdText")RecordSource(" select 成绩.学号,学生.姓名,成绩.课程号,课程.课程名, _ 成绩.成绩 from 学生,课程,成绩 where 成绩.课程号 = 课程.课程号 _and 成绩.学号 = 学生.学号 "DataGrid1:DataSource("cjcx")DataList1:RowSource("xs")、ListField ("姓名")、BoundColumn("学号") DataList2:RowSource("kc")、ListField("课程名")、BoundColumn("课程号")(2)主要事件过程代码Option ExplicitDim p As BytePrivate Sub Form_Load()Dim i As IntegerFor i = 0 To 4Label1(i).Caption = Mid("优秀良好中等及格差等", 2 * i + 1, 2)Text1(i).Text = "": Text1(i).BackColor = RGB(205, 205, 192)Text1(i).Locked = TrueNext icjcx.RecordSource = "select 成绩.学号,学生.姓名,成绩.课程号,课程.课程名, " _ & "成绩.成绩from 学生,课程,成绩 " & _"where 成绩.课程号=课程.课程号 and 成绩.学号=学生.学号"cjcx.Refresh: Label2.Caption = "成绩信息列表"Label3.Caption = "选择学生姓名:" : Label4.Caption = "选择课程名:" xs.Visible = False: kc.Visible = False: cjcx.Visible = False Caption = "学籍信息查询": p = 0End SubPrivate Sub DataList1_Click()p = 0: Call cjdctjEnd SubPrivate Sub DataList2_Click()p = 1: Call cjdctjEnd SubPrivate Sub cjdctj()Dim cjdcjs(5) As Integer, dcase As Byte, i As ByteIf p = 0 Thencjcx.RecordSource = "select 成绩.学号,学生.姓名,成绩.课程号, " _ & "课程.课程名,成绩.成绩 from 学生,课程,成绩 " _& "where 成绩.学号='" & DataList1.BoundText & "' " _& "and (成绩.课程号=课程.课程号 and " _& "成绩.学号=学生.学号) order by 成绩.课程号"Frame1.Caption = "单位:门"Label2.Caption = Trim(DataList1.Text) & "成绩信息列表"Elsecjcx.RecordSource = "select 成绩.学号,学生.姓名,成绩.课程号, " _ & "课程.课程名,成绩.成绩 from 学生,课程,成绩 " _& "where成绩.课程号='" & DataList2.BoundText & "' " _& "and (成绩.课程号=课程.课程号 and " _& "成绩.学号=学生.学号) order by 成绩.学号"Frame1.Caption = "单位:人"Label2.Caption = Trim(DataList2.Text) & "成绩信息列表"End Ifcjcx.RefreshIf Not cjcx.Recordset.EOF Then cjcx.Recordset.MoveFirstWhile Not cjcx.Recordset.EOFIf cjcx.Recordset("成绩") < 60 Thendcase = 0Elsdcase = (cjcx.Recordset("成绩") \ 10) – 5End IfSelect Case dcaseCase 4, 5: cjdcjs(0) = cjdcjs(0) + 1Case 3: cjdcjs(1) = cjdcjs(1) + 1Case 2: cjdcjs(2) = cjdcjs(2) + 1Case 1: cjdcjs(3) = cjdcjs(3) + 1Case 0: cjdcjs(4) = cjdcjs(4) + 1End Selectcjcx.Recordset.MoveNextWendFor i = 0 To 4: Text1(i).Text = cjdcjs(i): Next iEnd Sub程序4.(1)数据访问控件以及数据绑定控件的相关属性设置如下:Adodc1:ConnectionString("Provider = Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info = False")CommandType("2-adCmdTable")、RecordSource("学生")LockType("4-adBatchOptimistic)Adodc2:ConnectionString("Provider = Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info=False")CommandType("2-adCmdTable")、RecordSource("课程")LockType("4-adBatchOptimistic")Adodc3:ConnectionString("Provider = Microsoft.Jet.OLEDB.4.0; _ Data Source = E:\GYH\VB\学籍1b.mdb; Persist Security Info = False")CommandType("2-adCmdTable")、RecordSource("成绩")LockType("4-adBatchOptimistic")Text1:用于显示编辑"学号",但是本字段不设置数据绑定属性,输入或修改后的"学号"数据通过代码方式写入数据源中。
C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。
运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。
数据运算包括算术运算和逻辑运算。
控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。
输出设备正好与输入设备相反,是用来输出结果的部件。
2、简述计算机的工作原理。
答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。
整个过程由控制器进行控制。
3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。
系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。
这类软件一般与具体应用无关,是在系统一级上提供的服务。
系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。
另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。
在操作系统的基础上运行。
4、什么叫软件?说明软件与硬件之间的相互关系。
答:软件是指计算机程序及有关程序的技术文档资料。
两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。
在不太严格的情况下,认为程序就是软件。
硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。
习题一、选择题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)。
A、10B、15C、21D、349、就排序算法所用的辅助空间而言,堆排序、快速排序和归并排序的关系( A)。
c语言程序设计实验教程课后答案C语言程序设计实验教程课后答案C语言是一种广泛使用的计算机编程语言,以其高效、灵活和功能强大而著称。
学习C语言不仅能够帮助学生理解计算机程序设计的基础,而且能够为学习更高级的编程语言打下坚实的基础。
以下是一些常见的C语言程序设计实验教程课后问题及其答案。
问题1:编写一个C程序,计算并输出两个整数的和。
答案:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和是:%d\n", sum);return 0;}```问题2:编写一个C程序,判断一个整数是否为素数。
答案:```c#include <stdio.h>#include <math.h>int isPrime(int n) {if (n <= 1) return 0;for (int i = 2; i <= sqrt(n); i++) {if (n % i == 0) return 0;}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d 是素数。
\n", num);} else {printf("%d 不是素数。
\n", num);}return 0;}```问题3:编写一个C程序,实现简单的学生成绩管理系统。
答案:```c#include <stdio.h>struct Student {char name[50];int score;};int main() {struct Student students[3] = {{"Alice", 85},{"Bob", 90},{"Charlie", 78}};int i;printf("学生成绩列表:\n");for (i = 0; i < 3; i++) {printf("%s: %d\n", students[i].name, students[i].score);}return 0;}```问题4:编写一个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),如果没有达到基本情况,它会进入递归调用,每次调用都会处理问题的一个更小的部分,直到达到基本情况,然后逐层返回结果。