1.输入一整数n,判断是否为素数
#include
int main(){
int i,n;
scanf("%d", &n);
for(i=2;i<n;i++){
if(n%i==0){
break;
}
}
if(i>=n){
printf("%d is a prime\n", n);
}else{
printf("%d is not a prime\n", n);
}
return 0;
}
2.字符串逆序
方法一:
#include
#include
int main(){
char *p1,*p2,c,s[50];
scanf("%s", s);//也可写成 gets(s);
p1=s;
p2=s+strlen(s)-1;
for(;p1<p2;p1++,p2--){
c=*p1;
*p1=*p2;
*p2=c;
}
printf("The new string is %s\n", s);
return 0;
}
方法二:
#include
#include
void main()
{
char s[80],t;
int i,j;
gets(s);
j= strlen(s)-1;
for(i=0; i<j; i++, j--){
t=s[i];s[i]=s[j];s[j]=t;
}
printf("The new string is %s\n", s);
}
方法三:
#include
#include
void main()
{
char s[80],t;
int i,j;
gets(s);
j= strlen(s);
for(i=0; i<j/2; i++){
t=s[i];s[i]=s[j-1-i];s[j-1-i]=t;
}
printf("The new string is %s\n", s);
}
3.判断字符串是否是回文
方法一:
#include
#include
int main(){
char *p1,*p2,c,s[50];
gets(s);
p1=s;
p2=s+strlen(s)-1;
for(;p1<p2;p1++,p2--){
if(*p1!=*p2){
break;
}
}
if(p1<p2){
printf("%s 不是回文\n", s);
}else{
printf("%s 是回文\n", s);
}
return 0;
}
方法二:
#include
#include
void main()
{
char s[80];
int i,j;
gets(s);
j= strlen(s)-1;
for(i=0; i<j; i++, j--){
if( s[i]!=s[j] ){
break;
}
}
if( i<j ) printf("该字符串不回文");
else printf("该字符串回文");
}
方法三:
#include
#include
void main()
{
char s[80];
int i,j;
gets(s);
j= strlen(s);
for(i=0; i<j/2; i++){
if( s[i]!=s[j-1-i] ){
break;
}
}
if( i<j/2 ) printf("该字符串不回文");
else printf("该字符串回文");
}
4.求任意两整数的最大公约数
#include
int main(){
int a,b,t;
scanf("%d%d", &a, &b);
while(b!=0){
t=a%b;
a=b;
b=t;
}
printf("最大公约数为%d\n", a);
return 0;
}
tips:辗转相除法:
5."起泡法"对输入的字符串降序排列
#include
#include
void sort(char *s);
int main( )
{
char str[20];
printf("请输入字符串:\n");
scanf("%s", str);
sort(str);
printf("排序结果:\n");
puts(str );
return 0;
}
void sort(char *s)
{
int i, j, n;
char c;
n=strlen(s);
for(i=0; i<n-1; i++)
for(j=i; j<n-i-1; j++)
if(s[j]<s[j+1]) c=s[j], s[j]=s[j+1], s[j+1]=c;
}
6.统计给定数据中0到9数字个数
#include
int main()
{
int i,data[20]={
0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,3} ;
int count[10]={
0} ;
for(i=0; i<20; i++){
count[data[i]]+=1;
}
for(i=0; i<10; i++){
printf("数字%d的个数:%d\n",i,count[i]);
}
return 0;
}
7.在十个数中删除指定数据
#include
int main(){
int a[10],x,*p,*q;
printf("请输入十个整数:\n");
for(p=a;p<a+10;++p){
scanf("%d",p);
}
printf("请输入待删数据:");
scanf("%d",&x);
for(p=q=a;p<a+10;p++){
if(x!=*p){
*q++=*p;
}
}
if(q==p){
printf("查无此数!\n");
}
else
{
for(p=a;p<q;){
printf("%5d",*p++);
}
printf("\n");
}
return 0;
}
8.字符串拼接
#include
#include
void main( )
{
char str1[80]="good",str2[]="morning";
int i, j;
for(i=strlen(str1),j=0;str2[j]!='\0'; i++, j++){
str1[i]=str2[j];
}
str1[i]='\0';
printf("string1=%s",str1);
}
运行结果:str1=goodmorning
9.从键盘输入10个数存到数组a中,求10个数的最大值及其位置
#include
void main( )
{
int i,j,position;
float max,a[10];
for(i=0;i<10;i++){
scanf("%f", &a[i]);
}
max=a[0];
for(j=0;j<10;j++){
if(a[j]>max){
max=a[j];
position=j;
}
}
printf("max=%f,position=%d", max, position);
}
10.将数组中的数据从小到大排序
#include
void main( )
{
int a[10]={
3,54,1,53,21,5,95,65,4,6};
int i,j,t;
int len=sizeof(a)/sizeof(a[0]);
for(i=0;i<len;i++){
for(j=i+1;j<len+1;j++){
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<len;i++){
printf("%3d", a[i]);
}
}
11.计算字符串长度
#include
void main(){
int fun(char *p);
char str[80];
gets(str);
printf("LEN=%d\n", fun(str));
}
int fun(char *p){
int n=0;
while(*p++){
n++;
}
return(n);
}
12.编程计算1!+2!+3!+…+20!
#include
void main(){
float sum=0,mut=1;
int n;
for(n=1;n<=20;n++){
mut*=n;
sum+=mut;
}
printf("1!+2!+3!+...+20!=%e\n", sum);
}
13.统计由键盘输入的任一字符串中字母、数字和空格的个数
#include
int main(){
char ch;
int letters=0,digit=0,space=0;
while((ch=getchar())!='\n'){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
letters++;
}else if(ch>'0'&&ch<'9'){
digit++;
}else if(ch==' '){
space++;
}
}
printf("letters=%d,digit=%d,space=%d", letters, digit, space);
return 0;
}
14.找出1—100之间的素数,并统计素数的个数
#include
#include
int main(){
int m,k,i,count=0;
for(m=1;m<=100;m+=2){
//剔除所有的偶数(但是2也是素数)
k=sqrt(m);
for(i=2;i<=k;i++){
//判断一个数是不是素数,用这个数分别从除2到开平方这个数,不能被整除则是素数
if(m%i==0){
break;
}
}
if(i>=k+1){
printf("%3d", m);
count+=1;
}
if(count%10==0) printf("\n");
}
printf("\ntotal number is %d", count);
return 0;
}
15.从键盘输入10个数,找出最大值与最小值,并计算它们的平均值
#include
#include
int main(){
float a[10],max,min,sum,avg;
int i;
int len=sizeof(a)/sizeof(a[0]);
for(i=0;i<len;i++){
scanf("%f", &a[i]);
}
max=min=sum=a[0];
for(i=1;i<len;i++){
if(a[i]>max){
max=a[i];
}
if(a[i]<min){
min=a[i];
}
sum+=a[i];
}
avg=sum/len;
printf("max=%f,min=%f,avg=%f\n", max, min, avg);
return 0;
}
16.找出所有三位数中的水仙花数(各位数字的立方和恰好是本数)
#include
void main()
{
int x,y,z,m;
for(m=100;m<1000;m++){
x=m/100;
y=m/10-x*10;
z=m%10;
if(m==x*x*x+y*y*y+z*z*z){
printf("%4d", m);
}
}
}
17.求Fibonacci数列的前20项,每行输出10个数
#include
int f(int n);
int main(){
int i;
for(i=1;i<=20;i++){
printf("%6d", f(i));
if(i%10==0){
printf("\n");
}
}
return 0;
}
int f(int n){
int t;
if(n==1||n==2){
t=1;
}else{
t=f(n-1)+f(n-2);
}
return t;
}
18.写一个函数求两个整数的最小公倍数,函数原型为:int gb(int m, int n),在主函数中从键盘输入两个整数,然后调用gb()函数,并输出结果
#include
int gb(int m,int n);
int main(){
int m,n;
scanf("%d%d", &m, &n);
printf("%d", gb(m,n));
return 0;
}
int gb(int m,int n){
int i;
for(i=n; ;i++){
if(i%n==0&&i%m==0){
break;
}
}
return i;
}
19.打印杨辉三角形前10行,使用二维数组和循环语句实现
tips:杨辉三角形的一条重要规律:三角形的两条斜边都是数字1,而其余的数都等于它肩上的两个数字相加,因此:
某项的值=前一行、前一列的值 + 前一行、同一列的值
第零列、行列相等(也就是两条斜边)值为1
列必须小于等于行 ,否则换行
#include
#define N 10//宏指令,可根据要求更改
void main()
{
int a[N][N],i,j;
for(i=0;i<N;i++){
for(j=0;j<=i;j++){
//列必须小于等于行 ,否则换行
//第零列、行列相等(也就是两条斜边)值为1
if(i==j||j==0){
a[i][j]=1;
}else{
a[i][j]=a[i-1][j-1]+a[i-1][j];//前一行、前一列 + 前一行、同一列
}
printf("%6d", a[i][j]);
}
printf("\n");
}
}
20.将二维数组行列元素互换,存在另一个数组中,并输出
#include
int main(){
int a[2][3]={
{
1,2,3},{
4,5,6}};
int b[3][2];
printf("array A:\n");
int i,j;
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");
}
return 0;
}
21.用冒泡法对10个数排序(从大到小)
#include
int main(){
int a[10],i,j,t;
for(i=0;i<10;i++){
scanf("%d", &a[i]);
}
for(i=0;i<9;i++){
for(j=0;j<9-i;j++){
if(a[j]<a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<9;i++){
printf("%d ", a[i]);
}
return 0;
}
22.输入任意三个实数,按从大到小的顺序输出。要求用指针变量作函数参数
#include
void exchange(int *q1, int *q2, int *q3);
void swap(int *pt1,int *pt2);
int main()
{
int a,b,c,*p1,*p2,*p3;
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("\n%d,%d,%d\n",a,b,c);
}
void exchange(int *q1, int *q2, int *q3)
{
if(*q1<*q2) swap(q1,q2);
if(*q1<*q3) swap(q1,q3);
if(*q2<*q3) swap(q2,q3);
}
void swap(int *pt1,int *pt2)
{
int temp;
temp=*pt1; *pt1=*pt2; *pt2=temp;
}
23.设有一个已按从大到小的顺序排好的数列存放在一维数组中,现输入一个数,仍按原来的排序规律将其插入到数组中插入排序
#include
int main()
{
int i,j,num;
int count=0,array[11]={
1,4,6,9,19,23,54,56,57,190};
printf("原数组:");
for(i=0;i<10;i++)
{
printf("%d ",array[i]);
}
printf("\n请输入要插入的数据:");
scanf("%d",&num);
for(i=0;i<10;i++)
{
//如果插入数小于数组中的这个数,令这个数及其后面的所有数全部后移一位
if(num<array[i])
{
count = i;
for(j=0;j<10-count;j++)
{
array[10-j]=array[9-j];
}
break;
}
}
//如果count与初始值一样,即插入数比数组所有数都要大,则放在数组的末尾
if(count == 0)
{
array[10]=num;
}
//否则将插入数代替比它的数的位置
else
{
array[count]=num;
}
//数组遍历输出
printf("插入后:");
for(i=0;i<11;i++)
{
printf("%d ",array[i]);
}
return 0;
}
24.设计函数实现将一个字符串中小写字母转化为大写字母
#include
#include
void Convert(char *str){
while(*str!='\0'){
if(islower(*str)){
*str=toupper(*str);
}
str++;
}
}
int main(){
char str[]="124asdfAJLJAsdj4Nr";
Convert(str);
printf("%s\n", str);
return 0;
}
的值并输出(设n=20)递归思想
#include
long factorial(int n){
if(n==1){
return n;
}else{
return n*factorial(n-1);
}
}
int main(){
double sum=1.0;
int i;
for(i=1;i<=20;i++){
sum+=1/(double)factorial(i);
}
printf("%lf\n", sum);
return 0;
}