一、前言 是這樣的,之前手機備份圖片到電腦,由於蘋果拍照開了Live模式,所以它導出的圖片有一個2秒的視頻(.mov) 跟一張靜態圖(.jpg / .heic),靜態圖輸出取決當時導出的選項。 現在想恢復到手機,導入發現Live圖不能動了。 欸 無非就是找到兩個同名的,然後移到另一個文件夾嘛,一開始 ...
21、函數fun的功能是:不斷從終端讀入整數k,用變數a統計大於0的個數,用變數b來統計小於0的個數,當輸入0時結束輸入,並通過形參px和py把統計的數據傳回主函數進行輸出。
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> void fun(int *px,int *py) { int ________; // 【1】 scanf("%d",&k); while (________) // 【2】 { if (k>0) a++; else b++; ________; // 【3】 } *px=a; *py=b; } int main() { int x,y; fun(&x,&y); printf("x=%d,y=%d\n",x,y); return 0; }
【1】a=0,b=0,k 【2】k!=0 (或k) 【3】scanf("%d",&k) 解析:函數中有3個局部變數,且a和b需要賦初值0,因此,【1】處填寫“a=0,b=0,k”。迴圈輸入數據的結束條件為K==0,故【2】處填寫“k!=0”。迴圈中處理了輸入的數據後,需要再輸入下一個數據,故【3】處填寫“scanf("%d",&k)”。參考答案及解析
22、請補充main()函數,該函數的功能是:輸入兩個正整數num1和num2,求這兩個數的最大公約和最小公倍數。
例如,若輸入的兩個正整數為12,24,則它們的最大公約數為12,最小公倍數為4。
註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在main()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> int main() { int a,b,num1,num2,t; printf("\nInput two numbers:\n"); scanf("%d %d",&num1,&num2); a=num1; b=num2; while (________) //【1】 { t=________; //【2】 a=b; b=t; } printf("Greatest common divisor:%d\n",a); printf("Least common multiple:%d\n",________); // 【3】 return 0; }
【1】b!=0 【2】 a%b 【3】num1*num2/a 解析:採用輾轉相除法求兩個整數a和b的最大公約數。顯然t=a%b,因此【2】處填寫“a%b”,由於程式中a=b,b=t,且最大公約數保存在a中,則結束條件為b==0,因此【1】處填寫“b!=0”。【3】處填寫求最小公倍數的式子“num1*num2/a”。參考答案及解析
23、請補充main()函數,該函數的功能是:如果數組arr的前一個元素比後一個元素小,則把它保存在數組bb中並輸出。
例如,若數組中的元素為:“40,68,62,33,35,52,48,95,66,73”,則輸出:“40,33,35,48,66”。
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在main()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> #define M 10 int main() { int i,n=0; int arr[M]={40,68,62,33,35,52,48,95,66,73}; int bb[M]; for (i=0; i<________;i++) // 【1】 if (arr[i]<arr[i+1]) ________; // 【2】 printf("\n***displaybb***\n"); for (i=0;i<n;i++) printf("bb[%d]=%2d ",________); //【3】 return 0; }
【1】M-1 【2】bb[n++]=arr[i] 【3】i,bb[i] 解析:由整個for迴圈可知,變數i為數組arr的下標,題目中要求取出前一個元素比後一個元素小的元素,所以只需要判斷前M-1個元素即可。因此,【1】處填“M-1”;如果第i個元素比第i+1個元素小,將第i個元素放入數組bb中,因此,【2】處填“bb[n++]=arr[i]”。迴圈執行完後,要輸出數組bb中的每一個元素的下標及元素值。因此,【3】處填“i,bb[i]”。參考答案及解析
24、函數fun的功能是:根據所給的年、月、日,計算出該日是這一年的第幾天,並作為函數值返回。
例如,若輸入:2019 10 1,則程式輸出:2019年10月1日是該年的第274天。
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> int fun(int year,int month,int day) { int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int s=0,i; for (i=1;i<________; i++) // 【1】 s=s+________; // 【2】 s=s+day; if ((________________) && month>2) // 【3】 s=s+1; return s; } int main() { int year,month,day,days; scanf("%d%d%d",&year,&month,&day); days=fun(year,month,day); printf("%d年%d月%d日是該年第%d天。\n",year,month,day,days); return 0; }
【1】month 【2】table[i] 【3】year%4==0 && year%100!=0 || year%400==0 解析:為計算當前日期是該年的第幾天,需要先累計前month-1個月的總天數,故【1】處填寫“month”,【2】處填寫第i月的天數“table[i]”。如果是閏年,需要加1天,故【3】處填寫閏年的判斷條件“year%4==0 && year%100!=0 || year%400==0”。參考答案及解析
25、函數fun()的功能是:計算並輸出給定10個數的方差。n個數的方差的計算公式為:
(其中,x為n個數據的平均值)
例如,給定的10個數為12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0,輸出為S=8.877500。
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> #include <math.h> double fun(double x[],int n) { int i; double fc,avg=0.0,sum=0.0,abs=0.0; for (i=0;i<n;i++) sum+=________; // 【1】 avg=sum/n; for (i=0;i<n;i++) abs+=________; // 【2】 fc=________; // 【3】 return fc; } int main() { double x[10]={12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0}; printf("s=%lf\n",fun(x,10)); return 0; }
【1】x[i] 【2】(x[i]-avg)*(x[i]-avg) 【3】sqrt(abs/n) 解析:由函數fun()可知,變數sum中存放n個數的和,因此,【1】處填“x[i]”;然後求其平方差,因此,【2】處填“ (x[i]-avg)*(x[i]-avg)”;後求n個數的方差,因此,【3】處填"sqrt(abs/n)”。參考答案及解析
26、函數fun()的功能是求n的階乘。
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> long fun(int n) { if (________n>1) // 【1】 return n*fun(________n-1); // 【2】 else if (________n==1) // 【3】 return 1; } int main() { int n=10; printf("%d!=%ld\n",n,fun(n)); return 0; }
【1】n>1 【2】n-1 【3】n==1 解析:本題求階乘是由函數遞歸調用來實現的。階乘公式為N!=N*(N-1)!,因此【1】處填“n>1”;由遞歸的性質可知【2】處填“n-1”;直到N=1時結束遞歸調用,因此【3】處填“n==1”。參考答案及解析
27、給定程式的功能是計算score數組中m個人的平均成績aver,將低於aver的成績放在數組below中,通過函數名返回人數。
例如,當score[]={10,20,30,40,50,60,70,80,90},m=9時,函數返回的人數應該是4,below={10,20,30,40}。
註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> int fun(int score[],int m,int below[]) { int i,j=0; float aver=0.0; for (i=0; i<m;i++) aver+=________score[i]; // 【1】 aver/=(float)m; for (i=0;i<m;i++) if (score[i]<aver) ________ =score[i]; // 【2】 return j; } int main() { int i,n,below[9]; int score[9]={10,20,30,40,50,60,70,80,90}; n=fun(score,9,below); printf("Below the average score are:%d\n",n); for (i=0; i<n;i++) printf("%d ",________below[i]); // 【3】 return 0; }
【1】score[i]或*(score+i) 【2】below[j++] 【3】below[i]或*(below+i) 解析:fun()函數的功能是返回低於平均成績的人數,通過for迴圈遍曆數組score,求和存入變數aver,因此第【1】處填“score[i]”或“*(score+i)”;然後計算出平均值。第二個for迴圈將低於平均成績的數據賦值數組below,同時需記錄所賦數據的個數j,因此第【2】處填“below[j++]”。在主函數中輸出低分考生個數,n值即fun()函數返回值也就是低分考生的人數值。後利用迴圈輸出below中的結果。因此第【3】處填“below[i]”或“*(below+i)”參考答案及解析
28、給定程式的功能是:把一個字元串中的所有小寫字母字元全部轉換成大寫字母字元,其他字元不變,結果保存原來的字元串中。
例如,當str[M]="abcdef123ABCD",結果輸出:"ABCDEF123ABCD"。
註意:部分源程式給出如下。請勿改動main()函數的任何內容,僅在橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> #define M 80 int main() { int j; char str[M]="abcdef123ABCD"; char *pf=str; printf("***originalstring***\n"); puts(str); ________; // 【1】 while(*(pf+j)) { if(*(pf+j)>='a'&&*(pf+j)<='z') { *(pf+j)= ________ ; // 【2】 } ________; // 【3】 } printf("****newstring****\n"); puts(str); return 0; }
【1】j=0 【2】*(pf+j)-32 【3】j++ 解析:由程式中可知,變數j為字元數組的下標,其初始值為0。因此【1】處填“j=0”;大寫字母的ASCIl碼值比小寫字母的ASCII碼值小32,要將小寫字母變為大寫字母,因此,【2】處填“*(pf+j)-32”;要將字元串數組中的所有小寫字母變為大寫字母,需要檢查其中的每一個字元,因此,【3】處填“j++”。參考答案及解析
29、str是一個由數字和字母字元組成的字元串,由變數num傳入字元串的長度。
函數proc()的功能是:把字元串str中的數字字元轉換成數字並存放到整型數組bb中,函數返回數組bb的長度。
例如,str="abc123de45f967",結果為:1234567。
註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在函數proc()的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> #define M 80 int proc(char str[],int bb[],int num) { int i,n=0; for (i=0; i<num; i++) { if (________________) // 【1】 { bb[n]= ________________; // 【2】 n++; } } return ________; // 【3】 } int main() { char str[M]; int bb[M]; int num=0,n,i; gets(str); while (str[num]) num++; n=proc(str,bb,num); printf("bb="); for (i=0; i<n; i++) printf("%d",bb[i]); printf("\n"); return 0; }
【1】str[i]>='0'&&str[i]<='9' 【2】str[i]-'0' 【3】n 解析:題目中要求把字元串str中的數字字元轉換成數字並存放到整型數組bb中。首先,應判斷字元串str中每個字元是否是數字字元。因此,【1】處填“str[i]>='0'&&str[i]<='9'”將每一個數字字元轉化為數字放在整型數組bb中,因此,【2】處填“str[i]-'0'”;由函數proc()可知,變數n中存放整型數組bb中的元素個數,要返回到主函數當中,因此,【3】處填“n”。參考答案及解析
30、函數fun的功能是:在有n個元素的結構體數組std中,查找有不及格科目的學生,找到後輸出學生的學號;函數的返回值是有不及格科目的學生人數。例如,主函數中給出了4名學生的數據,則程式運行的結果為:
學號:N1002 學號:N1006
共有2位學生有不及格科目
註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。
#include <stdio.h> typedef struct { char num[8]; double score[2]; }STU; int fun(STU std[],________) // 【1】 { int i,k=0; for (i=0;i<n;i++) if (________________) // 【2】 { k++; printf("學號:%s ",std[i].num); } return ________; // 【3】 } int main() { STU std[4]={"N1001",76.5,82.0, "N1002",53.5,73.0, "N1005",80.5,66.0, "N1006",81.5,52.0}; printf("\n共有%d位學生有不及格科目。\n",fun(std,4)); return 0; }
【1】int n 【2】std[i].score[0]<60 || std[i].score[1]<60 【3】k 解析:由main中的調用可知,函數fun有兩個參數,第2個參數為結構體數組中元素個數,故【1】處填寫形參定義“int n”。【2】處填寫判斷條件,兩門功課中至少有1門不及格。【3】處返回不及格人數k。參考答案及解析