纠错:
6.下列程序的输出结果是(C)B
#include<stdio.h>
int main()
{
int **k,*a,b=100;
a=&b;
k=&a;
printf("%d\n",**k);
}
A、运行出错 B、100 C、a的地址 D、b的地址
K是a的地址 *K是a的内容(b的地址) **K是b的内容
7.下列程序的输出结果是(D)A
#include <stdio.h>
fun(int *a,int *b){
int *w;
*a=*a+*a;
*w=*a;
*a=*b;
*b=*w;
}
int main()
{
int x=9,y=5,*px=&x,*py=&y;
fun(px,py);
printf("%d,%d\n",x,y);
return 0;
}
A、出错 B、18,5 C、5,9 D、5,18
fun里面定义的指针w,没有指向,是野指针
8.若定义了以下函数
void f(......)
{
......
p=(double *)malloc(10*sizeof(double));
......
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是 (C) A
A、double *p B、float **p C、double **p D、float *p
P此时是指针,接收应该是指针接收就行
16.下列描述中不正确的是(B)C
A、字符型数组中可以存放字符串
B、可以对字符型数组进行整体输入、输出
C、可以对整型数组进行整体输入、输出
D、不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值
字符型数组整体输入输出 gets puts;
19.有以下程序
#include <stdio.h>
int main()
{
int a[]={2,4,6,8},*p=a,i
for(i=0;i<4;i++){
a[i]=*p++;
}
printf("%d\n",a[2]);
return 0;
}
程序运行结果是(C)D
A、2 B、8 C、4 D、6
*p++等同于 先*p 然后p++进行自增;当时理解为先去*p,然后*p=*p+1
日常练习
1.1.有5个学生, 每个学生有3门课程的成绩,从键盘输人学生数据(包括学号,姓名,3
门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。
2.将第1题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据
存入一个新文件“stu. sort" 中。
3.将第2题已排序的学生成绩文件进行插人处理。插人一个学生的3门课程成缋,程
序先计算新插人学生的平均成绩,然后将它按成绩高低顺序插人,插人后建立一个新文件。
4.将第3题结果仍存入原有的“stu_ sort"文件而不另建立新文件。
#include <stdio.h>
/*
1.有5个学生, 每个学生有3门课程的成绩,从键盘输人学生数据(包括学号,姓名,3
门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。
2.将第1题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据
存入一个新文件“stu. sort" 中。
3.将第2题已排序的学生成绩文件进行插人处理。插人一个学生的3门课程成缋,程
序先计算新插人学生的平均成绩,然后将它按成绩高低顺序插人,插人后建立一个新文件。
4.将第3题结果仍存入原有的“stu_ sort"文件而不另建立新文件。
*/
typedef struct
{
long long int num;
char name[20];
float grades_1;
float grades_2;
float grades_3;
float avg;
}Stu;
FILE *fp=NULL;
void scan(Stu stu[])
{
int i;
for(i=0;i<5;i++)
{
printf("请输入学生数据,依次为学号、姓名、三门课成绩:\n");
scanf("%lld %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].grades_1,&stu[i].grades_2,&stu[i].grades_3);
stu[i].avg=(stu[i].grades_1+stu[i].grades_2+stu[i].grades_3)/3;
}
}
void write_1(Stu stu[])//原有数据和计算出的平均分数存放在磁盘文件“stud.txt”中。
{
fp=fopen("stud.txt","w");
int i;
for(i=0;i<5;i++)
{
fprintf(fp,"%lld %s %.2f %.2f %.2f %.2f\n",stu[i].num,
stu[i].name,stu[i].grades_1,stu[i].grades_2,stu[i].grades_3,stu[i].avg);
}
fclose(fp);
}
void sort(Stu stu[],int n)
{
int i,j;
Stu temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stu[j].avg<stu[j+1].avg)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
}
void write_2(Stu stu[],int n)//原有数据和计算出的平均分数存放在磁盘文件“stu_sort.txt”中。
{
fp=fopen("stu_sort.txt","w");
int i;
for(i=0;i<n;i++)
{
fprintf(fp,"%lld %s %.2f %.2f %.2f %.2f\n",stu[i].num,
stu[i].name,stu[i].grades_1,stu[i].grades_2,stu[i].grades_3,stu[i].avg);
}
fclose(fp);
}
void add(Stu stu[])
{
printf("请输入添加的学生数据,依次为学号、姓名、三门课成绩:\n");
scanf("%lld %s %f %f %f",&stu[5].num,stu[5].name,&stu[5].grades_1,&stu[5].grades_2,&stu[5].grades_3);
stu[5].avg=(stu[5].grades_1+stu[5].grades_2+stu[5].grades_3)/3;
fp=fopen("new.txt","w");
fprintf(fp,"%lld %s %.2f %.2f %.2f %.2f\n",stu[5].num,
stu[5].name,stu[5].grades_1,stu[5].grades_2,stu[5].grades_3,stu[5].avg);
fclose(fp);
}
int main()
{
Stu stu[6]={0};
scan(stu);
write_1(stu);
sort(stu,5);
write_2(stu,5);
add(stu);
sort(stu,6);
write_2(stu,6);
FILE *fp=NULL;
return 0;
}
2.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见
图, 写一函数实现以上功能,在主函数中输人n个整数和输出调整后的n个数。
#include <stdio.h>
#include <string.h>
/*
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见
图, 写一函数实现以上功能,在主函数中输人n个整数和输出调整后的n个数。
*/
int main()
{
int m,n;
printf("请输入你要写入多少个整数\n");
scanf("%d",&n);
getchar();
char num_1[n];
char num_2[n];
printf("请输入你要写入的整数:\n");
gets(num_1);
printf("向后位移多少位\n");
scanf("%d",&m);
int i;
for(i=0;i<m;i++,n++)
{
num_2[i]=num_1[n-m];
}
for(i=0;i<n-2*m;i++)
{
num_2[m+i]=num_1[i];
}
puts(num_2);
return 0;
}