《C語言程序設計實例教程》課后習題 練習4_第1頁
《C語言程序設計實例教程》課后習題 練習4_第2頁
《C語言程序設計實例教程》課后習題 練習4_第3頁
《C語言程序設計實例教程》課后習題 練習4_第4頁
《C語言程序設計實例教程》課后習題 練習4_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

e練習4一、選擇題。.以下對編譯預處理命令的正確的說法是(ABC)oA、C語言中的編譯預處理命令包含宏定義、文件包含和條件編譯B、C語言中的編譯預處理命令以#號開頭C、C語言中的編譯預處理命令一般位于程序代碼的首部D、C語言中的編譯預處理命令以分號結束.設有不帶參的宏定義#defineN20+1,則以下說法不正確的是:(C)。A、編譯預處理階段,程序代碼中所有的宏名N被原樣替換為20+1B、該不帶參宏定義中的20+1為宏替換字符串C、該不帶參宏定義中的20+1為整型表達式D、該不帶參宏定義中的宏名N沒有數據類型的概念.定義一個帶參的宏名f(x)計算表達式2*x*(x+l)的值,則以下帶參宏定義中正確的定義形式是:(B)oA、#definef(x)2*x*(x+l)B、#definef(x)(2*(x)*((x)+l))C、#define2*(x)*((x)+l)f(x)D、#definef2*x*(x+l).以下對條件編譯不正確的說法是(B)。A、條件編譯是指在部分程序代碼在滿足指定條件的情況下才參與編譯,否則不參與編譯。B、無論是否使用條件編譯,所有程序代碼均要進行編譯C、使用條件編譯和使用if語句是有區別的D、合理使用條件編譯可以減少需要參與編譯的語句數量,生成的目標程序小,程序執行效率高。.文件包含命令#include<math.h〉^[1#include"math.h”的區別在于(D)。A、前者先在編譯系統指定的目錄下查找文件math.h,如果找不到再到用戶當前目錄下查找B、后者先在編譯系統指定的目錄下查找文件math.h,如果找不到再到用戶當前目錄下查找C、兩者均是先在編譯系統指定的目錄下查找文件math.h,如果找不到再到用戶當前目錄下查找D、前者僅在編譯系統指定的目錄下查找文件math.h,后者先在用戶當前目錄中查找文件,如果找不到再到編譯系統指定的目錄下查找.以下對將C程序的多個源文件連接生成可執行文件的說法中不正確的是(C)oA、使用工程文件的方式下,每個源文件分別編譯生成一個目標文件,然后再進行連接生成可執行文件B、使用文件包含命令的方式下,通過編譯預處理生成一個包含所有源文件代碼的新的源文件,將該源文件編譯成目標文件,然后再進行連接生成可執行文件。C、使用文件包含命令的方式下,不必考慮多條文件包含命令的順序。D、工程文件的作用是告訴編譯系統需要將那些源文件進行編譯、連接并生成一個可執行文件.當說明一個結構體變量時,系統分配給它的內存是(A)A、結構體中各成員所需內存量的總和B、結構體中第一個成員所需內存量k=0;printf(”請輸入年月日(1999618):");scanf(H%d.%d.%dH,&s.year,&s.month,&s.day);if(s.year%4==0&&s.year%100!=0||s.year%400==0)t=l;if(s.month<l||s.month>12)(printf(”月份輸入錯誤!\n");k=l;continue;}switch(s.month)(casel:case3:case5:case7:case8:case10:case12:if(s.day<l||s.day>31){printf(HH期輸入錯誤!\n");k=l;}break;case4:case6:case9:case11:if(s.day<11|s.day>30){printf("日期輸入錯誤八n");k=l;}break;case2:if(t==0&&(s.day<11|s.day>28)){printf(nH期輸入錯誤!');k=l;break;}elseif(t==l&&(s.day<l||s.day>29)){printf(HB期輸入錯誤!\n");k=l;}break;}}while(k==l);n=Day(&s);printf("是第%4天}7、編寫一個C程序,將指定的文本文件中的所有小寫字母轉換成對應的大寫字母,其他的字符格式不變。#include<stdio.h>voidmain()|FILE*fp;charc;fp=fopen(nabc.txt,\Hr+u);while(!feof(fp))(c=fgetc(fp);if(c>=,a,&&c<=,z,)(fseek(fprlL,SEEK_CUR);fputc(c-32,fp);fseek(fp,ftell(fp),SEEK_SET);}}fclose(fp);C、結構體中占內存量最大的成員所需的內存量D、結構體中最后一個成員所需內存量.當說明一個共用體變量時,系統分配給它的內存是(C)A、共用體中各成員所需內存量的總和B、共用體中第一個成員所需內存量C、共用體中占內存量最大的成員所需的內存量D、共用體中最后一個成員所需內存量.以下關于typedef的敘述不正確的是(B)A、用typedef可以定義各種類型名,但不能用來定義變量B、用typedef可以增加新類型C、用typedef只是將已存在的類型用一個新的名稱來代表D、使用typedef便于程序通用.下面四個運算符中,優先級最低的是(A)A、()B、.C、->D、++.以下關于枚舉的敘述不正確的是(D)A、枚舉變量只能取對應的枚舉類型的枚舉元素表中的元素B、可以在定義枚舉類型時對枚舉元素進行初始化C、枚舉元素表中元素有先后次序,可以進行比較D、枚舉元素的值可以是整數或者字符串。.在下列程序中,枚舉變量cl和c2的值分別是(A)和(D)#include<stdio.h>voidmain()(enumcolor{red,yellow,blue=4,green,white}c1,c1;cl=yellow;c2=white;printf("%d,%d\nn,cl,c2);)A、1B、3C、5D、6.已知有如下定義,若有p=&data,則對data中的成員a的正確引用是(B)structsk{inta;floatb;}data,*p;A、(*p).data.aB、(*p).aC、p->data.aD、.設有以下定義和語句,structstudent(intnum,age;);structstudentstu[3]={{2001,20},{2001,21},{2001,19}};structstudeng*p=stu;則以下錯誤的引用是(D)A、(p++)->numB、p++C、(*p).numD、p=&stu.age.設有以下說明語句,stuctex{intx;floaty;charz;}example;則下面的敘述中不正確的是(B)A、struct是結構類型的關鍵字B、example是用戶定義的結構類型名C、x,y,z都是結構成員名D、structex是用戶定義的結構類型.設有以下語句:structst(intn;st*next;);staticsta[3]={5,&a[1],7,&a[2],9,NULL},*p;p=&a[0];則以下表達式值為6的是(B)A、p++->nB、++p->nC、(*p).n++D、p->n++.選擇下面程序的運行結果是(B)#include<stdio.h>structstu(intnum;charname[10];intage;);voidfun(stu*p)(printf("%s\n”,(*p).name);)voidmain()(structstustudents[3]={{9801;,Zhangn,20},{9802;,Long,,,21},{9803,HXueM9}};fun(students+2);)A、ZhangB、XueC、LongD、18.當已存在一個abc.txt文件時,執行£(^611(匕改仆「"[+”)的功能是(D)A、打開abc.txt文件,清除原有的內容B、打開abc.txt文件,只能寫入新的內容C、打開abc.txt文件,只能讀取原有內容D、打開abc.txt文件,可以讀取和寫入新的內容19.若用fopen函數打開一個新的二進制文件,該文件可以讀也可以寫,則文件打開的模式是(C)A、”ab+“B、"wb+“C、"rb+“D、“ab”.若用fopen函數打開一個已經存在的文本文件,保留該文件原有數據且可以讀也可以寫,則文件操作模式是(C)A、二+“B、“w+”C、"a+“D、.使用fseek函數可以實現的操作是(C)A、改變文件的位置指針的當前位置B、文件的順序讀寫C、文件的隨機讀寫D、以上都不對.fread(buf,64,2,fp)的功能是(D)A、從fp文件流中讀出整數64,并存放在buf中;B、從fp文件流中讀出整數64和2,并存放在buf中;C、從fp文件流中讀出64個字節的字符,并存放在buf中;D、從fp文件流中讀出2個64個字節的字符,并存放在buf中;.以下程序的功能是(B)#include<stdio.h>voidmain()(FILE*fp;charstr[]=nHellon;fp=fopen(HPRN,V,wn);fputs(str,fp);fclose(fp);)A、在屏幕上顯示"Hello"B、把"Hello”存入PRN文件中C、在打印機上打印出"Hello”D、以上都不對.檢測fp文件流的文件位置指針在文件頭的條件是(B)A、fp==OB、ftell(fp)=OC、fseek(fp,O,SEEK_SET)D、feof(fp).以下程序的功能是(A)#include<stdio.h>voidmain()(FILE*fp;fp=fopen("abc","r+”);while(!feof(fp))if(場etc(fjp尸=,*')(fseek(fp,-1L,SEEK_CUR);fputc(4$\fp);fseek(fp,ftell(fp),SEEK_SET);)fclose(fp);)A、將abc文件中所有'均替換成'$'B、查找abc文件中所有'C、查找abc文件中所有'$'D、將abc文件中所有字符均替換成'$'二、填空題1、C語言提供的預處理命令功能主要有三種:宏定義,文件包含,條件編譯。且分別用#defhie,#indude,#if或#011出£來實現。為了與一般的C語句相區別,這些命令以#符號開頭。2、結構體變量成員的引用方式是使用成員運算符運算符,結構體指針變量成員的引用方式是使用成員運算符運算符。3、設structstudent{intno;charname[12];floatscore[3];}si,*p=&sl;TOC\o"1-5"\h\z用指針法給si的成員no賦值1234的語句是一p->no=1234。4、運算sizeof是求變量或類型的內存字節數,typedef的功能是類型定義。5、C語言可以定義枚舉類型,其關鍵字為emim。6、設unionstudent{intn;chara[100];}b;貝Usizeof(b)的值是100。7、C語言流式文件的兩種形式是ASCII碼文件和二進制文件。8、C語言打開文件的函數是fopen,關閉文件的函數是fclose。9、按指定格式輸出數據到文件中的函數是fprintf,按指定格式從文件讀取數據的函數是fscanf,判斷文件指針到文件末尾的函數是EOF。10、輸出一個數據塊到文件中的函數是fwrite,從文件中輸入一個數據塊的函數是fread;輸出一個字符串到文件中的函數是fputs,從文件中輸入一個字符串的函數是fgets11、feof(fp)函數用來判斷文件是否結束,如果遇到文件結束,函數值為0,否則為1。12、在C語言中,文件的存取是以字節為單位的,這種文件被稱作流式文件。三、閱讀程序,寫出運行結果。#definePI3#defineSPI*r東r#defineV4*S*r/3voidmain()(floatr=2;printfTS=%.2f,V=%.2P,S,V);)答案:S=12.00,V=32.002.#defineFX(x)x*(x+2)(x-2)voidmain()(inta=3,b=2;printf(n%d\nH,FX(2+a+b));}答案:95.#definePRT(x)printf("%d\t",x)#dcfincPRINT(x)PRT(x);printf(uwclldone!")voidmain()(intx=3,i;for(i=0;i<3;i++)PRINT(x-i);printff'n");答案:321welldone!.#include<stdio.h>structtwo(intx,*y;}*P;inta[8]={123,4,5,6,7,8};twob[4]={100,&a[l],200,&a[3],10,&a[5],20,&a[7]};voidmain(){p=b;printf(',%d\n'\++(p->x));)答案:101.#include<stdio.h>structn_c(intx;charc;};voidfunc(structn_cb)(b.x=20;b.c-y';)voidmain()(structn_ca={10/x1};func(a);printf(H%d%cn,a.x,a.c);return0;)答案:10x四、編程題。1、圓柱形體積公式為:v=area*ho其中area=兀*r*r,圓周率兀取值為3.14。要求使用不帶參宏定義實現計算圓柱體體積功能,r和h的值由用戶鍵盤輸入。#include<stdio.h>#definePI3.14#defineAreaPI*r*r#defineVArea*hvoidmain()(intr,h;printf("請輸入圓柱的半徑:”);scanf(H%dn,&r);printf「請輸入圓柱的高:”);scanf(H%du,&h);prints圓柱的體積為%.2f:”,V);}2、編寫一個帶參的宏定義,實現通過宏替換求式子f(x)=4x3+3x2-2x+l值的功能,其中x為形參。要求在main函數中通過宏替換求下面兩個式子的值,式子中的m由用戶鍵盤輸入。#include<stdio.h>#definef(x)4*(x)*(x)*(x)+3*(x)*(x)?2*(x)+lvoidmain()(intm,f;printf("請輸入一個整數:");scanf(n%dn,&m);printf(Hf(x)=%d,\f(m));)3、編寫3個源文件filel.c、31e2.c和file3.c,在file2.c中編寫函數funl求兩個整數的和,在file3.c中編寫函數fun2求兩個整數的差,在filel.c中編寫main函數調用這兩個函數求兩個整數的和與差并輸出結果。filel.c:#include<stdio.h>intfunl(inta,intb);intfun2(inta,intb);voidmain()(intx,y,sum,Diff;printf,請輸入x和y兩個整數:");scanf(''%d,%d'',&x,&y);sum=funl(x,y);Diff=fun2(x,y);printf(H\n%d+*%d=%d'',x,y,sum);printf(H\n%d-%d=%dn,x,y,Diff);file2.c:intfunl(inta,intb)(intc;c=a+b;returnc;)file3.c:intfun2(inta,intb)|intc;c=a-b;returnc;}4、要求:分別使用工程文件和文件包含命令兩種方式將3個源文件連接生成一個可執行文件。答案:見例題。5、有4個學生,每個學生包括學號,姓名,成績。要求找出成績最高者的姓名和成績。#include<stdio.h>structstu(intNo;charName[10];intScore;);intsearchMax(structstu*stu

溫馨提示

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

評論

0/150

提交評論