2009年C语言程序设计实验指导答案

更新时间:2023-09-28 13:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二:变量类型与输入输出

1. a=34,a=53,b=1234,b=4660 ☆

因为0x1234超出了字符类型的表示范围,因此打印的结果看起来奇怪。 2. 输入:a回车

输出:****ch1=a,97****

****ch2=

10,**** 解释ch2的输出:由于输入a回车,因此ch2的值就接受了这个回车,而回车的ascii码的值等于10,因此出现这种结果。如果要修改,需要在ch2=getchar()之前加入一句:getchar(); ☆☆☆

3. 把scanf(“%d”,a)改为scanf(“%f”,&a)

4. 把scanf(“%f”,&a)改为scanf(“%lf”,&a),因为a是double类型的。☆☆☆ 5. 42 42

123.540000 123.540000 1.235400e+002

1.235400e+002 6. 正确的形式:a=3.12,b=9.0 c=10.0 注意的事项是在scanf()中,””中的内容按照原样输入,尽管在实践中没有按照此题那样进行类似输入。 7. 此题不用看

8. #include #define PI 3.14159 int main() { double radius,high,volume; printf(\ scanf(\ volume=PI*radius*radius*high; printf(\ return 0; }

9 #include int main() { int i; printf(\ scanf(\ printf(\分别以无符号、八进制、十六进制 return 0; }

10 #include int main() { char ch; printf(\ scanf(\

printf(\字符型就是短整形因此用%d格式控制就可打印 ascii code*/ return 0; }

11 12 easy 忽略

实验三:运算符与表达式

1. 输出:a=2,b=1,i=2 ,这是因为++放在后面是“先使用后自加”。☆☆☆☆☆ 2. 输出:f=5.750000,(int)f=5,这是因为利用了强制类型转换(int) 3. 输出:a=3,b=2,c=3,d=3 解释:a和b值不同的原因是在给a赋值的时刻,2,3是用括号包围的,而b没有,而逗号表达式的值等于最后面的那个值。☆☆☆☆☆

4. 输出:-264 原因是首先执行a-=a*a也就是a=12-(12*12)=-132,然后a+=a因此变为-264☆☆ 5. 输出:a=2,b=0,c=2,d=1 这是因为在执行b=a++ && c++时,由于首先使用a的当前值为0,而在“&&”运算符中当左侧的操作数为0时会发生“短路”现象,即不再计算右侧的”c++”直接就可以判定b=0,因此在这一步中c的值并没有发生变化,而运算完此步a=1。而在下一步d=a++ || ++c中,同样会发生短路现象,因为此时首先利用a的当前值1直接就可以判定d=1,而不再执行++c ☆☆☆☆☆ 6. 输出:3,18

输出:3,3 还是逗号运算符和赋值运算符的问题 ☆☆☆☆☆

7. 把s=1/2*a*b改为s=1.0/2*a*b 千万不要忘了在c语言中1/2=0 ☆☆☆☆☆ 8. easy!

9. #include int main() {

char ch; printf(\ ch=getchar(); ch-=32; putchar(ch); return 0; }

10 11 12 easy!!

实验四:顺序结构程序设计

1. 其中的两处错误发生在:scanf(“%d”,r)应该改为scanf(“%f”&r);另外一处发生在语句

s=3.14*r*r和语句scanf(“%d”,r)次序颠倒,因为一个变量只有先有值之后才能使用。 2. 执行结果为3,5,8,-858993444,因为d没有赋初值因此打印出一个看起来非常奇怪的值。

☆☆☆☆ 3. 输出 7

4. 输入27 输出 27,这是因为ch1=?2?,ch2=?7?

输入2 7输出 4,这是因为ch1=?2?,ch2=? ?(空格),而空格的ascii码为32,?0?的ascii码为48因此算出结果为4 5 输出 1,1 ☆

6. 输出6,7 ,只需要知道++的前缀和后缀的区别即能做出此题。☆☆☆☆ 7. sum=d1+d2+d3+d4+d5; avg=(float)sum/5; /*需要强制类型转换*/ 8. #include int main() {

int a,b,c,max;

printf(\ scanf(\ max=a>b?a:b;

max=max>c?max:c;

printf(\ return 0; }

9. #include #include int main() { double a,b,c,alpha; printf(\ scanf(\ c=sqrt(a*a+b*b-2*a*b*cos(alpha)); printf(\ return 0; }

本程序用到sqrt和cos函数,它们位于头文件,因此在使用它们之前首先要包含此头文件。另外,cos函数接受的弧度,而不是角度。 10

程序如下: #include int main() {

double F,C;

printf(\ scanf(\

C=(double)5/9*(F-32);

printf(\ return 0; }

本程序中要注意因为整数相除仍为整数,因此5/9永远为0,为了得到正确的结果,首先进

行强制类型转换。 ☆☆☆☆☆

实验五:选择结构程序设计

1.2 easy 忽略 3. -1 此题简单

4. 判定一个数位于一个区间,绝对不能出现60<=score<70的情况 应该 (score>=60 && score<70)

此程序修改为: #include void main() {

int score;

if(score>=90 && score<=120) printf(“优”);

else if(score>=80 && score<90) printf(“良”);

else if(score>=70 && score<80) printf(“中”);

else if(score>=60 && score<70) printf(“及格”); else

printf(“不及格”); }

5. 注意switch case中的“fall throught”现象,也就是在没有break的情况下,程序根据匹配的入口一直向下执行,知道碰到break或者}终止。修改时只需要在每个case后面的printf语句后面加上break即可。☆☆☆☆☆ 6. else为if(b>0)的分支,应该改为: #include int main() {

int a=2,b=-3; if(a>0) if(b>0) printf(\ else printf(\ else printf(\ return 0; }

7. #include int main() {

char c;

c=getchar();

if(c>='a' && c<='z') c-=32;

else if(c>='A' && c<='Z') c+=32; else c=c; putchar(c); return 0; }

注意在此程序中有两点容易发生错误:第一if(c>='a' && c<='z')写成if(?a?<=c<=?z?)。第二就是if(c>='A' && c<='Z')语句前应该加else,如果不加else,可以考虑当输入小写字符if(c>='a' && c<='z')满足,执行c-=32此时c变成大写字母,再继续判断if(c>='A' && c<='Z')又满足执行c+=32又回到小写。☆☆☆☆☆ 8 if(a==5)

9 添加的代码为if((x>=0 && x<=5)|| x>=10) 10 easy

11 easy!但是要注意a=0&&b!=0时,此时有一个根。 12 #include

int main() {

int birthYear,age;

printf(“please input the year of your birth!”); scanf(“%d”,&birthYear); age=2006-birthYear;

age=age>=0?age:12-(-age); switch(age) {

case 0:

printf(“属狗”); break; case 1:

printf(“属鸡”); break; case 2:

printf(“属猴”); break; case 3:

printf(“属羊”); break; case 4:

printf(“属马”); break; case 5:

printf(“属蛇”); break; case 6:

printf(“属龙”); break; case 7:

printf(“属兔”); break; case 8:

printf(“属虎”); break; case 9:

printf(“属牛”); break;

case 10:

printf(“属鼠”); break; case 11:

printf(“属猪”); break; }

return 0;

} 13 #include int main() { int score; printf(\ scanf(\ switch(score/10) { case 12: case 11: case 10: case 9: printf(\优\ break; case 8: printf(\良\ break; case 7: printf(\中\ break;

}

case 6: printf(\合格\ break; default: printf(\不及格\ }

return 0;

实验六:循环结构程序设计(一)

1. easy! 2. 输出0 3. 循环次数:无限次 for(;;)代表无限次循环

4. 输出:-2-1 ☆☆☆☆☆还是考后缀和前缀的问题 5. 输出:-1 0 把i++换成++i输出:-1 6.

#include void main() {

int i;

scanf(”%d”,&i); for(; i!=0;)

scanf(”%d”,&i); }

7. 程序1输出: 0 1 3 6

??? 45

程序2输出: 0 1 2 3

??? 9

因为程序2的s在每次进入for循环体都要重新进行初始化为0

8 完成的功能是:s=1+2+3+?+n 9. 完成的功能是:s=1!+2!+3!+?+n! 10 完成的功能是:s=x1+x2+x3+?+xn

11.#include void main() {

int n,i;

long t=1;/*防止阶乘较大而溢出*/ printf(“please input the value of n”); scanf(“%d”,&n); for(i=1;i<=n;i++) t*=i;

printf(“the factorial of n is:%ld”,t);

}☆☆☆☆☆

12 #include void main() {

int i,n,t=1;

scanf(“%d”,&n); double s=0.0; for(i=1;i<=n;i++) { t*=i; s+=1/(double)t; }

printf(“%lf”,s); }

注意:在此程序中,整数除以整数还是整数,因此1/2的结果为0而不是0.5,这也是很多同学无论输入的n值是多少都得出结果为1,,因此需要设置s为double类型,并且需要对得出的阶乘进行强制类型转换。☆☆☆☆☆ 13 #include #include void main(){ int i=1; double x,item,s,eps=1e-4; scanf(“%lf”,&x); item=1;//第一项值 s=0;//累加和初始值 while(fabs(item)>eps){ s+=item;//把一项值加到s中 item=item*x/i;//求出下一项 i++; } printf(“%lf,%lf\\n”,s,exp(x));//计算结果与exp()函数对比 }

解决类似程序的关键就是找出后一项和前一项的关系在此程序中x n=xn-1?x ,因此程序中

n出现item=item*x/i;这一语句。

实验7:循环结构程序设计(二)

1.输出 7 easy! 2 easy!

3 #include void main() {

int i=0,k=0; do { k+=i; i+=3; printf(\ }while(i<10); }

4. 输出 1,2

3,3 5. 输出1,2

6 #include #include int main(){ double s,t,eps=1e-5; s=2;//已包含第一项 t=sqrt(2);//第二项分母 while(fabs(2/t-1)>eps){//最后一项接近1 s=s*2/t; t=sqrt(2+t);//获得下一项分母 } printf(“%f\\n”,s); return 0; }

7. #include void main() {

int i,j,k,sum=0; for(i=1;i<=4;i++) for(j=1;j<=4;j++)

for(k=1;k<=4;k++) {

if(i!=j&&i!=k&&j!=k) {

printf(\ sum++; } } printf(\

printf(\}

8. #include int main() { char str[10000]; int i,letter_num=0,space_num=0,digit_num=0,other_num=0; gets(str); for(i=0;str[i]!='\\0';i++) {

if((str[i]>='a'&& str[i]<='z') ||(str[i]>='A'&&str[i]<='Z')) letter_num++; else if(str[i]==' ') space_num++; else if(str[i]>='0' && str[i]<='9') digit_num++; else other_num++; } printf(\英文字母个数为%d,空格个数%d,数字个数%d,其他字符个数%d\ return 0;

}☆☆☆☆☆

9. #include int main() { int a=0,b=1,c,i=1; printf(\ while(i<=18) { c=a+b; a=b; b=c; printf(\ i++; } return 0; }

10 #include int main() { int num; printf(\ scanf(\ while(num!=0) { printf(\ num/=10; } return 0; }

11 #include /*

下面的函数用于求最大公约数 */

int gcd(int u,int v) { int t; if(u

下面的函数用于求最小公倍数 */

int gmd(int u,int v) { return gcd(u,v)*(u/gcd(u,v))*(v/gcd(u,v)); }

int main() { int m,n;

printf(\ scanf(\ printf(\最大公约数是%d,最小公倍数是%d\ return 0; }☆☆☆☆☆

12. #include #include /*

下面的函数用于判断一个数是否是素数,如果是就返回1否则返回0 */

int isPrime(int m) { int i;

for(i=2;i<=sqrt(m);i++) if(m%i==0) return 0; return 1; } /*

对形参v求出其素数表达式 */

void get_expr(int v) { int i=2; printf(\ while(v!=1) {

while(v%i==0 && isPrime(i)) { v/=i; printf(\ } i++; } printf(\}

int main() { int i; printf(\ scanf(\ get_expr(i); return 0; }

实验8 综合程序设计练习(一)

1. 输出:3 注意x=1.000000而不是1.800000。

2. 输出:5,7,同样是考查前缀和后缀问题☆☆☆☆☆ 3.easy忽略

4.输出:a=8,b=22 5.填入的内容为:if(k%3==0 || k%7==0) 6. #include int main() { double x,y; printf(\ scanf(\ if(x<=-1) y=x*x; else if(x>-1 && x<=1) y=-1; else y=1-x; printf(\ return 0; }

7. #include void main() {

int a,n,count=1; long int sn=0,tn=0;

printf(\ scanf(\ printf(\ while(count<=n) {

tn=tn+a; sn=sn+tn; a=a*10; ++count; }

printf(\}

8. #include /*

下面的函数用于判断一个数是否是水仙花数如果是返回1否则返回0 */

int isDaff(int i) {

int high,medium,low; high=i/100; medium=(i0)/10; low=i; return (high*high*high+medium*medium*medium+low*low*low==i)?1:0; }

int main() { int i; for(i=100;i<=999;i++) if(isDaff(i)) printf(\ return 0; }

9. #include

int isTri(int a,int b,int c);//判断是否构成三角形,如果是返回1否则返回0

int rangleTri(int a,int b,int c);// 判断是否构成直角三角形,如果是返回1否则返回0 int isoTri(int a,int b,int c); //判断是否构成等腰三角形,如果是返回1否则返回0 int equTri(int a,int b,int c);// 判断是否构成等边三角形,如果是返回1否则返回0 int main() { int count=0; int a,b,c; printf(\ scanf(\ while(count<5) { if(isTri(a,b,c)) { count++; if(rangleTri(a,b,c)) printf(\ if(isoTri(a,b,c)) printf(\ if(equTri(a,b,c)) printf(\ if(count==5) break; scanf(\ } else {

printf(\

scanf(\ } } return 0; }

int isTri(int a,int b,int c) { return (a+b>c && a+c>b && b+c>a)?1:0; }

int rangleTri(int a,int b,int c) { return (a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b)?1:0; }

int isoTri(int a,int b,int c) { return (a==b || b==c || a==c)?1:0; }

int equTri(int a,int b,int c) { return (a==b && a==c)?1:0; }

10. 因为两个数是互质数的概念是两个数的最大公约数是1,因此可以利用前面写的求最大公约数的函数 #include

int gcd(int u,int v);//求两个数的最大公约数

int huzhi(int u,int v);//判断两个数是否互质,是就返回1否则返回0 int main() { int m,n; printf(\ scanf(\ if(huzhi(m,n)) printf(\ else printf(\ return 0; }

int gcd(int u,int v) { int t; if(u

u=v; v=t; } while(u%v!=0) { t=u; u=v; v=t%v; } return v; }

int huzhi(int u,int v) { return gcd(u,v)==1?1:0; }

11. 可以利用前面写过的判断两个数是否是素数的函数 for循环版本 #include #include /*

判断一个数是否是素数 */

int isPrime(int m) { int i;

for(i=2;i<=sqrt(m);i++) if(m%i==0) return 0; return 1; }

int main() { int i; for(i=1000;i<=2000;i++) if(isPrime(i)) printf(\ return 0; }

while循环版本 #include #include int isPrime(int m) { int i;

for(i=2;i<=sqrt(m);i++) if(m%i==0) return 0; return 1; }

int main() { int i=1000; while(i<=2000) { if(isPrime(i)) printf(\ i++; } return 0; }

12 忽略不看

实验9数组

1. 注意当部分初始化时,未初始化的部分元素值为0,因此a[4]~a[9]的值为0,b数组因为

没有初始化所以b[0]~b[9]的值为随机值。 2. easy!忽略

3. N为变量,不能定义数组int a[N],可以在void main()之前加入#define N 10 然后,scanf语句有错,应该改为scanf(“%d”,&a[i]); 4. 填空部分为s+=a[i][j]; 5. 填空部分为max=a[i]; 6. 第一个填空: a[10], 第二个填空:&a[i] 第三个填空a[j]=t ☆☆☆☆☆ 7. 第一个空填写swapFlag=0; 第二个空填写swapFlag=1; 8. 第一个填空: l=m+1, (注意l和1的区别)第二个填空:l<=h☆☆☆☆☆ 9. #include int main(){ int a[4][4],i,j,k=0,t; for(i=0;i<4;i++){//产生并输出矩阵 for(j=0;j<4;j++){ a[i][j]=j

{

t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t;

} }

printf(\

for(i=0;i<4;i++){//输出转置矩阵 for(j=0;j<4;j++) printf(\ printf(\ } return 0; }☆☆☆☆☆

10 #include int main(){

int a[10]={2,3,4,5,6},len=5,i;//len为有效长度

for(i=len;i>3;i--)a[i]=a[i-1];//后移元素只能从后面开始 a[3]=7; //插入元素

len++; //有效长度增1

for(i=0;i

11 #include #define N 30 void main() {

int i,k,m,num[N];

for(i=0;i<30;i++)

num[i]=i+1; //给每个人编号

i=0; //i为每次循环时的计数变量 k=0; //k为1 2 3 数的报数 变量 m=0; //m为退出的人数 while(m

if(num[i]!=0) k++; if(k==5)

{ num[i]=0; //对退出的人编号为0 k=0; m++; } i++;

if(i==N)i=0; //报数到尾后i恢复为0 }

i=0;

while(num[i]==0) i++;

printf(\}☆☆☆☆☆

12 #include int main() { int i,j; int a[7][7]; for(i=0;i<7;i++)//利用杨辉三角的性质输入 a[i][0]=a[i][i]=1; for(i=2;i<7;i++) for(j=1;j

实验10 字符串处理

1. 注意a不构成字符数组,因为没有空间存储?\\0? ☆☆☆☆☆ 2. 输出结果为:abcd,因为所有的字符串处理函数碰见?\\0?就中止 3. 在调用strcpy()时q的空间不够,修改为char q[100]; ☆☆☆☆☆ 4. 输出

ABC 也就是说a数组什么也输出不了,因为其第一个字符就是?\\0?(它的ascii码为0而不是?0?) 数组b输出前三个分别为大写的ABC 5. 输出:big,道理同上

6. 第一个空填写j=len-1,第二个空填写str[j]=t; 7. 填写:a[i]!=?\\0?; 8 #include void main() {

char a[100],b[100]; int i,j; gets(a); gets(b); i=j=0;

while(a[i]!='\\0') i++;

while(b[j]!='\\0') { a[i]=b[j];

i++; j++; }

a[i]='\\0';//这一步很重要,不要忘了在最后加上'\\0'; puts(a); }☆☆☆☆☆

9. #include int main() { char a[100]; int i; gets(a); for(i=0;a[i]!='\\0';i++) { if(a[i]>='a' && a[i]<='z') a[i]-=32; else if(a[i]>='A' && a[i]<='Z') a[i]+=32; else a[i]=a[i]; } puts(a); return 0; }

用函数版本为: #include void inverse(char *p) { for(;*p!='\\0';p++) { if(*p>='a' && *p<='z') *p-=32; else if(*p>='A' && *p<='Z') *p+=32; else *p=*p; } }

int main() { char a[100]; gets(a); inverse(a); puts(a);

5此题较难,忽略. #include

void input_data( int(*p)[5],int n) { int i,j; printf(\ for(i=0;i

void average_score(int (*p)[5],int n,double *average_row) {

int sum,i,j;

for(i=0;i

void main() { int score[5][5],i; double average[5]; input_data(score,5); average_score(score,5,average); for(i=0;i<5;i++) printf(\}

6. #include

int is_twodigits_same(int n) { int low_digit=n; int mid_digit=((n-low_digit)/10); int high_digit=n/100; if((low_digit==mid_digit || low_digit==high_digit || mid_digit==high_digit) (!(low_digit==mid_digit && low_digit==high_digit)))

&&

return 1; else return 0; }

int compute_integer() { int i,j,num; for(i=100;i<=999;i++) for(j=10;j<=33;j++) { if(i==j*j && is_twodigits_same(i)) { num++; printf(\ } } return num; }

void main() { compute_integer(); }

7.添加的程序部分为: if(p[i]>*maxp) maxp=p+i; if(p[i]<*minp) minp=p+i; 8. #include

void decompose(double f) { int i=(int)f; double d=f-i; printf(\}

void main() { double f; printf(\ scanf(\ decompose(f); }

9.忽略

10 #include

int disperse(int n,int array[]) {

int i=2,count=1,flag; array[0]=1; while(i<=n) { flag=0; while(n%i==0) { flag=1; n/=i; array[count]=i; } i++; if(flag) count++; }

return count; }

void main() { int n,i,array[100];

printf(\ scanf(\ for(i=0;i

11 忽略

12 难得太大,忽略 13#include

void convert(int n,int method,char *result) {

char ch[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int temp,i=0; while(n) { temp=n%method; n=n/method; result[i++]=ch[temp]; }

result[i]='\\0';

printf(\转换为%d进制后为:\for(;i>=0;i--)

printf(\ }

int main() {

int num,method; char result[100];

printf(\ scanf(\ convert(num,method,result); return 0; }

return 0; }

10 easy!参考实验7第八题 11. #include #include

void function(char str[]); /*函数声明在外面*/ void main() {

char str[100];

printf(\请输入一行字符串:\ gets(str);

str[strlen(str)]='#'; function(str); }

void function(char str[]) {

int i=0,j=0,k=0;

char str1[30][30],str2[100];

int state = 0; //设制一个状态记录str[i]是不是字母, 0表示不是 1 表示是

for(i=0;str[i]!='\\0';i++) {

if((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z')) {

str1[j][k]=str[i]; k++;

str1[j][k] ='\\0'; /*字符串都以'\\0'结尾所以每次都保持str1[i]是一个字符串, 复制给str2就不会出现少'\\0'的情况啦*/

state = 1; //及时设置状态 } else {

if(state == 1) {j++;} //仅仅让单词存进去 别的字符就别存到str1中了 state = 0; //及时设置状态 k=0; } }

strcpy(str2,str1[0]);

for(i=1;i

if(strlen(str1[i])>strlen(str2)) /*总是让str2保持是最长的字符串*/

strcpy(str2,str1[i]); }

printf(\该字符串中最长的单词是:%s\\n\}☆☆

12 #include #include int main() {

char ch[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}, output[20]; int input,temp,n,i=0;

printf(\请输入你想要转换的十进制数:\scanf(\

printf(\请输入要转换的进制(2<=n<=16):\scanf(\input=fabs(input); while(input) {

temp=input%n; input=input/n;

output[i++]=ch[temp]; }

output[i]='\\0';

printf(\转换为%d进制后为:\for(;i>=0;i--)

printf(\return 0;

}☆☆☆本题是对课本的扩展,扩展到任意进制输出,注意用除n取余法,并且逆序输出。 实验11 课堂已讲忽略

实验12 函数(一)

1. 输出结果为1,2 要记住按值传递不改变实参的值而按地址传递可以改变实参的值

2. 输出结果为13542354,做这样的题目记住两点就可以,一是程序从main()函数开始执行,二是当调用完一个函数后,程序流程返回到发生函数调用的地方的下面一条语句继续执行。 3. 填空为max(a,b); 4. 第一个空为*maxp ,第二个空为 &min 其实这是利用形参传地址来使得函数可以返回多个值

5. 填空为 swap(&a[i],&a[j]) 6. 第一个空为double pow(double m,int n); (这一步为函数声明) 第二个空为m 7. 第一个空为include 第二个空为 return i; 第三个空为 strlen(a); 8. int* maxp(int a[],int len) { int max=a[0],i;

for(i=1;i9. 编写的函数为: #include

float TriArea(float a,float b,float c) {

float s=(a+b+c)/2;

return sqrt(s*(s-a)*(s-b)*(s-c)); }

10 参考第八章第八题 11 #include #include void inverse(char *str) {

char t;

int i=0,j=strlen(str)-1; for(;i<=j;i++,j--) { t=str[i]; str[i]=str[j]; str[j]=t; } }

int main() { char str[100]; gets(str); inverse(str); puts(str); return 0; }

实验13 函数(二)

1. 输出:22 2. 输出:n=-90 3. 输出: i=2,j=2 i=3,j=2 i=4,j=2 此题是重点,static变量具有局部可见性但是具有全局存储属性,也就是说static变量在函数调用结束之后不释放内存,还保留上次的值,这也就是i为什么随着每次f()函数的调用值增1的原因,同时static变量只执行一次初始化。但是一般的auto变量在函数调用的时候分配内存,在调用结束之后释放内存,因此这是j三次函数调用值都等于2的原因。☆☆☆☆☆

4.输出:543210-1-2-3-4-5-6-7-8@ABCDEFGHIJKLM 此题较难可忽略。 5.输出:A=2,B=1 ,此题关键是理解全局变量和局部变量 ☆☆☆☆☆ 6.输出:5,25 ☆☆☆☆

7.修改main()函数中的f(y,x)为f(&y,x),程序的输出为2,2 8. #include double f(double x); double q(double x); int main() { double x; printf(\ scanf(\

printf(\ return 0; }

double f(double x) { return (2*x*x*x+3*x*x-4*x+1)/(10*x*x+3); }

double q(double x) { return 3*f(x)*f(x)*f(x)+2*f(x)*f(x)+f(x); }

9. #include

int strcat_new(char *str1,char *str2) {

char *p=str1,*q=str2;

while(*p)//让p最终指向str1的?\\0? p++;

while(*p++=*q++);//把str2连到str1的后面

return p-1-str1;//返回长度指针相减求出的是指针之间的元素个数 }

int main() { char str1[100],str2[50]; int i; gets(str1); gets(str2); i=strcat_new(str1,str2); puts(str1); printf(\ return 0; }☆☆☆☆☆

10. #include int Fibo(int n) { if(n==1 || n==2) return 1; else return Fibo(n-1)+Fibo(n-2); }

int main() { int n; scanf(\ printf(\ return 0; }

11. 此题难度太大,可以忽略 #include void bi(int n) { if(n==0 || n==1) putchar('0'+n%2); else { bi(n/2); putchar('0'+n%2); } }

void main() { int num; printf(\ scanf(\ bi(num); }

12 虽然简单,但是未学函数指针,此题忽略 输出:4 8 实验14 综合程序设计练习(二)

1.easy!相当于对二维矩阵进行转置 2.输出ABbcd 3.输出12☆☆☆☆☆

4.easy!改为按地址传递void swap(int *p,int *q);

本文来源:https://www.bwwdw.com/article/6umd.html

Top