C语言练习题库40题版答案

更新时间:2023-10-28 01:22:01 阅读量: 综合文库 文档下载

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

好好学习

1.将所有的水仙花数保存到维数组a中。 (所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。

例如:153=1*1*1+5*5*5+3*3*3)

#include int main() {

int s[100]={0}; int i;

int k=0;//表示水仙花数的个数。 int a,b,c;

for(i=100;i<1000;i++) {

a=i;

b=(i0)/10; c=i/100;

if(i==a*a*a+b*b*b+c*c*c) {

s[k]=i;

printf(\ k++;

} } }

2. 按下面的公式求sum的值。

sum = 1 - 2 + 3 - 4 + 5 - 6 + …… + 99 – 100

#include int main() {

int i; int k=1; int sum=0;

for(i=1;i<=100;i++) {

sum=sum+k*i; k=-1*k; }

printf(\ }

3.编写代码,实现冒泡排序,并要求:

(1)在有序的数组中,接着插入一个元素,新数组仍然有序 (2)在数组中删除一个元素,新数组仍然有序 (3)对该数组进行逆序存放

#include int main() {

void sort(int a[],int m);

int a[100]={1,22,55,8,9,29,3,5,244,24}; int i; int x;

sort(a,10);

for(i=0;i<10;i++) {

printf(\ }

/*插入一个数后,仍然按序输出*/ printf(\

printf(\请输入要插入的数字:\ scanf(\ insert(x,a,11); for(i=0;i<11;i++) {

printf(\ }

/*逆序输出序输出*/ printf(\ for(i=10;i>=0;i--) {

printf(\

好好学习

} { int i,j,t; for(i=0;ia[j+1]) { { void sort(int a[],int m) ; t=a[j]; a[m-1]=x; a[j]=a[j+1]; sort(a,m); a[j+1]=t; } } } /* 冒泡排序*/ } void sort(int a[],int m) //m 表示数组的个 数

4. 编写程序实现以下功能,能够将下面所示的6*6的二维矩阵读入并存储到二维数组中,并求其对角线之和,以及最大数,并输出最大数所在的行列下标。 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11

#include int main() {

int i,j;

int a[6][6]={{35, 1, 6, 26, 19, 24}, { 3 , 32 , 7 ,21, 23 , 25} , { 31 , 9 , 2 , 22 , 27 , 20} , { 8 , 28 , 33 ,17 , 10 , 15 } , { 30 , 5 , 34 , 12 , 14 , 16} , { 4 , 36 , 29, 13 , 18 , 11} }; int max=a[0][0]; int col,row; int sum=0;

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

for(j=0;j<6;j++) {

if(i==j||i+j==5)sum=sum+a[i][j];

好好学习

}

printf(\

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

for(j=0;j<6;j++) {

if(a[i][j]>=max) {

max=a[i][j]; col=j; row=i; } }

printf(\}

5. 对任意输入的5个字符数组进行排序 比如:输入

abc def fdc ccc efg 得到

abc ccc def efg fdc

6. 求2个数组的交集 输入

{5,6,7,9,10} {2,3,4,5,6} 得到 {5,6}

#include int main() {

int a[5]={5,6,7,9,10}; int b[5]={2,3,4,5,6}; int i,j;

for(i=0;i<5;i++) {

for(j=0;j<5;j++) {

if(a[i]==b[j]) printf(\

}

好好学习

} }

7. 求[m,n]之间既不能被7整除也不能被5整除的整数之和,m和n的值由键盘输入。

例如,如果m和n的值分别为10和20,则计算结果为:106。

#include int main() {

int m,n; int i,sum=0;

printf(\请输入m和n:\ scanf(\ for(i=m;i<=n;i++) {

if(i%7!=0 && i%5!=0) sum=sum+i; }

printf(\}

8. 求字符串的长度并输出。

例如,当字符串1为\ 则应输出:Result is: 19

#include int main() {

char str[100]=\ int i=0; //str的下标 gets(str);

while(str[i]!='\\0') {

i++;

str[i]=str[i]+1; }

printf(\字符串长度为:%d\ }

9. 将字符串中所有的大写字母转换为小写,其它字符不变(不使用转换函数)。 例如,当字符串为\ 输出:\

好好学习

#include int main() {

char str[100]=\ int i=0;

printf(\请输入要转换的字符串:\ gets(str);

while(str[i]!='\\0') {

if(str[i]>='A' && str[i]<='Z') str[i]=str[i]+32; i++; }

printf(\}

10. 给学生评定成绩,若学生成绩在60-69则输出“及格”,70-89分为“良好”;90-100分为“”优秀,60分一下为“不及格”,分别用if-else语句和switch语句编程实现。

#include int main() {

int score;

printf(\请输入分数:\ scanf(\ if(score<60)

printf(\不及格\\n\ else if(score<70)

printf(\及格\\n\ else if(score<90)

printf(\良好\\n\ else

printf(\优秀\\n\}

#include int main() {

int score; int class;

printf(\请输入分数:\ scanf(\ class=score/10; switch(class) {

case 9:

printf(\优秀\\n\ break; case 8:

case 7:

printf(\良好\\n\ break; case 6:

printf(\及格\\n\ break; default:

printf(\不及格\\n\ break; } }

11:若有3个字符串s1.,s2,s3,其中,s1=“abcdef”,s2=“123456”,

好好学习

要求用字符数组实现将s1的内容复制到s3中,并将s2的内容添加在s3后面的功能,最后输出字符串s3

#include } int main() while(s2[j]!=0) { { char s1[100]=\ s3[i]=s2[j]; char s2[100]=\ j++; char s3[200]; i++;

} int i=0;//表示s1下标

s3[i]='\\0'; int j=0;//表示s2下标

while(s1[i]!=0) printf(\ { s3[i]=s1[i]; } i++;

12:编写一个通用函数swap(),在main函数中调用可以实现2个数的交换。

#include int main() {

void swap(int *p1,int*p2); int a,b;

scanf(\ printf(\ swap(&a,&b);

printf(\ }

void swap(int *p1,int*p2) {

int temp; temp=*p1; *p1=*p2; *p2=temp; }

13.设计程序输出如下的杨辉三角形(正三角形),共6行:

好好学习

#include int main() {

int a[7][15]={0}; int i,j; a[0][7]=1;

for(i=1;i<7;i++) {

for(j=1;j<14;j++) {

a[i][j]=a[i-1][j-1]+a[i-1][j+1]; } }

for(i=0;i<7;i++) {

for(j=0;j<15;j++) {

if(a[i][j]!=0)

printf(\ else

printf(\ \ }

printf(\ } }

14.设计程序求10000以上的最小素数。

#include int main() {

int i=10000; while(1) {

i++;

if(sushu(i)) break; }

printf(\}

int sushu(int x) {

int i;

for(i=2;i<=x-1;i++) if(x%i==0) break; if(i==x)

return 1; else

return 0; }

15. 输出九九乘法表。

#include int main() {

int i,j;

for(i=1;i<=9;i++)

好好学习

{

for(j=1;j<=9;j++) {

if(i>=j) printf(\ }

printf(\ } }

16. 输入一个不超过五位的正整数, 输出其逆数。例如输入12345,输出应为54321。 #include

int main() {

int x;

scanf(\ while(x!=0) {

printf(\ x=x/10; } }

17.结合书上打印菱形的思想,打印出以下图形: a bcd efghi gklmnop qrstu vwx y

好好学习

#include

int main() {

int i,j,k; int m=97;

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

for(j=4-i; j>0; j--) {

printf(\ }

for(k=1; k<=2*(i-1)+1; k++) {

printf(\ m++; }

printf(\

}

for(i=1; i<=4-1; i++) {

for(j=1; j<=i; j++) {

printf(\ }

for(k=2*(4-i-1)+1; k>0; k--) {

printf(\ m++; }

printf(\

} }

18. 试用C语言求解“百钱百鸡”问题。百钱买百鸡, 鸡翁一值钱三,鸡母一值钱二,鸡雏三值钱一,问鸡翁、鸡母、鸡雏各几何?

#include int main() {

int x,y,z; int pos=0;

for(x=1; x<=34; x++) {

for(y=1; y<=50; y++) {

for(z=1; z<=300; z++) {

if(3*x+2*y+z/3==100 && z%3==0) {

pos=1; break; } }

if(pos==1) break; }

if(pos==1) break; }

好好学习

printf(\?ì=%d?|??=%d?|3?=%d\}

19. 斐氏数列是公元13世纪数学家 斐波拉契发明的。即:1,2,3,5,8,13,21,34,55,89,??,输出其前15项。

#include int main() {

int x,y,z; int pos=0;

for(x=1; x<=34; x++) {

for(y=1; y<=50; y++) {

for(z=1; z<=300; z++) {

if(3*x+2*y+z/3==100 && z%3==0) {

pos=1; break; } }

if(pos==1) break; }

if(pos==1) break; }

printf(\?ì=%d?|??=%d?|3?=%d\}

20. 编写一个函数deletechar(),使字符串中尾部的*号不得多于 n 个;若 多于 n 个,则删除多余的*号;若少于或等于 n 个,则什 么也不做,字符串中间和前面的*号不删除。例如,字符串 的内容为:****A*BC*DEF*G*******,若 n 的值为 4, 删 除 后 , 字 符 串 中 的 内 容 应 当 是 : ****A*BC*DEF*G****;若 n 的值为 7,则字符串中的内 容仍为****A*BC*DEF*G*******。n 的值在主函数中输 入。

好好学习

#include int main() {

void deletechar(char str[],int n); int n;

char s[1000];

printf(\请输入一个带*的字符串:\ scanf(\

printf(\请输入后面保留*的数量:\ scanf(\ deletechar(s,n); printf(\ }

void deletechar(char str[],int n) {

int i=0;

int k=0;//表示*的数量 int pos=0; //最后是否有* while(str[i]!='\\0')

{

if(str[i]=='*') {

pos=1; k++; } else {

pos=0; k=0; } i++; }

while(pos!=0 && k>=n) {

str[i]='\\0'; k--; i--; } }

21. 找出形参字符串中出现的频率最高的字母(不区分大小写) ,并统计其出现的次数。例如,形参 s 所指的字符串为:abcAbsmaxless,程序执行后的输出结 果为: letter ‘a‘:3times letter ‘s‘: 3times。

#include int main() {

char str[100]; int s[26]= {0}; int i=0;

scanf(\ while(str[i]!='\\0') {

if(str[i]>='A' && str[i]<='Z') s[str[i]-65]++;

else if(str[i]>='a' && str[i]<='z') s[str[i]-97]++; i++; }

好好学习

for(i=0;i<26;i++) {

if(s[i]>0) printf(\中字母%c的出现的频次是%d\\n\ } }

22. 设计函数change(),将形参 a 所指数组中的前半部分元素中的值和后半部 分元素中的值互换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间的元素不动。若 a 所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、 8、9、5、1、2、3、4。

#include int main() {

void change(int x[],int m);

int a[10]= {1,2,3,4,5,6,7,8,9,10}; int b[9]= {1,2,3,4,5,6,7,8,9}; int i;

change(a,10); for(i=0; i<10; i++)

printf(\ printf(\

change(b,9); for(i=0; i<9; i++)

printf(\ printf(\}

void change(int x[],int m) {

int i,temp; if(m%2==0)

{

for(i=0; i

temp=x[i]; x[i]=x[m/2+i]; x[m/2+i]=temp; } } else {

for(i=0; i

temp=x[i];

x[i]=x[m/2+i+1]; x[m/2+i+1]=temp; } } }

23.编写一个函数dtob(),在main函数中读入一个10进制数,dtob(),能够将该10进制数转换成一个二进制字符串,并返回给调用函数。

好好学习

#include #include int main() {

void dtop(int x,char s[]); char s[100]; int i=0; int x;

printf(\请输入十进制数:\ scanf(\ dtop(x,s);

for(i=strlen(s)-1; i>=0; i--) {

printf(\ } }

void dtop(int x,char s[]) {

int i=0; char m=0; while(x/2!=0) {

if(x%2==0) m='0'; else

m='1'; s[i]=m; x=x/2; i++; }

s[i]='1'; s[++i]='\\0'; }

24.

编一程序每个月根据每个月上网时间计算上网费用,计算方法如下:

#include int main() {

int hour; float price;

printf(\请输入本月上网的小时数\\n\ scanf(\

if(hour<=10) price=30; else if(hour<50) price=hour*3; else

price=hour*2.5;

printf(\本月上网的费用%f\ }

好好学习

要求当输入每月上网小时数,显示该月总的上网费用 25. 编写一个求直角三角形的面积的函数。在main

函数中从键盘输入直角三角形的两个直角边,然后调用该函数求该直角三角形的面积(精确到小数点后2位)。

#include int main() {

float area(float x,float y); float a,b; float s;

printf(\请输入直角三角形的2条边的长度\\n\ scanf(\ s=area(a,b);

printf(\三角形的面积是%.2f\}

float area(float x,float y) {

return 0.5*x*y; }

26. 写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数

各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中从键盘任意输入一个四位数,调用该函数,判断该数是否为玫瑰花数,若是则输出“yes”,否则输出“no”.

#include int main()

{

int x;

好好学习

printf(\请输入一个正四位整数\\n\ scanf(\ if(rose(x)==1)

printf(\ else

printf(\ }

int rose(int x) {

int a,b,c,d; a=x/1000;

b=(x00)/100;

c=((x00)0)/10; d=x;

if(x==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)

return 1; else

return 0; }

27. 将1--1000中所有21的倍数存到一个一维数组中,再按每行5个数据输出到屏幕上。

#include int main() {

int i; int k=0; int s[100];

for(i=21;i<=1000;i=i+21) {

s[k]=i; k++;

printf(\

if(k%5==0) printf(\ } }

28. 写一个函数计算两个正整数的最大公约数,在主函数中用scanf输入m,n两个正整数,调用函数后,打印函数返回值(即这两个正整数的最大公约数)。

#include int main() {

int gcd(int m,int n); int x,y;

printf(\请输入2个数\\n\ scanf(\

好好学习

FILE* writer = fopen(\ avC += s.c;

\

float avEnglish, avMath, avC; avEnglish = avMath = avC = 0;

fprintf(writer, \姓名,学号,英语,数学,C语言,总分\\n\ while(1) {

printf(\请输入学生的姓名:\ scanf(\

if (!strcmp(\s.name)) break;

printf(\请输入学生的学号:\ scanf(\ printf(\英语成绩:\ scanf(\ avEnglish += s.english; printf(\数学成绩:\ scanf(\ avMath += s.math;

printf(\语言成绩:\ scanf(\

sum = s.c+s.math+s.english;

if (sum > max) max = sum, t = s; fprintf(writer,

\s.english, s.math,s,.c,sum); i++; }

avEnglish /= i; avMath /= i; avC /= i;

fprintf(writer, \avEnglish, avMath, avC); fclose(writer);

printf(\共录入%d名同学成绩,最高分为%d分,该同学是:%s\\n\ printf(\他的英语成绩为:%d,数学成绩为:%d,C语言成绩为:%d\\n\t.math, t.c); return 0; }

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

Top