1.求int型数据在内存中存储时1的个数
输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
#include<stdio.h> void main() { int in,cnt=0; int yu,mo; scanf("%d",&in); for(yu=in/2,mo=in%2;yu!=0;in=yu,yu=in/2,mo=in%2) { cnt=cnt+mo; } cnt=cnt+mo; printf("%d",cnt); }
方法二: /* * 原理:若n最右边的1在第k个位置,那么n-1之后,第k个位置的数由1变0,k之后的由0变1,k之前的不变。 * 再把n-1和n求& ,会把该整数最右边的1变为0。因此有多少个1,就循环几次。 */ #include<stdio.h> void main() { int a,cnt=0; scanf("%d",&a); while(a!=0) { a=a&(a-1); cnt++; } printf("%d",cnt); }
2.句子逆序
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
#include<stdio.h> void main() { int loop; char ch[100]; gets(ch); for(loop=99;loop>=0;loop--) { if((ch[loop]>='A'&&ch[loop]<='z')||ch[loop]==' ') printf("%c",ch[loop]); } }
3.字符串反转
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。
#include<stdio.h> void main() { int loop,max=0; char ch[100]; gets(ch); max=strlen(ch); for(loop=max-1;loop>=0;loop--) { printf("%c",ch[loop]); } }
4.数字颠倒
描述:
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
#include<stdio.h> void main() { int loop,max=0; char ch[100]; gets(ch); max=strlen(ch); for(loop=max-1;loop>=0;loop--) { printf("%c",ch[loop]); } }
5.字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
#include<stdio.h>
void main()
{
int loop,max=0;
int cnt=0;
char ch[100];
gets(ch);
max=strlen(ch);
for(loop=max-1;loop>=0;loop--)
if(ch[loop]>=0 &&ch[loop]<=127)
cnt=cnt+1;
printf("%d",cnt);
}
6.提取不重复的整数
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
#include<stdio.h> void main() { char ch[100]; char ch2[10]; int max; int loop; int flag=0; gets(ch); max=strlen(ch); for(loop=max-1;loop>=0;loop--) { if(ch2[ch[loop]]!=1) { ch2[ch[loop]]=1; if(flag==0&&ch[loop]!='0')flag=1; if(flag==1) printf("%c",ch[loop]); } } }
7.合并表记录
数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和
#include<stdio.h> void main() { int num,loop,pos,tmp; int a[100]={0}; int b[100]={0}; scanf("%d",&num); for(loop=0;loop<num;loop++) { scanf("%d",&pos); scanf("%d",&tmp); a[pos]=a[pos]+tmp; b[pos]=1; } for(loop=0;loop<99;loop++) { if(b[loop]==1) { printf("%d ",loop); printf("%d ",a[loop]); } } }
8.取近似值
写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
#include<stdio.h> void main() { float in; int cnt=0; scanf("%f",&in); for(;in>1.0;in=in-1)cnt=cnt+1; if(in>=0.5)cnt=cnt+1; printf("%d",cnt); }
9.质数因子
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
#include<stdio.h>
int check(int in)
{
int loop;
if(in==2) return 1;
for(loop=2;loop<in;loop++)
{
if(in%loop==0)return 0;
else
if(in%loop!=0&&loop==in-1)
{
return 1;
}
}
}
void process(int in)
{
int i,reslut=0;
reslut=check(in);
if(reslut==1)printf("%d",in);
else
for(i=2;i<in;i++)
{
reslut=check(i);
if(reslut==1)
{
if(in%i==0)
{
printf("%d ",i);
process(in/i);
break;
}
}
}
}
void main()
{
int in;
scanf("%d",&in);
process(in);
}
10.进制转换
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串
#include<stdio.h> int change(char ch) { int a; switch(ch){ case 'A': case 'a': a=10; break; case 'B': case 'b': a=11; break; case 'C': case 'c': a=12; break; case 'D': case 'd': a=13; break; case 'E': case 'e': a=14; break; case 'F': case 'f': a=15; break; case '9': a=9; break; case '8': a=8; break; case '7': a=7; break; case '6': a=6; break; case '5': a=5; break; case '4': a=4; break; case '3': a=3; break; case '2': a=2; break; case '1': a=1; break; case '0': a=0; break; default: a=0; printf("error input"); } return a; } void main() { char ch[100]; int len,i,sum=0,tmp; gets(ch); len=strlen(ch); for(i=2;i<len;i++) { tmp=change(ch[i]); sum=sum*16+tmp; } printf("%d",sum); }
11.字符串分隔
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
#include<stdio.h> process(char ch[],int len) { int j; int loop,cnt=0; j=len%8; for(loop=0;loop<len;loop++) { if(loop%8==0&&loop>0) { cnt=cnt+1; printf(" "); } printf("%c",ch[loop]); } if(j>0) { for(loop=0;loop<8-j;loop++) { printf("0"); } printf(" "); } } void main() { char ch1[100]; char ch2[100]; int len1,len2; int loop; gets(ch1); gets(ch2); len1=strlen(ch1); len2=strlen(ch2); process(ch1,len1); process(ch2,len2); }
12.明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
#include<stdio.h> void main() { int num,i,j,t=0; int min; int in[1000],tmp[1000],a[1000]; scanf("%d",&num); for(i=0;i<num;i++) { scanf("%d",&in[i]); } for(i=0;i<num-1;i++) { for(j=i+1;j<num;j++) { if(in[i]==in[j])break; } if(j==(num)) { tmp[t]=in[i]; t=t+1; } } tmp[t]=in[num-1]; t=t+1; for(i=0;i<t-1;i++) { for(j=i+1;j<t;j++) { if(tmp[i]>tmp[j]) { min=tmp[j]; tmp[j]=tmp[i]; tmp[i]=min; } } } for(i=0;i<t;i++) { printf("%d ",tmp[i]); } }
13.计算字符个数
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
#include<stdio.h> void main() { char ch[100]; int i,len,num=0; char c; gets(ch); scanf("%c",&c); len=strlen(ch); for(i=0;i<len;i++) { if(ch[i]==c) { num=num+1; } else if(c>='a'&&c<='z') { if(c-ch[i]==32) num++; } else if(c>='A'&&c<='Z') { if(ch[i]-c==32) num++; } } printf("%d",num); }
14.求最小公倍数
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
#include<stdio.h> void main() { int a,b,i,begin; scanf("%d",&a); scanf("%d",&b); if(a>b)begin=a; else begin=b; for(i=begin;i%a!=0||i%b!=0;i++); printf("%d",i); }
15.求解立方根
•计算一个数字的立方根,不使用库函数
16.字符逆序
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。
上面有了
17.记负均正
从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值(*任意个输入,注意方法!*)
#include<stdio.h>
void main()
{
int a;
int i=0,num=0,cnt=0,sum=0;
while(scanf("%d",&a)!=EOF)
{
if(a>=0)
{
sum=sum+a;
num=num+1;
}
else cnt++;
i++;
}
printf("%d
",cnt);
if(sum==0)
printf("0.0");
else
printf("%d",sum/num);
}
18.字符串分割
连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,
长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
上面有了
19.字符统计(*ASICC 码表的顺序要记住*)
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘ ’结尾。
20.输入整型数组和排序标识,对其元素按照升序或降序进行排序
输入整型数组和排序标识,对其元素按照升序或降序进行排序(*未完成*)
#include<stdio.h> void deseed(char ch[]) { int i,j,len,tmp; len=strlen(ch); for(i=0;i<len-1;i++) { for(j=i+1;j<len;j++) { if(ch[i]>ch[j]) { tmp=ch[j]; ch[j]=ch[i]; ch[i]=tmp; } } } for(i=0;i<len-1;i++) { printf("a=%d ",ch[i]); } printf("b=%d",ch[len-1]); } void reseed(char ch[]) { int i,j,len,tmp; len=strlen(ch); for(i=0;i<len-1;i++) { for(j=i+1;j<len;j++) { if(ch[i]<ch[j]) { tmp=ch[j]; ch[j]=ch[i]; ch[i]=tmp; } } } for(i=0;i<len-1;i++) { printf("c=%d ",ch[i]); } printf("d=%d",ch[len-1]); } void main() { char ch[100]; int flag,num,loop; scanf("%d",&num); for(loop=0;loop<num;loop++) { scanf("%c",&ch[loop]); printf("ch[loop]=%c",ch[loop]); } scanf("%d",&flag); if(flag=0) deseed(ch); else reseed(ch); }
21.等差数列
功能:等差数列 2,5,8,11,14。。。。
输入:正整数N >0
输出:求等差数列前N项和
返回:转换成功返回 0 ,非法输入与异常返回-1
#include<stdio.h> int main() { int n; scanf("%d",&n); if(n<=0) return -1; else { printf("%d",2*n+n*(n-1)*3/2); return 0; } }
22.自守数
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:252 = 625,762 = 5776,93762 = 87909376。请求出n以内的自守数的个数
#include<stdio.h> int check(int i) { int num=1; if(i<10) return num; else for(;i/10!=0;i=i/10) { num++; } return num; } int qiumi(int n,int len) { int i,a=1; for(i=0;i<len;i++) { a=a*10; } return a; } void main() { int scale,i,sq,len,cnt=0; scanf("%d",&scale); for(i=0;i<=scale;i++) { sq=i*i; len=check(i); if(0==(sq-i)%qiumi(10,len)) { cnt++; } } printf("%d",cnt); }
23.记负均正
首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值。
上面17题
24.表示数字
将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变
#include<stdio.h> void insertafter(char ch[],int i) { int len,loop; len=strlen(ch); for(loop=len+1;loop>i+1;loop--) { ch[loop]=ch[loop-1]; } ch[i+1]='*'; } void insertbefore(char ch[],int i) { int len,loop; len=strlen(ch); for(loop=len+1;loop>=i+1;loop--) { ch[loop]=ch[loop-1]; } ch[i]='*'; } int insertSym(char ch[],int i) { int re=0; if(i==0||ch[i-1]<='0'||ch[i-1]>='9') { insertbefore(ch,i); re++; if(ch[i+2]<='0'||ch[i+2]>='9') { insertafter(ch,i+1); re++; } } else if(ch[i+1]<='0'||ch[i+1]>='9') { insertafter(ch,i); re++; } return re; } void main() { char ch[100]; int i,leng; scanf("%s",&ch); for(i=0;ch[i]!='