实验内容解答_第1页
实验内容解答_第2页
实验内容解答_第3页
实验内容解答_第4页
实验内容解答_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE60 实验四1.分析以下程序,并通过运行程序,得出程序中的else表示的情况是B。#include<stdio.h>voidmain(void){ inta; scanf("%d",&a); if(a%2==0) { if(a%3==0) if(a%4==0) printf("1");//能被12整除输出“1” } else printf("0");//不能被2整除输出“0”}//其余整数无输出A)a能被2整除B)a不能被2整除C)a不能被4整除D)a不能被12整除2.完成填空,使程序能实现判断输入的自然数是否既是3又是5的倍数。#include<stdio.h>voidmain(void){ intx; printf("inputx:"); scanf("%d",&x);//注意&符号的写法 if(x%3==0&&x%5==0)//非逗号, printf("yes"); else printf("no");}5.根据以下函数关系,对输入的每个x值,计算出相应的y值。 #include<stdio.h>main(){floatx,y;printf("请输入x:");scanf("%f",&x);if(x<0)y=-x;//printf("%f\n",y=-x);elseif(x<10)y=x+5;elseif(x<20)y=x+10;elsey=x+20;printf("y=%f\n",y);}不正确的写法:(1)f(x<0)y=-x;elseif(x>=0&&x<10)y=x+5;elseif(x>=10&&x<20)y=x+10;elsey=x+20;(2)f(x<0)y=-x;elseif(0<=x<10)y=x+5;elseif(10<=x<20)y=x+10;elsey=x+20;(3)f(x<0)y=-x;elseif(x>=0,x<10)y=x+5;elseif(x>=10,x<20)y=x+10;elsey=x+20;其他方法:实验课本P61注意:(1)if之后的条件要用()括起来(2)最后一个else后面不再加条件if(x>=20)(3)复合语句要加大括号{}(4)数学上的0<x<10关系在C语言中写成x>0&&x<10或0<x&&x<10(5)scanf(“格式字符串”,&变量名);printf(“格式字符串”,变量名);例:printf(“y=%d”,y);printf(y);printfy;实验五第三章流程控制习题找出下面程序中的错误,并对其予以改正:1.分析:原程序在编译的时候并没有出现相应的语法错误,而且程序也可以进行运行。但程序运行达不到预期的结果。每个if后面的三个表达式所要体现的功能是将两变量的值进行互换,是一个复合语句,必须用{}括起来。#include<stdio.h>//包含输入输出头文件voidmain(void){floata,b,c,t;printf("Inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}//将a,b的值进行交换,复合语句必须用{}括起来if(a>c){t=a;a=c;c=t;}//将a,c的值进行交换,复合语句必须用{}括起来if(b>c){t=b;b=c;c=t;}//将b,c的值进行交换,复合语句必须用{}括起来printf("%f,%f,%f\n",a,b,c);}2.#include<stdio.h>voidmain(void){intn;printf("Pleaseinputthescore:");scanf("%d",&n);if(n<0||n>100)//源程序此处少了逻辑或“||”printf("输入分值错误!");elseswitch(n/10){case9:printf("A\n");break;case8:printf("B\n");break;case7:printf("C\n");break;case6:printf("D\n");break;default:if(n==100)printf("A\n");//源程序中的{}多余elseprintf("E\n");//源程序中的{}多余}}3.分析:在程序第九行添加语句if(i==1)min=a;防止系统给min赋一个随机值。return0表示程序正常结束。#include<stdio.h>intvoidmain(void){ inta,i=1,min; while(i<=5) { printf("请输入第%d个数据:\n",i);//源程序缺少了与%d对应的变量i scanf("%d",&a);if(i==1)min=a;//将输入的第一个数字作为min的初始值 if(min>=a)min=a; i=i+1; } printf("min=%d\n",min);//“+”改为“=” return0;//添加“;”}4.#include<stdio.h>voidmain(void){inti=1,sum=0;//给sum一个初始值0,否则系统将赋一个随机值。do//去掉do后的“;”sum+=i;//“{}”多余while(++i<=10);printf(“sum=%d”,sum);//添加运算结果输出语句}实验六实验课本P208实验4二、1、B,循环3次2、求输入的自然数m的所有素数因子。#include<stdio.h>voidmain(void){ intm,k=2; printf("输入的自然数m:"); scanf("%d",&m); while(k<=m) if(m%k==0) {printf("%d,",k); m=m/k; } else k++; printf("\b\n");}3、输出1~n间不能被7整除的数。#include<stdio.h>voidmain(void){ inti=1,n;printf("inputthenum:\n");scanf("%d",&n);for(

;i<=n

;i++for(

;i<=n

;i++){if(i%7==0)continue;printf("%4d,",i);}{ if(i%7==0) i++;printf("%4d,",i); i++;} printf("\n");}实验七第三章流程控制习题五、7.给定一个自然数,要求:①求它是几位数;②按逆序打印出各位数字。例如原数为4321,应输出1234。#include<stdio.h>voidmain(void){ intnum,i,x; scanf("%d",&num); for(i=0;num>0;i++)//for(i=0;num;i++)或for(i=0;num!=0;i++) { x=num%10; num/=10;//num=num/10;而非num/10=num; printf("%d",x);//a=num/10;printf("%d",num-a*10); } printf("\n这是一个%d位数。\n",i);}#include<stdio.h>voidmain(void){ intnum,i,x=0; scanf("%d",&num); for(i=0;num>0;i++) { x=x*10+num%10; num/=10; } printf("这是一个%d位数。\n",i); printf("%d\n",x);}实验八第四章数组习题四、找出下面程序中的错误,并对其予以改正:1.对输入的10个浮点数按从小到大顺序进行冒泡法排序。分析:原程序在编译的时候并没有出现相应的语法错误,而且程序也可以进行运行。但结果不正确,原因在于对数组整体引用,做输入\输出操作是非法的,只能逐个地引用数组元素。#include<stdio.h>#defineSIZE10voidmain(void){ floatNum[SIZE],tmp; shorti,j;printf("Input10normalnumbers:\n");for(i=0;i<SIZE;i++) scanf("%f",&Num[i]);//逐个数组元素赋值 printf("\n"); for(i=0;i<SIZE;i++) { for(j=0;j<SIZE-i-1;j++) if(Num[j]>Num[j+1]) tmp=Num[j],Num[j]=Num[j+1],Num[j+1]=tmp; } printf("Sortednumbers:");for(i=0;i<SIZE;i++) printf("%5.1f\n",Num[i]);//逐个数组元素输出 printf("\n");}2.把一个整数按大小顺序插入已排好序的数组中。原程序编译通过,但结果不正确,原因在于变长数组初始化后数组大小就已经确定,不能更改,a[]={27,56,123,128,154,168,178,205,362,618}定义后,数组a的最大数组元素是a[9],因而a[10]引用时下标越界;同时算法有误,在与输入数的比较中,应该是当输入数小于数组元素时,数组逐个后移,插入。改正算法如下:#include<stdio.h>voidmain(void){shorti,s,n,a[11]={27,56,123,128,154,168,178,205,362,618};//固定数组大小printf("inputanumber:\n");scanf("%d",&n);for(i=0;i<10;i++)if(n<a[i])//比较{for(s=9;s>=i;s--)a[s+1]=a[s];break;}a[i]=n; printf("Numbersnow:");for(i=0;i<=10;i++)printf("%d",a[i]);printf("\n");}5.统计输入的10个数中的最大值和最小值以及它们的序号。分析:C语言中下标越界不做检查,程序员必须仔细控制,同时程序中流程错误比较严重,具体修改如下#include<stdio.h>#defineSIZE10voidmain(void){intx[SIZE],i,max,min,a,b;printf("Enter10integers:\n");for(i=0;i<SIZE;i++)//数组下标从0开始,最大为9{printf("%d:",i);scanf("%d",&x[i]);//输入语句要在循环中,保证10次输入}max=min=x[0];a=b=0;for(i=1;i<SIZE;i++){if(max<x[i]){max=x[i];a=i;}//两条赋值语句都在选择结构中if(min>x[i]){min=x[i];b=i;}//同上}printf("Maximumvalueis%d,第%d个\n",max,a+1);printf("Minimumvalueis%d,第%d个\n",min,b+1);}五、编程题1.试编程在一个已排好序的浮点型数组中查找是否存在输入的待查浮点数,如果有,打印出它的位置;如果没有,则打印“没有这个数!”。【参考答案】#include<stdio.h>#include<math.h>#defineSize7voidmain(void){inti,flag=0;floata[Size]={2.6,2.8,4.7,5.4,6.0,6.7,9.4};floatx;printf("inputanumber:\n");scanf("%f",&x);for(i=0;i<Size;i++)if(fabs(x-a[i])<1.0e-5)//if(x==a[i]) { printf("找到这个数,在第%d个位置\n",i+1); flag=1; } if(flag==0)printf("没有这个数\n");}输入:5.4,程序运行结果如下:实验九实验课本P210实验5二、4、5第四章数组习题五、编程题9.编写程序对输入的五个国家名称进行冒泡法排序,将其按字典顺序排列输出。【参考答案】#include<stdio.h>#include<string.h>voidmain(void){chars[5][20];chartemp[20];inti,j;for(i=0;i<5;i++)gets(s[i]);for(i=0;i<4;i++)for(j=0;j<4-i;j++)if(strcmp(s[j],s[j+1])>0){strcpy(temp,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],temp);}for(i=0;i<5;i++)printf("%s",s[i]);}输入:China,Italy,America,Egypt,Japan,程序运行结果如下:图4-26程序运行结果10.编程将输入的十进制整数num转换成二进制字符串输出。#include<stdio.h>voidmain(void){intnum;charStringNum[20];inti,j,Num[20];scanf("%d",&num);for(i=0;num!=0;++i) N Num[i-j-1]==1Num[i-j-1]Num[i-j-1]!=0Num[i]=num%2;num/=2;}for(j=0;j<i;++j)StringNum[j]=Num[i-j-1]>0?'1':'0';StringNum[j]=’\0’;puts(StringNum);}四、找出下面程序中的错误,并对其予以改正:3.分析:在程序中的错误关键在于字符串的比较和赋值必须都用字符串函数实现,不能直接使用赋值语句和比较运算符,因使用到字符串函数需要添加头文件string.h,改正如下:#include<stdio.h>#include<string.h>//添加头文件#include<string.h>viodmain(void){charstrtmp[10],StrName[5][10];shorti,j,tmp;printf("inputcountry'sname:\n");for(i=0;i<5;i++)gets(StrName[i]);for(i=0;i<5;i++){ for(tmp=i,j=i+1;j<5;j++)if(strcmp(StrName[j],StrName[tmp])<0)//字符串比较大小使用strcmp函数tmp=j;if(tmp!=i){ strcpy(strtmp,StrName[tmp]);//字符串赋值使用strcpy函数 strcpy(StrName[tmp],StrName[i]); strcpy(StrName[i],strtmp);}puts(StrName[i]);}printf("\n");}输入:China,Italy,America,Egypt,Japan,程序运行结果如下:图4-15程序运行结果实验十第五章指针习题三、分析程序,写出程序运行结果3.阅读下列程序,写出程序运行结果。#include<stdio.h>voidmain(void){inta[]={1,2,3,4,5},*p;p=a;*(p+2)+=2;//a[2]=a[2]+2=5printf(“%d,%d”,*p,*(p+2));}运行结果:1,55.阅读下列程序,写出程序运行结果。#include<stdio.h>voidmain(void){intnum[]={1,3,5,7},s=1,i,*p=num;for(i=0;i<3;i++)s*=*(p+i);//s=s*num[i]printf("%d\n",s);}运行结果:15四、找出下面程序中的错误,并对其予以改正。1、某人编写了一个程序对输入的浮点数观察其地址和数值。请仔细阅读他的程序,指出并纠正程序中的错误。错误原因:使用了未初始化的野指针。#include<stdio.h>#defineSIZE10voidmain(void){ float*Pointer;//改为floatNum,*Pointer=&Num; printf("Inputafloat:"); scanf("%f",Pointer); printf("Pointer=%X*Pointer=%f\n",Pointer,*Pointer);}2、某人尝试用指针输入10个整数却无法打印。请仔细阅读他的程序,指出并纠正程序中的错误。错误原因:指针越界正确的程序为:#include<stdio.h>#defineSIZE10voidmain(void){ shortNum[SIZE],*ptr=Num; shorti;printf("Input10normalnumbers:\n");for(i=0;i<SIZE;i++) scanf("%d",ptr++);printf("\n");printf("Inputednumbersare:\n");ptr=Num;for(i=0;i<SIZE;i++) printf("%d\n",*ptr++); printf("\n");}给出的答案:#include<stdio.h>#defineSIZE10voidmain(void){ intNum[SIZE],*ptr=Num; shorti;printf("Input10normalnumbers:\n");for(i=0;i<SIZE;i++){if(i)++ptr; scanf("%d",ptr);}printf("\n");printf("Inputednumbersare:\n");ptr=Num;for(i=0;i<SIZE;i++){if(i)++ptr; printf("%d\n",*ptr);} printf("\n");}实验十一第五章习题三、分析程序,写出程序运行结果4.阅读下列程序,写出程序运行结果。#include<stdio.h>voidmain(void){shorta[]={1,3,5,7,9},*p,**k;p=a;k=&p;printf("%d,",*(p++));printf("%d,",**k);}运行结果:1,38.阅读下列程序,写出程序运行结果。#include<stdio.h>voidmain(void){inta[2][3]={{1,2,3},{4,5,6}},m,*p;p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));printf("%d",m);}运行结果:1510.阅读下列程序,写出程序运行结果。#include<stdio.h>voidmain(void){char*p="1A2B3C4D";while(*p!='4')printf("%c",*(p++)+1);printf("\n%c\n",*(p++));}运行结果:四、找出下面程序中的错误,并对其予以改正。4、下面程序尝试对3个字符串排序。请仔细阅读程序,指出并纠正程序中的错误。正确程序为:#include<stdio.h>#include<string.h>voidmain(void) { charStr1[]="teacher",tmp[20]; charStr2[]="student"; charStr3[]="computer"; if(strcmp(Str1,Str2)<0) {strcpy(tmp,Str1);strcpy(Str1,Str2);strcpy(Str2,tmp);}if(strcmp(Str1,Str3)<0) {strcpy(tmp,Str1);strcpy(Str1,Str3);strcpy(Str3,tmp);}if(strcmp(Str2,Str3)<0) {strcpy(tmp,Str2);strcpy(Str2,Str3);strcpy(Str3,tmp);} printf("str1=%s\tstr2=%s\tstr2=%s\n",Str1,Str2,Str3);}或者都用指针#include<stdio.h>#include<string.h>voidmain(void) { char*tmp;char*Str1="teacher"; char*Str2="student"; char*Str3="computer"; if(strcmp(Str1,Str2)<0) {tmp=Str1;Str1=Str2;Str2=tmp;}if(strcmp(Str1,Str3)<0) {tmp=Str1;Str1=Str3;Str3=tmp;}if(strcmp(Str2,Str3)<0) {tmp=Str2;Str2=Str3;Str3=tmp;} printf("str1=%s\tstr2=%s\tstr2=%s\n",Str1,Str2,Str3);}常见错误:(1)voidmain(void) { charStr1[]="teacher",*tmp; charStr2[]="student"; charStr3[]="computer"; if(strcmp(Str1,Str2)<0) {strcpy(tmp,Str1);strcpy(Str1,Str2);strcpy(Str2,tmp);}……}错误原因:使用了未初始化的野指针。给野指针指向的随机内存copy字符串。(2)voidmain(void) { charStr1[]="teacher",*tmp; charStr2[]="student"; charStr3[]="computer"; if(strcmp(Str1,Str2)<0) {tmp=Str1;strcpy(Str1,Str2);strcpy(Str2,tmp);}……}错误原因:无法实现字符串的交换,最后Str1和Str2中全部都是原来Str2的内容。(3)voidmain(void) { char*tmp;char*Str1="teacher"; char*Str2="student"; char*Str3="computer"; if(Str1<Str2) {tmp=Str1;Str1=Str2;Str2=tmp;}……}实验十二第五章习题三、分析程序,写出程序运行结果6.阅读下列程序,写出程序运行结果。#include<stdio.h>#include"string.h"voidmain(void){chars[][10]={"12","23","34","45","56"};char*s1[5],**s2=s1,s3[10];inti,j;for(i=0;i<5;i++)s1[i]=s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(strcmp(*(s2+i),*(s2+j))<0){strcpy(s3,*(s2+i));strcpy(*(s2+i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论