實驗內容解答_第1頁
實驗內容解答_第2頁
實驗內容解答_第3頁
實驗內容解答_第4頁
實驗內容解答_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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,循環(huán)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]);//輸入語句要在循環(huán)中,保證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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論