初学者C语言练习题整理

    • 一、入门
    • 二、函数
    • 三、数组
    • 四、指针
    • 五、结构体
    • 六、文件

一、入门

1.计算再0~m之间可以组成多少不重复的三位数?(循环10168)

#include<stdio.h>int main(){ 
int m;
scanf("%d",&m);int n=0,i,j,k;for(i=1;i<=m;i++){for(j=0;j<=m;j++)
  {for(k=0;k<=m;k++)
      { if(i!=k&&k!=j&&j!=i&&(k%2==0))
           {
  n++;
  }
 }
 }
}printf("%d",n);
return 0;
}

2.用0~n之间不同的数组成三位数,求有多少种方法?

#include<stdio.h>int main(){ 
    int i,j,k,count=0;
    int n;
   scanf("%d",&n);
   for(i=1;i<=n;i++)
   {for(j=0;j<=n-1;j++)
       {for(k=0;k<=n-2;k++)
           {
count++;
            }
        }
    }   
   printf("%d",count);
    return 0;
}

二、函数

3.有三座塔,ABC,开始时A上有n 个盘子,大小不等,大在上,小在下,
要将盘子从A移到C座,每此只能移一个,输入盘子的数量,输出移动的
步骤,利用递归完成?

#include "stdio.h"
int move(char x,char y){
    printf("%c to %c\n", x, y);
}int hanoi(int n,char a,char b,char c){
    if(n==1) move(a,c);
        else 
       {
        hanoi(n-1,a,c,b);
                    move(a,c);
                     hanoi(n-1,b,a,c);
    }
   	return 0;
}
int main(){int n,count;
	scanf("%d", &n);
    count=hanoi(n,'A','B','C');
	return 0;
}

4.求取斐波那契数列的第n项?

#include <stdio.h>int fibo(int t){
 if(t==1) return 0;
else if(t==2) return 1;
 else return fibo(t-1)+fibo(t-2);
}int main(){
	int n,s;
   scanf("%d", &n);
    s=fibo(n);
	printf("%d", s);
	return 0;
}

5.利用递归函数求n!

#include <stdio.h>
int fun(int n){
    if(n<0) return 0;
    else if(n==0||n==1)
    return 1;
    else return (n*fun(n-1));
}
int main({
	int n;
    scanf("%d", &n);
    printf("%d", fun(n));
	return 0;
}

7.输入正整数,转化为二进制输出

#include<stdio.h>
void dectobin(int n);int main(){
    int n;
    scanf("%d",&n);
    dectobin(n);
    return 0; 
void dectobin(int n)
{
    int i=0,a[32];
    while(n>0)
    {
        a[i]=n%2;
        i++;
        n=n/2;
    }
    for(i--;i>=0;i--)
    printf("%d",a[i]);
}

8.返回number逆序数

#include<stdio.h>int reverse(int n)
{
    int i,m=0;
        while(n/10!=0)
         {
 i=n%10;
 n=n/10; m=m*10+i;
    }
       if(n!=0)
    {
m=m*10+n;
}
   return m;
}int main(){
    int n;
	scanf("%d",&n);
	printf("%d",reverse(n));
return 0;
}

9.输出m,n之间的Fibonacci数

#include "stdio.h"
int fibo(int n){
    if(n<=0) return 0;
         else if(n==1) return 1;
         else if(n==2) return 1;
         else return (fibo(n-1)+fibo(n-2));
}int main(){ 
    int m,n,i=1;
          scanf("%d %d",&m,&n);//m and n are number of fibo
         for(fibo(i)==m;fibo(i)<=n;i++)
          {
        printf("%d ",fibo(i));
    }
    return 0;
}  

10.海滩上有一堆桃子,五只猴子分桃,第一只猴子将桃子分成五份
多了一个,扔入海中,拿走一份;第二只猴子同样做法,问海滩上原
来最少有多少桃子?(3121)

#include "stdio.h"int main()
{
   int i,start, sum;
      for(start=6;;start+=5)
   {
       sum=start;
       for(i=4;i>0;i--)
       {
  if(sum%4==0)
           sum=sum/4*5+1;
             else break;
       }
        if(i==0) break;
   }
   printf("%d",sum);
   return 0;
}

11.输入正整数repeat(小于10)输入一个正整数m,若为素数,输出
“YES"否则"NO"

#include "stdio.h"int f(int n)
{
   int i,sum=0;
   if(n!=2)
   {
       for(i=2;i<n;i++)
       {
           if(n%i==0)
           {
               sum=0; break;
           }
           if(n%i!=0) sum=1;
       }
   }
  if(n==2) sum=1;
   return sum;
}
int main(){
    int  repeat ,i ,m;
    scanf("%d",&repeat);
    for(i=0;i<repeat;i++)//*repeats
   {
        scanf("%d",&m);
        if(f(m)==1) printf("YES\n");
        else printf("NO\n");
    }   
 return 0;
}

12.编写一个函数判断密码是否有效,密码大于8小于等于16,密码中的
字符至少来自其中至少三组
a.大写字母;b.小写字母;c.数字;d.特殊符号

#include "stdio.h"int main(){
    char a[16];
    gets(a);
         int i,s=0,b=0,c=0,d=0,t;
         for(i=0;a[i]!='\0';i++)
         {
        if(a[i]>'a'&&a[i]<'z') s++;
              else if(a[i]>='A'&&a[i]<='Z') b++;
               else if(a[i]>='0'&&a[i]<='9') c++;
                      else d++;
    }
   t=a+b+c+d;
                 if(t>=8)
            {
        if(a!=0 && b!=0 && c!=0 )  printf("YES"); 
                          else if(a!=0 && b!=0 && d!=0) printf("YES");
                   else if(a!=0 && c!=0 && d!=0) printf("YES");         
        else if(b!=0 && c!=0 && d!=0) printf("YES");
                    else printf("NO");
    }
    else printf("NO");
                    //printf("%d %d %d %d",s,b,c,d);
    return 0;
}

13.判断第n个Fibonacci数列f(0)=7,f(1)=11,f(n)=f(n-1)+f(n-2)是否能被3
整除,输出YES 或者NO

#include "stdio.h"int fibo(int t)
{
    if(t==0) return (7);
    else if(t==1) return (11);
 else return (fibo(t-1)+fibo(t-2));
}int main() {
    int n,s;
    scanf("%d",&n);s=fibo(n);
    if(s%3==0)
    printf("yes");else printf("no");
    return 0;
}

14.电梯召唤列表,上一层6秒,下一层4秒,停留5秒,刚开始在0层,输出电梯
完成召唤列表的时间

#include "stdio.h"
int main(){
    int i,n,x,a,sum;
scanf("%d",&n);sum=0;a=0;for(i=1;i<=n;i++){
        scanf("%d ",&x);
if(x>a) 
        { sum=sum+(x-a)*6;}else { sum=sum+(a-x)*4;}
        a=x;sum=sum+5;
    }
    printf("%d",sum);
    return 0;
}

15,韩信带m名士兵打仗,战死若干,剩n名,剩下士兵5人一派剩一人,六人一排
剩5人,站7人一排剩10人,求n的取值有多少可能的取值m>=3000

#include <stdio.h>int main()
{
    int m=0,n=0,count=0; scanf("%d",&m);for(n=m;n>1000;n--) {
        if(n%5==1 && n%6==5 && n%7==4 && n%11==10){
            count++; while(count){
                printf("m=%d,n=%d\n",m,n);break;
            }
        }
    }printf("count = %d\n",count);
    return 0;
}

16.给定俩个正整数m,n,求最小公倍数

#include <stdio.h>
int g(int a,int b)
{
    int r;
    if(a==b) return a;
    else
    while((r=a%b)!=0)
    {
        a=b;
        b=r;
    }
    return b;
}
int fun(int a,int b)
{
   if(a==b) return a;
   else return a*b/g(a,b);
}
int main()
{
    int m,n,s;
    scanf("%d %d",&m,&n);
    s=fun(m,n);
    printf("%d\n",s);
    return 0;
}

17.给定俩个正整数m,n,求最小公约数

#include "stdio.h"
int fun(int m,int n)
{
    int r;
    if(m==n) return m;
    else 
    while((r=m%n)!=0)
    {
        m=n;
        n=r;
    }
    return n;
}
int main()
{
    int m,n,i;
    scanf("%d %d",&m,&n);
    i=fun(m,n);
    printf("%d",i);
    return 0;
}

18.爱因斯坦数学题,2阶剩1阶,3阶剩2阶,5阶剩4阶,6阶剩5阶,7阶剩0阶,有n个阶梯
20<=n<=10000

#include "stdio.h"
int main()
{
    int n,i,count=0;;
    scanf("%d",&n);
    for(i=1;i<n;i++)
    {
        if(i%2==1 && i%3==2 && i%5==4 && i%6==5 && i%7==0)
        {
            count++;
            while(count)
            { printf("%d ",i);
              break;
            }
        }
    }
    return 0;
}

19.判断合数和素数

#include "stdio.h"
int fun(int n)
{
    int i;
    if(n<=0) return 3;
    else if(n==1) return 0;
    else if(n==2) return 1;
    else if(n>2)
    {
        if(n==9) return 2;
        else
        {
            for(i=2;i<n;i++)
            {
                if(n%i==0) 
                    return 2;
                else return 1;
            }
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    switch (fun(n))
    {
        case 0: printf("1不是质数也不是合数");break;
        case 1: printf("质数");break;
        case 2: printf("合数");break;
        case 3: printf("非法数字");break;
    }
    return 0;
}

20.一只猴子,第一天吃一个桃子,第二天是前一天的2倍多一个,输入天数n,猴子共吃了多少桃子?

#include <stdio.h>
int fun(int n)
{
    if(n==1)  return 1;
    else if(n>1) 
    {
     return 2*fun(n-1)+1;
    }
}
int main()
{
    int day,sum,i;
    scanf("%d",&day);
    for(i=1;i<=day;i++)
    {
        sum=sum+fun(i);
    }
    printf("%d",sum);
	return 0;
}

21.输入一个正数x和n,计算并输出x的n次幂

#include <stdio.h>
double fun(double x,int n)
{
    double s=1.0;
    int  i;
    for(i=1;i<=n;i++)
    {
        s=s*x;
    }
    return s;
}
int main()
{
    int n;
    double x,sum;
    scanf("%lf", &x);
    scanf("%d", &n); 
    sum=fun(x,n);
    printf("%.2lf",sum);
    return 0;
}

22.求111+…+nnn的结果(3,36)

#include <stdio.h>
int sum(int n)
{
    int i,t,sum=0;
    for(i=1;i<=n;i++)
    {
        t=i*i*i;
        sum=sum+t;
    }
    return sum;
}
int main()
{
	int n;
    scanf("%d", &n);
	printf("%d", sum(n));
	return 0;
}

三、数组

23.10个人围圈报数,从第一个人开始,报道n的人出局,下一个人从1开始报数,直到所有的人出局,求顺序

#include "stdio.h"
int main()
{
    int i,k,m,n,num[10],*p;
    scanf("%d",&n);
    p=num;
    for(i=0;i<10;i++)
    { *(p+i)=i+1;}
    i=0;k=0;m=0;
    while(m<9)
    {
        if(*(p+i)!=0)
        {k++;}
        if(k==n)
        {
            printf("%d ",*(p+i));
            *(p+i)=0;
            k=0;
            m++;
        }
        i++;
        if(i==10)
        {i=0;}
    }
    while(*p==0) p++;
    printf("%d",*p);
    return 0;
}

24.数列a[8]+b[9],从小到大排序输出b[9]

#include <stdio.h>
int main()
{
	int i,j,m,temp,a[9];
    for(i=0;i<8;i++)
    { scanf("%d ",&a[i]);}
    for(i=0;i<8;i++)
    for(j=i+1;j<8;j++)
    {
        if(a[i]>a[j])
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
    scanf("%d ",&m);
    for(i=0;i<8;i++)
    {
        if(a[i]>m)
        {
            temp=a[i];
            a[i]=m;
            m=temp;
        }
        a[8]=m;
    }
    for(i=0;i<9;i++)
    { printf("%d ",a[i]);}
	return 0;
}

25.给n个员工发工资,计算多少张人名币不必找零

#include "stdio.h"
int main()
{
    int a[100],n,i,j,k,s;
    s=0;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) {break;}
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            do
            {
                if(a[i]>=100)
                {
                    s++;
                    a[i]=a[i]-100;
                }
                else if(a[i]>=50)
                {
                    s++;
                    a[i]=a[i]-50;
                }
                else if(a[i]>=10)
                {
                    s++;
                    a[i]=a[i]-10;
                }
                else if(a[i]>=5)
                {
                    s++;
                    a[i]=a[i]-5;
                }
                else if(a[i]>=2)
                {
                    s++;
                    a[i]=a[i]-2;
                }
                else if(a[i]>=1)
                {
                    s++;
                    a[i]=a[i]-1;
                }
            }
            while(a[i]!=0);
        }
    }
    printf("%d ",s);
    return 0;
}

26.输入3行2列的矩阵a中的元素,分别求出各行元素之和,存入一维数组r,在输出r

#include "stdio.h"
int main()
{
    int a[3][2],b=0,c=0,d=0,i,j,row[3];
    for(i=0;i<3;i++)
    for(j=0;j<2;j++)
    {
        scanf("%d ",&a[i][j]);
    }
    for(j=0;j<2;j++)
    {
        b=b+a[0][j];
        row[0]=b;
    }
    for(j=0;j<2;j++)
    {   
         c=c+a[1][j];
         row[1]=c;
    }
     for(j=0;j<2;j++)
    {
         d=d+a[2][j];
         row[2]=d;
    }
    for(i=0;i<3;i++)
    {
        printf("sum of row %d is %d\n",i,row[i]);
    }
	return 0;
}

27.输入字符串,输入一个字母,删除字母后,输出新的字符串

#include <stdio.h> 
#include <string.h>
int main()
{ 
    char s[50],s1[50];
    gets(s);
    char t;
    scanf("%c ",&t);
    int len;
    len=strlen(s);
    int g=0;
    for(int i=0;i<=len-2;i++)
    {
        while(s[i]==t)
        {
            i++;
        }
        s1[g]=s[i];
        g++;
    }
    puts(s1);
    return 0;
}

28.倒序输出字符串

#include <stdio.h>
//#include <string>
int main( )
{
	char a[10],*p,*q,t;
    gets(a);
    q=p=a;
    while(*q!=0)  q++;
    q--;
    while(p<q)
    {
        t=*p;
        *p=*q;
        *q=t;
        p++;
        q--;
    }
    puts(a);
	return 0;
}

29.sizeof()strlen()计算内存大小和个数

#include <stdio.h>
#include <string.h>
int main()
{ 
    char a[]={'a', 'b', 'c', 'd', 'e', 'f', 'g','h','\0'}; 
    int i,j;
	i=sizeof(a);
    j=strlen(a);

	printf("%d %d",i,j);
	return 0;
}

30.二维数组求最大值

#include <stdio.h>
int main()
{
    int a[4][4],i,max,j;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    {
        scanf("%d ",&a[i][j]);
    }
    max=a[0][0];
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    {
        if(max<a[i][j])
        {
            max=a[i][j];
        }
    }
    printf("%d",max);
    return 0;
}

31.判断对称数组

#include <stdio.h>
#include <math.h>
int main()
{
    int a[4][4]={0},i,j,flag;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    {
        scanf("%d ",&a[i][j]);
    }
    flag=1;
    for(i=0;i<4;i++)
    {
        for(j=0;j<i;j++)
        {
            if(a[i][j]!=a[j][i])
            {
                flag=0;
                break;
            }
            if(!flag) //if(a[i][j]!=a[j][i])
            { break; }
        }
    }
    if(flag) 
    { printf("对称");}
    else { printf("不对称");} 
    return 0;
}

31.求二维矩阵对角线元素之和

#include <stdio.h>
int main()
{
	int a[4][4],i,j,sum=0,t;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    {
        scanf("%d ",&a[i][j]);
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            t=i+j;
            if( i==j || t==3 )
            {
                 sum=sum+a[i][j];
            }
        }
       
    }
    printf("%d",sum);
    return 0;
}

32.判断上三角矩阵(主对角线一下元素全为0)(左上到右下)

#include "stdio.h"
int main()
{                     
    int a[4][4],i,j,flag=1;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    {
        scanf("%d ",&a[i][j]);
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<=i;j++)
        {
           if(a[j][i]!=0)
           {  
               flag=0;
               break;
           } 
        }
    }
    
    if(flag==0) printf("NO");
    else  printf("YES");
	return 0;
}

33.输入n个数,找到最小的数,与最前面的数交换后输出

#include "stdio.h"
int main()
{
    int n,i,t;
    scanf("%d",&n);
    int a[n],min,mmin;
    for(i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    min=a[0],mmin=1;;
    for(i=0;i<n;i++)
    {
        if(a[i]<min)
        {
            min=a[i];
            mmin=i;
        }
    }
    t=a[mmin];
    a[mmin]=a[0];
    a[0]=t;
    
    for(i=0;i<n-1;i++)
    {
        printf("%d ",a[i]);
    }
    printf("%d",a[n-1]);
    return 0;
}

34.求在数组中出现次数最多的数

#include "stdio.h"
int main()
{
    int i,j,max,d;
    int a[20],b[20]={0};
    for(i=0;i<20;i++)
    { 
        scanf("%d ",&a[i]);
        d++;
        if(a[i]==0) break;
    }// put numbers in
    for(i=0;i<d-1;i++)
    {
        for(j=i+1;j<d;j++)
        {
            if(a[i]==a[j])
                b[i]++;//konw how many not single numbers
        }
    }
    max=b[0];//numbers most
    for(i=1;i<d;i++)
    {
        if(b[i]>max)
            max=b[i];
    }
    for(i=0;i<d;i++)
    {
        if(max==b[i])
        printf("%d\n",a[i]);
    }
    return 0;
    
}

35.输入一个数,找到数列中位置并输出

#include <stdio.h>
int main()
{
    //声明并初始化长度为8的数组
	int a[8],i,p=0,flag=0;
	for (i=0;i<8;i++)
		scanf("%d", a+i);
	//输入待查找数据
	int num;
	scanf("%d", &num);
    for(i=0;i<8;i++)
	{
        if(a[i]==num)
        {
            flag=1;p=i;break;
        }
        else //if(a[i]!=num)
        { flag=0;}
	}
    if(!flag) printf("No Data\n");
    else if(flag=1) printf("%d\n",p+1);
    
    return 0;
}

36.已知字符串bd,求在长度为50当中bd出现的次数

#include <stdio.h>
#include <string.h>
int main()
{
    char a[50];
    int d=0,i;
	gets(a);//从键盘输入的字符串保存到字符数组a中
    for(i=0;i<50;i++)
    {
        if(a[i]=='b' && a[i+1]=='d')
        {
            d++;
        }
    }
    printf("%d ",d);
	return 0;
}

37,比较两个字符串是否相同

#include <stdio.h>
#include <string.h>
int main()
{
    char s1[100],s2[100];
    scanf("%s ",s1);
    scanf("%s",s2);//输入两个字符串
	int i,j,t;
    for(i=0;i<100;i++)
    {
        int x=strlen(s1),y=strlen(s2);
        if( x==y && s1[i]==s2[j] )
        {t=1;break;}
        else //if(s1!=s2 && i!=j)
        {t=0;break; }
    }
   if(t==1) {printf("YES");}
   else if(t==0) {printf("NO"); }
   return 0;
}

38.用change函数改变大小写;

#include <stdio.h>
#include <string.h>
int change(char *s)
{
 int i;
 for(i=0;i<strlen(s);i++)
 {
     if(*(s+i)>=65 && *(s+i)<=92)
     {
        *(s+i)+=32;
     }
     else if(*(s+i)>=97 && *(s+i)<=122)
     {*(s+i)-=32;}
 }
   
   
   return 0;
} 
int main( )
{ 
    char str[30];    
	gets(str);
    change(str);
    puts(str);
	return 0;
}

四、指针

39.给定一个字符串,求最后一个单词长度;

#include <stdio.h>
#include <string.h>
int lengthOfLastWord(const char *s) 
{
    int a=0;
    while (*s!='\0')
    {
        if(*s==' ') a=0;
        else a++;
        s++;
    }
    return a;
}

int main()
{
    char str[1024];
    gets(str);
    int length = lengthOfLastWord(str);
    printf("%d\n", length);
    return 0;
}

40.将两个字符串进行连接;

#include <stdio.h>
char strcat(char *str1,char *str2)
{
    int i=0,j=0;
    while(str1[i++]!='\0');
    i--;
    while(str2[j]!='\0')
    {
        str1[i++]=str2[j++];
    }
    str1[i]='\0';
    return 0;
}
int main()
{
	char str1[200];
	char str2[100];
    scanf("%s",str1);//put in NO.1
	scanf("%s",str2);//put in NO.2
	strcat(str1, str2);
    puts(str1);
	return 0;		
}

41.调用reverse函数按输入时顺序输出

#include <stdio.h>
int reverse(int *a,int n)
{
    int i,j,t,temp; 
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(*(a+i) < *(a+j)) 
            {
             temp=*(a+i);
             *(a+i)=*(a+j);
             *(a+j)=temp;
            }
        }
    }
    
    for(i=0;i<n;i++)
    { printf("%d ",a[i]);} 
    return 0;
}

int main()
{ 
    int a[20],n,*p=a;
	int i;
	scanf("%d", &n);
	for(i=0;i<n;i++)
		scanf("%d", a+i);//put in the a[i]
    p=a;
	reverse(p,n);
	return 0;
}

42.将八进制转化为10进制;

#include <stdio.h>
//{int i=0,*a;while(n>0){a[i]=n%8;i++; n=n/8;} for(i--;i>=0;i--;{ printf("%d",a[i]); }return 0;}
void f(int n)
{
    int a,b,c,s;
    a=n/100;
    b=n/10%10;
    c=n%10;
    s=a*8*8+b*8+c*1;
    printf("%d",s);
    return 0;
}
void main()
{ 
	int n;
    scanf("%d ",&n);
    f(n);   
	return 0;
}

43.有n个人围圈报数,报道3推出,求最后一人是原来的几号?

#include <stdio.h>
#include <stdlib.h>
//#define nmax 50
int main()
{
    int i,k=1,m=0,n;
	scanf("%d",&n);
	int p[n];
    for(i=0;i<n;i++)
        p[i]=i+1;
	while(m<n-1)
	{
	    for(i=0;i<n;i++)
        {
	        if(*(p+i)!=0)
            {
                if(k==3)
                {
                    *(p+i)=0;
                    m++;
                    k=0;
                }
                k++;
            }
            
        }
	}
	for(i=0;i<n;i++)
    {
        if(*(p+i)!=0)
            printf("%d",i+1);
    }
	return 0;
}

44.输入5个数据,调用move函数,使得其前面各数顺序向后移动3位;

#include <stdio.h>

int main()
{
    int i,a[5]={0},b[5]={0};
    for(i=0;i<5;i++)
    {scanf("%d ",&a[i]);}
    for(i=0;i<5;i++)
    { b[(3+i)%5]=a[i]; }
    for(i=0;i<5;i++)
    { printf("%d ",b[i]);}
    return 0;
}

45.让指针1指向最大值,2指向最小值,依次输出

 include <stdio.h>
int main ( )
{   int  a,b,c, *p1, *p2,max,min;
	scanf("%d%d%d",&a,&b,&c);
	min=a;
    if(b<min) {min=b;}
    if(c<min) {min=c;}
    max=a;
    if(b>max) {max=b;}
    if(c>max) {max=c;}
    p1=&max;
    p2=&min;
	printf("%d %d\n", *p1,*p2 );
	return 0;
}

五、结构体

46.输入3个学生的学号,姓名,成绩,按照成绩降序排列

#include "stdio.h"

typedef struct student

{
    int num;
    char name[12];
    int score;
}a[3];

int main()

{
    struct student a[3];
    int i,j;

    struct student t;
    
    for(i=0;i<3;i++)

    {
scanf("%d %s %d ",&a[i].num,&a[i].name,&a[i].score);
}

    
    for(j=0;j<2;j++)
    {
        for(i=0;i<2-j;i++)
        
     {
 if((a[i].score) < (a[i+1].score))
            
      {
t=a[i];
  a[i]=a[i+1];
   a[i+1]=t;
   }
        }
    }
    
     for(i=0;i<3;i++)
    
     {
printf("%d %s %d\n",a[i].num,a[i].name,a[i].score);
    }

    return 0;
}

47.把初始代码中的结构数组作为参数传递给函数print,并在函数中打印出结构体数组的内容;

jone 12345 339.0 david 13916 449.0 marit 27519 311.0 yoke 12335 511.0

#include "stdio.h"
struct person 
{
	char name[20];
	double num;
	double grade;
};
int fun(struct person n)
{
		printf("%s %.2lf %.2lf\n", n.name, n.num,n.grade);
	return 0;
}
int main()
{
	struct person a[4]={"jone",12345,339.0,"david",13916,449.0,"marit",27519,311.0,"yoke",12335,511.0};
	int i;
	for(i=0;i<4;i++)
		fun(a[i]);
	return 0;
}

六、文件

48.统计文件中的字符;

#include "stdio.h"
void main()
{
	FILE *fp;
	long num=OL;
	if((fp=fopen("fname.dat","r"))==NULL)
	{
		printf("Open error\n");
		exit(0);
	}
	while(!feof(fp))
	{
		fgetc(fp);
		num++;
	}
	printf("num=%ld\n",num-1);
	fclose(fp);
}

49.用文件编译ab

#include "stdio.h"
void main()
{
	FILE *fp;
	int i,k,n;
	fp=fopen("data.dat","w+");
	for(i=1;i<6;i++)
	{
		fprintf(fp,"%d",i);
		if(i%3==0)
		fprinyf(fp,"\n");
	}
	rewind(fp);
	fscanf(fp,"%d%d",&k,&n);
	printf("%d %d\n",k,n);
	fclose(fp);
}

50.程序执行结果

#include "stdio.h"
int main()
{
	FILE *fp;
	int i,k=0,n=0;
	fp=fopen("d1.dat","w");
	for(i=0;i<4;i++)
		fprintf(fp,"%d",i);
	fclose(fp);
	fp=fopen("d1.dat","r");
	fscanf(fp,"%d%d",&k,&n);
	printf("%d %d\n",k,n);
	fclose(fp);
}

整理纯属个人分享,有问题可评论区讨论哈~

更多推荐

初学者-C语言练习题目汇总