大一上学期c语言期末—-程序填空 及 编程题

程序填空

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、

  1. 用以下 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、

  1. 完成以下程序,该程序统计一个字符串中单词的个数,单词以空格分隔。
#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 门课程的成绩,求出总分最高的学生并输出。

#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 项开始,每一项都等于前两项之和。试用递归函数来实现斐波那契数列的求解。

#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);
	}
}

    

版权声明:本文为博主作者:つ微凉徒眸挚半原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_73696461/article/details/129161810

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年1月11日
下一篇 2024年1月11日

相关推荐