程序填空
1、
运行结果:请用标准日期格式输入一个日期(YYYY-MM-DD):
若用户从键盘输入:2022-12-12<回车> 则输出结果为:
2022 年 12 月 12 日
#include <stdio.h>
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 <stdio.h>
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 <stdio.h> 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 <stdio.h>
void main()
{
long int f,s; s=0
int 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<stdio.h>
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<stdio.h>
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 <stdio.h>
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 <stdio.h>
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<stdio.h>
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<stdio.h>
#include<stdlib.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
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<stdio.h>
#include<string.h>
#define NUM 4
struct 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 <stdio.h>
#include <string.h>
#define N 1000
int 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 <stdio.h>
#include <string.h>
//冒泡排序
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 门课的考试成绩,输出是否够学习优良奖的条件。
#include<stdio.h>
int 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 <stdio.h>
#include <string.h>
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 门课程的成绩,求出总分最高的学生并输出。文章来源:https://www.toymoban.com/news/detail-771888.html
#include <stdio.h>
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 项开始,每一项都等于前两项之和。试用递归函数来实现斐波那契数列的求解。文章来源地址https://www.toymoban.com/news/detail-771888.html
#include <stdio.h>
#define N 1000
int 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);
}
}
到了这里,关于大一上学期c语言期末----程序填空 及 编程题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!