程序填空
1、
运行结果:请用标准日期格式输入一个日期(YYYY-MM-DD):
若用户从键盘输入:2022-12-12 则输出结果为:
2022 年 12 月 12 日
#include int main(){ int year, month,day;printf("请用标准格式输入一个日期(YYYY-MM-DD):");scanf("%d-%d-%d",&year,&month,&day);printf("%d年%d月%d日",year,month,day);return 0;}
2、
2、 完成下面程序,计算圆的面积,结果保留两位小数:
#include int main(){double pi=3.14159;/*定义只读常量 pi*/double r;scanf("%lf", &r);printf(" area=%.2f",r*r*pi);return 0;}
3、
s100=1-1/2+1/3-1/4+…+1/999-1/1000
#include int main(){float S=1 ;int i,sign=-1;for(i=2;i<=1000 ;i++){S=S+(1/(float)i)*(float)sign ;sign=-sign;}printf("%.5f\n",S); return 0;}
4、
求 1!+3!+5!+……+n!的和
#include void main(){ long int f,s; s=0int i,j,n;s=0; scanf("%d",&n); for(i=1;i<=n; i+=2){ f=1; for(j=1; j<i;j++)f*=j; s=s+f;} printf("n=%d,s=%ld\n",n,s);}
5、
方法:辗转法求最大公约数
例子:100/15=6…10
15/10=1…5(最小公约数)
10/5=2…0
相除法求最小公倍数
例子:100 * 15 / 5 =300
#include void main(){ int m,n,r,p,gcd,lcm; scanf("%d%d",&m,&n);if(m<n) {p=m,m=n;n=p;} p=m*n; r=m%n; while(r != 0 ){ m=n;n=r; r=m%n;} gcd=n; lcm=p/gcd; printf("gcd=%d,lcm=%d\n",gcd,lcm);}
6、
编写递归函数实现求两个整数的最大公约数,主函数读入待求的两个整数并调用公约数函求解,输出结果。
#include int gcd ( int m, int n){int r; r=m%n; if(r==0)return n;return gcd(n,r);} int main( ){ int m, n; scanf("%d%d", &m, &n); printf ( "Gcd of m and n is: %d\n",gcd(m,n)); return 0;}
7、
完成下面程序,给一维数组输入数据后,找出下标为偶数的元素的最小值并输出。
#include int main ( ){ int a[10], min; int i;for (i=0; i<10;i++)scanf("%d",&a[i]); min=a[0];for (i=2;i<10;i+=2){if(a[i-1]<min) min=a[i-1];} printf ("%d", min); return 0;}
8、
求得二维数组 a 的每行最大值,并存储在数组 b 中,请将程序补充完整
#include void fun (int ar[ ][4], int bar[], int m, int n){int i, j; for(i=0;i<m;i++){bar[i]=ar[i][0]; //for(j=1;j<n;j++) if(ar[i][j]>bar[i]) bar[i]=ar[i][j];} }int main (){ int a[3][4] = {{12, 41, 36, 28}, {19,33,15,27}, {3,27,19, 1}}, b[3], i;fun(a,b,3,4); //for (i=0;i<3;i++) printf ("%4d", b[i]);printf("\n"); return 0;}
9、
给一维数组输入数据,调用函数 fun 找出下标为偶数的元素的最小值,在主函数中输出该值。
#include int fun(int *arr,int n){int i, min;min=arr[0]; for(i=2;i<10;i+=2 ) if(arr[i]<min) min=arr[i]; //printf("%d",i);return min;} int main(){int i,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]); printf("最小值为:%d\n",fun(a,1));return 0;}
10、
下列程序读出文本文件 C:\dream.txt 中的内容,将所有小写字母改为大写字母并输出,请将程序补充完整。
#include #include int main(){ FILE*fp;char ch;fp=fopen("C:\\dream.txt","r");if(fp==NULL){printf("file error!\n"); exit(0); } while((ch=fgetc(fp))!=EOF){ if(ch>='a' && ch<='z'){ ch-=32;} putchar(ch);}putchar('\n');fclose(fp);return 0;}
11、
完成程序,将数组 array 中的数据逆序存放
#include int main( ){ int array[10], i,j,t; for(i=0;i<=9;i++){ scanf("%d",&array[i]); }i=0;j=9; while(i<j){ t=*(array+i);*(array+i)=*(array+j);*(array+i)=t;i++;j--;} for(i=0;i<=9;i++){ printf("%3d",array[i]);} return 0;}
12、
完成程序,将十进制转变为二进制,二进制的每一位存放在数组中
#include int main( ){int b[16],x,k,r,i;printf("输入一个整型数:");scanf("%d", &x); k=-1; do{r=x%2; k++;*(b+k)=r;x=x/2;} while(k<15);// 对二进制进行输出for(i=k;i>=0;i--) { printf("%ld", *(b+i));} return 0;}
13、
给出矩阵的主对角线之和并找出最大元素
#include int f(int a[3][3], int *max, int n){int i,j,s=0; *max=a[0][0]; for(i=0; i<n;i++){s = s+a[i][i];for(j=0;j<n;j++){ if(a[i][j]>*max)*max=a[i][j];}} return s;}int main( ){ int a[3][3]={1,-2,9,4,-8,6,7,0,5}; int max,sum; sum=f(a,&max,3); printf("sum=%d, max=%d\n", sum, max); return 0;}
14、
- 用以下 delnum 函数实现删除字符串 s 中的数字字符
#include void delnum(char *s){ int i,j; for( i=0,j=0; s[i]!='\0'; i++){if(s[i]<'0' || s[i]>'9'){ s[j]=s[i];j++;}}s[j]='\0';}/上面是本题的答案。int main(){char s[5];gets(s);delnum(s);printf("%s ",s);return 0;}
15、
- 完成以下程序,该程序统计一个字符串中单词的个数,单词以空格分隔。
#include #include int main( ){int i,num=0,word=0; char str[80];gets(str); printf("%s",str); for(i=0;i<strlen(str);i++) { if(str[i]==' '){ word=0;} else if (word==0) {word=1; num++;}} printf("%d\n",num);}
16、
有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,设原有的数据和计算出的平均分数存放在磁盘文件”stud”中。
请将程序补充完整。
#include struct student{ char num[6]; char name[8]; int score[3]; float avr; } stu[5];int main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\n please input No. %d score:\n",i); printf("stuNo:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name); sum=0; for(j=0;j<3;j++){ printf("score %d.",j+1); scanf("%d",&stu[i].score[j]); sum+=stu[i].score[j];} stu[i].avr=sum/3.0;} fp=fopen("stud","w"); for(i=0;i<5; i++) if(fwrite(&stu[i],sizeof(struct student8),1,fp)!=1) printf("file write error\n");fclose(fp);}
17、
以下程序的功能是按学生姓名查询其排名和平均成绩,查询可连续进行,直到键入 0 时结束,请在空白处填入正确内容。
#include#include#defineNUM 4struct student{ int rank;char * name;float score; };struct student stu[ ]={3,"Tom",98.3, 4,"Mary",78.2, 1,"Jack",95.1,2,"Jim",90.6,};int main(){char str[10];int i;do{ printf("Enter a name:"); scanf("%s",str); for(i=0;i<NUM;i++) { if(strcmp(stu[i].name,str)==0){printf("name:%8s\n",stu[i].name);printf("rank:%3s\n",stu[i].rank);printf("average:%5.1f\n",stu[i].score);printf("45678");continue;}if(i>=NUM) printf("Not found\n");}} while(strcmp(str,"0")!=0);}
编程题
第一题:
(1) 定义函数 int fun(int a[], int m); 实现查找小于或者等于 m 的所有素数并放在数组中,函数返回所求出的素数的个数。
(2) 定义主函数,主函数中首先定义一个数组 array;接着从键盘输入任意一个整数 m (<1000),然后调用函数 fun 输入数组和整数 m,并将查找出的素数和素数个数打印出来。
#include #include #define N 1000int fun(int a[],int m){int i,t;int j=0;for(i=2;i<m;i++){if(i%2!=0){a[j]=i;j++;}}for(t=0;t<j;t++){printf("%5d",a[t]);}printf("\n");printf("%d",j);}int main(){int m;int a[N];scanf("%d",&m);fun(a,m);return 0;}
第二题
(1) 定义函数int BubbleSort(int a[],int n),用冒泡法将数组元素按照从大到小的顺序排序。(4分)。
(2) 定义输入函数void Input(int a[],int n); 实现从键盘输入数组a中的n个元素(3分)。
(3) 定义输入函数void Print(int a[],int n); 实现输出数组a中的n个元素(3分)。
(4) 定义主函数,主函数中首先定义一个含15个元素的数组;接着调用Input函数输入10 个数组元素;在主函数中调用BubbleSort函数对数组的元素进行排序,并将排序的结果使用Print函数打印输出(5分)。
#include #include //冒泡排序int BubbleSort(int a[],int n){int t;int i,j;for(i=9;i>=0;i--){for(j=0;j<i;j++){if(a[j]<a[j+1]){t=a[j+1];a[j+1]=a[j];a[j]=t;}}}}//数组的输入void Input(int a[],int n){int i;for(i=0;i<n;i++){scanf("%d",&a[i]); }}//数组的打印void Print(int a[],int n){int i;for(i=0;i<n;i++){printf("%d",a[i]);}}int main(){int a[15];Input(a,10);BubbleSort(a,10);Print(a,10);return 0;}
第三题
在考生文件夹下,给定程序 pingyou.c 的功能是:学习优良奖的条件如下:所考 5 门课的总成绩在 450 分(含)以上;或者每门课都在 88 分(含)以上。 输入某学生 5 门课的考试成绩,输出是否够学习优良奖的条件。
#includeint main(){int a[5];int i,j,count,sum;for(i=0;i<5;i++)scanf("%d",&a[i]);for(j=0;j<5;j++){ if(a[j]>=88){count++;}sum+=a[j];}if(count==5 || sum >=450){printf("优秀");}else{printf("不够优秀");}return 0; }
第四题
输入一个 3×4 的二维整数矩阵,要求实现两个功能:(1)实现矩阵的转置;(2)遍历矩阵,输出矩阵中最大的数及其下标。
#include #include int main(){int a[3][4];int b[4][3];int i,j;//输入 for(i=0;i<3;i++){for(j=0;j<4;j++){scanf("%d",&a[i][j]);}}//转置前 for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%d",a[i][j]);}printf("\n");}//开始转置 for(i=0;i<4;i++){for(j=0;j<3;j++){b[i][j]=a[j][i];}}for(i=0;i<4;i++){for(j=0;j<3;j++){printf("%d",b[i][j]);}printf("\n");}//遍历元素寻找最大值,并输出下标 int max;max=b[0][0];for(i=0;i<4;i++){for(j=0;j<3;j++){if(b[i][j]>max){max=b[i][j];}}printf("\n");}for(i=0;i<4;i++){for(j=0;j<3;j++){if(b[i][j]==max){printf("%d %d %d",max,i,j);}}}return 0;}
第五题
5、 编写一个结构体类型的程序,定义一个结构体变量 struct student,其包含学号,姓名,三门课的成绩,成绩用数组保存,要求输入 10 个结构体变量学生的学号、姓名、3 门课程的成绩,求出总分最高的学生并输出。
#include struct student{char num[20];char name[10];int score[3];int sum;}st[10];int main(){int i,j,sum,max;for(i=0;i<10;i++){printf("学号:");scanf("%d",&st[i].num);printf("\n姓名:");scanf("%s",&st[i].name);printf("\n语文:");scanf("%d",&st[i].score[0]);printf("\n数学:");scanf("%d",&st[i].score[1]);printf("\n英语:");scanf("%d",&st[i].score[2]);} max=st[0].sum;for(i=0;i<10;i++){st[i].sum=st[i].score[0]+st[i].score[1]+st[i].score[2];if(max<st[i].sum)max=st[i].sum;j=i;}printf("%d , %s",max,st[j].name);return 0;}
第六题
6、 斐波那契数列(Fibonacci sequence),又称“黄金分割”数列,比如这样一个数列:1,1,
2,3,5,8,13,21,34,55,89… …数列从第 3 项开始,每一项都等于前两项之和。试用递归函数来实现斐波那契数列的求解。
#include #define N 1000int fs(int n);int main(){int n;scanf("%d",&n);printf("%d",fs(n));return 0;}int fs(int n){if(n==1){return 1;}if(n==0){return 0;}else{return fs(n-1)+fs(n-2);}}