c语言基础编程函数题 c语言编程例题及解析

一个简单的C语言函数题

#includestdio.h

创新新互联,凭借十年的网站制作、成都做网站经验,本着真心·诚心服务的企业理念服务于成都中小企业设计网站有成百上千案例。做网站建设,选成都创新互联公司

#define STUDENT 10

#define CLASS 5

int student_i=0,class_i=0;

main()

{

void average(int course[STUDENT][CLASS], float aver[CLASS]);

void highest(int course[STUDENT][CLASS]);

int course[STUDENT][CLASS] = {{38, 45, 52, 70, 88}, {47, 58, 19, 65, 48},

{80, 19, 64, 5, 47}, {81, 69, 9, 43, 88}, {10, 96, 28, 90, 33},

{4, 88, 22, 43, 32}, {17, 94, 70, 67, 19}, {27, 82, 86, 67, 98},

{34, 4, 92, 15, 84}, {57, 9, 66, 76, 65}};

float aver[CLASS]={0};

average(course, aver);

highest(course);

}

void average(int course[STUDENT][CLASS], float aver[CLASS])

{

int i,j;

for(i=0;iCLASS;i++)

for(j=0;jSTUDENT;j++)

aver[i]+=course[j][i];

printf("每一门课程的平均分:\n");

for(i=0;iCLASS;i++)

printf("%5.2f\n",aver[i]/=10);

printf("\n");

}

void highest(int course[STUDENT][CLASS])

{

int i,j;

int highest;

for(i=0;iCLASS;i++)

{

highest=course[0][i];

for(j=0;jSTUDENT;j++)

if(course[j][i]highest)

{highest=course[j][i];

student_i=j;

class_i=i;}

printf("第%d门课程分数最高的学生及其课程:第%d名学生的第%d门课程分数为%d\n",i+1,student_i+1, class_i+1,highest);

}

}

你看看行不行

求解一道C语言基础编程题。

首先看一下程序的逻辑(虽然貌似题主应该不是在这一块有问题:

关于ascii码的解释:

首先得知道每个字符和数值的对应关系(图不清晰可看戳这里:ascii编码对应表

好了,现在看程序中的第一个if语句,在用大于、小于这些运算比较符比较char的时候,会自动转换为整数比较,也就是说‘0’会转换成48,‘1’转换成49……以此类推,最后是‘9’转换成57,你会发现把这些char减去48就会得到它们各自相对应的整数数值,这就是第一个if里面减去48的目的。同理,接下来的else-if语句,‘A’到‘F’也会转换成整数数值,具体对应的数值可以参看ascii表,一样的道理减去‘A’然后加10的目的也是转换成数值,因为在大于10的进制下,A代表10,B代表11……以此类推,因为这个程序最高就16进制了,所以判断到F就可以了。

然后我们来看进制的解释:

所谓进制,其实就是组合数字的方式,理解了这一点就很好说了。比如说10进制,为什么198等于198(好像很傻一问题)?其实是因为在十进制下,198 (10) = 1 * 10^2 + 9 * 10^1 + 8 * 10^0 = 198(好像是这么回事,(。ì _ í。)),同一个数字,放在不同的位置,它所代表的分量也不一样,即组合数字的方式会影响数字的值,1后面还有2个数字,所以这个1实际上是1 * 10^2 = 100,而不是1,其它位置的数字同理,然后把这些值加起来,就得到了整个数字所代表的最终的值,因此我们才有了 198 = 198(好像很有道理)。

但是,198也可能不等于198,什么时候不等于呢?在不同的进制下。比如说假如我们的这个198是在16进制下的198,那么 198 (16) = 1 * 16^2 + 9 * 16^1 + 8 * 16^0 = 408 (10) = 408。

为什么会产生这种差别呢?因为16进制下的那个1代表的分量是1 * 16^2了,而不是1 * 10^2了,同理,在其它进制下只需要把乘的数字换成对应的进制的数就好了,比如在9进制下那个1就是1 * 9^2等等。

这样一来上面程序里面的for语句就好理解了,之所以用for是因为要算出次方(这个应该不用解释),一个数要乘的次方是它后面跟着的数字的个数,所以是“j = 0; j len - 1”。

然后把这些值加起来,就得到这个数字对应的十进制下的数值,也就完成了最终的转换。

题主可以随便写些不同进制下的数字,然后自己算出十进制下对应的数值,和网站上得出的结果比较比较,这样也可以加深对进制的理解,同时提高计算能力。

戳这里:在线进制转换

这里给出了一个链接,这种网页到处都是,随便搜一下就可以找到。

c语言入门函数编程题(调用函数int Max(int a,int b)求两整数最大值

#include stdio.h

int Max(int a, int b); // 定义函数Max

void main() //无返回值主函数

{

int x, y, z; //定义整型变量x,y,z

printf("Please input two integers : "); //让用户输入两个整数,务必要用英文输入法输入“,”

scanf("%d,%d",x, y); //将用户输入的整型数分别存放到x,y中

if(x==y) //判断x是否等于y,是则输出“这两个整数相等”

{

printf("The two integers are equal!");

}

else //否则,将x,y的值放入实参中并执行Max函数中的内容

{

z = Max(x, y); //实参

printf("The biger number is %d\n", z); //向屏幕输出较大的数

}

}

int Max(int a, int b) //形参

{

int c = 0; //定义整型变量c

c = ab?a:b; //用三目运算符将a,b值中大的赋值给c

return c; //返回c的值

}

//望采纳^_^

C语言函数编程题

修改后的C语言程序:

#include stdio.h 

void triangle(int g)

{

int n=1, m; /* 修改处1 */

for(n;n=g; n++)

{

for(m=1;m=2*n-1;m++) /* 修改处2 */

putchar('*');

putchar('\n');

}

}

void rectangle(int g)

{

int n=1, m; /* 修改处3 */

for(n;n=g;n++)

{

for(m=1;m=3;m++) /* 修改处4 */

putchar('*');

putchar('\n');

}

}

int main()

{

int i,k;

printf("请输入行数(大于3):");

scanf("%d",i);

printf("请选择图形:1---三角形  \t2---矩形\t3---小旗 :");

scanf("%d",k);

if(k==1)

triangle(i);

}

if(k==2)

rectangle(i);

}

if(k==3)

triangle(i);

rectangle(i);

}

return 0;

}


当前标题:c语言基础编程函数题 c语言编程例题及解析
网页路径:http://azwzsj.com/article/dddeeio.html