关于C语言习题一
1、数转字符
#include<stdio.h> #include<string.h> /* char *itoa(int a){ static char b[20]; int i=0,l; char t; while(a!=0){ b[i]='0'+a%10; a=a/10; i++; } b[i]='\0'; l=strlen(b); for(i=0;i<l/2;i++){ t=b[l-1]; b[l-1]=b[i]; b[i]=t; l--; } return b; } */ int main(){ char *itoc(int a,char str[]); int a; char str[11]; char *b; printf("please input a number:"); scanf("%d",&a); b = itoc(a,str); printf("%s\n",b); return 0; } char *itoc(int a,char str[]){ char stack[10]; int top; int i=0,x; top = -1; while(a!=0){ x = a%10; top++; stack[top] = '0'+x; a = a/10; } while(top>-1){ str[i]=stack[top]; top--; i++; } str[i]='\0'; return str; }
2、5*5二维数组找最大
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 int main(){ void maxn(int a[][5],int n,int *x,int *y,int *max); int a[N][N]; int i,j; int x,y,max; srand((unsigned)time(NULL)); for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%100; printf("%4d",a[i][j]); } printf("\n"); } maxn(a,N,&x,&y,&max); printf("max=%d,x=%d,y=%d\n",max,x,y); return 0; } void maxn(int a[][5],int n,int *x,int *y,int *max){ int i,j; *max=a[0][0]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*max<a[i][j]){ *max=a[i][j]; *x=i+1; *y=j+1; } } } }
3、输出带格式的9*9的乘法表
#include<stdio.h> int main(){ int i,j; printf(" | 1 2 3 4 5 6 7 8 9 \n"); printf("____|_______________________________________________\n"); for(i=0;i<9;i++){ printf("%4d|",i+1); for(j=0;j<9;j++){ if(j<i){ printf(" "); } else printf("%4d ",(i+1)*(j+1)); } printf("\n"); } return 0; }
4、计算1-n有多少个9
#include<stdio.h> #define N 100 int main(){ int nine(int *a,int n); int a[N]; int num; int n; printf("please input the number:"); scanf("%d",&n); num = nine(a,n); printf("the nines number is :%d\n",num); return 0; } int nine(int *a,int n){ int i,j; int count = 0; for(i = 0;i < n;i++){ a[i] = i+1; } for(i = 0;i < n;i++){ while(a[i]!=0){ j = a[i]%10; if(9==j){ count++; } a[i] = a[i]/10; } } return count; }
5、出掉3
第一种算法(自己)
#include<stdio.h> #define N 100 int main(){ int outhree(int *a,int n); int n; int a[N]={0}; int i; printf("please input the number(1,100):"); scanf("%d",&n); printf("the last one is:%d\n",outhree(a,n)); return 0; } int outhree(int *a,int n){ int count = 0; int i; int j = 3;//只是为了进入循环 int x; while(j>1){ j = 0; for(i=0;i<n;i++){ if(a[i]!=1){ count++; j++; } if(count == 3){ count = 0; a[i] = 1; } } } for(i=0;i<n;i++){//循环结束条件 if(a[i]!=1){ x = i+1; break; } } return x; }
第二种算法:
#include<stdio.h> #include<stdlib.h> int main(){ int outhree(int *a,int n); int n; int *a; int i; printf("please input the number(1,100):"); scanf("%d",&n); a = (int *)malloc(n*(sizeof(int))); for(i=0;i<n;i++){ a[i]=i+1; } printf("the last one is:%d\n",outhree(a,n)); free(a); return 0; } int outhree(int *a,int n){ int count = 0; int i; int x; int num=n; while(num>1){ for(i=0;i<n;i++){ if(a[i]!=0){ count++; if(num==2&&count==2){ x = i+1; } } if(count == 3){ count = 0; a[i] = 0; num--; } } } return x; }
6、命令行输入5个数(正数、负数、小数),并且由小到大排(重点,用了atof把字符串型转成float型,并且进行选择排序,输出时不想输出浮点数的0,所以有了%g)
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,const char *argv[]){ void sortf(float *array); float array[5]; int i; for(i=0;i<5;i++){ array[i]=atof(argv[i+1]); } sortf(array); for(i=0;i<5;i++){ printf("%g ",array[i]); } printf("\n"); return 0; } void sortf(float *array){ int i,j; float min = array[0],t; for(i=0;i<5;i++){ for(j=i;j<5;j++){ if(array[i]>array[j]){ t = array[i]; array[i] = array[j]; array[j] = t; } } } }
7、100以内的素数(重点,判断条件,i==j 一下子忘记了怎么判断了)可以改进,可能改天补。
#include<stdio.h> int main(){ int i,j; for(i=1;i<100;i++){ for(j=2;j<=i;j++){ if(i%j==0) break; } if(i==j){ printf("%d ",i); } } printf("\n"); return 0; }
8、一个数等于因子之和,1000以内
#include<stdio.h> int main(){ int i,j; int sum; for(i=1;i<1000;i++){ sum = 0; for(j=1;j<i;j++){ if(i%j==0){ sum+=j; } } if(i==sum){ printf("%d ",i); } } printf("\n"); return 0; }
9、找出5*5数组找出最大最小位置和第一最后换
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 int main(){ void trans(int a[][N],int n); srand((unsigned)time(NULL)); int a[N][N]; int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%100; } } for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%4d",a[i][j]); } printf("\n"); } printf("\n"); trans(a,5); for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%4d",a[i][j]); } printf("\n"); } return 0; } void trans(int a[][N],int n){ int i,j; int min=a[0][0]; int max=a[4][4]; int hx,hy; int lx,ly; int t; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(min>a[i][j]){ min = a[i][j]; lx=i; ly=j; } if(max<a[i][j]){ max = a[i][j]; hx=i; hy=j; } } } t = a[0][0]; a[0][0] = a[lx][ly]; a[lx][ly] = t; t = a[4][4]; a[4][4] = a[hx][hy]; a[hx][hy] = t; }
10、字符串中数字子串最大的长度
#include<stdio.h> #include<string.h> #define N 30 int main(){ char a[N]; int len=0; int longlen=0; int i=0; scanf("%s",a); while(a[i]!='\0'){ if(a[i]>='0'&&a[i]<='9'){ len++; } else{ if(longlen<len){ longlen=len; } len=0; } i++; } if(longlen<len){//如果最后一个数字子串在最后的话,就执行不到else 所以需要在比较一遍。 longlen=len; } printf("%d\n",longlen); return 0; }
11、判断输入的字符子串 含有数字的字符串最长是多少(输入有限制," hd kfi sdj ws ",要保证前后有空格)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include<stdio.h> #include<string.h> #define N 30 #define M 10 int main(){ char a[N]; int b[M]; int count = 0; int i = 0,j = 0; int max; int n,m; int l; fgets(a,N,stdin); fputs(a,stdout); l=strlen(a); for (i=0;i<l;i++){ if (a[i]>= '0' &&a[i]<= '9' ){ n=i; while (a[n]!= ' ' ){ count++; n--; } m=i; while (a[m]!= ' ' ){ count++; m++; } i=m; b[j]=count-1; count=0; j++; } } max=b[0]; for (i=0;i<j;i++){ printf( "%d\n" ,b[i]); } for (i=0;i<j;i++){ if (max<b[i]){ max=b[i]; } } printf( "the most long stris:%d\n" ,max); return 0; } |
12、打印菱形号
#include<stdio.h> void print1(){ int i,j; for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++){ printf(" "); } for(j=1;j<=2*i-1;j++){ printf("*"); } printf("\n"); } for(i=1;i<=3;i++){ for(j=1;j<=i;j++){ printf(" "); } for(j=1;j<=7-2*i;j++){ printf("*"); } printf("\n"); } } void print2(){ int i,j; for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++){ printf(" "); } printf("*"); if(i>1){ for(j=1;j<2*(i-1);j++){ printf(" "); } printf("*"); } printf("\n"); } for(i=1;i<=3;i++){ for(j=1;j<=i;j++){ printf(" "); } printf("*"); if(i!=3){ for(j=1;j<=5-(2*i);j++){ printf(" "); } printf("*"); } printf("\n"); } } int main(){ print1(); print2(); return 0; }
13、求ab最大公约数(辗转相除法)
#include<stdio.h> //辗转相除法 int main(){ int bigcom(int a,int b); int a; int b; int c; printf("please input two nums:"); scanf("%d%d",&a,&b); c = bigcom(a,b); printf("%d和%d最大公约数为:%d\n",a,b,c); return 0; } int bigcom(int a,int b){ int t; while(b!=0){ t = a % b; a = b; b = t; } return a; }
14、求π
#include<stdio.h> #include<math.h> int main(){ float a = 1; float sum1=0,sum2=1; int flag = 1; while(fabs(sum1-sum2)>pow(10,-5)){ sum2 = sum1; sum1 += flag*(1/a); flag *= -1; a += 2; } printf("pai is %g\n",4*sum1); return 0;
15、求2/1+3/2+5/3++++前20项的和
#include<stdio.h> int main(){ float cal(int n); int n; float sum; printf("please input a number:"); scanf("%d",&n); sum = cal(n); printf(" %d head sum is %g\n",n,sum); return 0; } float cal(int n){ int a = 2; int b = 1; int i; int t; float sum = 0; for(i = 1;i <= n;i++){ sum += (float)a/b; t = a; a = a + b; b = t; } return sum; }
16、求100~200之间的所有素数,每行带引5个素数
#include<stdio.h> int main(){ void outprime(int a,int b); int a,b; printf("please input two numbers:"); scanf("%d%d",&a,&b); outprime(a,b); return 0; } void outprime(int a,int b){ int i,j; int count = 0; for(i=a;i<b;i++){ for(j=2;j<i;j++){ if(i%j==0){ break; } } if(i==j){ printf("%4d",i); count++; } if(count==5){ count=0; printf("\n"); } } prnitf("\n"); }
17、计算字符串(带有数字的)中的单词数
#include<stdio.h> int main(){ int blank(char *a); char a[30]; int num; fgets(a,30,stdin); num = blank(a); printf("there are %d strings\n",num); return 0; } int blank(char *a){ int i=0,num=0; int count=0; int flag1=0;//数字标识 int flag2=1;//空格标识 while(a[i]!='\0'){ if(a[i]>='0'&&a[i]<='9'){ flag1 = 1; if(num<1&&count==0) flag2=0; if(flag1==1&&flag2==0){ num++; flag2 = 1; } } else if(a[i]==32){ flag2 = 0; flag1 = 0; if(count == 0) count =1; } i++; } return num; }
课上应该写的
#include<stdio.h> int main(){ int blank(char *a); char a[30]; int num; fgets(a,30,stdin); num = blank(a); printf("there are %d strings\n",num); return 0; } int blank(char *a){ int i=1,num=0; int count=0; while(a[i]!='\0'){ if(a[i]==32&&a[i-1]!=32){ count++; } i++; } return count+1; }
18、将整数转换为10进制,2进制,16进制
#include<stdio.h> int main(){ void ten(int n); void two(int n); void sixteen(int n); int n; printf("please input a number:"); scanf("%d",&n); ten(n); two(n); sixteen(n); return 0; } void ten(int n){ int a[100]; int i = 0; while(n != 0){ a[i] = n%10; n = n/10; i++; } printf("decimalism is:"); for(i--;i>=0;i--){ printf("%d",a[i]); } printf("\n"); } void two(int n){ int a[100]; int i =0; while(n!=0){ a[i]=n%2; n = n/2; i++; } printf("binary is:"); for(i--;i>=0;i--){ printf("%d",a[i]); } printf("\n"); } void sixteen(int n){ char s[100]; int i=0; while(n!=0){ switch(n%16){ case 0:s[i]='0';break; case 1:s[i]='1';break; case 2:s[i]='2';break; case 3:s[i]='3';break; case 4:s[i]='4';break; case 5:s[i]='5';break; case 6:s[i]='6';break; case 7:s[i]='7';break; case 8:s[i]='8';break; case 9:s[i]='9';break; case 10:s[i]='A';break; case 11:s[i]='B';break; case 12:s[i]='C';break; case 13:s[i]='D';break; case 14:s[i]='E';break; case 15:s[i]='F';break; } n = n/16; i++; } printf("hexadecimal is:"); for(i--;i>=0;i--){ printf("%c",s[i]); } printf("\n"); }
19、打印字符串、复制字符串、连接字符串
#include<stdio.h> #include<string.h> int main(){ void print(char *a); void copy(char *a,char *b); void link(char *a,char *b); char a[30],b[20]; printf("please input two strings: "); scanf("%s%s",a,b); print(a); print(b); copy(a,b); print(a); print(b); link(a,b); print(a); print(b); return 0; } void print(char *a){ int i = 0; while(a[i]!='\0'){ printf("%c",a[i]); i++; } printf("\n"); } void link(char *a,char *b){ int i = 0; int l; l = strlen(a); while(b[i]!='\0'){ a[l] = b[i]; l++; i++; } a[l] = '\0'; } void copy(char *a,char *b){ int i=0; while(b[i]!='\0'){ a[i] = b[i]; i++; } a[i] = '\0'; }
比较完整地关于字符串的操作
#include<stdio.h> #include<string.h> #include<stdlib.h> int main(){ void myscanf(char *a); void myprint(char *a); int mystrlen(char *a); int mystrcmp(char *a,char *b); int mystrncmp(char *a,const char *b,int n); void mystrcpy(char *a,char *b); void mystrncpy(char *a,const char *b,int n); void mystrcat(char *a,char *b); void mystrncat(char *a,const char *b,int n); char a[20]; char b[10]; int n; int differ1,differ2; printf("please input two strings:"); myscanf(a); myscanf(b); // myprint(a); // myprint(b); // n = mystrlen(a); /* printf("please input num you want compare:"); scanf("%d",&n); differ1=mystrcmp(a,b); differ2=mystrncmp(a,b,n); printf("differs are :%d %d\n",differ1,differ2); */ /* mystrcpy(a,b); myprint(a); myprint(b); printf("please input num you want :"); scanf("%d",&n); mystrncpy(a,b,n); myprint(a); myprint(b); */ mystrcat(a,b); myprint(a); myprint(b); printf("please input num you want :"); scanf("%d",&n); mystrncat(a,b,n); myprint(a); myprint(b); return 0; } void myscanf(char *a){ int i = 0; char ch; while(1){ scanf("%c",&ch); if(ch=='\n') break; a[i] = ch; i++; } a[i] = '\0'; } void myprint(char *a){ int i = 0; while(a[i]!='\0'){ printf("%c",a[i]); i++; } printf("\n"); } int mystrlen(char *a){ int i = 0; while(a[i]!='\0'){ i++; } return i; } int mystrcmp(char *a,char *b){ int i = 0; int n; while(a[i]!='\0'&&b[i]!='\0'){ if(a[i]!=b[i]){ n = a[i] - b[i]; break; } i++; } if(a[i]=='\0'&&b[i]=='\0') n = 0; else if(a[i]!='\0'&&b[i]=='\0') n = a[i]; else if(a[i]=='\0'&&b[i]!='\0') n= -b[i]; return n; } int mystrncmp(char *a,const char *b,int n){ int i = 0; int m; while(n){ if(a[i]=='\0'||b[i]=='\0') break; if(a[i]!=b[i]){ m= a[i] - b[i]; break; } n--; i++; } if(a[i]!='\0'&&b[i]=='\0') m = a[i]; else if(a[i]=='\0'&&b[i]!='\0') m = -b[i]; return m; } void mystrcpy(char *a,char *b){ int i=0; while(b[i]!='\0'){ a[i] = b[i]; i++; } a[i] = '\0'; } void mystrncpy(char *a,const char *b,int n){ int i=0; while(n){ a[i] = b[i]; i++; n--; } a[i] = '\0'; } void mystrcat(char *a,char *b){ int i = 0; int l; l = strlen(a); while(b[i]!='\0'){ a[l] = b[i]; l++; i++; } a[l] = '\0'; } void mystrncat(char *a,const char *b,int n){ int i = 0; int l; l = mystrlen(a); while(n&&b[i]!='\0'){ a[l] = b[i]; i++; l++; n--; } a[l] = '\0'; }
20、整数数组的冒泡排序(可以单独写一个输出函数)
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ srand((unsigned)time(NULL)); void bub(int *a,int n); int a[10]; int i; for(i=0;i<10;i++){ a[i]= rand()%100; } for(i=0;i<10;i++){ printf("%4d",a[i]); } printf("\n"); bub(a,10); for(i=0;i<10;i++){ printf("%4d",a[i]); } printf("\n"); return 0; } void bub(int *a,int n){ int i,j,t; for(i=0;i<n;i++){ for(j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }
21、对于任意一个正整数都可以找出至少一串连续奇数,他们的和等于该数的立方。验证2-20
#include<stdio.h> int main(){ int n,m; int i; int j; int x,y; int z; int sum=0; printf("please input two number:"); scanf("%d%d",&n,&m); for(j=n;j<=m;j++){ sum = 0; z = j*j; x = y = z; if(z%2==0){ for(i = 1;i <= j/2;i++){ if(i==1){ x = x - 1; y = y + 1; } else{ x = x - 2; y = y + 2; } } } else{ for(i = 1;i <= j/2;i++){ x = x - 2; y = y + 2; } } printf("%d part of %d-%d\n",j,x,y); for(i=x;i<=y;){ sum+=i; i+=2; } printf("%d^3 is %d,%d~%d sum is:%d\n",j,j*j*j,x,y,sum); } return 0; }
分类:
C语言学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)