题目一:按要求将程序补充完整。有n个整数,使前面各数顺序向后移动m个位置,余下n-m个数变成最前面的数。写一个函数void moveNumber(int *pnum,int n,int m)实现以上功能。
程序代码:
#include
#define MAXNUM 100
main()
{
int num[MAXNUM],*pnum,n,m,i;
void moveNumber(int *pnum,int n,int m);
printf("请输入数组长度n(n<%d)",MAXNUM);
scanf("%d",&n);
printf("请输入需移动数的个数m(m
题目二:指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出。(提示可以编写一个交换函数swap(int *a,int *b)来实现)
程序代码:
#include
int main()
{
char name[20]="DELHIk";
int length;
char*cptr=name;/*这里是将字符数组s的首地址赋给指针p,就是指针p指向字符数组*/
while(1)
{
if(*cptr !='\0')/*cptr指向字符数组的结束符‘\0’的地址,而s为字符数组的首地址*/
{
length++;
cptr++;
}
else
break;
}
printf("字符串长度为:%d",length=cptr-name);/*二者相减可以得出两个地址之间的字符个数,就是被测字符数组的长度*/
return 0;
}
题目三:输入n(不大于20)个单精度数存入一维数组,用指针变量处理数组元素的方式将其逆序存放后输出,n从键盘输入。
程序代码:
#include
int main()
{
char name[20]="DELHIk";
int length;
char*cptr=name;/*这里是将字符数组s的首地址赋给指针p,就是指针p指向字符数组*/
while(1)
{
if(*cptr !='\0')/*cptr指向字符数组的结束符‘\0’的地址,而s为字符数组的首地址*/
{
length++;
cptr++;
}
else
break;
}
printf("字符串长度为:%d",length=cptr-name);/*二者相减可以得出两个地址之间的字符个数,就是被测字符数组的长度*/
return 0;
}
调试错误:
错误一:[Error] cannot convert 'float*' to 'int*' for argument '1' to 'void oppsite(int*, int)'
更正错误:第一次定义函数声明时将数组名和另一变量(本来应该都是一个变量)搞混,在后面进行函数调用时发现牛不对马嘴,调用时写的是函数定义的另一变量,改正后写成数组名;在初函数定义时将定义类型写成了int 后面调用发现错误,因为在main内又定义数组名为float型,调用不了,将函数定义改成了float
错误二:[Error] declaration of 'int N' shadows a parameter
更正错误:这里忽略了主函数已经定义N,在oppsite函数中又重新定义一个一样的N变量,导致错误,换一个变量进行定义
错误三:[Error] ld returned 1 exit status
更正错误:在oppsite函数调用时将形参定义为int导致错误,更改为float
题目四:已知,char name[20]="DELHIk";int length;char*cptr=name;,编写程序,使用指针来确定字符串的长度。
程序代码:
#include
int main()
{
char name[20]="DELHIk";
int length;
char*cptr=name;/*这里是将字符数组s的首地址赋给指针p,就是指针p指向字符数组*/
while(1)
{
if(*cptr !='\0')/*cptr指向字符数组的结束符‘\0’的地址,而s为字符数组的首地址*/
{
length++;
cptr++;
}
else
break;
}
printf("字符串长度为:%d",length=cptr-name);/*二者相减可以得出两个地址之间的字符个数,就是被测字符数组的长度*/
return 0;
}
调试错误:无
调试结果:
题目五:编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。
程序代码:
#include
#include
char *getmonth(int n);
int main()
{
char *month[12]={"January","February","march","April","may","June","July","August","September","October","November"," December"};
int n ;
printf("请输入1-12数字:");
scanf("%d",&n);
while(1)
{
if(n>12||n<1)
{
printf("输入错误,请检查!\n");
}
printf("%s\n",month[n-1]);
return 0;
}
}
调试错误:
错误一:[Error] lvalue required as decrement operand
更改错误:将month【month--】改成month【n--】
调试结果:
题目六:学生信息统计
程序代码:
#include
#include
#include
#define N 10
#define M 3
#define H 10
//按照顺序为project1为高数 project2英语 project3 C语言
typedef struct student
{
long num;//xuehao
char name[10];
int score[M];
char sex[10];
char age[H];
}inform;
void Input (inform stu[],int n,int m);//shuru
void totalc (inform stu[],int n,int m);//meimenkechen
void everystu (inform stu[],int n,int m);
void ranking (inform stu[],int n,int m);
void statistis (inform stu[],int n,int m);
void List (inform stu[],int n,int m);
int main()
{
int n,c,m;
char name[10];
inform stu[N];
printf("输入学生人数:");
scanf("%d",&n);
printf("输入考试科目:");
scanf("%d",&m);
printf("1.输入信息\n");
printf("2.计算每门科目的总分和平均分\n");
printf("3.每个学生的考试情况\n");
printf("4.查看排名\n");
printf("5.查看成绩占比\n");
printf("6.全部输出\n");
printf("0.Exit\n");
printf("请输入序号:\n");
printf("\n");
for(;;)
{
scanf("%d",&c);
switch(c)
{
case 1: //录入学生信息和各科成绩
Input (stu,n,m);
printf("请输入序号:\n");
break;
case 2: //计算每门课程的总分和平均分
totalc (stu,n,m);
printf("请输入序号:\n");
break;
case 3: //计算每个学生的总分和平均分
everystu (stu,n,m);
printf("请输入序号:\n");
break;
case 4: //按每个学生的总分由高到低排出名次表
ranking (stu,n,m);
printf("请输入序号:\n");
break;
case 5: //成绩分析 所占百分比
statistis (stu,n,m);
printf("请输入序号:\n");
break;
case 6: //全部输出
List (stu,n,m);
totalc (stu,n,m);
printf("请输入序号:\n");
break;
case 0:
exit(0);
}
}
return 0;
}
void Input (inform stu[],int n,int m) //1
{
int i,j;
for(i=0;isum[k])
k=j;
}
if(i!=k)
{
t=stu[i],h=sum[i];
stu[i]=stu[k],sum[i]=sum[k];
stu[k]=t,sum[k]=h;
}
}
for(i=0;i=90)
a++;
else if(stu[i].score[j]>=80)
b++;
else if(stu[i].score[j]>=70)
c++;
else if(stu[i].score[j]>=60)
d++;
else
e++;
}
A=(double)a/n*100;
B=(double)b/n*100;
C=(double)c/n*100;
D=(double)d/n*100;
E=(double)e/n*100;
printf("project %d\n",j+1);
printf("优秀人数%d,百分比:%f%%\n",a,A);
printf("良好人数%d,百分比:%f%%\n",b,B);
printf("中等人数%d,百分比:%f%%\n",c,C);
printf("及格人数%d,百分比:%f%%\n",d,D);
printf("不及格人数%d,百分比:%f%%\n",e,E);
}
}
void List (inform stu[],int n,int m)
{
int i,j,sum[N];
double ave[N];
for(i=0;i
调试错误:
错误一:年龄输出为随机数
更改错误:实在是不知道怎么改了,把数字输入改为了字符输入避免了输出的时候随机值的生成
错误二:[Error] expected primary-expression before '[' token
更改错误:修改结构体内容,定义更为详细,防止结构体内的信息被当成别名
错误三:[Error] expected ',' or '...' before numeric constant
更改错误:定义了两个相同变量,更改其中一个变量名
调试结果: