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,參考答案及決議
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534057.html
標籤:C
