第一题:
#include <stdio.h>
#include <math.h>
#define N 10
int a[N];
int Stand(int num);//判断数字是否符合标准
int NumLen(int num);//获取数字的长度,并将每一位写入数组
void print(int len);//分别打印每一次数字(正序和逆序)
int main(){
int num;
printf("请输入一个不多于5位的正整数\n");
scanf("%d",&num);
if(Stand(num)==2){
int len=NumLen(num);
print(len);
}else{
printf("输入的数字不符合要求\n");
}
return 0;
}
//判断数字是否符合标准
int Stand(int num){
if(num<0) return 0;//输入的数是负数
else if(num>=100000) return 1;//输入的数超过5位数
else return 2;//输入的数符合要求
}
//获取数字的长度,并将每一位写入数组
int NumLen(int num){
int k=0;
while(num!=0){
a[k++]=num%10;
num/=10;
}
printf("数字是%d位数\n",k);
return k;//返回长度
}
//分别打印每一次数字(正序和逆序)
void print(int len){
int i,j;
printf("正序输出每一位数:\n");
for(i=len-1;i>=0;i--) printf("%4d",a[i]);
printf("\n逆序输出每一位数:\n");
for(i=0;i<len;i++) printf("%4d",a[i]);
}
第二题
#include <stdio.h>
int fun(int num);//判断是否符合水仙花数的要求
int main(){
int i;
printf("水仙花数如下:\n");
for(i=100;i<1000;i++){
if(fun(i)) printf("%4d",i);
}
return 0;
}
int fun(int num){
int g,s,b;//代表个位,十位,百位
g=num%10;
s=num/10%10;
b=num/100%10;
if(g*g*g+s*s*s+b*b*b==num) return 1;
else return 0;
}
第三题:
#include <stdio.h>
#include <math.h>
#define N 10
struct student{
int no;//学号
char name[20];
double score[5];
double sum;//总分成绩
}stu[N];
void Input();//输入学生的信息
void StuAvg();//计算每个学生的平均分
void CourAvg();//计算每门课的平均分
void MaxScore();//最高分的学生和信息
void ScoreFC();//计算平均分方差
int main(){
printf("请输入10个学生的信息:\n");
Input();
StuAvg();
CourAvg();
MaxScore();
ScoreFC();
return 0;
}
void Input(){//输入学生的信息
int i,j;
double sum;
for(i=0;i<N;i++){
sum=0;
printf("输入第%d个学生信息:\n",i+1);
scanf("%d%s",&stu[i].no,stu[i].name);
for(j=0;j<5;j++){
scanf("%lf",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].sum=sum;
}
}
void StuAvg(){
printf("学生平均分信息如下:\n");
int i,j;
printf("学号\t姓名\t平均分\n");
for(i=0;i<N;i++){
printf("%d\t%s\t%lf\n",stu[i].no,stu[i].name,stu[i].sum/5);
}
}
void CourAvg(){
printf("\n每门课的平均分成绩如下:\n");
double sscore[5]={0};
int i,j;
for(i=0;i<N;i++){
for(j=0;j<5;j++)
sscore[j]+=stu[i].score[j];
}
for(i=0;i<5;i++)
printf("%lf\t",sscore[i]/5);
}
void MaxScore(){
int i,j,k;
int index[6]={0};
int score[6]={0};
for(i=0;i<N;i++){
for(j=0;j<6;j++){
if(score[j]<stu[i].score[j]){
score[j]=stu[i].score[j];
index[j]=i;
}
}
}
for(i=0;i<5;i++){
printf("第%d门课最高分信息:%d\t%s\t%lf\n",i+1,
stu[index[i]].no,stu[index[i]].name,stu[index[i]].score[i]);
}
}
void ScoreFC()//计算平均分方差
{
int i,j,k;
double x12=0.0,x1=0.0;
for(i=0;i<N;i++){
x12+=(stu[i].sum/5)*(stu[i].sum/5);
x1+=(stu[i].sum/5);
}
double s=(1.0/N)*x12-(x1/N)*(x1/N);
printf("方差是%lf\n",s);
}
第四题:
#include <stdio.h>
#define N 5
int a[N][N];
void Input();//输入数组
int AnDian();//寻找安点
int main(){
printf("请输入五阶矩阵:\n");
Input();
int k=AnDian();
if(k==0){
printf("NO FIND!\n");
}
return 0;
}
void Input(){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
scanf("%d",&a[i][j]);
}
}
}
//寻找安点;
int AnDian(){
int i,j,k,r,c,value,count=0;
for(i=0;i<N;i++){//行
value=a[i][0];
r=i;c=0;
for(j=0;j<N;j++){//找出每行的最小值
if(value>a[i][j]){
value=a[i][j];
r=i;c=j;
}
}
for(k=0;k<N;k++){//遍历行最小值的所在列,判断是否依然是列的最小值
if(value>a[k][c]){
value=a[k][c];
r=k;
}
}
if(r==i){//如果最终行没有变化则说明行的最小值也是列的最小值。
printf("%d(%d,%d)\n",value,r+1,c+1);
count++;
}
}
if(count==0) return 0;
else return 1;
}