300
任务描述
本关需要你编写一个用指针数组处理的c
程序,然后从键盘输入月份时输出对应的英文名。
相关知识
指针
指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,你必须在使用指针存储其他变量地址之前,对其进行声明。
指针变量声明的一般形式为:
type *var-name;
在这里,type
是指针的基类型,它必须是一个有效的 C
数据类型,var
-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:
int *ip; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
指针数组
数组大家都清楚,但是指针数组是什么呢?在C
语言中,数组元素全为指针的数组称为指针数组。
一维指针数组的定义形式为:
类型名 *数组标识符[数组长度]
例如:
char *arr[4] = {"hello", "world", "shannxi", "xian"};
//arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。
运用:
指针数组可以作为函数的参量使用,使用方式与普通数组类似;
指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。
数组指针
什么?还有数组指针?不是一样的吗?
指针数组和数组指针是不一样的,让我们来详细看一下什么是数组指针。
数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。
例如:
char (*pa)[4]; // pa即为指向数组的指针,又称数组指针
初学者总是分不出指针数组与数组指针的区别,其实很好理解:
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称;
数组指针:首先它是一个指针,它指向一个数组。在32
位系统下永远是占4
个字节,但并不知道它指向的数组占多少字节,它是“指向数组的指针”的简称。
指针变量的赋值
指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。在C
语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。C
语言中提供了地址运算符&来表示变量的地址。
其一般形式为: & 变量名;
, 如&a
变示变量a
的地址,&b
表示变量b
的地址。
指针运算符
指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。
取地址运算符&
: 取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf
函数及前面介绍指针变量赋值中,我们已经了解并使用了&运算符。
取内容运算符*
: 取内容运算符*
是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*
运算符之后跟的变量必须是指针变量。需要注意的是指针运算符*
和指针变量说明中的指针说明符*
不是一回事。在指针变量说明中,*
是类型说明符,表示其后的变量是指针类型。而表达式中出现的*
则是一个运算符用以表示指针变量所指的变量。
例如:
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
表示指针变量p
取得了整型变量a
的地址。本语句表示输出变量a
的值。
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
编写一个用指针数组处理的c
程序,实现从键盘输入月份时输出对应的英文名。 效果如下:
输入:3
输出:March
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
开始你的任务吧,祝你成功!
第一种不用指针解法:
#include
int main()
{
//»ñÈ¡²ÎÊý·½Ê½ scanf
//int x =0;
//int y = 0;
//scanf("%d", &x);
//½á¹ûÊä³öʹÓÃprinf
//printf("%d",x);
// ÇëÔÚ´ËÌí¼ÓÄãµÄ´úÂë
/********** Begin *********/
char *arr[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
int i;
scanf("%d",&i);
printf("%s",arr[i-1]);
/********** End **********/
}
#include
int main()
{
//»ñÈ¡²ÎÊý·½Ê½ scanf
//int x =0;
//int y = 0;
//scanf("%d", &x);
//½á¹ûÊä³öʹÓÃprinf
//printf("%d",x);
// ÇëÔÚ´ËÌí¼ÓÄãµÄ´úÂë
/********** Begin *********/
char *arr[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
int i;
scanf("%d",&i);
printf("%s",*(arr+i-1));
/********** End **********/
}
500
任务描述
本关需要你使用指针方法来处理一道关于成绩的题目。
相关知识
相关知识略
编程要求
有一个班4
个学生,5
门课程。
求第n
门课程的平均分(1<=n<=5)
;
找出有m
门以上课程不及格的学生(1<=m<=5)
,输出他们的学号和全部课程成绩及平均成绩;
找出平均成绩在90
分以上或全部课程成绩在85
分以上的学生,分别编写3
个函数实现以上3
个要求。
样例:
学号 | 成绩1 |
成绩2 |
成绩3 |
成绩4 |
成绩5 |
---|---|---|---|---|---|
001 | 90.0 | 75.5 | 80.0 | 59.0 | 43.0 |
002 | 88.5 | 75.0 | 96.0 | 57.0 | 60.5 |
003 | 89.0 | 87.0 | 86.0 | 90.4 | 100.0 |
004 | 98.0 | 96.0 | 99.0 | 85.0 | 82.0 |
输入: 3
2
aver 90
all 85
输出:
第3门课程的平均分为:
90.25
有2门以上课程不及格的学生信息为:
学号:
001
全部成绩:
90.075.580.059.043.0
平均成绩:
69.5
平均成绩在90分以上的学生为:
003004
全部课程成绩在85分以上的学生为:
003
本题请尽情自由发挥!
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
开始你的任务吧,祝你成功!
#include
// 请在此添加你的代码
/********** Begin *********/
int main(){
double arr[4][7]={{90.0,75.5,80.0,59.0,43.0},
{88.5,75.0,96.0,57.0,60.5},
{89.0,87.0,86.0,90.4,100.0},
{98.0,96.0,99.0,85.0,82.0}};
int e[]={1, 2, 3, 4};
int i,j,n,m,k,l,x;
double aver;
scanf("%d%d",&n,&m);
scanf("%d",&k);
scanf("%d",&l);
printf("第3门课程的平均分为:\n");
aver=(arr[0][n-1]+arr[1][n-1]+arr[2][n-1]+arr[3][n-1])/4;
printf("%.2f\n",aver);
printf("有2门以上课程不及格的学生信息为:\n");
printf("学号:\n");
for(i=0;i<4;i++){
int count=0,isPrime=1;
aver=0;
for(j=0;j<5;j++){
aver+=arr[i][j];
if(arr[i][j]<60.0){
count++;
if(count%2==0){
isPrime=0;
break;
}
}
}
if(isPrime==0){
printf("00%d\n",e[i]);
printf("全部成绩:\n");
for(j=0;j<5;j++){
if(j>0&&j<5){
printf(" ");
}
printf("%.1f",arr[i][j]);
}
printf("\n平均成绩:\n%.1f",aver/5.0);
}
}
printf("\n平均成绩在90分以上的学生为:\n");
int count=0;
for(i=0;i<4;i++){
aver=0;
for(j=0;j<5;j++){
aver+=arr[i][j];
}
if(aver/5>90.0){
printf("00%d",e[i]);
count++;
if(count>0&&count<2){
printf(" ");
}
}
}
printf("\n全部课程成绩在85分以上的学生为:\n");
for(i=0;i<4;i++){
int isPrime=1;
for(j=0;j<5;j++){
if(arr[i][j]<85.0){
isPrime=0;
break;
}
}
if(isPrime){
printf("00%d",e[i]);
}
}
}
/********** End **********/