C语言程序设计习题6
C语言程序设计 第六章 函数 试题及答案

B)形参可以是常量、变量或表达式
C)实参可以是任意类型
D)实参应与其对应的形参类型一致
参考答案:B
6.8以下正确的说法是。
A)定义函数时,形参的类型说明可以放在函数体内
B)return后面的值不能为表达式
C)如果函数的类型与返回值类型不一致,以函数类型为准
D)如果形参与实参的类型不一致,以实参类型为准
A)float型B)int型C)long型D)double型
参考答案:B
6.12 C语言规定,函数返回值的类型是由所决定。
A)return语句中的表达式类型
B)调用该函数时的主调函数类型
C)调用该函数是系统临时指定
D)在定义该函数时所指定的函数类型
参考答案:D
*6.13下面函数调用语句含有实参的个数为。
if(m!=-1) n=m;
}
printf("\nn=%d",n);
}
【1】A)k*10 B)k%10 C)k/10 D)k*10%10
【2】A)a2*10 B)a2 C)a2/10 D)a2%10
参考答案:【1】C【2】A
6.18以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C');则符合程序段运行结果的选项是。
A-->C A-->C B-->C B-->C
A-->B A-->B A-->C A-->C
参考答案:C
6.19若用数组名作为函数调用的实参,传递给形参的是。
A)数组的首地址B)数组第一个元素的值
C)数组中全部元素的值D)数组元素的个数
C语言第6章习题解答

第6章函数和模块设计【习题6-1】更正下面函数中的错误。
(1)返回求x和y平方和的函数。
(2)返回求x和y为直角边的斜边的函数。
sum_of_sq(x,y) hypot(double x,double y){ {double x,y; h=sqrt(x*x+y*y);return(x*x+y*y); return(h);} }程序如下:/*c6_1(1).c*/ /*c6_1(2).c*/(1) (2)double sum_of_sq(double x,double y) double hypot(double x,double y) { {return(x*x+y*y); double h;} h=sqrt(x*x+y*y);return(h);}【习题6-2】说明下面函数的功能。
(1)itoa(int n,char s[ ])(2)int htod(char hex [ ]){ { int i,dec=0;static int i=0,j=0; for(i=0;hex[i]!='\0';i++)int c; { if(hex[i]>='0'&&hex[i]<='9') if(n!=0) dec=dec*16+hex[i]-'0';{ if(hex[i]>='A'&&hex[i]<='F') j++; dec=dec*16+hex[i]-'A'+10;c=n%10+'0'; if(hex[i]>='a'&&hex[i]<='f') itoa(n/10,s); dec=dec*16+hex[i]-'a'+10;s[i++]=c; }} return(dec);else }{ (3)void stod(int n)if(j==0) s[j++]='0'; { int i;s[j]='\0'; if(n<0){ putchar('-');n=-n;} i=j=0; if((i=n/10)!=0) stod(i);} putchar(n%10+'0');} }功能:(1)(略)(2)(略)【习题6-3】编写已知三角形三边求面积的函数,对于给定的3个量(正值),按两边之和大于第三边的规定,判别其能否构成三角形,若能构成三角形,输出对应的三角形面积。
C语言程序设计第六章数组习题及答案

1.以下对一维整型数组a的定义,正确的是_。
(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。
(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。
(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。
(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。
(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。
(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。
(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。
《C语言程序设计教程》(第三版)课后习题参考答案

C语言程序设计课后习题参考答案习题一一、单项选择题1、C2、B3、B4、C5、D6、A7、C8、A二、填空题1、判断条件2、面向过程编程3、结构化4、程序5、面向对象方法6、基本功能操作、控制结构7、有穷性8、直到型循环结构9、算法10、可读性11、模块化12、对问题的分解和模块的划分习题二一、单项选择题1、B2、D3、C4、B5、A6、A7、B8、C二、填空题1、主2、C编译系统3、结构化4、程序5、面向对象方法6、.OBJ7、库函数8、直到型循环结构习题三一、单项选择题1、D2、B3、A4、C5、A6、D7、B8、D9、B 10、C 11、A 12、D 13、C 14、B 15、C 16、A17、B 18、C 19、C 20、D 21、A 22、D 23、D 24、D、A25、D 26、A二、填空题1、补码2、10^-138~10^138、15~163、实4、单目运算符、自右向左5、函数调用6、65,89习题四一、单项选择题1、D2、C3、D4、A5、D6、B7、A8、C9、B 10、B二、填空题1、两, ;2、5.1690003、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车4、a=98,b=765.000000,c=4321.0000005、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车6、0,0,37、38、scanf(“%lf %lf %lf”,&a,&b,&c);9、13 13.000000 13.00000010、c=b-a;a=b+c;习题五一、单项选择题1、B2、D3、C4、B5、B6、D7、A8、B9、D二、填空题1、1 、02、k!=03、if(x>4||x<-4)printf(“%d”,x);else printf(“error!”);4、if(((x>=1&&x<=10)||(x>=200&&x<=210))&&(x%2!=0))Printf(“%d”,x);5、16、17、10!Right!8、a=09、2,110、0<a<b习题六一、单项选择题1、B2、C3、C4、B5、C6、B7、C8、A二、填空题1、无穷次2、83、204、115、3.66、*#*#*#$7、8 5 28、d=1.0 、k++、k<=n9、!(x<0)、x<amin习题七一、单项选择题1、B2、D3、C4、C5、A6、A7、D8、A二、填空题1、1 2 4 8 16 32 64 128 256 5122、a[age]++、i=18;i<263、break、i==84、a[i]>b[i]、i<3、j<55、b[j]=0、b[j]=a[j][k]习题八一、单项选择题1、B2、C3、C4、A5、A6、A7、C8、D9、D 10、B 11、A 12、C 13、A 14、C 15、B二、填空题1、return 1、return n+sum(n-1)2、return 1、n*facto(n-1)习题九一、单项选择题1、D2、C3、D4、A5、C6、C7、C8、C9、B 10、C 11、A 12、C 13、B 14、A 15、D 16、B17、C 18、A 19、B 20、C二、填空题1、int 、return z2、*p++3、’\0’、++4、p、max<*q、min>*q习题十一、单项选择题1、D2、D3、A4、5、B6、A7、C8、B9、D 10、11、C 12、D 13、D 14、C二、填空题1、34 122、ARRAY a[10],b[10],c[10];3、2 34、ab、cd5、(*b).day、b->day6、adabc defghi mnohi no7、(struct node *)、!=’\n’、p=top;8、p1=p1->next9、(struct list *)、(struct list *)、return (n)习题十一一、单项选择题1、A2、A3、B4、A5、B6、D7、B8、A9、A 10、B 11、B 12、B 13、C 14、C 15、D 16、A17、D二、填空题1、ASCII(文本)、二进制2、pf=fopen(“A:\\zk04\\data\\txfile.dat”,”w”);3、fputc()、fputs()、fscanf()、fread()4、(后两个空)文件结束符、非0值。
C语言单元复习题 第06部份 循环

C.用do...while语句构成循环时,在while后的表达式为零时不一定结束循环
D.用do...while语句构成循环时,在while后的表达式为零时结束循环
(知识点:do...while语句; 难度系数:1; 答案:D )
10.以下关于do...while语句的叙述中,正确的是:( )。
(知识点:循环的基本概念; 难度系数:1; 答案:D )
2.以下关于循环的描述中,错误的是:( )。
A.while、do...while和for语句的循环体都可以是空语句
B.for和do...while语句都是先执行循环体,后进行循环条件判断
C.while语句是先进行循环条件判断,后执行循环体的
D.使用while和do...while语句时,循环变量初始化的操作应在循环语句之前完成
A.break语句和continue语句都只能用于循环结构
B.break语句和continue语句都只能用于switch结构
C.break语句用于跳出循环体,continue语句用于跳出当次循环
D.continue语句用于跳出循环体,break语句用于跳出当次循环
(知识点:continue语句; 难度系数:1; 答案:C )
A.x==0B.x==1C.x!=lD.x!=0
(知识点:while语句; 难度系数:1; 答案:D )
5.在C语言中,当while语句构成的循环中的条件为( )时,结束循环。
A.0B.1C.真D.非0
(知识点:while语句; 难度系数:1; 答案:A )
6.有以下程序段:
int k=0;
while(k=1) k++;
大学C语言程序设计(填空题)

C 语言程序设计习题-填空题
x=7; x+=x-=x+x; 习题 33-参考答案 -14 习题 34(填空题)[知识点:表达式] 若 a 和 b 均为 int 型变量,则以下语句的功能是______。 a+=b;b=a-b;a-=b; 习题 34-参考答案 交换 a、b 变量的值 习题 35(填空题)[知识点:顺序结构] 有一输入函数 scanf("%d",k);则不能使 float 类型变量 k 得到正确数值的原因是______。 习题 35-参考答案 格式字符不正确, 缺少&符号 习题 36(填空题)[知识点:顺序结构] 若有以下定义和语句,为使变量 c1 得到字符'A',变量 c2 得到字符'B',正确的格式输入形式是______。 char c1,c2; scanf("%4c%4c",&c1,&c2); 习题 36-参考答案 A□□□B□□□ 习题 37(填空题)[知识点:顺序结构] 执行以下程序时,若从第一列开始输入数据,为使变量 a=3,b=7,x=8.5, y=71.82, c1='A',c2='a',正确的数据输入形式是 ______。 int a,b;float x,y;char c1,c2; scanf("a=%d b=%d",&a,&b); scanf("x=%f y=%f",&x,&y; scanf("c1=%c c2=%c",&c1,&c2); 习题 37-参考答案 a=3□b=7x=8.5□y=71.82c1=A□c2=a<CR> 习题 38(选择题)[知识点:表达式] 若 int a=3,b=2,c=1,f;表达式 f=a>b>c 的值是______。 习题 38-参考答案 0 习题 39(填空题)[知识点:顺序结构] 以下程序的运行结果是______。 #include <stdio.h> main() {int x=1,y,z; x*=3+2; printf("%d\t",x); x*=y=z=5; printf("%d\t",x); x=y==z; printf("%d\n",x); } 习题 39-参考答案 5□□□□□□□25□□□□□□1(制表符为 7 个) 习题 40(填空题)[知识点:表达式] 设 y 为 int 型变量,请写出描述“y 是奇数”的表达式______。 习题 40-参考答案 y%2==1、y%2!=0、y%2、(y-1)%2==0、!(y%2==0) 4 / 25
C语言程序设计 – 第 06 章课后习题
C语言程序设计– 第六章课后习题电子13-02班王双喜一、选择题1. C语言中一维数组的定义方式为:类型说明符数组名(C)A. [整型常量]B. [整型表达式]C. [整型常量]或[整型常量表达式]D. [常量表达式]2. C语言中引用数组元素时,下标表达式的类型为(C)A. 单精度型B. 双精度型C. 整型D. 指针型3. 若有定义:int a[3][4];,则对a数组元素的非法引用是(D)A. a[0][3*1]B. a[2][3]C. a[1+1][0]D. a[0][4](解释:A、B、C均正确,D看起来引用不太妥当,但其亦有其意义(a[0][4]等价于a[1][0]))4. 若有定义:int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};,则a数组的第一维大小是(C)A. 1B. 2C. 3D. 4(解释:共9个元素,除以3即可得第一维大小是3;若有余数,则应加1)5. 若有定义:int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};,则值为5的表达式是(C)A. a[5]B. a[a[4]]C. a[a[3]]D. a[a[5]]6. 要求定义包含8个int类型元素的一维数组,以下错误的定义语句是(A)A. int N = 8;int a[N]; B. #define N 3while (a[2*N+2];C. int a[] = {0, 1, 2, 3, 4, 5, 6, 7};D. int a[1+7] = {0};(解释:数组的大小必须是整型常量或整型常量表达式)7. 若二维数组a有m列,则在a[i][j]前的元素个数为(A)A. i * m + jB. j * m + iC. i * m + i - 1D. i * m + j - 18. 下面是对数组s的初始化,其中不正确的是(D)A. char s[5] = {"abc"};B. char s[5] = {'a', 'b', 'c'};C. char s[5] = "";D. char s[5] = "abcdef";(解释:D中元素个数太多,算上'\0'共六个,非法)9. 下面程序段的运行结果是(B)char c[] = "\t\v\\\0will\n";printf("%d", strlen(c));A. 14B. 3C. 9D. 字符串中有非法字符,输出值不确定(解释:字符串中第四个是'\0'即结束标志,因此字符串长度是3)10. 判断字符串s1是否等于s2,应当使用(D)A. if (s1 == s2)B. if (s1 = s2)C. if (strcpy(s1, s2))D. if (strcmp(s1, s2) == 0)(解释:对于字符串来讲,其名字的内容是该字符串的起始地址,不能通过比较名字来比较相等,而应该用专用的函数进行逐字符匹配)二、写出程序的执行结果1. 程序一:# include <stdio.h>main(){int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17};int sum = 0, i, j;for (i = 0; i < 3; i++)for (j = 0; j < 3; j++){a[i][j] = i + j;if (i == j) sum = sum + a[i][j];}printf("sum = %d", sum);}执行结果:打印sum = 6.(解释:a中各个元素的值是其行和列数字之和,sum内保存a中对角线元素之和,即sum = 0 + 2 + 4)2. 程序二:# include <stdio.h>main(){int i, j, row, col, max;int a[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {-1, -2, 0, 5}};max = a[0][0]; row = 0; col = 0;for (i = 0; i < 3; i++)for (j = 0; j < 4; j++)if (a[i][j] > max){max = a[i][j];row = i;col = j;}printf("max = %d, row = %d, col = %d\n", max, row, col);}执行结果:打印max = 9, row = 1, col = 0.(解释:此程序的功能是逐行逐列扫描元素,总是将最大的元素赋给max,并保存该元素的行数和列数;因此执行完毕后,max是最大的元素(9),row是其行数(1),col是其列数(0))3. 程序三:# include <stdio.h>main(){int a[4][4], i, j, k;for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)a[i][j] = i - j;for (i = 0; i < 4; i++){for (j = 0; j <= i; j++)printf("%4d", a[i][j]);printf("\n");}}执行结果:第一行打印0;第二行打印1 0;第三行打印2 1 0;第四行打印3 2 1 0。
C语言程序设计教程第六章课后习题参考答案
C语⾔程序设计教程第六章课后习题参考答案P158 1求三个实数最⼤值#includefloat max(float,float,float);int main(){float a,b,c,m;printf("请输⼊三个实数:");scanf("%f %f %f",&a,&b,&c);printf("最⼤数为%f\n",max(a,b,c));return 0;}float max(float a,float b,float c){float t;if(a>b&&a>c)t=a;else if(b>a&&b>c)t=b;elset=c;return t;}P158 2求最⼤公约数最⼩公倍数#includeint fun1(int a,int b);int fun2(int a,int b);int main(){int a,b;printf("请输⼊两个整数:");scanf("%d %d",&a,&b);printf("最⼤公约数为:%d\n",fun1(a,b));int t,r;if(a{t=a;a=b;b=t;}while((r=(a%b))!=0) {a=b;b=r;}return b;}int fun2(int a,int b) {int n;n=(a*b)/fun1(a,b); return n;}P158 3求完全数#includevoid wan(int n); void main(){int n;for(n=1;n<1000;n++) wan(n);printf("\n");}void wan(int n){if(n%i==0)s=s+i;}if(n==s)printf("%d\t",n); }P158 4⽆暇素数#include#includeint nixvshu(int n);int isPrime(int n);int main(){int n,t;printf("⽆暇素数:\n");for(n=100;n<=999;n++) {t=nixvshu(n);if(isPrime(n)&&isPrime(t)) printf("%d\t",n);}printf("\n");return 0;}int nixvshu(int n){int x=0;while(n){x=x*10+n%10;n=n/10;}return x;int i;for(i=2;i<=sqrt(n);i++)if(n%i==0) return 0;return n;}P158 7递归函数#includeint Y(int n){if(n==0)return 0;if(n==1)return 1;if(n==2)return 2;elsereturn (Y(n-1)+Y(n-2)+Y(n-3)); } int main(){int n,k=0;for(n=0;n<=19;n++){printf("%d\t",Y(n));k++;if(k%5==0)printf("\n");}return 0;}P124 6分解质因数#include#includevoid fenjie(int );int main(){int n;printf("请输⼊⼀个正整数:"); scanf("%d",&n);if(isPrime(n)){printf("%d=1*%d\n",n,n);}else{fenjie(n);printf("\n");}return 0;}int isPrime(int n){int i;for(i=2;i<=sqrt(n);i++){if(n%i==0) return 0;}return 1;}int zhi(int n){int m;for(m=2;m<=n;m++){if(isPrime(m)&&(n%m==0)) break;void fenjie(int n){int m;printf("%d=%d",n,zhi(n));while(n>zhi(n)){m=zhi(n);n=n/m;printf("*%d",zhi(n));}}P47 1输出闰年#includeint f(int year);int main(){int year,k=0;for(year=1900;year<=2000;year++){if(f(year)){printf("%d\t",year);k++;if(k%5==0)printf("\n");}}return 0;}int f(int year){if((year%4==0&&year%100!=0)||(year%400==0)) return year;P47 2输出回⽂数#includeint fun(int n);int main(){int n,k=0;for(n=10;n<=2000;n++) {if(n == fun(n)){printf("%d\t",n);k++;if(k%5==0)printf("\n");}}return 0;}int fun(int n){int i=0;while(n>0){i=i*10+n%10;n=n/10;}return i;}P47 3进制转换#includevoid trans(int n,int base); int main()printf("请输⼊要转换的⼗进制数:"); scanf("%d",&n);printf("请输⼊转换的进制:"); scanf("%d",&base);trans(n,base);printf("\n");return 0;}(⽅法⼀)void trans(int n,int base){if(n){trans(n/base,base);if(n%base>=10)switch(n%base){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;}elseprintf("%d",n%base);}}(⽅法⼆)void trans(int n,int base){int r;char c;trans(n/base,base); r=n%base;if(r>=10)c='A'+r-10;elsec='0'+r;printf("%c",c);}}。
(完整版)C语言程序设计习题集及答案
C语言程序设计习题集东华理工大学2014.9基础知识一单项选择题(每题2分,共44分)1 以下叙述正确的是___。
A C程序基本组成单位是语句B C程序每一行只能写一个语句C 简单C语句必须以分号作为结束符D 注释语句可以嵌套2 一个C语言程序是从___开始执行的。
A 程序中第一个函数B 名为main的函数C 包含文件(头文件)的第一个函数D 程序中的第一个语句3 请选出合法的C语言赋值语句___。
A a=b=58B i++;C a=58,b=58D k=int(a+b);4 下面标识符中,合法的用户标识符是___。
A 1abcB includeC a-b-c123D char5 以下所列的C语言整形常量中,正确的是___。
A 0x10B 0976C 076LD 01ff6 C语言中下列运算符的操作数必须为整型的是___。
A %B ++C /D =7 设a和b均为int型变量,则执行以下语句后的输出为___。
int a=20; int b=3; printf("%d\n",a+=(b%=2));A 20B 21C 0D 238 已知int i;,则执行语句 i=2.6;后,i的值为___。
A 2B 3C 2.6D 不确定9 以下合法的字符常量为___。
A 'ab'B '\482'C '\'D '\xaf'10 若y为int型变量,则执行以下语句后,y的值是___。
y=8; y+=y-=y*y;A 64B –56C –112D –4811 以下合法的浮点型常量是___。
A e-3B 1.5e+2.4C 3.14e+2LD 3.14 e +512 设int数据占用两个字节,float数据占用四个字节,double数据占用8个字节,且已知float a=2;int b=3;则执行下列语句输出为___。
printf("%d",sizeof(a*b)+2/5);A 4B 8C 6D 713 设int型占2个字节,且int i=-2;,则语句printf("%u",i);的输出结果为___。
C语言程序设计练习题6
练习题61.输入一个字符,判断该字符是数字、字母、空格还是其他字符。
main( ){ char ch;ch=getchar();if( ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’)printf("It is an English character\n");else if( ch>=’0’&&ch<=’9’)printf("It is a digit character\n");else if( ch== ‘ ’)printf("It is a space character\n");elseprintf("It is other character\n"); }2.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。
用输入0来结束输入,用i,j来放统计数,请填空完成程序。
void main(){ int n,i=0,j=0;printf(“input a integer,0 for end\n”);scanf(“%d”,&n);while (n或n!=0 ) {if(n>0) i=i+1 ;else j=j+1;}printf(“i=%4d,j=%4d\n”,i,j);}3.编程计算1+3+5+……+101的值#include <stdio.h>void main(){int i, sum = 0;for (i = 1;i<=101 ; i++ )sum = sum + i;printf("sum=%d\n", sum); }4.编程计算1+3+5…+99的值main(){int i, sum = 0;i=1;while (i<100 ){sum = sum + i;i++ ; }printf("sum=%d\n", sum);}5.从键盘输入一个字符,判断它是否是英文字母。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题6参考解答1.请解释以下术语得含义:地址指针指针变量直接访问间接访问解:(1)地址:内存单元得编号叫做地址。
(2)指针:内存单元得编号叫做地址,通常也叫做指针。
(3)指针变量:在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
(4)直接访问:通过变量名称引用变量内存单元得方式称为直接访问。
(5)间接访问:利用了指针变量,通过变量得指针(即变量得内存地址)来引用内存单元得值,这种方式称为间接访问。
2.指针能参与哪几种运算?举例说明。
解:(1)指针变量与整数可以进行加/减运算:p++、p--、p+i、p-i、p+=i、p-=i(2)指针变量可进行赋值运算:p=&a; 变量a得地址赋给p,即指针p指向ap=array; 数组array首地址赋给pp=&array[i]; 数组元素array[i]得地址赋给pp=max; 函数max得入口地址赋给pp1=p2; 指针p2得值赋给指针p1,即p1、p2所指得数据相同(3)同类指针变量在一定得条件下可以作相减运算:p-q(4)同类指针变量在一定得条件下可以作比较运算:p<q3.判断下面两个程序得正误,若错误指出原因。
(1)#include<stdio、h>int main(){char *p;p="DATA";printf("%s\n",*p);return 0;}解:该程序错。
应为:printf("%s\n",p);(2)#include<stdio、h>int main(){int *p;*p=25;printf("%d",*p);return 0;}解:该程序错。
指针变量没有赋初值。
4.输入3个整数,输出其中最大数。
要求用指针变量实现。
解:#include"stdio、h"int main(){int a=0,b=0,c=0;int*aa=NULL,*bb=NULL,*cc=NULL,*p=NULL;aa=&a,bb=&b,cc=&c;printf("input 3 number:");scanf("%d %d %d",&a,&b,&c);printf("a=%d b=%d c=%d\n",a,b,c);p=aa;if(*p<*bb) p=bb;if(*p<*cc) p=cc;printf("%d\n",*p);return 0;}程序运行情况如下:input 3 number:4 5 9↙a=4 b=5 c=995.有3个整型变量i,j,k。
请编写一个程序,设置3个指针变量p1,p2,p3,分别指向i,j,k,然后通过指针变量使i,j,k 3个变量得值顺序交换,即原来i得值赋给j,把j得原值赋给k,把k得原值赋给i。
i,j,k得原值由键盘输入,要求输出i,j,k得原值与新值。
解:#include<stdio、h>int main(){int i,j,k,tmp;int *p1,*p2,*p3;scanf("%d%d%d",&i,&j,&k);printf("Before change:%d\t%d\t%d\n",i,j,k);p1 = &i;p2 = &j;p3 = &k;tmp=*p3;*p3=*p2;*p2=*p1;*p1=tmp;printf("After change:%d\t%d\t%d\n",i,j,k);return 0;}程序运行情况如下:1 2 3↙Before change:1 2 3After change:3 1 26.输入一个10个元素得一维数组,在主函数中用scanf函数输入。
用指针方式编程找出最大与最小数,并指出最大数与最小数得位置。
解:int y_max(int *p,int n){int max=*p,i,k=0;for(i=0;i<n;i++) /*这里判断到i<n,而不就是i<=n*/{if(max<*(p+i)){k=i;max=*(p+i); /*记得要在这里更新一下max得记录*/}}return k;}#define N 10#include<stdio、h>int main(){int a[N];int i,m,max;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)printf("%d ",a[i]);m=y_max(a,N);printf("\nmax=a[%d]=%d",m,a[m]);return 0;}程序运行情况如下:1 5 6 78 9 6 4 72 3↙1 5 6 78 9 6 4 72 3max=a[3]=787.输入一段文字,统计其中所包含得数字字符与字母字符个数。
解:#include<stdio、h>#include<math、h>#include<string、h>#define N 80int cnum=0,dnum=0; /*全局变量用于在两个函数之间传递数据*/ int main(){char ch[N];void count(char c);int i,n;gets(ch);n=strlen(ch);for(i=0;i<N;i++)count(ch[i]); /*数组元素作为函数得实参*/ printf("%d,%d\n",cnum,dnum);}void count(char c){if(c>='0'&&c<='9')dnum++;if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) cnum++;return 0;}程序运行情况如下:hello12345↙5,58.请写出下列程序段得输出结果。
(1)#include <stdio、h>int main(){int a[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;printf("%d,%d",*p,*(p+3));return 0;}解:1,6(2)#include<stdio、h>int main(){int a[]={1,2,3,4,5,6};int *p;p=a;printf("%5d%5d%5d%5d\n",*p,*(++p),*++p,*(p--));printf("%5d%5d\n",*p,*(a+2));return 0;}解:3 3 2 12 3(3)#include<stdio、h>#include<string、h>int main(){char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));return 0;}解:-1(4)#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;s1++;s2--;}}int main(){char p[]="1234567";fun(p,strlen(p));puts(p);return 0;}解:7654321(5)#include<stdio、h>int main(){char *a[]={"Pascal","C language","dBase","Coble"};char (**p)[];int j;p=a+3;for(j=3;j>=0;j--)printf("%s\n",*(p--));return 0;}解:CobledBaseC languagePascal9.用一个函数实现两个字符串得比较,即自己写一个strcmp函数:strcmp(s1,s2)如果s1==s2,则函数返回值为0;如果s1!=s2,返回它们两者第一个不同字符得ASCII码差值(如“BOY”与“BAD”,第二个字符不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值,如果s1<s2,则输出负值。
两个字符串s1,s2由main函数输入,strcmp函数得返回值也在main函数中输出。
解:#include<stdio、h>int strcmp(char *s1,char *s2){for(;*s1==*s2&&*s1&&*s2;s1++,s2++); /* 找不同得字符 */return (*s1-*s2);}void main(){char a[10],b[10];gets(a);gets(b);printf("%d\n",strcmp(a,b));}程序运行结果如下:hello↙world↙-1510.设计一个程序,管理一个班得计算机成绩,要求采用一维数组来存储学生得成绩。
解:#include <stdio、h>int main(void){float a[10];int i=0;double sum = 0、0;float avg = 0、0;for(i=0;i<10;i++){printf("请输入第%d个同学得成绩:",i+1);scanf("%f",&a[i]);printf("\n");sum+=a[i];}avg = sum/10、0;printf("%f\n",avg);return 0;}程序运行结果如下:请输入第1个同学得成绩:85↙请输入第2个同学得成绩:89↙请输入第3个同学得成绩:90↙请输入第4个同学得成绩:78↙请输入第5个同学得成绩:69↙请输入第6个同学得成绩:58↙请输入第7个同学得成绩:78↙请输入第8个同学得成绩:95↙请输入第9个同学得成绩:100↙请输入第10个同学得成绩:89↙83、10000011.输入10个整数,将其中最小得数与第一个数对换,把最大得数与最后一个数对换,用指针来实现。