C语言部分编程题

demo01_29

/*请编写程序,将二维数组a中每个元素向右一列,最后一列换到最左一列,移后的数组存到
另一个二维数组b中,并按矩阵形式输出a和 b。
例如:array a:       array b:
	4  5  6			6  4  5
	1  2  3   		3  1  2
*/
#include <stdio.h>
#define M 2
#define N 3
void array_scanf(int a[M][N]);
void array_printf(int a[M][N]);
void array_right(int a[M][N],int b[M][N]);

int main()
{
	int a[M][N];
	int b[M][N];
	array_scanf(a);
	array_right(a,b);
	array_printf(a);
	printf("\n");
	array_printf(b);
	return 0;
}

/*---初始化数组输入---start*/
void array_scanf(int a[M][N])
{
	for(int i = 0;i<M;i++)
	{
		for(int j = 0;j<N;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	printf("\n");
}
/*---初始化数组输入---end*/


/*---数组输出---start*/
void array_printf(int a[M][N])
{
	for(int i = 0;i<M;i++)
	{
		for(int j=0;j<N;j++)
		{
			printf("%-4d",a[i][j]);
		}
		printf("\n");
	}
}
/*---数组输出---end*/

/*---数组右移一列---start*/
void array_right(int a[M][N],int b[M][N])
{
	for(int i = 0;i<M;i++)
	{
		b[i][0]=a[i][N-1];//b数组中的每一行第一个元素值等于a数组的每一行最后一列数。
		for(int j=1;j<N;j++)
		{
			//b数组从第二列开始等于a数组的前N-1列每一个数
			b[i][j]=a[i][j-1];
		}
	}
}
/*---数组右移一列---end*/

demo01_30

/*从键盘输入若千个整数,只统计其值在0至4范围内的整数个数,
*输入-1时输入结束。
*/
#include <stdio.h>
int main(){
	int a;
	int count = 0;
	while(1)
	{
		scanf("%d",&a);
		if(a>=0&&a<=4)
		{
			count++;
		}
		if(a==-1){
			break;
		}
	}
	printf("值为[0,4]的个数:%d",count);
	return 0;
}

demo01_31

/*用结构体来描述一个学生的成绩情况,内容包括:
姓名,学号,C成绩和微机原理成绩。
要求对一个班的30个学生的成绩进行统计处理:
(1)计算学生的平均分,并按平均分高低排出名次,打印出姓名。
(2)打印出平均分90分以上和不及格者的名字。*/

#include <stdio.h>
#define N 3
struct student{
	char name[8];
	char id[8];
	float c_score;
	float w_score;
	float avr;
};

int main()
{
	struct student stu[N];
	struct student k;
	int max;
	int temp;
	for(int i=0;i<N;i++)
	{
		printf("name:");
		scanf("%s",stu[i].name);
		printf("id:");
		scanf("%s",stu[i].id);
		printf("C:");
		scanf("%f",&stu[i].c_score);
		printf("W:");
		scanf("%f",&stu[i].w_score);
		stu[i].avr=(stu[i].c_score+stu[i].w_score)/2;
	}
	//选择排序降序排列
	for(int i=0;i<N-1;i++)//外层循环次数为除最后一个元素的个数
	{
		max=i;
		for(int j=1;j<N;j++)
		{
			if(stu[j].avr>stu[max].avr)
			{
				max=j;
			}
		}
		k=stu[i];
		stu[i]=stu[max];
		stu[max]=k;
		
	}
	printf("排名:\n");
	for(int i=0;i<N;i++)
	{
		printf("name:%s;avr:%.2f\n",stu[i].name,stu[i].avr);
		
	}
	printf("平均分大于90:\n");
	for(int i=0;i<N;i++)
	{
		if(stu[i].avr>90)
		{
			printf("%s\n",stu[i].name);
		}
	}
	printf("不及格:\n");
	for(int i=0;i<N;i++)
	{
		if(stu[i].avr<60)
		{
			printf("%s\n",stu[i].name);
		}
	}
	return 0;
}

demo02_29

/*编写函数,判断某一个四位数是不是玫瑰花数,
*所谓玫瑰花数即该四位数各位数字的四次方1+69+9和恰好等于该数本身。
*如:1634=14+64+34+44。在主函数中从键盘任意输入一个四位数,调用
*该函数判断该数是否为玫瑰花数,若是则输出" yes ",否则输出" no "。
*/
#include <stdio.h>

void rose();
int main()
{
	int num;
	printf("请输入一个四位数判断是否为玫瑰花数:\n");
	scanf("%d",&num);
	rose(num);
    return 0;
}

void rose(int num)
{
	int ge = num%10;
	int shi = num%100/10;
	int bai = num%1000/100;
	int qian = num/1000;
	if(ge*ge*ge*ge+shi*shi*shi*shi+bai*bai*bai*bai+qian*qian*qian*qian==num)
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}
	
}

demo02_30

/*
请编写一个函数 void fun(int tt[m][n],int pp[n]),
tt 指向一个 m 行 n 列的二维函数组,求出二维函数组每列中最小元素,
并依次放入 pp 所指定一维数组中。二维数组中的数已在主函数中赋予。
*/

#include <stdio.h>
#define M 3
#define N 4
void show_column_min(int tt[M][N], int pp[N]);
int main()
{
	int tt[M][N] = {{55, 2, 41, 4}, {5, 55, 55, 8}, {9, 10, 65, 12}};
	int pp[N];
	show_column_min(tt, pp);
	for (int i = 0; i < N; i++) {
		printf("%-4d", pp[i]);
	}
    return 0;
}
void show_column_min(int tt[M][N], int pp[N])
{
	int min;
	for (int j = 0; j < N; j++) {
		min = tt[0][j];
		for (int i = 0; i < M; i++) {
			if (tt[i][j] < min) {
				min = tt[i][j];
			}
		}
		pp[j] = min;
	}
}

demo02_31

/*有10个学生结构体已定义,每个学生的数据包括
学号(stu _ num ,6个字符,如s0001)、姓名( name ,8个字符)、
三门课的成绩( score [3],实型)及其平均分( avr ,实型,初始时不赋值)。
首先输入这10个学生数据,然后再计算每个学生3门课程的平均分,
存回 avr 中,并输出第6个学生的所有信息。
*/
#include <stdio.h>
#define NUM 3
#define N 1
struct student{
	char stu_num[6];
	char stu_name[8];
	float score[3];
	float avr;
};
int main()
{
	struct student stu[NUM];
	float sum=0.0;
	for(int i = 0;i<NUM;i++)
	{
		printf("name:");
		scanf("%s",stu[i].stu_name);
		printf("id:");
		scanf("%s",stu[i].stu_num);
		printf("三科成绩:\n");
		for(int j = 0;j<3;j++)
		{
			scanf("%f",&stu[i].score[j]);
			sum+=stu[i].score[j];
		}
		stu[i].avr = sum/3;
		sum = 0.0;
		
		if(i==N)
		{
			printf("第%d个学生:name=%s,id=%s,avr=%.2f\n",i+1,stu[N].stu_name,stu[N].stu_num,stu[N].avr);
			printf("各科成绩:\n");
			for(int i = 0;i<3;i++)
			{
				printf("%d=%.2f\n",i+1,stu[N].score[i]);	
			}
		}
	}
    return 0;
}

demo03_29

/*定义一个含有30个元素的数组 s ,函数 favl 的功能是按顺序分别赋给
各元素从2开始的偶数,函数fav2则按顺序每5个元素求一个平均值,
并将该值存放在w数组中。*/

#include <stdio.h>
fav1(float a[]){
		int num = 2;
		for(int i = 0;i<30;i++){
			a[i]=num;
			num+=2;
		}
	}
	
fav2(float s[],float w[]){
	float sum = 0.0;
	int k = 0;
	int j = 0;
	for(int i = 0;i<30;i++)	{
		sum+=s[i];
		k+=1;
		if(k%5==0){
			w[j]=sum/5;
			sum = 0.0;
			j++;
		}
	}
}
int main() 
{
	float s[30];
	float w[30/5];
	fav1(s);
	fav2(s,w);
	for(int i = 0;i<30;i++){
		printf("%.f, ",s[i]);
	}
	printf("\n");
	for(int i = 0;i<6;i++){
		printf("%.f, ",w[i]);
	}
    return 0;
}

demo03_30

/*
*对数组a进行降序排序使用选择排序
*int[a]={4,2,3,5,1,45,11,9,0,12}
*
*/

#include <stdio.h>
void select_sort_up(int a[],int n);//声明函数
void select_sort_down(int a[],int n);


int main()
{
	int a[10] = {4,2,3,5,1,45,11,9,0,12};
	select_sort_up(a,10);
	for(int i = 0;i<10;i++)
	{
		printf("%d,",a[i]);
	}
	printf("\n");
	select_sort_down(a,10);
	for(int i = 0;i<10;i++)
	{
		printf("%d,",a[i]);
	}
	return 0;
}

//选择排序降序
void select_sort_up(int a[],int n){
	int max,temp;
	for(int i = 0;i<n-1;i++)
	{
		max = i;//假设第一个为最大值,将下标赋值给max;
		for(int j = i+1;j<n;j++)
		//比较第一个数后面的数
		{
			if(a[j]>a[max])
			{
				max = j;//如果后一个数大于前面,将较大值下标赋值给max;
			}
			//将较大值移到前边
			temp = a[i];
			a[i]=a[max];
			a[max]=temp;
		}
	}
}

//选择排序升序
void select_sort_down(int a[],int n)
{
	int min,temp;
	for(int i = 0;i<n-1;i++)
	{
		min = i;
		for(int j=i+1;j<n;j++)
		{
			if(a[j]<a[min])
			{
				min = j;
			}
			temp = a[i];
			a[i] = a[min];
			a[min] = temp;
		}
	}
}

demo03_31

/*编写函数,实现矩阵(3行3列)的转置(即行列转换);
*/
#include <stdio.h>
#define N 3

void matrix_transpose(int a[N][N]);

int main()
{
	int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
	matrix_transpose(a);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			printf("%-4d", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

void matrix_transpose(int a[N][N])
{
	int temp;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i; j++) {
			temp = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = temp;
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值