资源描述
天津工业大学计算机专业C语言经典笔记
1. 将一个二维数组的行和列的元素互换存到另一个数组里。
#include <stdio.h>
main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{ for(j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{ for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
2. 运用冒泡法对输入的10整数进行从小到大排序。
#include <stdio.h>
main()
{ int a[10];
int i,j,t;
printf("input numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
3. 运用数组来解决求Fibonaai数列问题。
#include <stdio.h>
main()
{ int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)
{ if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
4. 求100-999之间的水仙花数。
#include <stdio.h>
main()
{ int i,k,m,n;
for(i=100;i<1000;i++)
{ k=i%10;
m=i/10%10;
n=i/10/10;
if(i==k*k*k+m*m*m+n*n*n)
printf("%d\n",i);
}
}
5. 求二维数组的最大值。
#include <stdio.h>
main()
{ int a[4][4];
int i,j;
int max(int a[4][4]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("max=%d\n",max(a));
}
int max(int a[4][4])
{ int i,j,b;
b=a[0][0];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]>b)
b=a[i][j];
return b;
}
6. 求字符串逆序。
#include <stdio.h>
main()
{ int i,n;
char s[80],temp;
scanf("%s",s);
n=strlen(s);
for(i=0;i<n/2;i++)
{ temp=s[i];s[i]=s[n-1-i];s[n-1-i]=temp; }
printf("%s\n",s);
}
7. 求字符串长度。
#include <stdio.h>
main()
{ char s[80];
int str(char *s);
scanf("%s",s);
printf("ths string number is:%d\n",str(s));
}
int str(char *s)
{ int i;
for(i=0;s[i]!='\0';i++);
return i;
}
8. 写一函数,将两个字符串连接。
#include <stdio.h>
void fun(char s[],char t[])
{ int i=0,j=0;
while(s[i]) i++;
while(t[j])
{ s[i]=t[j];i++;j++; }
s[i]='\0';
}
main()
{ char s[80],t[80];
gets(s);
gets(t);
fun(s,t);
printf("%s\n",s);
}
9. 求同时能被2、3、5、7整除的数(1-500)。
#include <stdio.h>
main()
{ int i;
for(i=1;i<=500;i++)
if(i%2==0&&i%3==0&&i%5==0&&i%7==0)
printf("%d\n",i);
}
10. 求3-100的素数。
#include <stdio.h>
main()
{ int i,j,w;
for(i=3;i<=100;i++)
{ w=0;j=2;
do
{ if(i%j==0) w=1;
j++;
} while(j<i&&w==0);
if(w==0) printf("%3d",i);
}
printf("\n");
}
11. 回文数问题。
#include <stdio.h>
int fun(int n)
{ int n1,n2;
n1=n;n2=0;
while(n!=0)
{ n2=n2*10+n%10;
n/=10;
}
if(n1==n2) return 1;
return 0;
}
main()
{ int num;
scanf("%d",&num);
if(fun(num)) printf("yes\n");
else printf("no\n");
}
12. 判断一个字符串是否为回文。
#include <stdio.h>
#include <string.h>
main()
{ int func(char s[]);
char str[100];
gets(str);
if(func(str)==1) printf("yes!\n");
else printf("no!\n");
}
int func(char s[])
{ int l,i;
l=strlen(s);
for(i=0;i<l/2;i++)
if(s[i]!=s[l-i-1]) return 0;
return 1;
}
13. 将字符串中的小写英文字母转换为大写英文字母。
#include <stdio.h>
char *p(char *s)
{ int i;
for(i=0;s[i]!='\0';i++)
if(s[i]>='a'&&s[i]<='z')
s[i]-=32;
return s;
}
main()
{ char s[100];
gets(s);
puts(p(s));
}
14. 一维数组有10个元素,将其逆序存放。
#include <stdio.h>
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i,t;
for(i=0;i<5;i++)
{ t=a[i];a[i]=a[10-i-1];a[10-i-1]=t; }
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,a[i]);
}
15. 输入两个整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
main()
{ int m,n,p,r,t;
scanf("%d%d",&m,&n);
if(m>n) { t=m;m=n;n=t; }
p=m*n;
while(m!=0)
{ r=n%m;
n=m;
m=r;
}
printf("%d,%d\n",n,p/n);
}
16. 用/4≈1-1/3+1/5-1/7+…公式求的近似值直到最后一项的绝对值小于10-6为止。
#include <stdio.h>
#include <math.h>
main()
{ int i=1,j=1;
float pi=0;
while(fabs(1.0/i*j)>=0.000001)
{ pi+=1.0/i*j;
i+=2;
j=-j;
}
pi*=4;
printf("pi=%f\n",pi);
}
17. 以下程序的功能是:求斐波那契数列的:1,1,2,3,5,8,………的前40个数,即
F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
#include <stdio.h>
main()
{ int i;
long f1=1,f2=1;
for(i=1;i<=20;i++)
{ printf("%12ld %12ld ",f1,f2);
if(i%2==1) printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}
18. 求1!+2!+3!+4!+……20!
#include <stdio.h>
main()
{ int i;
float t=1,s=0;
for(i=1;i<=20;i++)
{ t*=i;
s+=t;
}
printf("%f\n",s);
}
19. 以下程序的功能是:输出以下图案
*
***
*****
*******
*****
***
*
#include <stdio.h>
main()
{ int i,j,k;
for(i=1;i<=4;i++)
{ for(j=1;j<=4-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=3;i>=1;i--)
{ for(j=1;j<=4-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
20. 求一个3×3的整型矩阵对角线之和
#include <stdio.h>
main()
{ int a[3][3],i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("%d\n",sum);
}
21. 输出以下的杨辉三角的前10行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
……………………………
………………………………
#include <stdio.h>
main()
{ int a[10][10],i,j,t;
for(i=0;i<10;i++)
{ a[i][0]=1;a[i][i]=1; }
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<10;i++)
{ for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
22. 写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。
#include <stdio.h>
int fun(int x)
{ int i,t=1;
for(i=2;i<x;i++)
if(x%i==0) t=0;
return t;
}
main()
{ int x;
scanf("%d",&x);
if(fun(x)) printf("Yes\n");
else printf("No\n");
}
23. 写一函数,使给定的一个二维整型数组数组(3×3)转置,即行列互换
#include <stdio.h>
void fun(int a[3][3])
{ int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{ t=a[i][j];a[i][j]=a[j][i];a[j][i]=t; }
}
main()
{ int a[3][3]={1,2,3,4,5,6,7,8,9},i,j;
fun(a);
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
24. 运用递归方法求数组的最大值
int fun(int a[],int n)
{ int max;
if(n==1) max=a[0];
else max=fun(a,n-1);
if(max<a[n-1]) max=a[n-1];
return max;
}
main()
{ int a[]={1,2,3,4,5};
printf("%d\n",fun(a,5));
}
25. 用递归法求m!
#include <stdio.h>
long f(int m)
{ return m==0?1:m*f(m-1); }
main()
{ int m;
scanf("%d",&m);
printf("%ld\n",f(m));
}
26. 写出程序的运营结果。
#include <stdio.h>
main()
{ int t,x,y,z;
x=y=z=1;
t=++x||++y||++z;
printf("%d,%d,%d,%d\n",x,y,z,t);
}
答案:2,1,1,1
27. 写出程序的运营结果。
#include <stdio.h>
int m=3;
int f(int x,int y)
{ int m=27;
return (x*y-m);
}
main()
{ int a=7,b=5;
printf("%d\n",f(a,b)/m);
}
答案:2
28. 写出程序的运营结果。
#include <stdio.h>
main()
{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,(*b)[4];
for(i=0;i<2;i++)
{ b=a+i;
printf("%d",*(b[i]+1));
}
printf("\n");
}
答案:210
29. 写出程序的运营结果。
#include <stdio.h>
main()
{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i,j;
int (*p)[4]=a;
for(i=0;i<3;i++,p++)
for(j=0;j<4;j++)
printf("%d",*(*p+j));
printf("\n");
}
答案:112
30. 写出程序的运营结果。
a
b
c
\0
d
e
f
g
h
i
j
\0
d
e
f
g
h
i
j
\0
h
i
j
\0
main() s->
{ char *s="abc",*t="defghij";
strcpy(s,t);
printf("%s\n",t);
}
答案:hij t->
注:此题属于变量连续的存储空间。
31. 下列给定表达式与(m)?a++:b++等价的是
A. m==0?a++:b++ B. m==1?a++:b++
C. m!=0?a++:b++ D. m!=1?a++:b++
答案:C
32. 下列不是死循环的是
A. i=100;
while(1)
{ i=i%100;
i++;
if(i>100) break;
}
B. for(;;);
C. int k=32764;
do
{ k++;k++; }
while(k<0);
D. int s=32764;
while((s++%2)||(s%2) s++;
答案: C
33. 在C语言中,若有以下语句:
char b[5],*p=b;
对的的赋值语句是
A. b="abcd"; B. *b="abcd";
C. p="abcd"; D. *p="abcd";
答案:C
34. 在C语言中,若有以下语句:
struct st
{ int n;
struct st *next;
};
struct st a[3]={5,&a[1],7,&a[2],9,’\0’},*p;
p=&a[0];
则表达式值为6的是
A. p++->n B. p->n++
C. (*p).n++ D. ++(p->n)
答案:D
35. 在不同函数中可以使用的相同的变量(√)。
36. 形参为局部变量(√)。
37. 一个函数内定义的变量,只在函数内有效(√)。
38. 一个函数内的复合语句中定义的变量在本函数内有效(×)。
注:只是在复合语句内部有效。
39. char str[]="abc",*p=str;则p和str是完全相同两个指针变量(×)。
注:p指针名,str是数组名
40. 被调用函数结束后系统回收函数中所有变量占据的内存空间(×)。
注:不回收函数有效的静态变量的内存空间
展开阅读全文