两道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语言的

第一个程序的作用(也就是bin函数的作用)是把输入的一个10进制的数转化为二进制表示。输出为10100;

输入一个正整数,对他不断的进行初以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编程问题的主要内容,如果未能解决你的问题,请参考以下文章

跪求C语言大神!!两道题。!!

两道c语言题目求解

我有两道c语言题要做,应该不难,请各位大神帮忙

蓝桥杯每日四道编程题(两道真题+两道模拟)| 第四天

有趣的两道数论题——2017华杯初赛小高组

编程两道——悼念2016.3.25模拟糟糕的模拟考