using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//某班有M名同学,本学期开了N门课,期末考试后,要统计每个学生的平均分,
//请编写程序代码实现该功能,要求对于每个学生要输入学号和N门课的成绩。namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
int M, N;
Console.WriteLine("请输入学生人数M和科目数目N:");
M = Convert.ToInt32(Console.ReadLine());
N = Convert.ToInt32(Console.ReadLine());
int i, j;
int sum = 0;
double ave;
for (i = 0; i < M; i++)
{
int num;
Console.WriteLine("请输入第{0}个学生的学号:", i + 1);
num = Convert.ToInt32(Console.ReadLine());
for (j = 1; j <= N; j++)
{
int[,]cj = new int[i,j];
Console.WriteLine("请输入学号为{0}的同学的成绩:", num);
cj[i,j] = Convert.ToInt32(Console.ReadLine()); sum = sum + cj[i,j];
}
ave = sum / N;
Console.WriteLine("学号为{0}的同学的平均分为;", ave);
}
Console.Read();
}
}
}
请问着色的地方有什么问题?除此之外,还有其他的问题吗?愿闻其详。
using System.Collections.Generic;
using System.Linq;
using System.Text;
//某班有M名同学,本学期开了N门课,期末考试后,要统计每个学生的平均分,
//请编写程序代码实现该功能,要求对于每个学生要输入学号和N门课的成绩。namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
int M, N;
Console.WriteLine("请输入学生人数M和科目数目N:");
M = Convert.ToInt32(Console.ReadLine());
N = Convert.ToInt32(Console.ReadLine());
int i, j;
int sum = 0;
double ave;
for (i = 0; i < M; i++)
{
int num;
Console.WriteLine("请输入第{0}个学生的学号:", i + 1);
num = Convert.ToInt32(Console.ReadLine());
for (j = 1; j <= N; j++)
{
int[,]cj = new int[i,j];
Console.WriteLine("请输入学号为{0}的同学的成绩:", num);
cj[i,j] = Convert.ToInt32(Console.ReadLine()); sum = sum + cj[i,j];
}
ave = sum / N;
Console.WriteLine("学号为{0}的同学的平均分为;", ave);
}
Console.Read();
}
}
}
请问着色的地方有什么问题?除此之外,还有其他的问题吗?愿闻其详。
for (j = 1; j <= N; j++)
{
int[,]cj = new int[i,j];
Console.WriteLine("请输入学号为{0}的同学的成绩:", num);
cj[i,j] = Convert.ToInt32(Console.ReadLine()); sum = sum + cj[i,j];
}没看出来你new这个二维数组cj有啥用,它只起了一个int的作用。
另外访问cj[i,j]访问越界了。
再有就是i为0时,new一个数组会有问题。
还有一个,Convert.ToInt32() 不能解析为int时会抛异常
class Program
{
static void Main(string[] args)
{
int M, N;
Console.WriteLine("请输入学生人数M和科目数目N:");
try
{
M = Convert.ToInt32(Console.ReadLine());
N = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("请输入数字");
} int i, j;
int sum = 0;
double ave;
int[,]cj = new int[N,M];
for (i = 0; i < M; i++)
{
int num;
Console.WriteLine("请输入第{0}个学生的学号:", i + 1);
num = Convert.ToInt32(Console.ReadLine());
for (j = 1; j <= N; j++)
{
Console.WriteLine("请输入学号为{0}的同学的成绩:", num);
try
{
cj[i,j] = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("请输入数字");
}
sum = sum + cj[i,j];
}
ave = sum / N;
Console.WriteLine("学号为{0}的同学的平均分为;", ave);
}
Console.Read();
}
}
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入学生人数M和科目数目N:");
int M = Convert.ToInt32(Console.ReadLine());
int N = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < M; i++)
{
Console.WriteLine("请输入第{0}个学生的学号:", i + 1);
int num = Convert.ToInt32(Console.ReadLine());
int sum = 0;
for (int j = 0; j < N; j ++)
{
Console.WriteLine("请输入学号为{0}的同学的成绩:", num);
int c = Convert.ToInt32(Console.ReadLine());
sum = sum + c;
}
Console.WriteLine("学号为{0}的同学的平均分为{1}", num, sum * 1.0 / N);
}
Console.Read();
}
}
}
应该声明一个长度为M*N的数组,即int[,]cj=new int[M,N];而Console.Read();是一行不必要的代码。给你的代码稍做修改,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//某班有M名同学,本学期开了N门课,期末考试后,要统计每个学生的平均分,
//请编写程序代码实现该功能,要求对于每个学生要输入学号和N门课的成绩。namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
int M, N;
Console.WriteLine("请输入学生人数M:");
M = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入学生科目数目N:");
N = Convert.ToInt32(Console.ReadLine());
int i, j;
int sum;
double ave;
int num;
for (i = 0; i < M; i++)
{
sum = 0;
Console.WriteLine("请输入第{0}个学生的学号:", i + 1);
num = Convert.ToInt32(Console.ReadLine());
for (j = 0; j < N; j++)
{
int[,] cj = new int[M, N];
Console.WriteLine("请输入学号为{0}的同学的第{1}门成绩:", num,j+1);
cj[i, j] = Convert.ToInt32(Console.ReadLine());
sum = sum+cj[i,j];
}
Console.WriteLine("学号为{0}的同学的总分是{1}分",num, sum);
ave = sum / N;
Console.WriteLine("学号为{0}的同学的平均分为;{1}分", num,ave);
Console.WriteLine();
}
}
}
}