2015冬程序設計基礎C離線作業含答案_第1頁
2015冬程序設計基礎C離線作業含答案_第2頁
2015冬程序設計基礎C離線作業含答案_第3頁
2015冬程序設計基礎C離線作業含答案_第4頁
2015冬程序設計基礎C離線作業含答案_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、浙江大學遠程教育學院程序設計基礎(C)課程作業姓名:夏林學 號:年級:2015年秋學習中心:洞頭學習中心第章 語言的基本構成程序調試題1 編輯、調試以下程序步驟1:在Visual C+環境下新建文件可用開始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,輸入文件名ex1-1.c,程序代碼如下:include<stdio.h> /*文件預處理,包含標準輸入輸出庫,程序可調用輸入、輸出函數*/int add(int x,int y) int z; z=x+y; return z; int ma

2、in( ) int add(int,int); /* 函數的說明,告訴系統在主函數中要調用add函數 */int a,b,c; /* 變量的定義*/scanf("%d %dn",&a,&b);c=add(a,b); /* 函數調用 */ printf("%d+%d=%dn",a,b,c); /* 調用系統輸出函數printf,%d為格式控制符,依次用后面的變量值填充,以整數形式輸出 */請思考文件ex1-1.c由幾個函數構成?調用了那幾個系統函數?此程序中用到了哪幾個保留字?哪幾個用戶自定義標識符?答:文件ex1-1.c由兩個函數構成,分

3、別是add()和主函數main()。調用了兩個系統函數,分別為scanf和printf。程序中用到如下幾個保留字:int, return。使用了如下幾個用戶自定義標示符:x, y, z, a, b, c.步驟3:編譯并運行程序,程序運行時輸入兩個整數,20 40 ,觀察程序運行的結果。答:問題出在main函數第5行這句: scanf("%d %dn",&a,&b); 對于scanf函數內有”n”,直接回車是無效的,建議去掉“n”: 變成: scanf("%d %d",&a,&b); 重新運行再輸入,回車,得出結果是60程序

4、運行結果,20+40=602 編輯、調試以下程序步驟1:在Visual C+環境下新建文件可用開始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,輸入文件名ex1-2.c步驟2:在文本編輯器中輸入以下C程序#include<stdio.h> /*文件預處理,包含標準輸入輸出庫,程序可調用輸入、輸出函數*/#include<ex1-2-2.c>int main( ) int and(int,int); /* 函數的說明,告訴系統在主函數中要調用and函數 */ int or(in

5、t,int); /* 函數的說明,告訴系統在主函數中要調用and函數 */int a,b,c; /* 變量的定義*/scanf("%d %d",&a,&b);c=and(a,b); /* 函數調用 */ printf("%d && %d=%dn",a,b,c); /*調用系統輸出函數printf,%d為格式控制符,依次用后面的變量值填充,以整數形式輸出 */c=or(a,b); /* 函數調用 */ printf("%d | %d=%dn",a,b,c); 步驟3:文件 新建文件 C+ Sourse F

6、ile,輸入文件名ex1-2-2.c,源程序代碼為:int and(int a,int b) int c; c=a&&b; return c;步驟4:文件 新建文件 C+ Sourse File,輸入文件名ex1-2-3.c,源程序代碼為:int or(int a,int b) int c; c=a|b; return c;步驟5:點擊編譯圖標,編譯程序1-2.c 步驟4:點擊執行圖標 ,執行程序1-2.c ,當程序運行時,鍵盤輸入20 40,按回車。20 4020 && 40=120 | 40=1您可以輸入其它的整數,觀察程序的執行結果。答:按照上述步驟,執行

7、后發現程序錯誤,檢查程序,發現兩個問題:步驟二中第2句 #include<ex1-2-2.c> 錯誤, 正確形式應該用雙引號: #include"ex1-2-2.c"#include"ex1-2-2.c" 后一行增加 #include"ex1-2-3.c"完整程序運作如下:編譯執行,輸入20 40回車,得到輸入0 和15,回車得到第章輸入輸出程序設計1 用printf輸出一個中空的五角星。答:#include<stdio.h>int main()printf(" *n"); printf(&

8、quot; * *n"); printf(" * * n"); printf("* * * * * *n"); printf(" * *n"); printf(" * * n"); printf(" * * * n"); printf(" * * * * n"); printf(" * * * * n"); printf(" * * n"); 2 仿照例子2.2,定義一個字符數組,從鍵盤輸入一字符串,然后輸出的程序。#incl

9、ude<stdio.h>int main()char xm80;printf("請輸入您的姓名: n");scanf("%s",xm);printf(" 您好,%s 同學,歡迎來到浙江大學。n",xm); return 0; 3 從鍵盤輸入十六進制整數,轉化為八進制數輸出。#include<stdio.h>int main()int a;printf("請輸入一個十六進制整數: ");scanf("%x",&a);printf(" 轉換成八進制輸出為:

10、%o n",a); return 0; 4 只定義兩個整型數據并賦值,實現兩個整型數的互換。#include<stdio.h>int main()int x,x1=158,x2=476;printf("交換前 x1= %d ,x2=%d n",x1,x2); x=x1;x1=x2;x2=x; printf("交換后 x1= %d ,x2=%d n",x1,x2); return 0; 5 從鍵盤上輸入一個整數,分別輸出8、16進制數的程序。6 從鍵盤上輸入一個整數,分別輸出它的個位數,十位數,百位數。#include<stdi

11、o.h>int main()int x,x0,y1,y2,y3;printf("請輸入一個三位整數: ");scanf("%d",&x);x0=x;y1=x%10;x=x/10; y2=x%10;x=x/10; y3=x%10;printf(" %d的個位數為%d ,十位數為%d,百位數為%d 。 n",x0,y1,y2,y3); return 0; 7 以下程序輸出結果是( )。#include<stdio.h>void main() int i=010,j=10; printf("%d,%dn&

12、quot;,+i,j- ); 答:結果是 9,108 運行程序,屏幕提示“您是一個學生嗎”,您輸入y或n進行回答,屏幕輸出您的選項。#include<stdio.h>int main()char x;printf("您是一個學生嗎?(請輸入y/n): ");scanf("%c",&x);if(x='y')printf("您是一個學生。n");else printf("您不是一個學生。n"); return 0; 9 從鍵盤輸入一個角度x,求10*sin(x)的值。#include

13、<stdio.h>#include<math.h>int main()printf("請輸入一個角度x: ");scanf("%lf",&x);y=x*pi/180;z=10*sin(y); printf(" 10*sin(x)值為 %lf 。 n",z); return 0; 第章循環程序設計1以下for語句的循環次數是多少?int i,j=3;for(;i=j;i-,j-) printf("%d",i);答:循環了3次#include<stdio.h> int mai

14、n() int i,j=3; for(;i=j;i-,j-) printf("%d",i); return 0;2下面的語句顯示輸出6行6列的整數數組h的主對角線上的所有元素,請補充完整:for(int i=0;i< 6 ; i+ )printf("%d", hii )3寫出以下程序運行的結果,此程序實現了什么功能?#include<stdio.h>void main() int a10=2,4,0,-5,10,6,-8,9,6,7; int i, count=0; for(i=0;i<10;i+) if(ai=0) count+

15、; else continue;printf("%dn ", count);答:運行結果是1,此程序用來統計數組a中0的數量。4寫出以下程序的功能。#include<stdio.h>void main()int a10=2,4,0,-5,10,6,-8,9,6,7,tmp,k;for (k=0;k<10/2;k+) tmp=ak; ak=a10-k-1;a10-k-1=tmp;答:數組倒序功能。5寫出以下程序運行后的輸出結果。#include<stdio.h>void main() int i,j; for(i=0;i<6;i+) for

16、(j=0;j<i;j+)printf(" ");for(j=0;j<2*(5-i)-1;j+)printf("*");printf("n"); 答:執行結果是一個*組成的倒三角形6請改正下列程序的錯誤,改正后的程序寫在右邊的空白處,并上機調試檢驗。(1)#include<stdio.h>void main( ) int i,s;i=1; s=0;while(i<=100); while(i<=100) s=s+i; i+; i+; printf(“1+2+3+.+99+100=%dn”,s);(2)

17、#include<stdio.h>void main( ) int i,s;i=1;s=0;while(i<=100) s=s+i; s=s+i; i+; i+; printf(“1+2+3+.+99+100=%dn”,s);(3)#include<stdio.h>void main( ) int i=1,s; int i=1,s=0;while(i<=100) ; while(i<=100) s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);7 輸入一個基數,例如輸入9,輸出為:求1*3*9的值。輸出為:1*3*5*

18、7*9=945#include<stdio.h>int main()int x,i=1,s=1;printf("請輸入一個基數: ");scanf("%d",&x); printf("%d",i);for(i=3;i<=x;i+=2)s*=i; printf("*%d",i);printf(" = %d n",s); return 0; 8 輸入一個510之間的整數n,求1!+2!+3!+n!。例如輸入5,輸出為:1!+2!+3!+5!=153#include<s

19、tdio.h>void main() int i,n; long int a=1,sum=0; printf("請輸入一個510之間的整數n:n"); scanf("%d",&n); for(i=1;i<=n;i+) a*=i; sum=sum+a; printf("1!+2!+3!+n!=%ldn ", sum);9在屏幕上輸出以下內容1 12 123 1234 12345 123456 1234567 12345678 123456789 #include<stdio.h>void main() i

20、nt i,j; for(i=0;i<=9;i+) for(j=1;j<=i;j+)printf("%d",j); printf("n "); 10 求2+4+6+98+100的和,用多種for表達式來完成。方法一:#include<stdio.h>void main() int i,sum=0; for(i=2;i<=100;i+=2) sum=sum+i; printf("2+4+6+98+100=%dn",sum);方法二:#include<stdio.h>void main() int

21、i,sum=0; for(i=1;i<=100;i+) if(i%2=0) sum=sum+i; printf("2+4+6+98+100=%dn",sum); 11 輸入一行字符,統計它有多少個字母?#include<stdio.h>void main() char str100; int i,j,s=0; printf("請輸入一行字符:n"); for(i=1;i<100;i+) stri=getchar(); if(stri='n') break; for(j=1;j<i;j+) if(strj>

22、;='a'&&strj<='z')|(strj>='A'&&strj<='Z') s+; printf("字符中有%d個字母。n",s); 第章分支程序設計1輸入若干整數給x,使用if語句輸出x的絕對值,當輸入0時結束。#include<stdio.h>int main()int x;printf("請輸入x值: ");scanf("%d",&x);while(x)if(x>0)printf(&q

23、uot; %d的絕對值是%d 。 n",x,x); elseprintf(" %d的絕對值是%d 。 n",x,-x);printf("請輸入x值: ");scanf("%d",&x); return 0; 2 輸入一批數,輸出比相鄰數大的數,當輸入0時結束。#include<stdio.h>#define N 1000void main() int numN; int i = 0; int j=1; printf("請輸入需要比較的整數,以數字0結尾:n"); scanf("

24、;%d", &numi); while(numi!= 0) scanf("%d",&num+i); printf("比相鄰數大的數字為:n"); if (i = 1) printf("%d ", num0); if (i>1&& num0>num1) printf("%d ", num0); for(; j<i-1; j+) if (numj>numj-1&&numj>numj+1) printf("%d "

25、, numj); if(i>1 &&numi-1>numi-2) printf("%d ", numi-1); printf("n");3 將輸入字符的大寫字符轉換成小寫字符輸出,小寫字符原樣輸出。#include<stdio.h>int main()char s; printf("請輸入一串字符:n");while(s=getchar()!='n')if(s>='A'&&s<='Z')s=s+32;putchar(s)

26、;printf("n"); return 0;4 輸入一批字符,按回車時結束,統計小寫字符、大寫字符、數字字符、或其它字符的個數。#include<stdio.h>int main()char s;int dx=0,xx=0,sz=0,qt=0; printf("請輸入一串字符:n");while(s=getchar()!='n')if(s>='A'&&s<='Z')dx+;else if(s>='a'&&s<='z

27、')xx+;else if(s>='0'&&s<='9')sz+;elseqt+;printf("小寫字符有%d個,大寫字符有%d個,數字字符有%d個,其他字符有%d個。n",xx,dx,sz,qt); return 0;5編寫程序,計算分段函數:#include<stdio.h>int main( ) double x,y; while(1) printf("請輸入x的值:"); scanf("%lf",&x); if(x<=1) y=x+

28、5; else if(x<10) y=2*x; else y=3/(x-10); printf("當x=%lf時,y=%lfn",x,y); return 0;6根據輸入的百分制按五分制的成績輸出。百分制與五分制之間的關系見下表。百分制五分制90 100580 89470 79360 692<601#include<stdio.h>int main( ) int n; while(1) printf("請輸入百分制成績:"); scanf("%d",&n); while(n<0|n>100)

29、 printf("請重新輸入分數(0100之間):"); scanf("%d",&n); if(n>=90) printf("%d對應的五分制成績為:5n",n); else if(n>=80) printf("%d對應的五分制成績為:4n",n); else if(n>=70) printf("%d對應的五分制成績為:3n",n); else if(n>=60) printf("%d對應的五分制成績為:2n",n); else printf(

30、"%d對應的五分制成績為:1n",n); return 0;7、 用switch完成:讀入一個實數x,再輸入一整數,若輸入是1,則計算sin(x),若輸入2,則計算cos(x),若輸入3,則計算tan(x),若輸入其他值,則顯示錯誤信息。#include<stdio.h>#include<math.h>int main( ) float x; int n; do printf("請輸入一個實數x:"); scanf("%f",&x); printf("請輸入一個整數,選擇運算方式(1.sinx

31、,2.cosx,3.tanx):"); scanf("%d",&n); switch(n) case 1:printf("x=%f,sinx=%fn",x,sin(x);break; case 2:printf("x=%f,cosx=%fn",x,cos(x);break; case 3:printf("x=%f,tanx=%fn",x,tan(x);break; default:printf("輸入錯誤!n");break; while(1);return 0;8、用swit

32、ch完成:輸入星期1 到星期5,輸出它們對應的顏色星期1:blue星期2:red星期3:white星期4:yellow星期5:greeninclude<stdio.h>int main( ) int x; do printf("請輸入星期幾(用數字15表示):"); scanf("%d",&x); switch(x) case 1:printf("星期1:bluen");break; case 2:printf("星期2:redn");break; case 3:printf("星期3

33、:whiten");break; case 4:printf("星期4:yellown");break; case 5:printf("星期5:greenn");break; default:printf("輸入錯誤!n");break; while(1);return 0;9、用switch完成:從鍵盤輸入A、B、C、D四個等級中的一個,轉化輸出等級輸出A優秀B良好C中等D及格E不及格#include<stdio.h>int main( ) char degree; printf("請輸入等級(用A、

34、B、C、D表示):"); scanf("%c",&degree); switch(degree) case 'A':printf("優秀n");break; case 'B':printf("良好n");break; case 'C':printf("中等n");break; case 'D':printf("合格n");break; case 'E':printf("不及格n"

35、);break; default:printf("輸入錯誤!n");break; return 0;第章數組及其應用.從鍵盤輸入12個數,分別為:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小數。#include<stdio.h>int main( ) int a12; int i,min,max; printf("請輸入12個數:"); for(i=0;i<12;i+) scanf("%d",&ai); min=a0; max=a0; for(i=1;i<12;i

36、+) if(ai>max) max=ai; else if(ai<min) min=ai; printf("最大值為 %d ,最小值為 %d 。n",max,min); return 0;. 采用遍歷查找,在數組aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶數。#include<stdio.h>int main( ) int a10=2,3,20,58,72,76,78,87,90,900; int i; printf("數組中的偶數為:"); for(i=0;i<10;i+) if(a

37、i%2=0)printf("%d ",ai); printf("n"); return 0;.采用折半查找,在數組aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后進行刪除。#include<stdio.h>int main( ) int a10=2,3,20,58,72,76,78,87,90,900; int i,mid,low=0,high=9,found; printf("輸入要查找的數:"); scanf("%d",&found); while

38、(high>=low) mid=(low+high)/2; if(amid<found) low=mid; else if(amid>found) high=mid; else break; printf("%d的下標為%d n",found,mid); printf("刪除%d后,新數組為:",found); for(i=mid;i<9;i+) ai=ai+1; for(i=0;i<9;i+) printf("%d ",ai); printf(" n"); return 0;第章函數

39、及其應用練習與實踐一、閱讀程序,寫出程序運行的結果。1寫出以下程序的執行結果。#include<stdio.h>float aver(int a) int k,sum=0;float ave;for(k=0;k<10;k+) sum+=*(a+k); ave=(float)sum/10;return (ave);int main( ) float ave;static b=78,89,98,76,78,45,88,81,92,85;ave=aver(b);printf("ave=%fn",ave);提示:數組b的首地址傳遞給形參a,*(a+k)就是數組元素

40、bk.答:計算數組b各元素的平均值,運行結果是ave=81.0000002閱讀程序,寫出程序的執行結果。#include<stdio.h> void abc( char str )int a, b ;for(a = b = 0 ; stra!='0' a+ )if(stra!= 'c)strb+ = stra;strb='0'int main( )char str ="abcdef" ;abc(str);printf("str =%s " , str );return 0;提示:數組str的首地址傳遞給

41、形參str,stra就是實參中的數組元素stra,當數組元素不為c時進行復制。 答:程序是刪除數組中的c。 運行結果是str =abdef3寫出以下程序的執行結果。#include<stdio.h>int sort(int b,int n,int x)int k;for(k=n-1;k>=0;k-)if(bk<x)bk+1=bk;elsebreak;bk+1=x;return 0; int main( )int i,j;static int a5=8,5,4,1,6;int b8;b0=a0;for(i=1;i<5;i+)sort(b,i,ai);for(j=0;

42、j<=i;j+) printf("%d ",bi);printf("n");return 0; 提示:循環體中if(bk<x)bk+1=bk;elsebreak;如果bk<x成立,執行語句bk+1=bk;表示數組元素b向后移,不滿足時插入x,即從大到小排序。答:運行結果是5 54 4 41 1 1 11 1 1 1 14寫出以下程序的執行結果。#include<stdio.h>int fun(int x) int p; if(x=0|x=1) return 3; else p=x-fun(x-2); return p;int

43、 main( )printf("n%d",fun(9);return 0; 提示:fun(9)=9-fun(7),.,fun(1)=3答:運行結果是75寫出以下程序的執行結果,并說明其作用是什么?#include<stdio.h>int f(int n)if(n>=10)f(n/10);printf("%d",n%8);return 0;int main( )f(1234);printf("n");return 0; 提示:在函數f中,程序運行借助了堆棧,依次入棧的數據分別為1234、123、12,最后n=1,n對8

44、取余輸出,然后數據依次出棧對8取余輸出。答:運行結果是1432二、程序設計1編寫一個函數,計算x的n次的平方。 提示:for(y=1,i=0;i<n;i+) y=y*x;#include<stdio.h> int xn( int x,int n) int i,y ; for(y=1,i=0 ; i<n; i+) y=y*x;return y;int main( )int x,n;long int y; while(1) printf("請輸入x的值:" ); scanf("%d",&x); printf("請輸入

45、n的值:" ); scanf("%d",&n); y=xn(x,n); printf("y=xn=%ld n",y ); return 0;2編寫一個函數,計算對角線上元素之和。提示:for(s=0,i=0;i<n;i+) for(j=0;j<n;j+) if(i=j) s=s+aij; #include<stdio.h> #define SIZE 100int trisum( int aSIZESIZE,int n) int i,j,s ; for(i=0,s=0; i<n; i+) for(j=0 ;

46、j<n; j+) if(i=j) s=s+aij;return s;int main( )int aSIZESIZE;int i,j,n;while(1)printf("Please input the size:" );scanf("%d",&n);printf("Please input the numbers:" );for(i=0; i<n; i+) for(j=0 ; j<n; j+) scanf("%d",&aij);printf("Sum of diagon

47、al elements is %d n",trisum(a,n);return 0;3編寫一個函數int invert(char str ),將一個字符串的內容顛倒過來。提示:先求字符串str的長度n,for(i=0;i<n/2;i+)ai與an-1-i交換#include<stdio.h> #include<string.h> #define SIZE 100int diandao( char str) int i,n ; char temp; n=strlen(str); for(i=0 ; i<=n/2; i+) temp=stri; str

48、i=strn-1-i; strn-1-i=temp; puts(str);return 0;int main( )char strSIZE;int i;while(1)printf("請輸入一個字符串: " );gets(str);printf("顛倒后的字符串為: ");diandao(str);printf("n" );return 0;4編寫函數,刪除字符串中,從指定位置m開始的n個字符。刪除成功,函數返回被刪除字符串;否則返回空的值。提示:for(k=m , i=0 ; stri ; i+) strm+i=strm+n+i;

49、strm+i=0;#include<stdio.h> #define SIZE 100char *delet(char str,int m,int n) int i; for(i=0 ; strm-1+n+i!='0' i+) strm-1+i=strm-1+n+i; strm-1+i='0' return str;int main( )char strSIZE;int i,m,n;printf("請輸入一個字符串: n" );gets(str);printf("請問要從第幾個字符開始刪除? ");scanf(

50、"%d",&m);printf("請問要刪除幾個字符? ");scanf("%d",&n);printf("刪除后的內容為:%s n",delet(str,m,n);return 0;5編寫一個程序,從鍵盤輸入的字符串,刪去非數字字符,轉換成整型數輸出。 提示:for(s=0 , i=0 , j=0 ; stri;i+) if(stri>=0&&stri<=9) s=s*10+stri-0; #include<stdio.h> #include<stri

51、ng.h> #define SIZE 100int convert(char str) int i; long int s; for(i=0,s=0; stri!='0' i+) if(stri<='9'&&stri>='0') s=10*s+stri-'0' return s;void main( )char strSIZE;while(1)printf("請輸入一個字符串: " );gets(str);printf("刪去非數字字符,轉換后的整型數為:%d n&q

52、uot;,convert(str);6用遞歸的方法編寫一個函數sum(int n),求1至n的累加和。 提示:f(n)=n+f(n-1) #include<stdio.h> int sum(int n) int s;if(n<=1)s=1;elses=n+sum(n-1); return s;void main( )int n;while(1)printf("請輸入n: " );scanf("%d",&n);printf("當n=%d時,1至n的累加和為:%d n",n,sum(n);第章變量存儲類型與多文件

53、系統1寫出以下程序的執行結果。#include<stdio.h>int x;void fun( )printf("%d ",x+);void main( )int x=1;extern int x;printf("%d,",+x);fun( );提示:在函數fun中及語句塊extern int x;printf("%d,",+x);中使用的x是外部變量,在語句塊:if(x=1)int x=2;printf("%d,",x+);中使用的是剛剛定義x=2的變量。答:運行結果是1,12寫出以下程序的執行結果。#include<stdio.h>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論