1. 计算:1+2+3+…+100=?
> s = 0
> for (i in c(1:100)){
+ s = s + i
+ }
> s
[1] 5050
2. 计算10的阶乘。
2.1 for方法
> # for 方法
> s = 1
> for (i in c(1:10)){
+ s = s* i
+ }
> s
[1] 3628800
2.2 while方法
> i <- 1
> j <- 1
> while (i <= 10){
+ j <- j*i
+ i <- i+1
+ }
> j
[1] 3628800
3. 对于向量a=(2,6,9,12,33),利用for循环,对a中每个元素输出:该元素、该元素的平方、该元素的立方。
> a <- c(2,6,9,12,33)
> for (i in a){
+ cat(i,'\t', i,'的平方=',i**2,'\t', i,'的立方=',i**3,'\n')
+ }
2 2 的平方= 4 2 的立方= 8
6 6 的平方= 36 6 的立方= 216
9 9 的平方= 81 9 的立方= 729
12 12 的平方= 144 12 的立方= 1728
33 33 的平方= 1089 33 的立方= 35937
4. 求满足下列不等式的最小自然数n, 1+2+3+…+n>6666.
> n = 6666
> s = 0
> for (i in 1:n){
+ s = s + i
+ if (s > 6666){
+ break;
+ }
+ }
> s # 最小总和
[1] 6670
> i # 最小自然数n
[1] 115
5. 学生成绩等级的划分。
假设等级分数的换算如下, 90分及以上是 A ; 90分以下, 80分及以上是 B ; 80分以下, 70分及以上是 C ;70分以下, 60分及以上是 D ; 60分以下 F. 某门课程一些学生的分数是 100, 97, 96, 78, 65, 56, 88,46, 90. 试求这些学生的等级分数。
> score <- c(100,97,96,78,65,56,88,46,90)
> for (i in score) {
+ if (i >= 90) {
+ cat(i,'分的成绩等级为:A','\n')
+ } else if (i >= 80) {
+ cat(i,'分的成绩等级为:B','\n')
+ } else if (i >= 70) {
+ cat(i,'分的成绩等级为:C','\n')
+ } else if (i >= 60) {
+ cat(i,'分的成绩等级为:D','\n')
+ } else {
+ cat(i,'分的成绩等级为:F','\n')
+ }
+ }
100 分的成绩等级为:A
97 分的成绩等级为:A
96 分的成绩等级为:A
78 分的成绩等级为:C
65 分的成绩等级为:D
56 分的成绩等级为:F
88 分的成绩等级为:B
46 分的成绩等级为:F
90 分的成绩等级为:A
6. 求coun中的数值除以2取余为1的数目,即求奇数。
> coun <- function(x){
+ cou <- 0
+ for (i in 1:length(x)){
+ if (x[i] %% 2 == 1){
+ cat('奇数有',i, '\n')
+ cou <- cou +1
+ }
+ }
+ return(cou) # 奇数
+ }
> coun(c(1:5)) # 个数
奇数有 1
奇数有 3
奇数有 5
[1] 3
7. 求2-100的素数。
7.1 for循环
> for(i in 2:100)
+ {
+ for(j in 2:(i-1))
+ {
+ if(i%%j==0) # %%表取余,若余数为0则不是素数
+ {
+ break # 若不是素数则结束循环
+ }
+ else if((i%%j!=0)&(j==(i-1))) # 是素数则输出
+ {
+ cat(i, ' ') # 或者 print(i)
+ }
+ }
+ }
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
7.2 构造矩阵法
> x <- 2:100
> y <- matrix(nrow =100, ncol = 99) # 构造矩阵
> count <- 0
> c <- NULL
> for (i in 1:99){ # 列,x轴,99个数字(分子)
+ for (j in 1:100){ # 行,y轴,100个数字(分母)
+ y[j,i] <- x[i] %% j # x[1]=2,...,x[99]=100,j=1~100, %%表取余
+ }
+ if (length(which(y[,i]==0)) <= 2){ # 仅能整除1和它本身(最多有2个)
+ count <- count +1
+ c[count] <- i # c表示下标2~100中第几个是素数
+ }
+ }
> count#计数 # 2~100中素数的个数
[1] 25
> x[c]#所有素数 # 2~100中的素数
[1] 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
8. 判断101-200的素数。
> x <- 101:200
> y <- matrix(nrow = 200, ncol = 100)
> count <- 0
> c <- NULL
> for(i in 1:100){ # 列,x轴,100个数字(分子)
+ for(j in 1:200){ # 行,y轴,200个数字(分母)
+ y[j,i] <- x[i] %% j # x[1]=101,...,x[100]=200,j=1~200, %%表取余
+ }
+ if(length(which(y[,i]==0))<=2){ # 仅能整除1和它本身(最多有2个)
+ count <- count + 1
+ c[count] <- i # c表示下标,101~200中第几个是素数
+ }
+ }
> count#计数 # 101~200中素数的个数
[1] 21
> x[c]#所有素数 # 101~200中的素数
[1] 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191
[19] 193 197 199
9. 编写一个自定义函数求两个矩阵的乘积,并找出乘积矩阵中的最大元素。
> POM <-function(x,y) # 自定义函数求两个矩阵的乘积
+ {
+ maxer <- function(x.) # 自定义函数求矩阵中的最大元素
+ {
+ print(max(x.))
+ }
+ m1 <- ncol(x) # 矩阵x的列数
+ n <- nrow(y) # 矩阵y的行数
+ if(m1!=n) # 若m1≠n,则它们不能相乘(不符合运算规则)
+ {
+ print('error dimension is not siutable')
+ return(0)
+ }
+ m <- nrow(x) # 矩阵x的行数
+ n1 <- ncol(y) # 矩阵y的列数
+ s <-matrix(0,m,n1) # 构造初始乘积矩阵
+ for(i in 1:m)
+ for(j in 1:n1)
+ s[i,j] <- sum(x[i,]*y[,j])
+ maxer(s)
+ return(s)
+ }
> #矩阵s的行数等于矩阵x的行数,s的列数等于y的列数。
> #乘积s的第m行第n列的元素等于矩阵x的第m行的元素与矩阵y的第n列对应元素乘积之和。
> x <-matrix(c(1:6),2,3,byrow = TRUE)#按行
> y <-matrix(c(1:6),3,2,byrow = FALSE)#按列
> POM(x,y)
[1] 77
[,1] [,2]
[1,] 14 32
[2,] 32 77
这篇博客通过R语言展示了基础的循环操作,如计算序列和、阶乘,以及查找素数。此外,还涉及到向量元素的平方、立方输出,以及学生成绩等级的划分。博主使用了for循环和while循环来实现这些功能,并创建了一个自定义函数来计算矩阵乘积并找到最大元素。博客还包含了寻找特定范围内的素数方法。
6467

被折叠的 条评论
为什么被折叠?



