R语言之习题1

这篇博客通过R语言展示了基础的循环操作,如计算序列和、阶乘,以及查找素数。此外,还涉及到向量元素的平方、立方输出,以及学生成绩等级的划分。博主使用了for循环和while循环来实现这些功能,并创建了一个自定义函数来计算矩阵乘积并找到最大元素。博客还包含了寻找特定范围内的素数方法。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值