0718 自学笔记 — C# 基础语法练习#
日期:2026-07-18 | 类型:自习 来源:
D:\study\C#1\stu0718
一、变量与运算符(题目 1–10)#
知识点#
| 类型 | 说明 | 示例 |
|---|---|---|
int |
整数类型 | int age = 20; |
float |
单精度浮点,需加 f 后缀 |
float price = 12.3f; |
double |
双精度浮点 | double total = price + quantity; |
| 输入转换 | Convert.ToInt32() / double.Parse() |
int num = Convert.ToInt32(Console.ReadLine()); |
| 三目运算符 | 条件 ? 值1 : 值2 |
bool isRaining = bool01 == "是" ? true : false; |
| 取模 | % |
num % 2 判断奇偶 |
| 交换变量 | 加减法交换 | a += b; b = a - b; a -= b; |
代码#
// 1. 声明变量并输出
int age = 20;
Console.WriteLine(age);
// 2. float 相加存入 double
float price = 12.3f;
float quantity = 3.5f;
double total = price + quantity;
Console.WriteLine(total);
// 3. 判断奇数/偶数
Console.WriteLine("输入一个整数:");
int num = Convert.ToInt32(Console.ReadLine());
if (num % 2 != 0)
{
Console.WriteLine($"{num}是奇数");
}
else
{
Console.WriteLine($"{num}是偶数");
}
// 4. 计算圆的面积和周长
Console.WriteLine("输入一个圆半径:");
double r = Convert.ToDouble(Console.ReadLine());
double S = r * r * Math.PI;
double C = 2 * Math.PI * r;
Console.WriteLine($"该圆的面积:{S},\n该圆的周长:{C}");
// 5. 三位数的个位、十位、百位
Console.WriteLine("输入一个三位数:");
int number = Convert.ToInt32(Console.ReadLine());
int single = number % 10;
int ten = number % 100 / 10;
int hudred = number / 100;
Console.WriteLine($"个位:{single},十位:{ten},百位:{hudred}");
// 6. 输入姓名和年龄
Console.WriteLine("输入姓名");
string name = Console.ReadLine();
Console.WriteLine("输入年龄");
int ages = Convert.ToInt32(Console.ReadLine());
Console.WriteLine($"我叫{name},今年{ages}岁");
// 7. 三目运算符判断是否带伞
Console.WriteLine("是否下雨(是/否):");
string bool01 = Console.ReadLine();
bool isRaining = bool01 == "是" ? true : false;
if (isRaining == true) { Console.WriteLine("带伞"); }
else { Console.WriteLine("不带伞"); }
// 8. 不借助临时变量交换两个整数
Console.WriteLine("输入一个整数one");
int one = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("输入一个整数two");
int two = Convert.ToInt32(Console.ReadLine());
one += two;
two = one - two;
one -= two;
Console.WriteLine($"交换后 one:{one},two:{two}");
// 9. for 循环计算 1+2+...+100
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
Console.WriteLine($"1+2+..+99+100={sum}");
// 10. 判断闰年
Console.WriteLine("输入一个年份:");
int year = Convert.ToInt32(Console.ReadLine());
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
Console.WriteLine($"输入的{year}年是闰年");
}
else { Console.WriteLine($"输入的{year}年不是闰年"); }
二、if 条件判断(题目 11–20)#
知识点#
- if-else if-else 多分支判断
- switch-case 多分支(适用于离散值匹配)
int.Parse()/double.Parse()类型转换Math.Max()可用于求最大值
代码#
// 11. 成绩判断
Console.WriteLine("输入一个学生成绩:");
int score = int.Parse(Console.ReadLine());
{
if (score > 100 || score < 0) { Console.WriteLine("错误"); }
else if (score >= 60) { Console.WriteLine("及格"); }
else if (score < 60) { Console.WriteLine("不及格"); }
}
// 12. 判断正数、负数、零
Console.WriteLine("输入一个数字:");
int num = int.Parse(Console.ReadLine());
if (num > 0) { Console.WriteLine(num + "是正数"); }
else if (num < 0) { Console.WriteLine(num + "是负数"); }
else { Console.WriteLine(num + "是零"); }
// 13. switch 判断天数
Console.WriteLine("输入年份:");
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("输入月份:");
int month = Convert.ToInt32(Console.ReadLine());
int day = 0;
switch (month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31; break;
case 4: case 6: case 9: case 11:
day = 30; break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
day = 29;
else day = 28;
break;
default: break;
}
Console.WriteLine($"{year}年,第{month}月,有{day}天");
// 14. switch 简易计算器
Console.WriteLine("输入一个数:");
double a = double.Parse(Console.ReadLine());
Console.WriteLine("输入运算符:\"+\",\"-\",\"-\",\"/\"");
string symbol = Console.ReadLine();
Console.WriteLine("输入一个数:");
double b = double.Parse(Console.ReadLine());
double c = a + b;
switch (symbol)
{
case "+": c = a + b; break;
case "-": c = a - b; break;
case "*": c = a * b; break;
case "/":
if (b != 0) { c = a / b; }
else { Console.WriteLine("输入错误"); }
break;
default: break;
}
Console.WriteLine("结果是:" + c);
// 15. BMI 计算
Console.WriteLine("输入体重:");
double weight = double.Parse(Console.ReadLine());
Console.WriteLine("输入身高:");
double height = double.Parse(Console.ReadLine());
double BMI = weight / (height * height);
if (BMI < 18.5) { Console.WriteLine("偏瘦"); }
else if (BMI >= 18.5 && BMI <= 24.9) { Console.WriteLine("正常"); }
else if (BMI >= 25 && BMI < 30) { Console.WriteLine("偏重"); }
else if (BMI >= 30) { Console.WriteLine("肥胖"); }
// 16. 三个整数中的最大值
Console.WriteLine("输入三个整数:");
int x = int.Parse(Console.ReadLine());
int y = int.Parse(Console.ReadLine());
int z = int.Parse(Console.ReadLine());
if (x > y && x > z) { Console.WriteLine("最大值:" + x); }
else if (y > x && y > z) { Console.WriteLine("最大值:" + y); }
else { Console.WriteLine("最大值:" + z); }
// 17. 判断字符类型(ASCII 码)
Console.WriteLine("输入一个字符");
char chars = char.Parse(Console.ReadLine());
if (chars >= 48 && chars <= 57)
{
Console.WriteLine($"{chars}是数字");
}
else if (chars >= 65 && chars <= 122)
{
if (chars <= 90) { Console.WriteLine($"{chars}是大写字母"); }
else { Console.WriteLine($"{chars}是小写字母"); }
}
else { Console.WriteLine($"{chars}是其他字符"); }
// 18. 判断坐标象限
Console.WriteLine("输入坐标x:");
double x0 = double.Parse(Console.ReadLine());
Console.WriteLine("输入坐标y:");
double y0 = double.Parse(Console.ReadLine());
if (x0 > 0 && y0 > 0) { Console.WriteLine($"({x0},{y0})在第一象限"); }
else if (x0 > 0 && y0 < 0) { Console.WriteLine($"({x0},{y0})在第四象限"); }
else if (x0 < 0 && y0 < 0) { Console.WriteLine($"({x0},{y0})在第三象限"); }
else if (x0 < 0 && y0 > 0) { Console.WriteLine($"({x0},{y0})在第二象限"); }
else if (x0 != 0 && y0 == 0) { Console.WriteLine($"({x0},{y0})在x轴上"); }
else if (x0 == 0 && y0 != 0) { Console.WriteLine($"({x0},{y0})在y轴上"); }
else { Console.WriteLine($"({x0},{y0})在原点上"); }
// 19. 判断三角形类型
Console.WriteLine("输入边长:");
double a0 = double.Parse(Console.ReadLine());
Console.WriteLine("输入边长:");
double b0 = double.Parse(Console.ReadLine());
Console.WriteLine("输入边长:");
double c0 = double.Parse(Console.ReadLine());
if ((a0 - b0) * (a0 - b0) < c0 * c0 && b0 != 0 && a0 != 0 && c0 != 0)
{
if (a0 == b0 && b0 == c0) { Console.WriteLine("是等边三角形"); }
else if (a0 == b0 || a0 == c0 || b0 == c0) { Console.WriteLine("是等腰三角形"); }
else { Console.WriteLine("是普通三角形"); }
}
// 20. 输入星期数输出星期几
Console.WriteLine("今天星期?\n输入(1-7)整数:");
int week = int.Parse(Console.ReadLine());
string Week = "";
switch (week)
{
case 1: Week = "星期一"; break;
case 2: Week = "星期二"; break;
case 3: Week = "星期三"; break;
case 4: Week = "星期四"; break;
case 5: Week = "星期五"; break;
case 6: Week = "星期六"; break;
case 7: Week = "星期日"; break;
default: break;
}
⚠️ 第 19 题 bug:三角形判定条件
(a0 - b0) * (a0 - b0) < c0 * c0只检查了一条边,应使用三角形任意两边之和大于第三边。
三、循环结构(题目 21–30)#
知识点#
| 循环类型 | 特点 |
|---|---|
for |
已知循环次数 |
while |
先判断后执行 |
do-while |
先执行后判断,至少执行一次 |
break |
跳出整个循环 |
| 嵌套循环 | 外层控制行,内层控制列 |
代码#
// 21. 打印 1-100 中所有偶数
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 0) { Console.WriteLine(i); }
}
// 22. 计算 1! + 2! + ... + 10!
int odd = 1;
int sum1 = 1;
int sum2 = 0;
while (odd <= 10)
{
if (odd == 1) { sum1 = odd; }
else { sum1 *= odd; }
sum2 += sum1;
odd++;
}
Console.WriteLine("1!+2!+...+10! = " + sum2);
// 23. do-while 模拟密码登录
Console.WriteLine("输入用户名:");
string user = Console.ReadLine();
Console.WriteLine("输入密码:");
string passwd = Console.ReadLine();
bool flag = true;
do
{
if (passwd == "123456") { Console.WriteLine("输入正确"); flag = false; }
else { Console.WriteLine("重新输入密码:"); passwd = Console.ReadLine(); }
}
while (flag);
// 24. 嵌套 for 打印 9x9 乘法表
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write($"{j}×{i}={j * i}\t");
}
Console.WriteLine();
}
// 25. 判断质数
Console.WriteLine("输入一个正整数:");
int num = int.Parse(Console.ReadLine());
int flags = 0;
for (int i = 1; i <= num; i++)
{
if (num % i == 0) { flags++; }
}
if (flags <= 2) { Console.WriteLine($"{num}是质数"); }
else { Console.WriteLine($"{num}是质数"); }
// 26. 打印倒直角三角形
for (int i = 0; i <= 5; i++)
{
for (int j = 1; j <= i; j++) { Console.Write(" "); }
for (int k = 1; k <= 5 - i; k++) { Console.Write("*"); }
Console.WriteLine();
}
// 27. 打印水仙花数
Console.WriteLine("100-999水仙花数:");
for (int i = 100; i < 1000; i++)
{
int single = i % 10;
int ten = i % 100 / 10;
int hudred = i / 100;
if (Math.Pow(single, 3) + Math.Pow(ten, 3) + Math.Pow(hudred, 3) == i)
{ Console.WriteLine(i); }
}
// 28. break 找到第一个能被 7 和 9 同时整除的数
int flag0 = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 7 == 0 && i % 9 == 0) { flag0++; }
if (flag0 == 1) { Console.WriteLine("第一个能被 7 和 9 同时整除的数" + i); break; }
}
// 30. 猜数字游戏
Random r = new Random();
int number = r.Next(1, 101);
Console.WriteLine(number);
Console.WriteLine("请开始猜数:");
int num00 = 5;
while (true)
{
Console.WriteLine($"您还有{num00}次");
if (num00 == 0) { Console.WriteLine("GAME OVER"); break; }
Console.WriteLine("输入数字:");
int users = int.Parse(Console.ReadLine());
if (users == number) { Console.WriteLine("恭喜你,猜对了"); break; }
else if (users > number) { Console.WriteLine("猜大了"); }
else { Console.WriteLine("猜小了"); }
num00--;
}
⚠️ 第 25 题 bug:if/else 分支输出内容相同,逻辑有误。
四、方法(函数)(题目 31–38)#
知识点#
| 概念 | 说明 |
|---|---|
| 方法定义 | public static 返回类型 方法名(参数列表) |
void |
无返回值 |
| 返回值 | return 语句 |
| 方法重载 | 同名方法,参数列表不同 |
| 访问修饰符 | public / internal / private |
| XML 注释 | /// <summary> 生成文档注释 |
代码#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 四_方法_函数_
{
internal class Program
{
/// <summary>41. 无参无返回值,输出 Hello</summary>
public static void SayHello()
{
Console.WriteLine("Hello, C#!");
}
/// <summary>32. 返回两个整数中的最大值</summary>
public static int GetMax(int num1, int num2)
{
if (num1 > num2) return num1;
else return num2;
}
/// <summary>33. 判断是否为偶数</summary>
public static bool IsEven(int num)
{
return (num % 2 == 0);
}
/// <summary>34. 打印 n 行 * 正方形</summary>
public static void PrintStar(int n)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++) { Console.Write("* "); }
Console.WriteLine();
}
}
/// <summary>36. 计算 n 的阶乘</summary>
public static long Factorial(int n)
{
long mul = 1;
for (long i = 1; i <= n; i++) { mul *= i; }
return mul;
}
/// <summary>36. 计算数组所有元素之和</summary>
public static int SumArray(int[] arr)
{
int sum = 0;
for (int i = 0; i < arr.Length; i++) { sum += arr[i]; }
return sum;
}
/// <summary>37. 反转字符串</summary>
public static string ReverseString(string str)
{
char[] chars = new char[str.Length];
for (int i = 0; i < str.Length; i++)
{
chars[str.Length - i - 1] = str[i];
}
return new string(chars);
}
public static int Add(int a, int b) { return a + b; }
/// <summary>38. 方法重载:三个整数相加</summary>
public static int Add(int a, int b, int c) { return a + b + c; }
static void Main(string[] args)
{
SayHello();
int a = 123, b = 1234;
Console.WriteLine("最大值:" + GetMax(a, b));
Console.WriteLine(IsEven(45));
PrintStar(9);
Console.WriteLine(Factorial(10));
int[] ar = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(SumArray(ar));
string strings = "123456";
Console.WriteLine(strings);
Console.WriteLine(Add(1, 2));
Console.WriteLine(Add(1, 2, 3));
}
}
}
⚠️
ReverseString方法当前被注释,未在 Main 中调用执行。
五、随机数(题目 39–42)#
知识点#
Random rnd = new Random()创建随机数生成器rnd.Next(min, max)— 生成 [min, max) 范围的随机整数rnd.Next(0, 10)— 生成 0–9(含 0,不含 10)
代码#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 五_随机数
{
internal class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
// 39. 生成 10 个 1-100 的随机整数
for (int i = 0; i < 10; i++)
{
int r = rnd.Next(1, 100);
Console.WriteLine(r);
}
// 40. 生成 4 位数字验证码
int[] VerCode = new int[4];
for (int i = 0; i < VerCode.Length; i++)
{
VerCode[i] = rnd.Next(0, 10);
}
Console.WriteLine("验证码:");
foreach (int i in VerCode) { Console.Write(i); }
Console.WriteLine();
// 41. 模拟掷骰子 1000 次,统计各点数
int a = 1, b = 2, c = 3, d = 4, e = 5, f = 6;
for (int i = 0; i < 1000; i++)
{
int six = rnd.Next(1, 7);
if (six == 1) { a++; }
else if (six == 2) { b++; }
else if (six == 3) { c++; }
else if (six == 4) { d++; }
else if (six == 5) { e++; }
else if (six == 6) { f++; }
}
Console.WriteLine(
$"1点出现次数:{a}\n2点出现次数:{b}\n3点出现次数:{c}\n" +
$"4点出现次数:{d}\n5点出现次数:{e}\n6点出现次数:{f}");
// 42. 随机抽取水果
string[] fruit = { "苹果", "香蕉", "橘子", "葡萄" };
for (int i = 0; i < fruit.Length; i++)
{
int r1 = rnd.Next(0, 4);
(fruit[i], fruit[r1]) = (fruit[r1], fruit[i]);
}
Console.WriteLine(fruit[1]);
}
}
}
⚠️ 第 42 题 bug:通过交换数组元素再取
fruit[1]来随机取值,逻辑有误。正确写法:fruit[rnd.Next(0, fruit.Length)]。
六、一维数组(题目 43–50)#
知识点#
- 数组声明:
int[] arr = { 1, 2, 3 }或new int[5] - 遍历:
for(带索引)和foreach(只读遍历) - 数组反转:交换对称位置元素
- 元素操作:遍历修改、求和、查找
代码#
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 六__一维数组
{
internal class Program
{
static void Main(string[] args)
{
// 43. 声明数组并倒序打印
int[] arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.Length / 2; i++)
{
(arr[i], arr[arr.Length - i - 1]) = (arr[arr.Length - i - 1], arr[i]);
}
foreach (int i in arr) { Console.Write(i); }
Console.WriteLine();
// 44. 随机 10 个 1-50,找出最大值和最小值
Random rnd = new Random();
int[] arr01 = new int[10];
for (int i = 0; i < arr01.Length; i++)
{
arr01[i] = rnd.Next(1, 51);
}
int max = 0;
int min = 50;
for (int i = 0; i < arr01.Length; i++)
{
if (max < arr01[i]) { max = arr01[i]; }
if (min > arr01.Length) { min = arr01[i]; } // bug: 应为 min > arr01[i]
}
Console.Write("数组:");
foreach (int i in arr01) { Console.Write(i + ","); }
Console.WriteLine();
Console.WriteLine($"数组最大值:{max},数组最小值{min}");
// 45. 输入 5 个成绩,计算平均分
int[] score = new int[5];
int sum = 0;
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"输入第{i + 1}名学生成绩:");
int a = int.Parse(Console.ReadLine());
score[i] = a;
if (i == 4)
{
for (int j = 0; j < score.Length; j++) { sum += score[j]; }
}
}
Console.Write("五名学生成绩:");
foreach (int j in score) { Console.Write(j + ","); }
Console.WriteLine("平均成绩:" + sum / score.Length);
// 46. 数组元素全部乘以 2
int[] arr00 = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr00.Length; i++) { arr00[i] = arr00[i] * 2; }
Console.Write("原数组arr00 2倍后:");
foreach (int i in arr00) { Console.Write(i); }
Console.WriteLine();
// 47. 手动实现数组反转
int[] Arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < Arr.Length / 2; i++)
{
(Arr[i], Arr[Arr.Length - i - 1]) = (Arr[Arr.Length - i - 1], Arr[i]);
}
foreach (int i in Arr) { Console.Write(i + ","); }
Console.WriteLine();
// 48. 输入 10 个整数,查找目标值索引
int[] Array0 = new int[10];
for (int i = 0; i < Array0.Length; i++)
{
Console.Write($"输入第{i + 1}个数:");
int a = int.Parse(Console.ReadLine());
Array0[i] = a;
}
Console.WriteLine("输入查找的值:");
int num = int.Parse(Console.ReadLine());
Console.WriteLine(Method.Index(Array0, num));
// 49. 统计正数、负数、零的个数
int[] ARR = { -11, 23, -2, -3, 4, 5, 6, 78, 0 };
int number1 = 0, number2 = 0, number3 = 0;
for (int i = 0; i < ARR.Length; i++)
{
if (ARR[i] == 0) { number1++; }
else if (ARR[i] > 0) { number2++; }
else { number3++; }
}
Console.WriteLine($"正数有:{number2}个,负数有:{number3}个,零有:{number1}个");
// 50. 两个等长数组对应元素相加
int[] one = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] two = { 9, 78, 56, 565, 44, 32, 1, 2 };
int[] three = new int[one.Length];
for (int i = 0; i < one.Length; i++) { three[i] = one[i] + two[i]; }
foreach (int i in three) { Console.WriteLine(i); }
}
}
}
Method.cs(辅助类):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 六__一维数组
{
internal class Method
{
/// <summary>查找值在数组中的索引位置</summary>
public static int Index(int[] arr, int a)
{
for (int i = 0; i <= arr.Length; i++) // bug: 应为 i < arr.Length
{
if (arr[i] == a) { return i; }
}
return -1;
}
}
}
⚠️ 第 44 题 bug:求最小值时判断条件写成了
min > arr01.Length(应为min > arr01[i])。 ⚠️ Method.Index bug:循环条件i <= arr.Length会导致数组越界(应为i < arr.Length)。
综合实战题 — 智能抽奖与奖品分配系统#
状态:仅搭建了项目框架,核心逻辑未实现。
代码#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 综合实战题__智能抽奖与奖品分配系统_
{
internal class Program
{
public static void Main(string[] args)
{
Console.WriteLine("========请选择========");
int choose = int.Parse(Console.ReadLine());
Console.WriteLine("====1.展示所有号码====");
Console.WriteLine("====1.展示所有号码====");
Console.WriteLine("====3.展示所有号码====");
Console.WriteLine("====4.退出====");
do
{
switch (choose)
{
case 1: break;
case 2: break;
case 3: break;
case 4: break;
default: break;
}
}
while (choose == 4);
}
}
}
- 菜单选项存在重复(选项 1 和 3 都是"展示所有号码"),待修正
Method类为空,需补充抽奖/奖品分配逻辑do-while退出条件choose == 4逻辑正确,但缺少choose的重新读取
总结与待改进#
| 编号 | 练习 | 状态 | 备注 |
|---|---|---|---|
| 1–10 | 变量与运算符 | ✅ 完成 | 基础语法练习 |
| 11–20 | if 条件判断 | ✅ 完成 | 含 switch 用法 |
| 21–30 | 循环结构 | ✅ 完成 | 含嵌套循环、break |
| 31–38 | 方法 | ✅ 完成 | 方法重载已实现 |
| 39–42 | 随机数 | ✅ 完成 | 第 42 题逻辑有误 |
| 43–50 | 一维数组 | ✅ 完成 | 第 44 题最小值 bug |
| 综合 | 抽奖系统 | ⏳ 未完成 | 仅框架,需补充逻辑 |
常见错误提醒#
- 数组越界:
for循环条件应为i < arr.Length,<=会导致越界。 - 变量命名不规范:如
hudred(应为hundred)、bool01等。 - 逻辑判断疏漏:如第 25 题 if/else 输出相同、第 44 题最小值判断条件错误。
- switch 缺少 break:第 14 题 default 分支缺少
break,可能 fall-through。 - 随机取值逻辑错误:第 42 题应直接使用
rnd.Next(0, length)取索引。