C语言指针数组函数练习(含参考答案)
c语言指针编程练习题
c语言指针编程练习题2. 从命令行输入两个实型数据,请比较大小并输出。
参考答案3. 输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案6. 有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
参考答案7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n 参考答案9. 八进制转换为十进制参考答案10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案11. 复制字符串。
参考答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #includevoid swap{int temp;temp = *pa;*pa = *pb;*pb = temp;}void main{int a,b,c,temp;scanf;ifswap;ifswap;ifswap;printf;}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include “stdio.h”#include “string.h”int main{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;scanf;fflush;printf;scanf;fflush;printf;scanf;}fflush; if>0) {t=p1;p1=p2;p2=t;} if>0) {t=p1;p1=p3;p3=t;} if>0) {t=p2;p2=p3;p3=t;} printf; return 0;9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#includevoid main{int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while)!=‘\n’)i++;p=s;while{ifa++;else ifb++;else ifc++;else ifd++;else e++;p++;}printf;printf;}9.5写一个函数,将3矩阵转置 #include “stdio.h”void Transpose[3]){int temp;int i, j;for/*转置*/{for{temp = *+i);*+i) = *+j);*+j) = temp;}}}void main{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose;for{for{printf;}printf;}}}.6用指向一维数组的指针做函数参数#include#includeint main{void sort[6]);//一维数组的指针做函数参数int i;char str[10][6]; char [6];//定义一维数组的指针做函数参数printf;forscanf;p=str;//将str一维数组指针,赋值给p;sort;printf;forprintf;return 0;}void sort[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if>0){strcpy;strcpy;strcpy;}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
c语言指针编程练习题
c语言指针编程练习题2. 从命令行输入两个实型数据,请比较大小并输出。
参考答案3. 输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案6. 有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
参考答案7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n 参考答案9. 八进制转换为十进制参考答案10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案11. 复制字符串。
参考答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #includevoid swap{int temp;temp = *pa;*pa = *pb;*pb = temp;}void main{int a,b,c,temp;scanf;ifswap;ifswap;ifswap;printf;}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include “stdio.h”#include “string.h”int main{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;scanf;fflush;printf;scanf;fflush;printf;scanf;}fflush; if>0) {t=p1;p1=p2;p2=t;} if>0) {t=p1;p1=p3;p3=t;} if>0) {t=p2;p2=p3;p3=t;} printf; return 0;9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#includevoid main{int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while)!=‘\n’)i++;p=s;while{ifa++;else ifb++;else ifc++;else ifd++;else e++;p++;}printf;printf;}9.5写一个函数,将3矩阵转置 #include “stdio.h”void Transpose[3]){int temp;int i, j;for/*转置*/{for{temp = *+i);*+i) = *+j);*+j) = temp;}}}void main{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose;for{for{printf;}printf;}}}.6用指向一维数组的指针做函数参数#include#includeint main{void sort[6]);//一维数组的指针做函数参数int i;char str[10][6]; char [6];//定义一维数组的指针做函数参数printf;forscanf;p=str;//将str一维数组指针,赋值给p;sort;printf;forprintf;return 0;}void sort[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if>0){strcpy;strcpy;strcpy;}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
指针数组函数练习(含参考答案).
for(i=0;i
printf("%.0f\t",array[i];
Transfer(array,N;
printf("\n";
for(i=0;i
printf("%.0f\t",array[i];
printf("\n";
}
3.编写一个通用函数,该函数可以实现求数值型二维数组的上三角各元素的平方根的和(即先对上三角各元素求平方根,然后再对平方根求和)。编写主程序调用该函数,计算数组A的上三角元素的平方根的和。
scanf("%d",#
Transfer(num;
}
5.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成七进制。例如把88转换成154。编写主程序调用该函数,把整数123455转换成七进制并输出。
注:把一个十进制的整数转换成七进制的方法是:把十进制数当作被除数,用7除,直到商为0为至,然后把余数倒序即可。例88除7的余数依次是4、5、1,则其七进制为:154。
注:把一个十进制的整数转换成二进制的方法是:把十进制数当作被除数,用2除,直到商为0为止,然后把余数倒序即可。例18除2的余数依次是0、1、0、0、1,则其二进制为:10010。
#include
void Transfer(int num
{
int a[100];
int count=0;
while(num!=0
return 1;
else
return 0;
}
void main(
{
int count=0;
long i;
for(i=10000;i<=99999;i++
C语言指针经典练习题-及答案
C语言指针练习题及答案一、选择题1. 变量的指针,其含义是指该变量的____.a)值b)地址c)名d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _.a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;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. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是__ _____.main(){int *p,*q,a,b;p=&a;printf(“input a:”);scanf(“%d”,*p);……}a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是______.void print_value(int *x){ printf(“%d\n”,++*x);}a)23 b)24 c)25 d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include<stdio.h>main(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28. 有以下程序main(){ int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序main(){ int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3], b; b=p[5]; b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)13.若有以下定义,则p+5表示_______.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) for(p=a;a<(p+10);a++);B) for(p=a;p<(a+10);p++);C) for(p=a,a=a+10;p<a;p++);D) for(p=a;a<p+10; ++a);15.有以下程序段#include <stdio.h>int main(){ int x[] = {10, 20, 30};int *px = x;printf("%d,", ++*px); printf("%d,", *px);px = x;printf("%d,", (*px)++); printf("%d,", *px);px = x;printf("%d,", *px++); printf("%d,", *px);px = x;printf("%d,", *++px); printf("%d\n", *px);return 0;}程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,2016.设有如下定义则程序段的输出结果为int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*(ptr+2)+=2;printf ("%d,%d\n",*ptr,*(ptr+2));A)8,10 B)6,8 C)7,9 D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_4__. *(a+5)的值是__12__.18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是___ __.A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))19.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为__ __.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_8_. *(*(a+1)+0)的值是_ _8.21.有以下定义char a[10],*b=a; 不能给数组a输入字符串的语句是()A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);22.下面程序段的运行结果是___ __.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");24.设已有定义: char *st="how are you"; 下列程序段中正确的是()A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);25.有以下程序输出结果是()main(){char a[]="programming",b[]="language";char *p1,*p2;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}A)gm B)rg C)or D)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是_____.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27.以下正确的程序段是____.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);28.若有说明语句则以下不正确的叙述是____.char a[]="It is mine";char *p="It is mine";a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是___.#include <stdio.h>#include <string.h>main(){ char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序运行后的输出结果是____。
C语言二级,函数、数组、指针等的整理和课后题解答
第一个try(x,y,z)中的xyz是实参,中的xyz是形参,因为是void,没有return,所以无返回值,所以输出的(4)仍是2,3,0。
转换就是实参-----形参-----return------实参。
xy是实参,有值,是10,20。
ab是形参,(1)(4)中的xy不能换为ab,因为没有定义的ab 不能用。
此处没有return,所以(4)不能输出交换后的ab值。
7-7先读懂题意,这个主函数是一定要写出来的,关键在看返回值怎么弄。
注意(1)程序开始一定要有主函数的额定义,。
(2)中可以加上==1,但是因为if判断时就是1和0,所以此处不用写上1。
(3)下面的a是形参。
(4)for循环控制着if和return 0,在for---if---return 0执行完了才会执行return1 。
如果在return1 前面加上else的话,那么就会循环一次而判断一次,就输出一个0,不会整个循环完后返回1或0 。
(5)两个return的时候只执行一个return。
如条件成立的时候,执行return0,不成立的时候执行return1。
不断。
需要用循环,那么是用while还是for,则看:若是当。
则用while,如果是一个范围,则用while,若果是对次数什么的限制的话,就是用for。
不断输出结果,所以putchar(c)是放在和c=myupper(c)一样额括号内,如果是吧putchar(c)放在括号外面的话,就不会不断输出,只会输出一个,且是最后一个。
只要接受到的不是@,那么while久会一直循环。
7-9这个程序里没有实参和形参,是可以的,可以独立完成自己的事儿,不用实参传给形参。
这个程序也可以不用定义函数,直接把循环写在主函数中。
说明:7.1A,从主函数开始。
B、可以在程序的任意位置,如果实在main函数后面的话,记得开始要在函数最初的地方有个函数说明的语句。
7.2 如果函数没有说明格式的话,默认的是int型。
c数组指针题含答案
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n(n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素。
输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i;cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型)。
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编一程序,用指针数组在主函数中输入十个等长的字符串。
(完整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语言指针精选习题和答案
一、用指针方法编写一个程序,输入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编一程序,用指针数组在主函数中输入十个等长的字符串。
c语言指针指针变量scanf,C语言指针练习(包括答案和详解)
c语⾔指针指针变量scanf,C语⾔指针练习(包括答案和详解)《C语⾔指针练习(包括答案和详解)》由会员分享,可在线阅读,更多相关《C语⾔指针练习(包括答案和详解)(21页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、第7章第7章指针71选择题1说明:int a=2,*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完全相同。
都指向数字2 B。
)q的数据个p C) q的数据为a D)a的数据为2。
⽆法提供地址。
如果未定义*q=a 2,则:int a=511,*b=的输出为:D A未确定的值B a的地址C 512D 511 int a=511,*b=a是a pri。
2、ntf(输出指针变量B)。
也就是说,指向变量的值输出结果511 3中已经有int a=2,*p1=下未正确执⾏的赋值语句为(b)。
Aa=* p1 *p2bp1=a;Cp1=p2da=* P1 *(* p2);据悉,程序中定义了以下语句:int *P1,* P2int k;P1=p2=⽆法在以下语句中正确执⾏是(B) A,k=* P1 * P2b,p2=k;c,P1=P2d,K=* P1 *(* P2);P1 P2是指针,K是整数变量,变量如何为指针赋值?a实际上是k=k k k (P1和P2都指向K,因此*P1*P2实际上是K) C是赋值语句d实际执⾏K=K*K 4变量的指针。
含义是变量(b。
3、)。
a值b地址c名称d标志5如果有说明语句:int a、b、c、* d=b scanf (%d% d% d、a、b、d);C scanf (%d% d% d,d scanf (%d% d% d,a,b,* d);对于Int c,* d=,c是整数数据,d是指向变量c的指针。
c语言指针的习题答案
c语言指针的习题答案指针练习题1.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是A)gm B)rg C)or D)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuage/doc/2810874998.html,NG/doc/2810874998.html,ngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。
#includevoid main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。
C语言 数组和指针练习题
若当堂没做完,下周四之前上交也可。
至ftp://211.64.82.253/用户名和密码:stuC语言程序设计练习题——数组一、选择题77、以下对一维数组a的正确说明是_d ___A、char a(10);B、int a[ ];C、int k=5,a[k];D、char a[ ]={'a' , 'b' , 'c'};78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___A、a[0][3]B、a[0][4]C、a[2][2]D、a[2][2+1]79、以下能对二维数组y进行初始化的语句是_b__A、static int y[2][ ]={{1,0,1}, {5,2,3}};B、static int y[ ][3]={{1,2,3}, {4,5,6}};C、static int y[2][4]={{1,2,3}, {4,5} , {6}};D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于int y[ ][4]={0};D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值081、以下各组选项中,均能正确定义二维实型数组s的选项是_c___A、float s[3][4];B、float s(3,4);float s[ ][4]; float s[ ][ ]={{0};{0}};float s[3][ ]={{1},{0}}; float s[3][4];C、 float s[3][4];D、float s[3][4];static float s[ ][4]={{0},{0}}; float s[3][ ];auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__A、3B、2C、无确定值D、183、若二维数组y有m列,则在y[i][j]前的元素个数为_B___A、j*m+iB、i*m+jC、i*m+j-1D、i*m+j+184、下面程序中有错误的行是____1、 main( )2、 {3、 int x[3]={1};4、 int k;5、 scanf("%d", &x);6、 for (k=1; k<3; k++)7、 x[0]=x[0]+x[i];8、 printf("x[0]=%d\n", x[0]);9、 }A、3B、6C、7D、585、若有以下语句,则正确的描述是__b__char x[ ]="12345";char y[ ]={'1', '2', '3', '4', '5'};A、x数组与y数组的长度相同B、x数组长度大于y数组长度C、x数组长度小于y数组长度D、x数组等价于y数组86、以下不正确的数组定义语句是__b__A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};B、int y[5]={0, 1, 3, 5, 7, 9};C、char ch1[ ]={'1', '2', '3', '4', '5'};D、char ch2[ ]={'\x10', '\xa', '\x8'};87、以下正确的数组定义语句是_c___A、char a[5]={'1', '2', '3', '4', '5', '\0'};B、int b[2][ ]={{1}, {2}};C、float c[ ][3]={1, 2, 3, 4, 5};D、char d[5]="CHINA";88、判断字符串str1是否大于字符串str2,应当使用__d__A、if (str1>str2)B、if (strcmp(str1, str2))C、if (strcmp(str2, str1)>0)D、if (strcmp(str1, str2)>0)89、下面程序段的运行结果是_c___char x[5]={'a', 'b', '\0', 'c', '\0'};printf("%s", x);A、'a''b'B、abC、ab└┘cD、abc90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___A、gets(a, b);B、scanf("%s%s", &a, &b);C、getchar(a); getchar(b);D、gets(a); gets(b);91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_A、puts(s1, s2)B、printf("%s, %s", s1, s2);C、putchar(s1, s2);D、puts(s1), puts(s2);92、以下程序段的运行结果是_c___char a[7]="abcdef";char b[4]="ABC";strcpy(a, b);printf("%c", a[5]);A、└┘B、\0C、eD、f93、以下描述正确的是_d___A、两个字符串所包含的字符个数相同时,才能比较字符串B、字符个数多的字符串比字符个数少的字符串大C、字符串"STOP└┘"与"STOP"相等D、字符串"That"小于字符串"The"94、以下对字符数组的描述中错误的是_c___A、字符数组中可以存放字符串B、字符数组中的字符串可以整体输入、输出C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D、不可以用关系运算符对字符数组中的字符串进行比较95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___A、s1={"books"};B、strcpy(s1, s2);C、s1=s2;D、strcpy(s2, s1);96、以下printf语句的输出结果是____printf("%d\n", strlen("school");A、7B、6C、存在语法错误D、不定值97、下面程序的功能是将字符串s中所有的字符c删除。
c语言数组指针题库
以下是一些关于C语言数组指针的题目:题目:以下程序中,函数f 的功能是交换两个整数的值。
请在f 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);f(&x, &y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在f 函数中,使用指针*a 和*b 分别访问整数变量a 和b 的值,然后交换它们的值。
具体实现如下:cvoid f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}题目:以下程序中,函数g 的功能是交换两个整数的值。
请在g 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void g(int a, int b) {int temp = a;a = b;b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);g(x, y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在g 函数中,由于参数传递是按值传递的,因此无法直接交换两个整数的值。
为了实现交换功能,需要使用指针来传递变量的地址。
具体实现如下:cvoid g(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}。
132实验十三数组指针和函数综合编程练习参考答案.doc
数组、指针和函数综合编程练习:打印最高分和学号假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。
程序1 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。
/*以一维数组的数组名作函数参数,实参、形参均为数组以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值*/#include <stdio.h>#define ARR_SIZE 40int FindMax(int score[ ], long num[ ], int n, long *pMaxNum);void main(){int score[ARR_SIZE], maxScore, n, i;long num[ARR_SIZE], maxNum;printf("Please enter total number:");scanf("%d", &n); /*从键盘输入学生人数n*/printf("Please enter the number and score:\n");for(i=0; i<n; i++) /*分别以长整型和整型格式输入学生的学号和成绩*/{scanf("%ld%d", &num[i], &score[i]);}maxScore = FindMax(score, num, n, &maxNum); /*计算最高分及学生学号*/printf("maxScore = %d, maxNum = %ld\n", maxScore, maxNum);}/* 函数功能:计算最高分及最高分学生的学号函数入口参数:整型数组score,存放学生的成绩长整型数组num,存放学生的学号函数出口参数:长整型指针变量pMaxNum,指向最高分学生的学号函数返回值:最高分*/int FindMax(int score[ ], long num[ ], int n, long *pMaxNum){int i;int maxScore;maxScore = score[0];*pMaxNum = num[0]; /*假设score[0]为最高分*/ 以一维数组的数组名作函数参数,实参、形参均为数组for (i=1; i<n; i++){if (score[i] > maxScore){maxScore = score[i]; /*记录最高分*/*pMaxNum = num[i]; /*记录最高分学生的学号num[i]*/ }}return (maxScore); /*返回最高分maxScore*/}程序2 用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
C语言指针经典练习题 及答案
C语言指针经典练习题及答案c语言指针经典练习题-及答案C语言指针练习和答案一、选择题1.指向变量的指针,表示变量a)值b)地址C)名称d)标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是___.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.如有;int*p,m=5,n;下面正确的部分是____;a)p=&n;b) p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.在下面的过程中,调用scanf函数向变量a输入数值是错误的。
main(){int*p,*q,a,b;p=&a;printf(“输入:”);scanf(“%d”,*p);…}a)*p表示的是指针变量p的地址b) *P代表变量a的值,而不是变量a.C的地址)*P代表指针变量P的值d)*p只能用来说明p是一个指针变量5.现有变量定义和函数调用语句:inta=25;打印值(&a);以下函数的输出为_voidprint_value(int*x){printf(“%d\\n”,++*x);}a) 23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b) p=(长*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7。
有以下程序:#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a) 1,2,1,2b)1,2,2,1c)2,1,2,1d)2,1,1,28。
指针练习题及答案
指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
C语言 指针 有答案
一、选择题1. 以下程序的运行结果是。
#include<stdio.h>void sub(int x, int y, int *z){*z=y-x;}int main(){int a,b,c;sub(10, 5, &a);sub(7, a, &b);sub(a, b, &c);printf("%4d,%4d,%4d\n",a,b,c);return 0;}A.5,2,3 B.-5,-12,-7C.-5,-12,-17 D.5,-2,-72. 执行以下程序后,a的值为,b的值为。
#include<stdio.h>int main(){int a,b,k=4,m=6, *p1=&k, *p2=&m;a= p1= =&m;b=(-*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);return 0;}A.-1 B.1 C.0 D.4A.5 B.6 C.7 D.103. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是。
int main(){int *p,*q,a,b,;p=&a;printf("intput a:");scanf("%d",*p);...}A .*p 表示的是指针变量p 的地址B .*p 表示的是变量a 的值,而不是变量a 的地址C .*p 表示的是指针变量p 的值D .*p 只能用来说明p 是一个指针变量4. 有如下语句int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如左图所示,若要实现右图所示的存储结构,可选用的赋值语句是 。
A .*p1=*p2B .p1=p2C .p1=*p2D .*p1=p25. 若需要建立如图所示的存储结构,且已有说明float *p, m=3.14; 正确的赋值语句是 。
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指针练习题带答案
C指针练习题带答案1、设有下列定义char s[ ]={“12345”},*p=s,则下列表达式中不正确的是()。
A、p+1B、*(s+2)C、P=“abcd”D、*S=”ABC”2、设有下列定义static int x,*p=&x,*q;q=p;scanf(“%d,%d”,p,q);若输入“3,4”,则x的值为()A、3 B、4 C、0 D、无法确定3、以下程序的运行结果是:A、6 B、6789 C、‘6’ D、789includemain(){char b[10]={'1','2','3','4','5','6','7','8','9','\0'},*p=b;int k;k=8;p=b+k;printf("%s\n",p-3);}4、有以下程序的输出结果是()main(){int v[]={1,3,5,7,2,4,6,8};int I,*p;p=v;for(i=0;i<8;i++) if(*(p+i)==i+1) printf((“%d”,*(p+i));A、1B、18C、35D、165、若有语句int* p,a=4;p=&a下面均代表地址的一组选项是A.a,p,*&aB.&*a,&a,*pC.*&p,*p,&aD.&a,&*p,p6.若有说明int* p,m=5,n;以下正确的程序段是A.p=&nscanf("%d",&p);B.p=&n scanf("%d",*p);C.scanf("%d",&n); *p=n;D.p=&n *p=m;7.下列程序的运行结果是:swap(int *pt1,int *pt2){int p;p=*pt1;*pt1=*pt2;*pt2=p;}main(){int a=5,b=7,*p1,*p2;p1=&ap2=&bswap(p1,p2);printf("*p1=%d,*p2=%d\n",*p1,*p2);printf("a=%d,b=%d\n",a,b);}A、*p1=7,*p2=5B、*p1=7,*p2=5C、*p1=7,*p2=7D、*p1=5,*p2=5 a=5,b=7 a=7,b=5 a=5,b=5 a=5,b=7 (7)下列程序的运行结果是:main(){void swap1();void swap2();int a=3,b=4;swap1(a,b);printf(“%d,%d\n”,a,b);a=3,b=4;swap2(&a,&b);printf(“%d,%d”,a,b);}void swap1(x,y)int x,y;{int t;t=x;x=y;y=t;}void swap2(x,y)int *x,*y;{int t;t=*x;*x=*y;*y=t;}A、3,4B、4,3C、3 4D、4 34,3 3,4 4 3 3 48.若有定义int a[]={2,4,5,8,10,12},*p=a;则*(p+1)的值是()*(a+5)的值是()*p+1的值是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业(使用指针、数组、函数完成)
1. 编写一个通用函数,该函数可以实现判断:一个含有五位数字的整数是否是回文数。
回文数的含义是从左向右与从右向左看,数是相同的。
如:23732是回文数,而23564则不是。
编写主程序调用该函数实现求所有5位数字中满足条件的数的个数。
#include <stdio.h>
int Judge(int num)
{
int w,q,b,s,g;
w=num/10000;
q=num%10000/1000;
s=(num%100)/10;
g=num%10;
if((w==g)&&(q==s))
return 1;
else
return 0;
}
void main()
{
int count=0;
int i;
for(i=10000;i<=99999;i++)
if(Judge(i))
count++;
printf("%d\n",count);
}
2.编写一个通用函数,该函数可以实现对数值型数组的倒序。
倒序的含义是把数组的元素值前后颠倒。
例数组:20,19,18,15,13,10倒序的结果为:10,13,15,18,19,20。
编写主程序,数组初始化方式不限,并输出,然后调用该函数实现倒序后再输出倒序的结果。
#include <stdio.h>
#define N 6
void Transfer(double *b,int n)
{
double temp;
double *i=b;
double *j=b+n-1;
while(j>i)
{
temp=*i;
*i=*j;
*j=temp;
i++;
j--;
}
}
void main()
{
double array[N]={20,19,18,15,13,10};
int i;
for(i=0;i<N;i++)
printf("%.0f\t",array[i]);
Transfer(array,N);
printf("\n");
for(i=0;i<N;i++)
printf("%.0f\t",array[i]);
printf("\n");
}
3.编写一个通用函数,该函数可以实现求数值型二维数组的上三角各元素的平方根的和(即先对上三角各元素求平方根,然后再对平方根求和)。
编写主程序调用该函数,计算数组A 的上三角元素的平方根的和。
上三角的含义:左上部分(包含对角线元素),如下二维数组的0元素区域即为上三角。
0 0 0 0 0
0 0 0 0 7
0 0 0 3 8
0 0 5 9 3
0 2 4 6 7
数组A的数据如下:
15 45 56 73 11
34 74 85 54 70
56 98 56 89 67
98 54 83 12 59
77 87 74 48 33
#include <stdio.h>
#include <math.h>
double Cal(double *p,int n)
{
int i,j;
double sum=0;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
sum+=sqrt(*(p+i*n+j));
return sum;
}
void main()
{
double a[5][5]={15, 45, 56 , 73 , 11,34 , 74 , 85 ,54 , 70,56, 98 , 56 , 89 , 67, 98, 54 , 83, 12 , 59,77 , 87, 74, 48, 33};
double rootsum=Cal(a[0],5); //或者double rootsum=Cal(&a[0][0],5);
printf("%f\n",rootsum);
}
/*系统把二维数组看成数组元素为一维数组的一维数组,即对于二维数组a[2][3],系统会看成由两个一维数组a[0]和a[1]组成,而a[0]和a[1]中分别包含三个元素(a[0]和a[1]为一维数组名)。
所以不能把二维数组名(类似于二级指针,不完全相同)赋给一个普通的指针变量,但能把a[0]赋给一个普通的指针变量(a[0]不是一个具体的元素,而是元素a[0][0]的地址)*/
4.编写一个通用函数,该函数可以实现统计一维数组中小于数组元素平均值的元素个数。
编写主程序调用该函数,统计数组A(数据为:3521,5647,6849,5962,4567,2361,1247,5241,1246)中小于平均值的元素个数。
#include <stdio.h>
int num(double *p,int num)
{
int count=0;
double sum=0,avg=0;
for(int i=0;i<num;i++)
sum+=*(p+i);
avg=sum/num;
for(i=0;i<num;i++)
if(*(p+i)<avg)
count++;
return count;
}
void main()
{
double a[9]={3521,5647,6849,5962,4567,2361,1247,5241,1246};
int count =num(a,9);
printf("%d\n",count);
}
5.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成七进制。
例如把88转换成154。
编写主程序调用该函数,把整数123455转换成七进制并输出。
注:把一个十进制的整数转换成七进制的方法是:把十进制数当作被除数,用7除,直到商为0为至,然后把余数倒序即可。
例88除7的余数依次是4、5、1,则其七进制为:154。
#include <stdio.h>
void Transfer(int num)
{
int a[100];
int count=0;
while(num!=0)
{
a[count++]=num%7;
num=num/7;
}
for(int i=count-1;i>=0;i--)
printf("%d",a[i]);
}
void main()
{
int num;
printf("Please input an integer:\n");
scanf("%d",&num);
Transfer(num);
}。