扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#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);
}
}
你看看行不行
首先看一下程序的逻辑(虽然貌似题主应该不是在这一块有问题:
关于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”。
然后把这些值加起来,就得到这个数字对应的十进制下的数值,也就完成了最终的转换。
题主可以随便写些不同进制下的数字,然后自己算出十进制下对应的数值,和网站上得出的结果比较比较,这样也可以加深对进制的理解,同时提高计算能力。
戳这里:在线进制转换
这里给出了一个链接,这种网页到处都是,随便搜一下就可以找到。
#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语言程序:
#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;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流