两道C编程问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两道C编程问题相关的知识,希望对你有一定的参考价值。
1.阅读程序,说明递归函数bin的功能,编译运行该程序,观察输出结果
#include<stdio.h>
void bin(int x)
if(x/2>0)
bin(x/2);
printf("%d",x%2);
void main()
bin(20);
printf("\n");
2、输入五个学生4门功课的成绩,求每个同学的总分,并按总分从高到低依次输出每个学生的记录。
这是我做的,实现不了按总分从高到低依次输出
#include<stdio.h>
void main()
int m,n,stu[3][4],p,score=0,i=0;
for(m=0;m<3;m++)
printf("输入学生%d的4科成绩\n",m+1);
for(n=0;n<4;n++)
scanf("%d",&stu[m][n]);
do
for(p=0;p<4;p++)
score+=stu[i][p];
printf("第%d个学生的总成绩为%d\n",i+1,score);
i++;
score=0;
p=0;
while(i<3);
第一个问题请更具体地说说BIN函数的功能或实现方式。
第二个以上几位的答案编译运行不成功,87725981给的程序是C++的 我要C语言的
输入一个正整数,对他不断的进行初以2的操作,一直到最后最后的x/2=0,对于20来讲就是x=1的时候,其实也就是转化为2进制时候的最高位,不断的递归调用,从最高位输出到最地位。
我们手算一个10进制转化为二进制时候也是这么算的。
第二题:用结构体数组来实现
// 结构体
#include <stdio.h>
typedef struct
char name[20];
int score[10];//score[0]--score[3]存4门功课的成绩
int value;//总分
student;
main()
int i=0,j=0;
student stu[5];
student temp; //排序时暂存量
for(i=0;i<5;i++)
printf("请输入第%d名同学的姓名\n",i);
scanf("%d",&stu[i].name);
printf("请输入第%d名同学的第一科成绩\n",i);
scanf("%d",&stu[i].score[0]);
printf("请输入第%d名同学的第二科成绩\n",i);
scanf("%d",&stu[i].score[1]);
printf("请输入第%d名同学的第三科成绩\n",i);
scanf("%d",&stu[i].score[2]);
printf("请输入第%d名同学的第四科成绩\n",i);
scanf("%d",&stu[i].score[3]);
for(i=0;i<5;i++)
//stu[i].score[4]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
stu[i].value=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
//排序
for(i=0;i<5;i++)
temp=stu[i];
for(j=i;j<5;j++)
if(stu[j].value>temp.value) //大的靠前,小的靠后
stu[i]=stu[j];
stu[j]=temp;
//输出
for(i=0;i<5;i++)
printf("%s,%d,%d,%d,%d,%d \n",stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].value);
return 0;
参考技术A 1、题目中用到的递归函数,输出结果是:10110
2、最好用结构体数组来做,你这种做法是不可取的
第二题,参考代码如下:
#include <stdio.h>
#include <string.h>
#define STU_NUM 5//学生数
#define SCORE_NUM 3//科目数
typedef struct /*定义结构体数组*/
char num[20]; /*学号*/
char name[20]; /*姓名*/
float score[SCORE_NUM]; /*成绩*/
float total;//总分
float average;//平均分
Student;
Student stu[STU_NUM];
//输入学生信息
void input()
int i,j;
printf("请输入%d个学生的信息:\n",STU_NUM);
for(i=0;i<STU_NUM;i++)
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
for(j=0;j<SCORE_NUM;j++)
printf("科目%d的成绩:",j+1);
scanf("%f",&stu[i].score[j]);
//输出学生信息
void output()
int i,j;
for(i=0;i<STU_NUM;i++)
printf("学生的信息如下:\n");
printf("学号:%s\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
for(j=0;j<SCORE_NUM;j++)
printf("科目%d的成绩:%f\n",j+1,stu[i].score[j]);
printf("总分:%f\n",stu[i].total);
printf("平均分:%f\n",stu[i].average);
//计算总分和平均分
void process()
int i,j;
for(i=0;i<STU_NUM;i++)
stu[i].total=0;
for(j=0;j<SCORE_NUM;j++)
stu[i].total+=stu[i].score[j];
stu[i].average=stu[i].total/SCORE_NUM;
//排序并输出
void sort()
Student tStu;
int i,j;
for(i=0;i<STU_NUM;i++)
for(j=STU_NUM-1;j>i;j--)
if(stu[j].total>stu[j-1].total)
tStu=stu[j];
stu[j]=stu[i];
stu[i]=tStu;
void main()
input();
process();
sort();
两道瑕积分的计算
问题:设 $(a,b,c)\in\mathbb{R}^3$,$S^2(r)$ 是以原点为中心,$r$ 为半径的单位球面,求积分\[ \frac{1}{4\pi r^2}\iint_{S^2(r)} \frac{1}{\sqrt{(x-a)^2+(y-b)^2+(z-c)^2}}\,\mathrm{d}S.\]
以上是关于两道C编程问题的主要内容,如果未能解决你的问题,请参考以下文章