C语言复习题指针结构体
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c = Add(a, b);
printf("a = "); OutputCoord(a); putchar('\n');
printf("b = "); OutputCoord(b); putchar('\n');
printf("c = "); OutputCoord(c); putchar('\n');
#include <stdio.h>
void invert(int *s, int num);
int main( )
{
int i, n=5, a[5]={1,2,3,4,5};
1; //调用函数逆序
for(i=0;i<5;i++)
2;//输出逆序后的数组元素
return 0;
}
void invert(int *s, int num)
{
int *t,k;
t=s+num;
while(3)
{
k=*s;
*s=*t;
*t=k;
4 ;
5 ;
}
}
答:(1)invert(a,n-1);(2)printf(“%4d”,a[i]) (3) s<t(4)s++ (5) t--
三、程序改错
1、以下程序的功能是:输入两实参a, b,调用函数fun后,输出a,b的值已进行交换。
};
void InputComplex(struct COMPLEX *p)
{
scanf("%lg %lg", &p->re, &p->im);
}
void OutputCoord(struct COMPLEX p)
{
printf("%lg%+lgi", p.re, p.im);
}
struct COMPLEX Add(struct COMPLEX p, struct COMPLEX q)
return 0;
}
答:
a = ?34
b = ?58
a =3+4i
b =5+8i
c =8+12i
5、
#include <stdio.h>
struct date
{
int year;
int month;
int day;
};
void func(struct date *p)
{
p->year = 2000;
⑧scanf("%d%d",a,b);
⑨printf("a=%d b=%d\n\n",a,b);
⑩fun(a,b);
printf("a=%d b=%d\n\n",a,b);
return0;
}
1、第2行改为int fun(int *x, int *y)
2、第4行改为t=*x;
3、第5行改为*x=*y;
double MaxArray(double *p, int n);
double SumArray(double *p, int n);
#include <stdio.h>
void InputArray(double *p, int n);
double MaxArray(double *p, int n);
仔细阅读程序,请先指出错误行号,并改正使它能得出正确的结果。
注意:不要改动main函数,不得增或删行,也不得更改程序的结构!
①#include<stdio.h>
②void fun(int *x,*y)
③{ int t;
④t=x;
⑤x=y;
⑥y=t;
}
intmain( )
{ int a,b;
⑦printf("Enter a,b: ");
p->month = 5;
p->day = 22;
}
int main()
{
struct date d;
d.year = 1999;
d.month = 4;
d.day = 23;
printf("%d,%d,%d\n",d.year, d.month, d.day);
func(&d);
printf("%d,%d,%d\n",d.year, d.month, d.day);
4、第6行改为*y=t;
4、第8行改为scanf("%d%d",&a,&b);
5、第10行改为fun(&a,&b);
四、写出程序运行结果
1、仔细阅读下面的程序,假设时间a是07:59:59,时间b是08:10:02,请写出程序的输入和输出结果。
#include <stdio.h>
struct TIME
printf("*y = %d\n", *y);
}
答:
x=10
*Y=10
*Y=20
X=20
4、仔细阅读下面的程序,当复数a为3+4i, b为5+8i时,请写出程序的输入和输出结果。
#include <stdio.h>
#include <math.h>
struct COMPLEX
{
double re, im;
A)*pB) a[10]C)*aD)a[p-a]
3、已知int *p,a; p=&a;这里的运算符&的含义D。
A)位与运算B)逻辑与运算C)取指针内容D)取变量地址
4、定义结构体如下:
struct student
{int num;
char name[4];
int age;
};
则printf(“%d”,sizeof(struct student))的结果为:12。
{
int hour, minute, second;
};
void InputTime(struct TIME *p)
{
scanf("%d:%d:%d", &p->hour, &p->minute, &p->second);
}
void OutputTime(struct TIMEp)
{
printf("%02d:%02d:%02d",p.hour,p.minute,p.second);
}
int main()
{
struct TIME a, b;
intr;
printf("a = ? ");InputTime(&a);
printf("b = ? ");InputTime(&b);
r= Sub(b,a);
printf("a = ");OutputTime(a);putchar('\n');
double SumArray(double *p, int n);
int main()
{
double a[100];
int n;
printf("n = ? ");
scanf("%d", &n);
InputArray(a, n);
#includቤተ መጻሕፍቲ ባይዱ "string.h"
intmain ( )
{
int i,n;
char *s="abcdef123";
n=strlen(s);
for (i=n-1;i>=0;i--)
printf("%c",*(s+i));
return 0;
}
答:321fedcba
3、
#include<stdio.h>
{
struct COMPLEX r;
r.re = p.re + q.re;r.im = p.im + q.im;
return r;
}
int main()
{
struct COMPLEX a, b, c;
printf("a = ? "); InputComplex(&a);
printf("b = ? "); InputComplex(&b);
D)s1.strcpy(y,”abc”);
9、已知定义“int x=1, *p”,则合法的赋值表达式是A。
A)p=&xB)p = xC)*p=&xD)*p=*x
10、在C语句中,&后跟指针变量名,表示该指针变量的C。
A)值B)别名C)地址D)类型
二、程序填空
1、下面程序的功能是实现数组元素中值的逆序。
scanf("%d", &n);
InputArray(a, n);
SortArray(a, n);
OutputArray(a, n);
return 0;
}
void InputArray(double *p, int n)
{
int k;
for (k = 0; k < n; k ++)
{
scanf("%lg", &p[k]);
}
}
void OutputArray(const double *p, int n)
{
int k;
for (k = 0; k < n; k ++)
{
printf("%lg ", p[k]);
}
putchar('\n');
}
void SortArray(double *p, int n)
{
int i, j;
C)系统会按最大成员大小分配空间
D)以上说法均不正确
7、指针是一种D。
A)标识符B)变量C)运算符D)内存地址
8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。
A)s1.y=”abc”;
B)s1->y=”abc”;
C)strcpy(s1.y,”abc”);
}
int Sub(struct TIME x, struct TIME y)
{
int t1 = x.hour * 3600 + x.minute * 60 + x.second;
int t2 = y.hour * 3600 + y.minute * 60 + y.second;
return t1 - t2;
printf("b = ");OutputTime(b);putchar('\n');
printf("r= %d\n",r);
return 0;
}
答:a = ? 7:59:59
b = ? 8:10:02
a = 07:59:59
b = 08:10:02
r = 603
2、
#include <stdio.h>
void OutputArray(const double *p, int n);
void SortArray(double *p, int n);
void Swap(double *x, double *y);
int main()
{
double a[100];
int n;
printf("n = ? ");
5、若有定义如下:int i=3,*p=&i;显示i的值的正确语句是B。
A)printf(“%d”,p);
B)printf(“%d”,*p);
C)printf(“%p”,*p);
D)printf(“%p”,p);
6、在定义结构体时,下列叙述正确的是A。
A)系统不会分配空间
B)系统会按成员大小分配空间
C语言复习题_指针&结构体
一、选择
1、若有以下定义:char s[20]="programming",*ps=s;则不能代表字符'o'的表达式是A。
A) ps+2B)s[2]C) ps[2] D)ps+=2,*ps
2、若有以下定义和语句:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是B。
for (i = n - 1; i > 0; i --)
{
for (j = 0; j < i; j ++)
{
if (p[j]<p[j + 1])
{
Swap(&p[j], &p[j + 1]);
}
}
}
}
void Swap(double *x, double *y)
{
double t;
t = *x; *x = *y; *y = t;
}
2、编写程序,输入一组正实数,然后输出其中的最大值和总和。
例如: (虚线部分为用户输入的内容)
n = ? 9
6.92.53.87.11.64.38.25.49.7
最大值= 9.7
总和= 49.5
要求:编写下面的三个函数,分别完成输入、求最大值、总和的功能,并编写主函数,完成整个程序。
void InputArray(double *p, int n);
void InputArray(double *p, int n);
void OutputArray(const double *p, int n);
void SortArray(double *p, int n);
#include <stdio.h>
void InputArray(double *p, int n);
void Fun(int *y);
int main ( )
{
int x = 10;
printf("x = %d\n", x);
Fun(&x);
printf("x = %d\n", x);
return 0;
}
void Fun(int *y)
{
printf("*y = %d\n", *y);
*y = 20;
return 0;
}
答:
1999,4,23
2000,5,22
五、程序设计
1、编写程序,输入一组正实数,按降序从大到小排序,然后输出。
例如: (虚线部分为用户输入的内容)
n = ? 9
6.92.53.87.11.64.38.25.49.7
9.78.27.16.95.44.33.82.51.6
要求:编写下面三个函数,分别完成输入、排序和输出的功能,并编写主函数,完成整个程序(可以增加一些辅助函数)。
printf("a = "); OutputCoord(a); putchar('\n');
printf("b = "); OutputCoord(b); putchar('\n');
printf("c = "); OutputCoord(c); putchar('\n');
#include <stdio.h>
void invert(int *s, int num);
int main( )
{
int i, n=5, a[5]={1,2,3,4,5};
1; //调用函数逆序
for(i=0;i<5;i++)
2;//输出逆序后的数组元素
return 0;
}
void invert(int *s, int num)
{
int *t,k;
t=s+num;
while(3)
{
k=*s;
*s=*t;
*t=k;
4 ;
5 ;
}
}
答:(1)invert(a,n-1);(2)printf(“%4d”,a[i]) (3) s<t(4)s++ (5) t--
三、程序改错
1、以下程序的功能是:输入两实参a, b,调用函数fun后,输出a,b的值已进行交换。
};
void InputComplex(struct COMPLEX *p)
{
scanf("%lg %lg", &p->re, &p->im);
}
void OutputCoord(struct COMPLEX p)
{
printf("%lg%+lgi", p.re, p.im);
}
struct COMPLEX Add(struct COMPLEX p, struct COMPLEX q)
return 0;
}
答:
a = ?34
b = ?58
a =3+4i
b =5+8i
c =8+12i
5、
#include <stdio.h>
struct date
{
int year;
int month;
int day;
};
void func(struct date *p)
{
p->year = 2000;
⑧scanf("%d%d",a,b);
⑨printf("a=%d b=%d\n\n",a,b);
⑩fun(a,b);
printf("a=%d b=%d\n\n",a,b);
return0;
}
1、第2行改为int fun(int *x, int *y)
2、第4行改为t=*x;
3、第5行改为*x=*y;
double MaxArray(double *p, int n);
double SumArray(double *p, int n);
#include <stdio.h>
void InputArray(double *p, int n);
double MaxArray(double *p, int n);
仔细阅读程序,请先指出错误行号,并改正使它能得出正确的结果。
注意:不要改动main函数,不得增或删行,也不得更改程序的结构!
①#include<stdio.h>
②void fun(int *x,*y)
③{ int t;
④t=x;
⑤x=y;
⑥y=t;
}
intmain( )
{ int a,b;
⑦printf("Enter a,b: ");
p->month = 5;
p->day = 22;
}
int main()
{
struct date d;
d.year = 1999;
d.month = 4;
d.day = 23;
printf("%d,%d,%d\n",d.year, d.month, d.day);
func(&d);
printf("%d,%d,%d\n",d.year, d.month, d.day);
4、第6行改为*y=t;
4、第8行改为scanf("%d%d",&a,&b);
5、第10行改为fun(&a,&b);
四、写出程序运行结果
1、仔细阅读下面的程序,假设时间a是07:59:59,时间b是08:10:02,请写出程序的输入和输出结果。
#include <stdio.h>
struct TIME
printf("*y = %d\n", *y);
}
答:
x=10
*Y=10
*Y=20
X=20
4、仔细阅读下面的程序,当复数a为3+4i, b为5+8i时,请写出程序的输入和输出结果。
#include <stdio.h>
#include <math.h>
struct COMPLEX
{
double re, im;
A)*pB) a[10]C)*aD)a[p-a]
3、已知int *p,a; p=&a;这里的运算符&的含义D。
A)位与运算B)逻辑与运算C)取指针内容D)取变量地址
4、定义结构体如下:
struct student
{int num;
char name[4];
int age;
};
则printf(“%d”,sizeof(struct student))的结果为:12。
{
int hour, minute, second;
};
void InputTime(struct TIME *p)
{
scanf("%d:%d:%d", &p->hour, &p->minute, &p->second);
}
void OutputTime(struct TIMEp)
{
printf("%02d:%02d:%02d",p.hour,p.minute,p.second);
}
int main()
{
struct TIME a, b;
intr;
printf("a = ? ");InputTime(&a);
printf("b = ? ");InputTime(&b);
r= Sub(b,a);
printf("a = ");OutputTime(a);putchar('\n');
double SumArray(double *p, int n);
int main()
{
double a[100];
int n;
printf("n = ? ");
scanf("%d", &n);
InputArray(a, n);
#includቤተ መጻሕፍቲ ባይዱ "string.h"
intmain ( )
{
int i,n;
char *s="abcdef123";
n=strlen(s);
for (i=n-1;i>=0;i--)
printf("%c",*(s+i));
return 0;
}
答:321fedcba
3、
#include<stdio.h>
{
struct COMPLEX r;
r.re = p.re + q.re;r.im = p.im + q.im;
return r;
}
int main()
{
struct COMPLEX a, b, c;
printf("a = ? "); InputComplex(&a);
printf("b = ? "); InputComplex(&b);
D)s1.strcpy(y,”abc”);
9、已知定义“int x=1, *p”,则合法的赋值表达式是A。
A)p=&xB)p = xC)*p=&xD)*p=*x
10、在C语句中,&后跟指针变量名,表示该指针变量的C。
A)值B)别名C)地址D)类型
二、程序填空
1、下面程序的功能是实现数组元素中值的逆序。
scanf("%d", &n);
InputArray(a, n);
SortArray(a, n);
OutputArray(a, n);
return 0;
}
void InputArray(double *p, int n)
{
int k;
for (k = 0; k < n; k ++)
{
scanf("%lg", &p[k]);
}
}
void OutputArray(const double *p, int n)
{
int k;
for (k = 0; k < n; k ++)
{
printf("%lg ", p[k]);
}
putchar('\n');
}
void SortArray(double *p, int n)
{
int i, j;
C)系统会按最大成员大小分配空间
D)以上说法均不正确
7、指针是一种D。
A)标识符B)变量C)运算符D)内存地址
8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。
A)s1.y=”abc”;
B)s1->y=”abc”;
C)strcpy(s1.y,”abc”);
}
int Sub(struct TIME x, struct TIME y)
{
int t1 = x.hour * 3600 + x.minute * 60 + x.second;
int t2 = y.hour * 3600 + y.minute * 60 + y.second;
return t1 - t2;
printf("b = ");OutputTime(b);putchar('\n');
printf("r= %d\n",r);
return 0;
}
答:a = ? 7:59:59
b = ? 8:10:02
a = 07:59:59
b = 08:10:02
r = 603
2、
#include <stdio.h>
void OutputArray(const double *p, int n);
void SortArray(double *p, int n);
void Swap(double *x, double *y);
int main()
{
double a[100];
int n;
printf("n = ? ");
5、若有定义如下:int i=3,*p=&i;显示i的值的正确语句是B。
A)printf(“%d”,p);
B)printf(“%d”,*p);
C)printf(“%p”,*p);
D)printf(“%p”,p);
6、在定义结构体时,下列叙述正确的是A。
A)系统不会分配空间
B)系统会按成员大小分配空间
C语言复习题_指针&结构体
一、选择
1、若有以下定义:char s[20]="programming",*ps=s;则不能代表字符'o'的表达式是A。
A) ps+2B)s[2]C) ps[2] D)ps+=2,*ps
2、若有以下定义和语句:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是B。
for (i = n - 1; i > 0; i --)
{
for (j = 0; j < i; j ++)
{
if (p[j]<p[j + 1])
{
Swap(&p[j], &p[j + 1]);
}
}
}
}
void Swap(double *x, double *y)
{
double t;
t = *x; *x = *y; *y = t;
}
2、编写程序,输入一组正实数,然后输出其中的最大值和总和。
例如: (虚线部分为用户输入的内容)
n = ? 9
6.92.53.87.11.64.38.25.49.7
最大值= 9.7
总和= 49.5
要求:编写下面的三个函数,分别完成输入、求最大值、总和的功能,并编写主函数,完成整个程序。
void InputArray(double *p, int n);
void InputArray(double *p, int n);
void OutputArray(const double *p, int n);
void SortArray(double *p, int n);
#include <stdio.h>
void InputArray(double *p, int n);
void Fun(int *y);
int main ( )
{
int x = 10;
printf("x = %d\n", x);
Fun(&x);
printf("x = %d\n", x);
return 0;
}
void Fun(int *y)
{
printf("*y = %d\n", *y);
*y = 20;
return 0;
}
答:
1999,4,23
2000,5,22
五、程序设计
1、编写程序,输入一组正实数,按降序从大到小排序,然后输出。
例如: (虚线部分为用户输入的内容)
n = ? 9
6.92.53.87.11.64.38.25.49.7
9.78.27.16.95.44.33.82.51.6
要求:编写下面三个函数,分别完成输入、排序和输出的功能,并编写主函数,完成整个程序(可以增加一些辅助函数)。