遞迴函式的內部執行過程。一個遞迴函式的調用過程類似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同一個函數。
2.羅列本周一些錯題。線性表用順序實現。請填空寫一個求線性表L 中所有奇數之和的演算法。
例如:
L=(1,2,3,4,5) 其和為 9
#include<stdio.h>#define N 10typedef struct sqlist { int data[N]; int last; }LIST; int Total(List list) { return sum; } void Show(LIST list) { int i; for(i=0;i<=list.last;i++) printf("%3d", list.data[i]); printf("\n"); }int main() {LIST list;int i,sum;for(i=0;i<=5;i++) list.data[i]=i;list.last=5;Show(list);sum=Total(list);printf("sum=%3d\n",sum);return 0;}
答案
int sum=0;for(int i=0;i<=list.last;i++) if(list.data[i]%2) sum+=list.data[i];
程式通過定義學生結構體變數,儲存了學生的學號、姓名和3門課的成績。
函數fun的功能是將形參a所指結構體變數s中的資料進行修改,並把a中地址作為函數值返回主函數,在主函數中輸出修改後的資料。
例如:a所指變數s中的學號、姓名、和三門課的成績依次是:
10001、" ZhangSan "、95、80、88,
修改後輸出t中的資料應為:10002、"LiSi "、96、81、89。
#include<stdio.h>#include<string.h>struct student { long sno; char name[10]; float score[3];}; ______2__________ Modif(struct student *p){ int i; p->sno = 10002; strcpy(p->name, "LiSi"); for (i=0; i<3; i++) ______3_______++; return _____4________;}void main(){ struct student s={10001,"ZhangSan", 95, 80, 88}, *t; int i; printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name); for (i=0; i<3; i++) printf("%6.2f ", ___1____); printf("\n"); t = Modif(&s); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name); for (i=0; i<3; i++)printf("%6.2f ", t->score[i]); return 0;}
答案
s.score[i]struct student *p->score[i]p
程式改錯題:
輸入一個正整數n(3<=n<=10),再輸入n個僱員的資訊(如下表所示),輸出每人的姓名和實發工資(基本工資+浮動工資-支出)。
格式:
#include<stdio.h>int main(){ struct emp{ char name[10]; float jbg; float fdg; float zc; };int i,n;printf(“n=”);scanf(“%d”,&n);for(i=0;i<n;i++) scanf(“%s%d%d%d”,emp[i].name,emp[i].&jbg,emp[i].&fdg,emp[i],&zc);for(i=0;i<n;i++) printf(“%5s實發工資:%d\n”, emp[i].name,emp[i].zc);return 0;}
答案
#include<stdio.h>int main(){ struct { char name[10]; float jbg; float fdg; float zc; }emp[10]; //1int i,n;printf("n=");scanf("%d",&n);getchar(); //2for(i=0;i<n;i++) { scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc); //3 getchar();} //4for(i=0;i<n;i++) printf("%5s實發工資:%7.2f\n", emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i].zc);//5return 0;}
以下程式的運行結果是 :
# include <string.h>typedef struct student{ char name[10]; long sno; float score; }STU;main( ){ STU a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={“Anhua”,2003,95},d,*p=&d; d=a; if(strcmp(a.name,b.name)>0) d=b; if(strcmp(c.name,d.name)>0) d=c; printf(“%ld%s\n”,d.sno,p->name); }
答案
2002Shangxian