11. 输入一个自然数,输出其各因子的连乘形式,如输入 12,则输出 12=1*2*2*3。
#include<stdio.h>
int main(){
int num;
scanf("%d",&num);
if(num==0) printf("0=0");// 输入为0
else if(num==1) printf("1=1");//输入为1
else{//输入大于1
printf("%d=1",num);
for(int i=2,j=num;i<=num&&j>0;i++){
while(j%i==0&&j>0){
j/=i;
printf("*%d",i);
}
}
}
return 0;
}
12.N 个整数从小到大排列,输入一个新数插入其中,使 N+1 个整数仍然有序。
#include<stdio.h>
#define N 10
int main(){
int a[N+1]={1,2,3,4,6,7,8,9,10,12};
int b;
scanf("%d",&b);
//二分法查找
int left,right,mid;
left=0,right=N-1;
while(left<=right){
mid=(left+right)/2;
if(b==a[mid]) break;
else if(b>a[mid]) left=mid+1;
else if(b<a[mid]) right=mid-1;
}
for(int i=N;i>left;i--){
a[i]=a[i-1];
}
a[left]=b;
for(int i=0;i<N+1;i++){
printf("%d ",a[i]);
}
return 0;
}
13.在 100~200 之间找出满足用 3 除余 2,用 5 除余 3 和用 7 除余 2 的所有整数。
#include<stdio.h>
int main(){
for(int i=100;i<=200;i++){
if(i%3==2) printf("%d %% 3 = 2\n",i);
if(i%5==3) printf("%d %% 5 = 3\n",i);
if(i%7==2) printf("%d %% 7 = 2\n",i);
}
return 0;
}
14.输入 10 个同学的成绩,统计 80 分以上和不及格的人数,并输出平均值。
#include<stdio.h>
int main(){
int grade[10],stu_80,stu_60,sum,average;
stu_80=stu_60=sum=0;
for(int i=0;i<10;i++){
scanf("%d",&grade[i]);
if(grade[i]>80) stu_80++;
else if(grade[i]<60) stu_60++;
sum+=grade[i];
}
average=sum/10;
printf("80+:%d 60-:%d average:%d\n",stu_80,stu_60,average);
return 0;
}
15.编写一个函数来检验输入的一个字符是大写字母还是小写字母或不是 26 个 英文字母。
#include<stdio.h>
void alpha(char x){
if(x>='a'&&x<='z') printf("小写字母\n");
else if(x>='A'&&x<='Z') printf("大写字母\n");
else printf("不是 26 个英文字母\n");
}
int main(){
char x;
scanf("%c",&x);
alpha(x);
return 0;
}
16.编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。
#include<stdio.h>
#define PI 3.14
int main(){
double r,h,s,v;
scanf("%lf%lf",&r,&h);
s=2*PI*r*h+2*PI*r*r;
v=PI*r*r*h;
printf("s = %f,v = %f\n",s,v);
return 0;
}
17.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
char a[100];
gets(a);
puts(a);
int len=strlen(a),n1,n2,n3,n4;
n1=n2=n3=n4=0;
for(int i=0;i<len;i++){
if(isalpha(a[i])) n1++;
else if(a[i]==' ') n2++;
else if(isdigit(a[i])) n3++;
else n4++;
}
printf("英文字母:%d\n空格:%d\n数字:%d\n其他字符:%d\n",n1,n2,n3,n4);
return 0;
}
18.编写程序,形成如下矩阵,并输出。
#include<stdio.h>
int main(){
char a[5][10]={"11111"};
//先赋a[1]初值11111
for(int i=1;i<5;i++){
//a[i]=a[i-1]
for(int j=0;j<5;j++){
a[i][j]=a[i-1][j];
}
// 在 a[i]=a[i-1]的基础上,前i位分别加一
for(int k=i-1;k>=0;k--){
a[i][k]++;
}
}
for(int i=0;i<5;i++){
puts(a[i]);
}
return 0;
}
19.用递归函数完成以下运算: sum(n)=12+22+…+n2 函数的原型如下: long sum(int n); 该函数完成 12+22+…+n2 的运算,并返回运算结果,其中 n>0。 提示:你可以使用递归表达式:sum(n)=sum(n-1)+n2
#include<stdio.h>
long sum(int n){
if(n==1) return 12;
else return (sum(n-1)+n*10+2);
}
int main(){
int n;
long m;
scanf("%d",&n);
m=sum(n);
printf("%d",m);
return 0;
}
20.编写一个程序,将整数转换成字符串:void itoa(int,char);
#include<stdio.h>
#include<string.h>
//前后交换函数
void change(char *z){
int len=strlen(z);
for(int i=0,j;i<len/2;i++){
j=z[i],z[i]=z[len-1-i],z[len-1-i]=j;
}
}
void itoa(int x,char *y){
//为负时取反
if(x<0){
y[0]='-';
x=-1*x;
}
if(x==0) y[0]='0';
//y[0]留作符号位
int i=1;
while(x!=0){
y[i]=(x%10+'0');
x/=10;
i++;
}
//前后交换
change(y+1);
//如果符号位为空,前移一位
if(y[0]=='\0'){
int len=strlen(y+1);
for(int j=0;j<len;j++){
y[j]=y[j+1];
}
//后移完清空
y[len]='\0';
}
}
int main(){
int x;
char y[32]={0};
scanf("%d",&x);
itoa(x,y);
puts(y);
return 0;
}