指针和结构体练习题.
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 *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 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;
scanf("%d", &n);
InputArray(a, n);
SortArray(a, n);
OutputArray(a, n);
return 0;
}
void InputArray(double *p, int n)
c语言练习题7(指针与结构体,有答案)
1、下列程序的运行结果是_B______。
void fun(int *a,int *b){int *k:k=a;a-b;b=k;}main(){int a=3,b=6,*x=&a,*y=&b;fun(x,y);printf[”%d%d.f,a,b);}A)6 3 B)36 C)编译出错 D)0 0PS:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。
2、若有定义:int*p[3];,则以下叙述中正确的是____B____。
A)定义了一个基类型为int的指针变量p,该变量有三个指针B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针C)定义了一个名为+p的整型数组,该数组含有三个int类型元素D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素PS:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p 的三个元素都是指针变量,且每个元素都是基类型为int的指针。
3、有以下程序:void swapl(int *a,int *b){int *c=a;a=b,b=c;}void swap2(int *a,int *b){int c=*a:*a=*b,*b=c;}main()(int a=lO,b=15;swapl(&a,&b);printf(”%d,%d,”,a,b);a=lO,b=15;swap2(&a,&b);printf(”%d,%dt.,a,b);}其输出结果为_10,15,15,10___。
A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10PS:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。
c++指针类练习题及答案
c++指针类练习题及答案1、利用指针,编写用于交换两个整型变量值的函数。
程序运行结果如下:输入:5 6输出:6 5#includeusing namespace std;void swap(int *xp,int *yp){int tmp;tmp=*xp;*xp=*yp;*yp=tmp;}int main(){int a,b;cin>>a>>b;swap(&a,&b);cout<<a<<" "<<b<<endl;<="" bdsfid="81" p=""></a<<"> return 0;}2、编写主程序,将输入字符串反序输出。
程序运行结果如下:输入:ABCDEFGHIJK输出:KJIHGFEDCBA#include#includeusing namespace std;int main(){char str[100];cin>>str;int len;len=strlen(str);char *p=&str[len-1];while(p>=str){cout<<*p;p--;}cout<<endl;< bdsfid="105" p=""></endl;<>return 0;}3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。
程序的运行结果如下所示:输入(第一个数是序列的长度):62 7 2 23 1输出:1 2 2 2 3 7#includeusing namespace std;void selectsort(int *list,int count){for(int i=0;i<count-1;i++)< bdsfid="122" p=""></count-1;i++)<>{int k=i;for(int j=i+1;j<count;j++)< bdsfid="126" p=""></count;j++)<>if(*(list+j)<*(list+k))k=j;if(k!=i){int tmp=*(list+i);*(list+i)=*(list+k);*(list+k)=tmp;}}}int main(){int n;cin>>n;int array[20];for(int j=0;j<n;j++)< bdsfid="142" p=""></n;j++)<>cin>>array[j];selectsort(array,n);for(int i=0;i<n;i++)< bdsfid="146" p=""></n;i++)<>cout<<array[i]<<" ";<="" bdsfid="148" p=""></array[i]<<"> return 0;}4、用指针编写一个对整型数组进行冒泡排序函数。
指针基础练习题
指针基础练习题
指针是C语言中非常重要的概念之一,掌握指针的基本使用方法对于理解和编写复杂的程序至关重要。
本文将提供一些指针的基础练习题,帮助读者巩固和提升对指针的理解和应用。
请读者根据每个题目的要求完成代码,并注明每一步的思路和解答。
题目一:交换两个变量的值
要求:编写一个函数,使用指针交换两个整数变量的值,并在主函数中调用该函数进行测试。
题目二:计算数组元素的平均值
要求:编写一个函数,使用指针计算给定整型数组的元素平均值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目三:查找数组中的最大值和最小值
要求:编写一个函数,使用指针查找给定整型数组中的最大值和最小值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目四:字符串反转
要求:编写一个函数,使用指针将输入的字符串反转,并在主函数中调用该函数进行测试。
要求不能使用任何库函数。
题目五:动态分配内存
要求:编写一个函数,使用指针动态分配内存,在堆中存储指定数量的整型数据,并在主函数中调用该函数进行测试。
要求用户输入存储的整数个数,然后输入每个整数。
题目六:指针数组的排序
要求:编写一个函数,通过指针数组实现对字符串数组的排序,并在主函数中调用该函数进行测试。
要求用户输入字符串的个数和每个字符串的值。
以上是指针基础练习题的要求和内容,通过完成这些题目,读者可以加深对指针概念和使用方法的理解,在实际编程中能够熟练地运用指针操作。
希望读者能够通过不断的练习和实践,掌握指针的应用技巧,并在编程中取得更好的成果。
c语言2019课外作业4
第 8、9、11 章 结构体、指针、文件练习题
一、选择题 1.下面对结构数据类型的错误叙述是______。
A.结构变量可以在说明结构类型后定义,也 可在说明结构时定义。
B.结构可由若干个成员组成,各成员的数据 类型可以不同。
C.定义一个结构类型后,编译程序要为结构 的各成员分配存储空间。
s2 的长,函数值为 1,否则函数值为 0
B.FILE *fp ; fp = fopen( "file1.txt" , "r+" ) ;
15.下列关于 C 语言数据文件的叙述中正确的是
C.FILE *fp ; fp = fopen( "file1.txt" , "rb" ) ;
_______。
D.FILE *fp ; fp = fopen( "file1.txt" , "rb+" ) ;
A.printf( "%c\n" , stu[2].name ) ; B.printf( "%c\n" , stu[2].name[1] ) ; C.printf( "%c\n" , stu[1].name[1] ) ; D.printf( "%c\n" , stu[1].name[0] ) ; 6.若已定义 int a = 5 ; 下面对 ①、② 两个语句的 正确解释是_______。 ① int *p = &a ; ② *p = a ; A.语句①和②中的*p 含义相同,都表示给指
24.读取二进制文件的函数调用形式为:
exit( 0 ) ; }
fread( buffer , size , count , fp ) ;其中参数 buffer
c 指针练习题
c 指针练习题C指针练习题C语言中的指针是一种强大而又复杂的概念。
它允许我们直接访问内存中的数据,并对其进行操作。
然而,由于指针的灵活性和复杂性,很多初学者在使用指针时会遇到困惑和错误。
为了帮助大家更好地理解和应用指针,下面将给出一些C指针的练习题。
1. 交换两个变量的值这是一个经典的C指针练习题。
请编写一个函数,接受两个整数指针作为参数,并交换这两个指针所指向的变量的值。
例如,如果输入为a=3,b=5,调用函数后,a=5,b=3。
2. 求字符串的长度请编写一个函数,接受一个字符串指针作为参数,并返回该字符串的长度。
注意,字符串的长度是指字符串中字符的个数,不包括字符串结尾的空字符'\0'。
3. 查找数组中的最大值请编写一个函数,接受一个整型数组指针和数组的长度作为参数,并返回数组中的最大值。
提示:可以使用指针来遍历数组,并使用一个变量来保存当前的最大值。
4. 字符串拷贝请编写一个函数,接受两个字符指针作为参数,并将第一个字符串拷贝到第二个字符串中。
注意,第二个字符串必须具有足够的空间来存储第一个字符串的内容。
5. 动态分配内存请编写一个函数,接受一个整数作为参数,并动态分配一个大小为该整数的整型数组。
然后,将数组的每个元素初始化为其下标的平方,并返回指向该数组的指针。
注意,使用完数组后,必须释放动态分配的内存。
6. 字符串反转请编写一个函数,接受一个字符串指针作为参数,并将该字符串反转。
例如,如果输入为"hello",则函数应该将其改为"olleh"。
7. 指针数组排序请编写一个函数,接受一个字符串指针数组和数组的长度作为参数,并按照字母顺序对字符串进行排序。
提示:可以使用字符串比较函数strcmp来比较两个字符串的大小,并使用指针来交换字符串的位置。
8. 指向函数的指针请编写一个函数,接受一个整数和一个指向函数的指针作为参数,并使用该函数对整数进行处理。
c语言入门练习题
C语言入门练习题一、基础知识篇1.1 变量与常量1. 定义一个整型变量并赋值为10。
2. 声明一个浮点型常量,其值为3.14。
3. 将字符型变量 'A' 赋值给另一个字符型变量。
1.2 数据类型1. 将一个整型变量转换为浮点型变量。
2. 将一个长整型变量赋值给一个短整型变量。
3. 编写一个程序,输出不同数据类型所占的字节数。
1.3 运算符1. 计算5加3乘2的结果。
2. 判断两个整型变量是否相等。
3. 使用自增运算符使变量i的值增加1。
二、控制结构篇2.1 顺序结构1. 编写一个程序,输出1到10的整数。
2. 输出用户输入的两个整数中的较大值。
3. 计算并输出圆的面积(给定半径)。
2.2 选择结构1. 判断一个整数是正数、负数还是零。
2. 根据用户输入的成绩,输出对应的等级(A、B、C、D、E)。
3. 编写一个程序,实现石头剪刀布的游戏。
2.3 循环结构1. 计算1到100所有整数的和。
2. 输出所有的水仙花数(一个三位数,其各位数字的立方和等于该数本身)。
3. 使用循环结构输出九九乘法表。
三、函数篇3.1 函数定义与调用1. 编写一个函数,计算两个整数的和。
2. 定义一个函数,实现字符串的复制。
3. 创建一个函数,判断一个数是否为素数。
3.2 递归函数1. 使用递归函数计算斐波那契数列的第n项。
2. 编写一个递归函数,实现字符串的逆序输出。
3. 利用递归函数求解汉诺塔问题。
四、数组篇4.1 一维数组1. 初始化一个包含10个整数的数组,并输出其元素。
2. 计算一维数组中所有元素的和。
3. 找出一维数组中的最大值和最小值。
4.2 二维数组1. 创建一个3行4列的二维数组,并输出其元素。
2. 计算二维数组对角线元素的和。
3. 实现矩阵的转置。
五、指针篇5.1 指针基本操作1. 声明一个整型变量和一个指向该变量的指针,并输出指针所指向的值。
2. 使用指针实现两个整数的交换。
3. 编写一个函数,通过指针参数修改传入的字符串。
C语言指针精选习题和答案
C语言指针精选习题和答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb) {int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c); if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c); }二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20];while((s[i]=getchar())!='\n')i++; p=s;while(*p!=10){if(*p>='A'&&*p<='Z') a++;else if(*p>='a'&&*p<='z') b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9') d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }9.5写一个函数,将3 3矩阵转置 #include "stdio.h"void Transpose(int (*matrix)[3]) {int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数 #include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
指针经典练习题(含答案版)二
17.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读
入 3 个整数分别赋给变量 a,b,c 的语句是( A )
A)scanf(“%d%d%d”,&a,&b,d);
B)scanf(“%d%d%d”,&a,&b,&d);
C)scanf(“%d%d%d”,a,b,c);
D)scanf(“%d%d%d”,a,b,*d);
#include<stdio.h>
#include<string.h>
fun (char *w,int n)
{ char t,*s1,*s2;
s1= w; s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t}
}
main()
{char *p;
p=”12234567”;
2
A)1 2 3 4 B)4 3 2 1 C)0 0 0 0 D)4 4 4 4
27.说明语句 int *(*p)( )的含义(D)
A)p 是一个指向 int 型数组的指针
B)p 是指针变量,它构成了指针数组
C)p 是一个指向函数的指针,该函数的返回值是一个整
型
D)p 是一个指向函数的指针,该函数的返回值是一个
char str[ ]=”Hello”; char *ptr; ptr=str; 执行上面的程序段后,*(ptr+5)的值为( B) A)’o’ B)’/0’ C)不确定的值 D)’o’的地址 25.下面函数的功能是(B) sss(s,1) char *s,*t; { while((*s)&&(*t)&&(*t++=*s++));
(完整word版)C语言指针练习+答案+讲解
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
洛谷关于指针基础的题目
洛谷关于指针基础的题目指针是C语言中的一种数据类型,它用来存储变量的内存地址。
通过指针,我们可以直接访问和操作变量所在的内存,进而实现一些高级的功能,如动态内存分配、数据结构的实现等。
洛谷是一款在线的程序设计练习平台,提供了丰富的题目来帮助学习者提升编程能力。
关于指针基础的题目涉及到指针的定义、指针与数组、指针与函数等方面的知识。
下面是一些常见的指针题目及参考内容:1. 指针的定义和使用题目:请编写一个程序,使用指针来交换两个整数的值,并输出交换后的结果。
参考代码:```C#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int a = 3, b = 5;printf("Before swap: a = %d, b = %d\n", a, b);swap(&a, &b);printf("After swap: a = %d, b = %d\n", a, b);return 0;}```2. 指针与数组题目:请编写一个程序,使用指针来实现数组元素的逆序。
参考代码:```C#include <stdio.h>void reverse(int *array, int size) {int *start = array;int *end = array + size - 1;while (start < end) {int temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {int array[] = {1, 2, 3, 4, 5};int size = sizeof(array) / sizeof(int);printf("Before reverse: ");for (int i = 0; i < size; i++) {printf("%d ", array[i]);}printf("\n");reverse(array, size);printf("After reverse: ");for (int i = 0; i < size; i++) {printf("%d ", array[i]);}printf("\n");return 0;}```3. 指针与函数题目:请编写一个函数,接受一个整型数组和数组的大小,返回数组中的最大值和最小值。
C语言程序设计(判断题专项练习)及答案
计算机C语言(判断题专项练习)及答案一、基础知识(每小题1 分,共 10分)()1、程序调试就是找出并改正c源程序中的语法错误。
()2、一个变量的数据类型被强制转换后,它将保持被强制转换后的数据类型。
()3、在标准c语言中,共用体变量中的各成员是共同占用一块存储空间()4、赋值运算符的结合方向为自右向左。
()5、c语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。
()6、在c程序中, aph和Aph 是两个相同的变量()7、计算机语言(computer language)是人与计算机之间通讯的语言。
()8、在c语言中,当一个逻辑表达式的值为"假"时,该表达式的值一定是 0()9、在c程序中,abc与ABC是两个相同的变量。
()10、c语言中sizeof 是函数,而不是运算符。
二、控制结构(每小题1 分,共 10分)()1、if 语句后面的表达式只能是关系表达式()2、在switch语句中,可以根据需要使用或不使用break语句。
()3、在标准c中,逻辑表达式中只允许出现逻辑型数据。
()4、逻辑表达式的值只能为1或0。
()5、c程序中if语句可以单独存在。
()6、省略else的if语句的一般形式如下,若表达式的值为"真",则执行语句1;否则,就什么也不做。
if (表达式) 语句1()7、在if语句中,必须出现else。
()8、内层break语句可以终止嵌套的switch,使最外层的switch结束。
()9、switch语句中的default必须出现在所有case之后。
()10、switch语句中,每一个case的冒号后面都必须至少跟有一条语句。
三、循环结构(每小题1 分,共 10分)()1、for循环的三个表达式可以任意省略,while,do-while也是如此。
()2、选择结构( if 语句)和循环结构都可以使用嵌套形式()3、在循环过程中,使用break语句和continue语句的作用是一样的()4、无论哪种循环语句,都必须给出循环结束条件。
指针结构体
指针、结构体练习题一、选择题1.变量的指针,其含义是指该变量的。
A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是。
A)p=&n ; B)p = &n ;scanf(“%d”,&p); scanf(“%d”,*p);C)scanf(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是。
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正确的是。
A)char *a=”china”; 等价于char *a; *a=”china” ;B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}C)char *s=”china”; 等价于char *s; s=”china” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段中,for循环的执行次数是。
c语言程序设计第2版习题答案
c语言程序设计第2版习题答案1. 基础语法练习题- 题目:编写一个程序,计算并输出1到10的和。
- 答案:使用一个循环结构,累加1到10的数值。
```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 10; ++i) {sum += i;}printf("The sum from 1 to 10 is: %d\n", sum);return 0;}```2. 数组和字符串练习题- 题目:编写一个程序,找出一个字符串中出现次数最多的字符,并输出它。
- 答案:使用数组来统计每个字符的出现次数,然后找出最大值。
```c#include <stdio.h>#include <string.h>int main() {char str[] = "example string";int maxCount = 0;char maxChar = str[0];int charCount[256] = {0};for (int i = 0; str[i] != '\0'; ++i) {charCount[(int)str[i]]++;if (charCount[(int)str[i]] > maxCount) { maxCount = charCount[(int)str[i]];maxChar = str[i];}}printf("The most frequent character is: %c\n", maxChar);return 0;}```3. 函数和指针练习题- 题目:编写一个函数,交换两个整数的值。
- 答案:使用指针来实现参数的传递。
```c#include <stdio.h>void swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;}int main() {int a = 5, b = 10;printf("Before swap: a = %d, b = %d\n", a, b);swap(&a, &b);printf("After swap: a = %d, b = %d\n", a, b);return 0;}```4. 结构体和文件操作练习题- 题目:定义一个结构体,包含学生姓名、学号和成绩,编写程序,将学生信息存储到文件中。
C语言(指针与结构体)习题与答案
1、设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()。
A.p=q;B.*p=&n1;C.p=*q;D.*p=*q;正确答案:D2、有以下程序main( ){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是()。
A.7,8,8,7B.8,7,7,8C. 8,7,8,7D.7,8,7,8正确答案:B3、程序中对fun函数有如下说明void *fun( );此说明的含义是()。
A.fun函数的返回值可以是任意的数据类型B. fun函数的返回值是无值型的指针类型C.指针fun指向一个函数,该函数无返回值D.fun函数无返回值正确答案:B4、有以下程序main(){ int a[]={2,4,6,8,10},y=0,x,*p; p=&a[1];for(x=1;x<3;x++) y+=p[x]; printf("%d\n",y);}程序运行后的输出结果是()。
A.15B.10C.14D.11正确答案:C5、有以下程序:main(){int a[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d ",a[1][i]);}程序运行后的输出结果是()。
A.1 2 3B.2 3 4C.3 4 5D.0 1 2正确答案:C6、有以下程序prt(int *m,int n){ int i;for(i=0;i<n;i++)m[i]++;}main( ){ int a[]={1,2,3,4,5},i;prt(a,5);for(i=0;i<5;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。
c语言结构体试题及答案
c语言结构体试题及答案1. 定义一个结构体,包含学生的姓名、学号和成绩。
```cstruct Student {char name[50];int id;float score;};```2. 编写一个函数,计算结构体数组中所有学生的平均成绩。
```cfloat calculateAverageScore(struct Student students[], int size) {float sum = 0.0;for (int i = 0; i < size; i++) {sum += students[i].score;}return sum / size;}```3. 给定一个结构体数组,编写一个函数,返回成绩最高的学生。
```cstruct Student* findHighestScoreStudent(struct Student students[], int size) {struct Student* highest = students;for (int i = 1; i < size; i++) {if (students[i].score > highest->score) {highest = &students[i];}}return highest;}```4. 编写一个函数,将结构体数组中的学生信息打印出来。
```cvoid printStudents(struct Student students[], int size) { for (int i = 0; i < size; i++) {printf("Name: %s, ID: %d, Score: %.2f\n", students[i].name, students[i].id, students[i].score);}}```5. 如何定义一个结构体,其中包含另一个结构体类型的成员?```cstruct Inner {int a;float b;};struct Outer {struct Inner inner;char c[100];};```6. 编写一个函数,交换两个结构体变量的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章指针一.选择题1.变量的指针,其含义是指该变量的。
A)值 B)地址 C)名 D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr23.若有说明:int *p,m=5,n;以下程序段正确的是。
A)p=&n ; B)p = &n ;scanf(“%d”,&p; scanf(“%d”,*p;C)scanf(“%d”,&n; D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a;下面函数的输出结果是。
void print_value(int *x{ printf(“%d\n”,++*x; }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是。
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正确的是。
A)char *a=”china”; 等价于char *a; *a=”china” ;B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}C)char *s=”china”; 等价于char *s; s=”china” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段中,for循环的执行次数是。
char *s=”\ta\018bc” ;for ( ; *s!=’\0’ ; s++ printf(“*” ;A)9 B)7 C)6 D)59.下面能正确进行字符串赋值操作的是。
A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’};C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s ;10.下面程序段的运行结果是。
char *s=”abcde” ;s+=2 ; printf(“%d”,s;A)cde B)字符’c’ C)字符’c’的地址 D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。
A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p212.设有程序段:char s[ ]=”china”; c har *p ; p=s ;则下面叙述正确的是。
A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等13.以下与库函数strcpy(char *p1,char *p2功能不相等的程序段是。
A)strcpy1(char *p1,char *p2{ while ((*p1++=*p2++!=’\0’ ; }B)strcpy2(char *p1,char *p2{ while ((*p1=*p2!=’\0’ { p1++; p2++ } }C)strcpy3(char *p1,char *p2{ while (*p1++=*p2++ ; }D)strcpy4(char *p1,char *p2{ while (*p2 *p1++=*p2++ ; }14.下面程序段的运行结果是。
char a[ ]=”language” , *p ;p=a ;while (*p!=’u’ { printf(“%c”,*p-32; p++ ; }A)LANGUAGE B)language C)LANG D)langUAGE15.若有语句:char s1[ ]=”string”,s2[8],*s3,*s4=”string2”;则库函数strcpy的错误调用是。
A)strcpy(s1,”string2”; B)strcpy(s4,”string1”;C)strcpy(s3,”string1”; D)strcpy(s1,s2;16.以下与库函数strcmp(char *s,char *t功能相等的程序段是。
A)strcmp1(char *s,char *t{ for ( ; *s++=*t++;if (*s= =’\0’ return 0 ;return (*s-*t ;}B)strcmp2(char *s,char *t{ for ( ; *s++=*t++;if (!*s return 0 ;return (*s-*t ;}C)strcmp3(char *s,char *t{ for ( ; *t= =*s;{ if (!*t return 0 ; t++ ; s++ ; }return (*s-*t ;}D)strcmp4(char *s,char *t{ for ( ; *s==*t; s++, t++if (!*s return 0 ;return (*t-*s ;}17.以下说明不正确的是。
A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”;C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”;18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是。
A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符19.若已定义char s[10];则在下面表达式中不表示s[1]的地址是。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是。
A)*&a[5] B)a+2 C)*(p+5 D)*(a+221.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是。
A)p+5 B)*a+1 C)&a+1 D)&a[0]22.若有定义:int a[5];则a数组中首元素的地址可以表示为。
A)&a B)a+1 C)a D)&a[1]23.以下与int *q[5];等价的定义语句是。
A)int q[5] B)int *q C)int *(q[5] D)int (*q[5]24.以下选项中,对指针变量p的不正确操作是。
A)int a[3], *p; B)int a[5], *p; C)int a[5]; D)int a[5]p=&a; p=a; int *p=a; int *p1,*p2=a;*p1=*p2;25.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是。
A)x[3] B)p1=x+3,*p1++C)p1=x+2,*(p1++ D)p1=x+2,*++p126.若有说明:char*language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是。
A)一个字符 B)一个地址 C)一个字符串 D)一个不定值27.设有定义:char *cc[2]={“1234”,”5678”};则正确的叙述是。
A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)cc是指针变量,它指向含有两个数组元素的字符型一维数组D)cc数组元素的值分别维”1234”和”5678”28.已有定义int (*p( ;指针p可以。
A)代表函数的返回值 B)指向函数的入口地址C)表示函数的类型 D)表示函数返回值的类型29.已有函数max(a,b,为了让函数指针变量p指向函数max,正确的赋值方法是。
A)p=max; B)p=max(a,b; C)*p=max; D)*p=max(a,b;30.若有函数max(a,b,并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是。
A)(*pmax(a,b B)*pmax(a,b; C)(*p(a,b; D *p(a,b;31.以下正确的叙述是。
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定B)C语言允许main函数带形参,形参名只能是argc和argvC)当main函数带有形参时,传给形参的值只能从命令行中得到D)若有说明: int main(int argc,char *argv[],则argc的值必须大于1二.填空题1.在C程序中,指针变量能够赋值或值。
2.在C语言中,数组名时一个不可改变的,不能对它进行赋值运算。
3.若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p的值是。
4.若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1的值是,*(a[1]+2的值是。
5.若有程序段:int *p[3],a[6],i;for (i=0; i<3; i++ p[i]=&a[2*i] ;则*p[0]引用的是a数组元素,*(p[1]+1引用的是a数组元素。
三.程序阅读题1.写出下面程序的运行结果。
func(char *s,char a,int n{ int j;*s=a; j=n ;while (*s -- ;return j;}main ({ char c[6] ;int i ;for (i=1; i<=5 ; i++ *(c+i=’A’+i+1; p rintf(“%d\n”,fun(c,’E’,5;}2.写出下面程序的运行结果。
fun (char *s{ char *p=s;while (*p p++ ;return (p-s ;}main ({ char *a=”abcdef” ;printf(“%d\n”,fun(a ;}3.写出下面程序的运行结果。