说明语句
数据的输入
数据的处理
数据的输出
1.将一个整数转换为字符串。
#include <stdio.h>
void tranvers(int n)
{if (n/10!=0)
tranvers(n/10);
printf("%c",n%10+'0');
}
int main(){
int n;
scanf("%d",&n);
if(n<0)
{
printf("-");
n=-n;
}
tranvers(n);
return 0;
}
2.在全校1000人中,募捐,当总数达到十万时结束,统计此时的捐款人数,以及平均每人捐款的数目.
#include <stdio.h>
#define sum 100000s
int main(){
float total,amount,aver;
int i;
for(i=1,total=0;i<=1000;i++)
{
scanf("%f",&amount);
total=total+amount;
if(total>=sum)break;
}
if(i<1000) aver=total/i;
else aver=total/(i-1);
printf("num=%d\naver=%10.2f",i,aver);
return 0;
}
3.输出三角形的面积。 思路:先设出三条边长,还有s,还有面积area 然后数据的输入,数据的处理最后输出。
#include <stdio.h>
#include <math.h>
int main(){
float a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
s=(a+b+c)/2;
if((a+b>c)&&(a+c>b)&&(b+c>a))
{
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积为%.2f",area);
}
else{
printf("error");
}
return 0;
}
4.计算近似值并输出累加到某项小于10的-5次方为止
π方/6=1/1方+1/2方+1/3方+1/n方
1.先把需要的变量设出来。
2.sum为总值,必须先给sum设初值 ;s为每一步的值;pi为最终值
3.每一步的值s=1.0/(i*i)
4.总值sum=sum+s
5.用do while 循环完成在s小于10的-5次方时退出
6输出
#include <stdio.h>
#include <math.h>
int main()
{
float sum,s,pi;
int i;
sum=0.0;
i=1;
do{
s=1.0/(i*i);
sum+=s;
i++;
}while(s>1e-5);![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419152800686.png)
pi=sqrt(sum*6);
printf("%f",pi);
return 0;
}
5.求π的近似值,要求某项小于1e-6时为止。
π/2=1+1/3+1×2/3×5+1×2×3/3×5×7+······
思路:1.先设出来变量i,j,n,m,pi;
2.进行赋初值;
mnj初值为1,i和pi初值为0
3.进入循环
pi=pi+n/m
n/m为每次的值
4,输出值
int main(){
float i,j,fz,fm,pi;
fz=1.0;fm=1.0;j=1.0;i=0.0;pi=0.0;
while(fz/fm>=1e-6){
pi=pi+fz/fm;
i++;
j+=2;
fz=fz*i;
fm=fm*j;
}
printf("%f",2*pi);
return 0;
}
6.有一个3×4的矩阵,要求写出其中最大的元素,以及其所在的行号和列号,最大值保存到max中,行号x,列号y
打擂台法==
思路
设变量初始化数组,利用冒泡排序逐个进行比较。
然后输出。
int main(){
int i,j,max,x=0,y=0;
int a[3][4]={{1,2,3,4},{9,8,7,6},{4,8,6,1}};
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max){
max=a[i][j];
x=i;
y=j;
}
printf("max=%d,x=%d,y=%d",max,x,y);
return 0;
}
7.斐波那契数列。输出前二十项,并按每行四个数的格式输出。 特点1.第一个数为1,第二个数为一。 2.从第三个数起,该数等于前两个数之和。
思路:先定义出这个数组,然后利用for循环进行循环,因为前两项一样为1,所以定义的时候把他俩定义出来!根据特点可以设f(i)=f(i-1)+f(i-2)
#include <stdio.h>
int main(){
int i,f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)
{printf("%12d",f[i]);
if((i+1)%4==0)printf("\n");
}
}
8.编写函数判断一个整数是否为素数,是返回1,不是返回0.并调用函数输出100-999之间的个位数字为7的所有的素数之和。
思路:判断素数的标准是看是否是除自身外还有别的因数有的话不是素数,
int inprimer(int x)
{
int k,flag=1;
for(k=2;k<x;k++)
if(x%k==0)
{
flag=0;
break;
}
return flag;
}
int main(){
int i,s;
for(i=100;i<1000;i++)
if(i%10==7){
if(inprimer)
s=s+i;
}
printf("%d",s);
return 0;
}
9.从键盘接收一个字符串,计算长度并输出。(不用strlen)
方法1用指针用while
void main(){
char s[81],*p;
int len=0;
p=s;
scanf("%s",p);
while((*p++)!='\0')
{len++;
}
printf("%d",len);
}
方法2用for循环
int main()
{
char s[100];
int i;
scanf("%s",s);//输入字符串。bai
for(i=0;s[i]!='\0';i++);//循环体为空,退出时i值即为字符串长度。
printf("%d\n",i);//输出。
return 0;
}
10.从键盘任意输入a,b,c的值,编程计算并输出一元二次方程ax方+bx+c=0的根
int main(){
double a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("无实根");
else
{
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%f,x2=%f",x1,x2);
}
return 0;
}
11.判断是否是闰年
{
if((x%4==0)&&(x%100!=0)||(x%400==0))
return 1;
else
return 0;
}
12.完数一个数如果恰好等于他的因子之和,这个数就称为完数。 找出1000以内的所有完数!
思路:1找出i的所有因子
2将因子求和
3.判断和是否与i相等
int main(){
int s,i,k;
for(i=2;i<1000;i++)
{
s=0;
for(k=1;k<i;k++)
{
if(i%k==0)
s=s+k;
}
if(s==i)
printf("%12d",i);
}
return 0;
}
13.同构数:一个数恰好等于它的平方数的右端,这个数称为同构数。如5的平方是25,5是25中的右端的数,5就是同构数。 找出1-1000之间的所有同构数
思路:
int main()
{
int i, k,t;
for(i=1;i<=1000;i++){
t=i;
k=i*i;
while(t)
{
if(k%10!=t%10)
break;
else {
k=k/10;t=t/10;}
}
if(t==0) printf("%d %d\n",i,i*i);
}
return 0;
}
14.水仙花数:一个三位数其各位数字立方和等于其本身。
int main(){
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i/10)%10;
c=i%10;
if((a*a*a+b*b*b+c*c*c)==i)
printf("%d\n",i);
}
return 0;
}
15构造数据,求2+22+222+…。不断把一个数扩大十倍后加上一个数的过程。
即:m=m10+a
如求:2+22+222+…
第一项:a=2,m=m10+2,所以m的初值需要为0,
第二项:a=22,m=m*10+a=20+2=22
所以:s=s+m即可
int main()
{
int s=0,m=0,a,n,i;
a=2;
n=4;
for(i=1;i<=n;i++)
{
m=m*10+a;
s=s+m;
}
printf("%d",s);
return 0;
}
16.逆序输出与回文数 把一个数逆序输出
int main(){
int s=0,n;
scanf("%d",&n);
while(n!=0)
{
s=s*10+n%10;
n=n/10;
}
printf("%d",s);
return 0;
}
回文数实际上和把一个数字逆序输出是一样的,过程一样
判断一个整数是否为回文数。
回文数:正数与倒数一样。如:12321就是一个回文数。
编程思路:
1.分解整数,构造逆序数。
2.如果逆序数与原数相同,则是回文数
#include <stdio.h>
int main(){
int s=0,n,a;
scanf("%d",&n);
a=n;\\把n的值赋给a,因为后面的话n的值会发生改变。
while(n!=0)
{
s=s*10+n%10;
n=n/10;
}
if(s==a)
printf("是回文数");
else
printf("不是回文数") ;
return 0;
}
16.编写一个简单的计算器程序,可根据输入的运算符,对两个整数进行加减乘除或求余运算,且保证除法和求余的分母为零。当运算符为+、-、*、/、%号时,输出相应的运算结果。若输入的是非法符号则输出ERROR。
int main(){
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
switch(c){
case '+':printf("%d",a+b);break;
case '-':printf("%d",a-b);break;
case '*':printf("%d",a*b);break;
case '/':if(b!=0){
printf("%d",a/b);
break;
}
case '%':if(b!=0){
printf("%d",a%b);
break;
}
default:printf("ERROR");break;
return 0;
}
}
17.判断是否是完全平方数。(若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。)
方法一
#include <stdio.h>
#include <math.h>
int issquare(int n);
int main(){
int n,p;
scanf("%d",&n);
if(p=issquare(n))
printf("%d是完全平方数",n);
else
printf("%d不是完全平方数",n);
return 0;
}
int issquare(int n){
int m;
m=(int)sqrt(n);
if(m*m==n)
return n;
else
return 0;
}
方法二
#include <stdio.h>
int main()
{
int i,n,flag;
scanf("%d",&n);
flag=0;
for(i=1;i<n/2;i++)
{
if(i*i==n)
flag=1;
}
if(flag==1)
printf("%d是",n);
else
printf("不是");
return 0;
}
18.由键盘输入全班30人的成绩,按成绩由高到低排序,并输出排序后的成绩。
1.在主函数中输入30人的成绩,输出排序后的成绩。
2.子函数中对30个程序排序。
冒泡排序
#include <stdio.h>
#define N 5
int main(){
int s[N],i;
void sort(int a[]);
for(i=0;i<N;i++)
scanf("%d",&s[i]);
sort(s);
for(i=0;i<N;i++)
printf("%4d",s[i]);
return 0;
}
void sort(int a[])
{
int i,j,t;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
19.写程序验证哥德巴赫猜想。任何一个大于二的偶数总能表示为两个素数之和。
官方答案:
#include <stdio.h>
#include <math.h>
int prime(int p);
int main(){
int n,p1,p2;
scanf("%d",&n);
for(p1=3;p1<=n/2;p1+=2)
{
p2=n-p1;
if(prime(p1)&&prime(p2))
{
printf("%d=%d+%d",n,p1,p2);
break;
}
}
if(p1>n/2)
printf("不符合");
}
int prime(int p)
{
int e,i;
e=sqrt(p);
for (i=2;i<=e;i++)
if(p%i==0)break;
if(i>e) return 1;
else return 0;
}
自己好理解的答案:
#include <stdio.h>
#include <math.h>
int prime(int p);
int main(){
int n,p1,p2;
scanf("%d",&n);
for(p1=3;p1<=n/2;p1+=2)
{
p2=n-p1;
if(prime(p1)&&prime(p2))
{
printf("%d=%d+%d",n,p1,p2);
break;
}
}
if(p1>n/2)
printf("不符合");
}
int prime(int p)
{
int i,flag=1;
for(i=2;i<p;i++)
{
if(p%i==0)
flag=0;
}
return flag;
}
判断是否是素数
方法1
int prime(int p)
{
int e,i;
e=sqrt(p);
for (i=2;i<=e;i++)
if(p%i==0)break;
if(i>e) return 1;
else return 0;
}
#include <stdio.h>
#include <math.h>
void main(){
int m; // 输入的整数
int i; // 循环次数
int k; // m 的平方根
printf("输入一个整数:");
scanf("%d",&m);
// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
k=(int)sqrt( (double)m );
for(i=2;i<=k;i++)
if(m%i==0)
break;
// 如果完成所有循环,那么m为素数
// 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k
if(i>k)
printf("%d是素数。\n",m);
else
printf("%d不是素数。\n",m);
return 0;
}
方法2
#include <stdio.h>
int main(){
int a=0; // 素数的个数
int num=0; // 输入的整数
printf("输入一个整数:");
scanf("%d",&num);
for(int i=2;i<num;i++){
if(num%i==0){
a++; // 素数个数加1
}
}
if(a==0){
printf("%d是素数。\n", num);
}else{
printf("%d不是素数。\n", num);
}
return 0;
}
20.编写程序求两个给定正整数的最大公约数和最小公倍数
int main(){
int a,b,num1,num2,temp;
scanf("%d%d",&num1,&num2);
if(num1<num2){
temp=num1;num1=num2;num2=temp;
}
a=num1;b=num2;
while(b!=0){
temp=a%b;
a=b;
b=temp;
}
printf("最大公约数%d",a);
printf("最小公倍数%d",num1*num2/a);
return 0;
}
这里运用了辗转相除法:以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数
int maxgy(int x,int y)
{
int i,t;
if(x<y){
t=x;x=y;y=t;
}
for(i=y;i>=1;i--)
{ if(x%i==0&&y%i==0)
break;
}
return i;
}
21把一个字符串逆序输出
#include <stdio.h>
#include <string.h>
int main(){
int i,j,k,t;//i和j是,k是长度,t是中间变量;
char a[20];
scanf("%s",a);//也可以用get(a)
j=strlen(a)-1;
k=strlen(a)/2;
for(i=0;i<k;i++,j--)
{
t=a[i];a[i]=a[j];a[j]=t;
}
printf("%s",a);//可以用put(a)
return 0;
}
22.计算字符串的长度,不能用strlen函数
1 普通方式。
int main(){
char s[81];
int i,p=0;
gets(s);
for(i=0;s[i]!='\0';i++)
p++;
printf("%d",i);
}
2 递归
int strlength(char *p)
{
if(p==NULL || *p=='\0')
return 0;
else
return 1+strlength(p+1);
}
3 非递归
编写函数
int strlength(char *p)
{
int k=0;
while(*p!='\0')
{
k++;p++;
}
return k;
}
也可以这样
int fun(char *p){
int i,k;
for(i=0;p[i]!='\0';i++)
k++;
return k;
}
23.连接两个字符串
void mystrcat(char a1[],char a2[]){
int i=0,j=0;
while(a1[i]!='\0') i++;
while(a2[j]!='\0'){
a1[i]=a2[j];
i++;j++;
}
a1[i]='\0';
}
int main(){
char a[10],b[10];
gets(a);
gets(b);
mystrcat(a,b);
printf("%s",a);
return 0;
}
int fun(char *p,char *q){
while(*p!='\0')
p++;
while(*q!='\0')
*p++=*q++;
*p='\0';
return *p;
}
int main(){
char a[81],b[81];
gets(a);
gets(b);
fun(a,b);
puts(a);
return 0;
}
24.字符串复制
void MyStrcpy(char *dstStr,char *srcStr)
{
while (*srcStr !='\0'){
*dstStr=*srcStr;
srcStr++;
dstStr++;
}
*dstStr='\0';
}
25.求矩阵中最大元素的值,以及其所在的行号和列号
int main(){
int i,j,max,hang,lie,t;
int s[3][4]={{1,2,3,4},{4,5,6,7},{9,6,5,2}};
max=s[0][0];hang=0;lie=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(s[i][j]>max){
max=s[i][j];hang=i;lie=j;
}
printf("max=%d,hang=%d,lie=%d",max,hang,lie);
}
26.有三个字符串,找出其中最大的
int main(){
char str[3][10];
char max[10];
int i;
for(i=0;i<3;i++) gets(str[i]);
strcpy(max,str[0]);
for(i=1;i<3;i++)
if(strcmp(max,str[i])<0)
strcpy(max,str[i]);
printf("%s",max);
}
27.选择法排序
n个数进行n-1轮比较,
a[i]和a[j]比较
int main(){
int i,j;
float a[10],t;
printf("输入十个数:");
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<=9;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(j=0;j<10;j++)
printf("%6.2f",a[j]);
return 0;
}
28冒泡排序
n个数进行n-1轮比较,第j轮进行n-i次两两比较
int main(){
int i,j;
float a[10],t;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]<a[j+1])
{
t=a[i];
a[j]=a[j+1];
a[j+1]=t;
}
for(j=0;j<10;j++)
printf("%6.2f",a[j]);
return 0;
}
29.函数int Search(int a[N],int x,int y)的功能是查找并替换一维数组a中部分元素的值(把数组a中的所有x值换为y ) ,返回被替换的元素个数。
int search(int a[N],int x,int y)
{
int n=0,i;
for(i=0;i<N;i++)
if(a[i]==x)
{
a[i]=y;
n++;
}
return n;
}
30.二维数组行列互换。(行列转置)
b[j][i]=b[i][j]==
int main(){
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%3d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%3d",b[i][j]);
printf("\n");
}
}
31.输入一个字符,分别统计字母,数字,空格及其他字符出现的次数。
int main(){
char ch;
int i=0,j=0,k=0,l=0,p=0;
while((ch=getchar())!='\n'){
if(ch>='0'&&ch<='9')
i++;
else if(ch>='a'&&ch<='z')
k++;
else if(ch>='A'&&ch<='Z')
j++;
else if(ch==' ')
l++;
else
p++;
}
printf("数字%d,小写%d,大写%d,空格%d,其他%d",i,j,k,l,p);
return 0;
}
32.统计字符串中数字出现的个数
int main(){
char s[80];
int a[10]={0},i;
gets(s);
while(s[i])
{
if(s[i]>='0'&&s[i]<='9') a[s[i]-'0']++;//那个位置的数加一;
i++;
}
for(i=0;i<10;i++)
printf("%d出现个数:%d\n",i,a[i]);
return 0;
}
33一个球从100米的高度自由下落,每次落地后反跳回原来高度的一半,在落下,求它的第十次落地时,经过多少米,第十次反弹多高?
第一次落地经过100米,计作a1;
第二次落地经过(100/2)*2=100米,计作a2;
第三次落地经过(100/4)*2=50米,计作a3;
第四次落地经过(100/8)*2=25米,计作a4;
int main(){
double sn=100,hn=sn/2;
int n;
for(n=2;n<=10;n++){
sn=sn+2*hn;
hn=hn/2;
}
printf("共经过:%f",sn);
printf("反弹:%f",hn);
return 0;
}
34.四个字符串函数
strlen:计算字符的长度,遇到 ‘\0’结束。
sizeof:计算字符串占用内存大小。包括结尾的’\0’
strcpy: 字符串拷贝函数
strcat:字符串连接函数
strcmp:字符串比较函数
35.输出五个人成绩等级
int main()
{
float str[5];
int i,n;
for(i=0;i<=4;i++)
scanf("%f",&str[i]) ;
for(i=0;i<=4;i++)
{
n=str[i]/10;
switch(n)
{
case 9:printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
case 5: case 4: case 3: case 2: case 1:printf("E");break;
}
}
return 0;
}
36.输入不超过80个字符,统计有几个单词。
思路:有一个空格就相当于有一个单词了
方法1
int main(){
int i,num=0,word=0;
char c;
char ch[80];
//scanf("%s",ch);此处不能用scanf输入,用scanf的话空格代表结束,所以输入一个字符串的时候最好用gets
//printf("%s",ch);
gets(ch);
for(i=0;(c=ch[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0)
{
word=1;
num++;
}
printf("%d",num);
return 0;
}
方法二:自己总结的。比较简单。
#include <stdio.h>
#include <string.h>
int main()
{
char s[81];
gets(s);
int i,k=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]==' ') k++;
}
printf("%d",k+1);
return 0;
}
37.编写函数下半三角元素的值乘以n
void fun(int a[M][N],int n)
{
int i,j;
for(i=0;i<M;i++)
for(j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
38.输出杨辉三角形的前10行
分三大板块:
1.因为第一列和每一行的最后一列都为1,所以先为他们赋值1。
2.然后每一行的中间部分进行赋值a[i][j]=a[i-1][j-1]+a[i-1][j]
3.最后进行输出操作即可
int main(){
int a[10][10]={0},i,j;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=0;j<=i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<10;i++){
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
39.编写函数,输入一个字符串,要求输入的这个字符串的每两个字符之间加入一个空格。
思路:用for循环先扩大数组为原来的两倍,再赋值,然后为小一个的赋值为 空格
int main(){
char str[80];
void ss(char str[]);
scanf("%s",str);
ss(str);
printf("%s",str) ;
}
void ss(char str[])
{
int i;
for(i=strlen(str);i>0;i--){
str[i*2]=str[i];
str[i*2-1]=' ';
}
}
40.编写函数,输入一个字符串,要求输出的这个字符串每个字符,每两个字符之间隔开一个空格。如输入ABC,输出A B C。
int main(){
int fun(char str[]);
char a[81];
printf("输入字符串:");
gets(a);
printf("输出原字符串:");
puts(a);
fun(a);
printf("输出改变后字符串:");
puts(a);
return 0;
}
int fun(char str[])
{
int i;
for(i=strlen(str);i>0;i--)
{
str[2*i]=str[i];
str[2*i-1]=' ';
}
}
41.编写函数,将字符串的下标为奇数的字母转换为大写。
void fun(char *ss)
{
int i,n;
n=strlen(ss);
for(i=1;i<n;i+=2)
if(ss[i]>= 'a'&& ss[i]<='z')
ss[i]=ss[i]-32;
}
42.编写函数fun功能是:求斐波那契数列大于t的最小的一个数,结果由函数返回。其中斐波那契为:F(0)=0,F(1)=1,F(2)=F(n-1)+F(n-2).
int fun(int n){
int f0=0,f1=1,f2=1;
while(f2<n){
f0=f1;
f1=f2;
f2=f0+f1;
}
return f2;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",fun(n));
}
int fun(int n){
int f3=0,f1=1,f2=1;
while(f3<n){
f3=f2+f1;
f1=f2;
f2=f3;
}
return f3;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",fun(n));
}
43.编写程序,输入年月日,计算该日期在本年中是第几天,需要考虑闰年。用结构体变量完成。
45.将十进制转换为二进制
void to_b(unsigned long n);
int main()
{
unsigned long num;
scanf("%ul",&num);
to_b(num);
putchar('\n');
return 0;
}
void to_b(unsigned long n)
{
unsigned long r;
r=n%2;
if(n>=2)
to_b(n/2);
putchar(r?'1':'0');//把数字转换为字符0或1
return ;
}
void main()
{
int c[32],i=0,n;
scanf("%d", &n) ; //输入待转换整数n
do {
c[i++]=n%2;
n/=2;
} while(n!=0) ;
for(i--;i>=0;i--)
printf("%d",c[i] );
printf("\n");
}
46.输入一个数,要求按原来排序的规律插入数组中。
int main(){
int a[11]={1,4,6,9,13,16,19,28,40,100};
int i,j,temp1,temp2,end,num;
for(i=0;i<=9;i++)
printf("%5d",a[i]);
printf("\n");
scanf("%d",&num);
end=a[9];
if(num>end)
a[10]=num;
else
{
for(i=0;i<10;i++)
{
if(a[i]>num){
temp1=a[i];
a[i]=num;
for(j=i+1;j<=10;j++){
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
47.现有十个城市名及其春夏秋冬四个季节的平均温度值编写程序,定义合适的结构体,输入十个城市名和四季温度计,算各个城市的全年平均温度。并按照平均温度从低到高的顺序输出城市名,四季温度及全年平均温度。
struct aa
{
char city[10];
float spring;
float summer;
float autumn;
float winter;
float avgtem;
};
int main()
{
struct aa x[10],t;
int i,j;
for(i=0;i<10;i++)
scanf("%s%f%f%f%f",x[i].city,&x[i].spring,&x[i].summer,&x[i].autumn,&x[i].winter);
for(i=0;i<10;i++)
x[i].avgtem=(x[i].spring+x[i].summer+x[i].autumn+x[i].winter)/4;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++){
if(x[j].avgtem>x[j+1].avgtem)
{t=x[j];x[j]=x[j+1];x[j+1]=t;}
}
for(i=0;i<10;i++)
printf("%s,%f,%f,%f,%f,%f\n",x[i].city,x[i].spring,x[i].summer,x[i].autumn,x[i].winter,x[i].avgtem);
return 0;
}
48.统计候选人得票数。假设有3名候选人,每次输入一个得票人的名字,输入“0”结束,要求最后输出每个人的得票总数。
struct person{
char name[20];
int count;
};
int main(){
struct person leader[3]={
"hu",0,"li",0,"ma",0
};
int i;
char leader_name[20];
do{
scanf("%s",leader_name);
if(strcmp(leader_name,"0")==0) break;
else
for(i=0;i<3;i++){
if(strcmp(leader_name,leader[i].name)==0) leader[i].count++;
}
}while(1);
for(i=0;i<3;i++)
printf("%10s:%10d\n",leader[i].name,leader[i].count);
return 0;
}
49.递归实现斐波那契数列的第三十项
int main(){
int fun( int n);
printf("%d",fun(30));
return 0;
}
int fun( int n){
if(n==1||n==2)
return 1;
else
return fun(n-1)+fun(n-2);
}
50.编写一个函数,实现两个字符串的比较。当字符串1等于字符串2时,返回0;当字符串1≠字符串二时,返回两者第一个不同字符的ASCII码的差值。
方法1.
int main()
{
int strcmpq(char *p1,char *p2);
int m;
char str1[20],str2[20],*p1,*p2;
printf("input two strings:\n");
scanf("%s",str1);
scanf("%s",str2);
p1=str1;
p2=str2;
m=strcmpq(p1,p2);
printf("result:%d\n",m);
return 0;
}
int strcmpq(char *p1,char *p2) //两个字符串比较函数
{
int i;
i=0;
while(*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return 0; //相等时返回结果 0
return(*(p1+i)-*(p2+i)); //不等时返回结果为第一个不等字符 ASCII 码的差值
}
我感觉方法23比较好理解。
方法二.
int main(){
char a[81],b[81];
gets(a);
gets(b);
int i=0,resu;
while((a[i]==b[i])&&(a[i]!='\0')) i++;
if(a[i]=='\0'&&b[i]=='\0')
resu=0;
else
resu=a[i]-b[i];
printf("%d",resu);
return 0;
}
方法三.
int main(){
char a[81],b[81];
int resu;
gets(a);
gets(b);
resu=fun(a,b);
printf("%d",resu);
return 0;
}
int fun(char a[],char b[])
{
int i=0;
while((a[i]==b[i])&&(a[i]!='\0')) i++;
if(a[i]=='\0'&&b[i]=='\0')
return 0;
else
return a[i]-b[i];
}
51.编写程序,删除一维数组中重复出现的元素。
依次比较,将重复的放在最后。将前面的赋给另一个数组。输出。
int main()
{
int i,j,a[6],b[6],n,t;
int *pa=a,*pb=b;
for(i=0;i<6;i++)
scanf("%d",pa+i);
n=0;
for(i=0;i<6-n;i++) // 将数组中的每个元素分别与其后面各元素比较
for(j=1;j<6-i-n;j++) //扫描当前元素后的所有元素
if(*(pa+i)==*(pa+i+j)) //如果当前元素与其后面的某个元素相等
{
t=*(pa+i+j); //将与当前元素相等的那个元素同最后一个元素交换
*(pa+i+j)=*(pa+5-n);
*(pa+5-n)=t;
n++; //删除元素数加 1
}
for(i=0;i<6-n;i++) //将数组 a 中剩余元素复制到数组 b 中
*(pb+i)=*(pa+i);
for(i=0;i<6-n;i++)
printf("%d ",*(pb+i));
return 0;
}
52.两个乒乓球队进行比赛,各出三人。甲队为a,b,c,三人,乙对为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
int main()
{
char i,j,k;/*i 是 a 的对手,j 是 b 的对手,k 是 c 的对手*/
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
if(i!=j)
for(k='x';k<='z';k++)
{
if(i!=k && j!=k)
{ if(i!='x' && k!='x' && k!='z')
printf("order id a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
return 0;
}
53.将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。
int main()
{
int n,i;//i是那个数的因数
scanf("%d",&n);
printf("%d=",n);
i=2;
while(n!=i)//当n=i时退出,因为这时是n的最后一个因数了。
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
i++;
}
printf("%d",n);//这里把最后一个因数输出。
return 0;
}