14. 补全代码
本题要求输入某一年的两天,计算这两天之间间隔的天数,有四处待补全。
#include <stdio.h> #include <math.h> int jdg(int year)/*填空1*/ { int leap; leap= (year%4==0 && year%100!=0 || year%400==0); return leap; } int fun1(int y, int m, int d) { int finall[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; int r=0, i; for(i=1; i<m; i++) r+=finall[i];/*填空2*/ r=r+d; if(jdg(y)&&m>=3)/*填空3*/ r=r+1; return r; } int main() { int y, m, d, dd ; printf("开始日期:"); scanf("%d %d %d",&y, &m, &d); dd = fun1(y, m, d); printf("结束日期:"); scanf("%d %d %d",&y, &m, &d); dd = fun1(y, m, d)-dd;/*填空4*/ printf("从开始日期到结束日期总共有%d天 ",dd); return 0; }
tips: ① C语言没有bool变量;
② 填空3注意m>=3.
15. 补全代码
要求输入一个字符串,判断其位于给出字符串的第几个位置,有四处待补全。
#include <stdio.h> #include <string.h> #define N 10 #define M 10 int f(char str[N][M],char temp[M])/*填空1*/ { int i; for(i=0; i<N ; i++) if(strcmp(str[i],temp)==0) return i ;/*填空2*/ return -1;/*填空3*/ } int main() { char str[N][M]= {"jony","lucy","abbe","lily","rebeca","tomme","osca","tomas","jayjay","doan"},temp[M]= {}; /*填空4*/ int n,i; printf(" 原始字符串数组为: "); for(i=0; i<N; i++) puts(str[i]); printf(" "); printf("请输入你想要查询的字符串: "); gets(temp); n=f(str,temp); if(n== -1) printf(" 对不起,没找到! "); else printf(" 恭喜你,找到了,它是二维数组中第%d个一维数组. ",n); return 0; }
16. 编程
#include <stdio.h> #define N 5 int r[N][N]; void fun1(int (*a)[N]) { int mid = N / 2; for(int i = 0; i < N; ++i) { for(int j = 0; j < N; ++j) { int x = i - 2; int y = j - 2; if((y > x && y < -x) || (y < x && y > -x)) { (*(a + i))[j] = 0; } } } } void printArray(int (*a)[N]) { for(int i = 0; i < N; ++i) { printf("%2d",(*(a + i))[0]); for(int j = 1; j < N; ++j) { printf(" %2d",(*(a + i))[j]); } printf(" "); } } void scanArray(int (*a)[N]) { for(int i = 0; i < N; ++i) { for(int j = 0; j < N; ++j) { scanf("%d",&((*(a + i))[j])); } } } int main() { int t[N][N]= {25,33,14,28,19,42,57,48,39,53,39,34,27,40,77,61,21,36,74,51,42,82,38,25,40}, i, j; printf("原始矩阵: "); printArray(t); fun1(t); printf("变换后的矩阵: "); printArray(t); printf(" 随机输入一个%d*%d的矩阵: ",N,N); scanArray(t); fun1(t); printf("变换后的矩阵: "); printArray(t); return 0; }
17. 编程
题目以本次新冠肺炎疫情为背景,要求输入5个城市的信息,其中包括城市名字,新增感染人数,现有感染人数,累积感染人数,治愈人数和死亡人数,定义一种相似度并给出其计算方法。
#include <stdio.h> #include <string.h> #include <math.h> #define N 5 #define M 10 float ans,tmp; char c1[M],c2[M]; //记录结果城市名字 struct area //结构体表示城市信息 { char name[M]; int data[N]; } areas[N]; float sim(int x,int y) // 计算相似程度 { float d=0; for(int i=0; i<N; i++) d+=((areas[x].data[i]-areas[y].data[i])*(areas[x].data[i]-areas[y].data[i])); return 1/(1+sqrt(d)); } int main() { ans=0; // 分行输入城市数据信息,空格间隔,例如:CityB 20 49 1127 1074 4 for(int i=0; i<N; i++) { scanf("%s",&areas[i].name); for(int j=0; j<N; j++) scanf("%d",&areas[i].data[j]); } for(int i=0; i<N-1; i++) for(int j=i+1; j<N; j++) { tmp=sim(i,j); printf("%s和%s的疫情相似程度是:%.6f ",areas[i].name,areas[j].name,tmp); // 迭代记录答案 if(tmp>ans) { strcpy(c1,areas[i].name); strcpy(c2,areas[j].name); ans=tmp; } } // 输出结果 printf(" %s和%s的当前疫情情况最相似。",c1,c2); return 0; }