吉林大学高级程序设计(红皮书例题)(1~7章)

1、有n个学生,学生信息包括学号、姓名、成绩要求从高到低输出各个学生信息

#include<stdio.h>


struct Student{
   
	
	int num;
	char name[20];
	float score;
}; 



int main(){
   
	
    struct Student stu[5]={
   {
   10101,"zhang",78},{
   10102,"wang",98.5},{
   10106,"ling",73.6},{
   10117,"sun",100},{
   10118,"li",86}};
	Student temp;
	int n=5,i,j;
	for(i=0;i<n-1;i++)//冒泡排序 
	{
   
		for(j=0;j<n-i-1;j++)
		{
   
			if(stu[j].score<stu[j+1].score){
   
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp; 
			}
		}
	}
	for(i=0;i<n-1;i++)printf("%d  %s  %.2lf\n",stu[i].num,stu[i].name,stu[i].score); 
	
	
	
	return 0; 
}
 

typedef 取别名这两种结构体定义一致

typedef struct Student{
   
	
	int num;
	char name[20];
	float score;
}Student; 



int main(){
   
	
    Student stu[5]={
   {
   10101,"zhang",78},{
   10102,"wang",98.5},{
   10106,"ling",73.6},{
   10117,"sun",100},{
   10118,"li",86}};

2、求出100~200以内的素数

#include<stdio.h>
#include<math.h>


//质素 
int isPrime(int n)
{
   	
	for(int i=2;i<=sqrt(n);i++)
	{
   
		if(n%2==0)return 0; 
	} 
	
	return 1; 
 } 





int main(){
   
	
	
	int i,j;
	int count=0;
	for(int i=101;i<=200;i++)
	{
   
		
		if(isPrime(i)) {
   
			count++;
			printf("%d  ",i);
			if(count%5==0)printf("\n");//每五个换行 
		}	
	 } 
  
	
	
	return 0; 
}
 

3、求出一个数的所有约数之和

#include<stdio.h>
#include<math.h>


int main(){
   
	
	
	int n,sum;
	printf("请输入一个正数: ");
	scanf("%d",&n);//18=1+2+3+6+9+18
	sum=0;
	for(int i=1;i<=n;i++)
	{
   
		if(n%i==0)sum+=i; 
	 } 
	 
	 printf("约数和为:%d\n",sum); //39
  
	
	
	return 0; 
}
 

找出1000以内完全数即n等于所有因子之和 例如6=1+2+3

#include<stdio.h>
#include<math.h>


int main() {
   


	int i,n;
	int factors[1000];//存放因子
	int count;//统计因子个数
	int sum;

	for(n=1; n<=1000; n++) {
   // 6   28   496

		count=0;
		sum=0;
		for(i=1; i<n; i++) {
   
			if(n%i==0) {
   
				sum+=i;
				factors[count++]=i;
			}
		}

		if(sum==n) {
   
			printf("%dits factors are",n);
			for(i=0; i<count; i++)
				printf("%d ",factors[i]);

			printf("\n");
		}

	}



	return 0;
}

4、将一个数表示为质因数的乘积形式 例如90=2x3x3x5

#include<stdio.h>
#include<math.h>




int main() {
   


    int i,n;
	printf("请输入n:");
	scanf("%d",&n);
	printf("%d=",n);
	for(i=2;i<n;i++) //90=2*3*3*5
	{
   
		while(i!=n)//求出前k-1个质因数 
		{
   
			if(n%i==0){
    
				n/=i;
				printf("%d*",i); 
			}else break; 	
		 } 
	 } 
	 printf("%d\n",n); //输出最后一个质数 


	return 0;
}

5、输出三位数中完全平方数,并且该数任意两位相同

#include<stdio.h>
#include<math.h>


int  isSquare(int n) {
   

	int i;
	if(n==1||n==0)return 1;

	i=sqrt(n);
	if(i*i==n)return 1;
	else return 0;
}


int main() {
   


	int  i,a,b,c,num=100;

	while(num<1000) {
   
		if(isSquare(num)) {
   
           a=num/100; //百位 
           b=(num%100)/10; //十位 
           c=num%10;//个位 
           
           if(a==c||a==b||b==c)printf("%d  ",num); 
		}
		num++; 
	}



	return 0;
}

6、输入立方和小于m的最大正整数

#include<stdio.h>
#include<math.h>




int main() {
   


	int m,i;
	scanf("%d",&m);
	for(i=0;i*i*i<m;i++);
	
	i--;
	printf("%d",i); 
	
	

	return 0;
}

7、2019年软件专硕 求出前20对孪生素数对 (3,5) 后者比前者大2

#include<stdio.h>
#include<math.h>


int  isPrime(int n) {
   

	if(n==1||0)return 0;

	for(int i=2; i<=sqrt(n); i++) {
   
		if(n%i==0)return 0;
	}
	return 1;
}


int main() {
   


    int count=0;
    int n=3;
    
    while(count!=20)
    {
   
        if(isPrime(n)&&isPrime(n+2)){
   
        	count++;
        	printf("(%d,%d)\n",n,n+2);
		}
		n+=2;//素数直接考虑奇数 
	}





	return 0;
}

8、输入年月日求出今年的第几天

#include<stdio.h>
#include<math.h>

int  leap_year(int year) {
   
	if(year%400==0||year%4==0&&year%100!=0) {
    //能被400整除或者能被4整除不能被100整除
		return 1;
	}
	return 0;
}


int  fun(int year,int month,int day) {
   
	int count=0;
	int Month[12]= {
   31,28,31,30,31,30,31,31,30,31,30,31};
	Month[1]+=leap_year(year);
	for(int i=0; i<month; i++)count +=Month[i];
	count+=day;
	return count;
}

int main() {
   


	int year,month,day;
    scanf("%d%d%d",&year,&month,&day);
	
	printf("%d 年 %d月 %d日 是 该 年 第 %d 天\n",year,month,day,fun(year,month,day)); 







	return 0;
}

9、复数运算法则

在这里插入图片描述

在这里插入图片描述

#include<stdio.h>
#include<math.h>



int main() {
   


    int  a1,b1,a2,b2,p,q,e,f; // a1+b1i   a2+b2i 
	
	printf("请输入复数");
	scanf("%d%d%d%d",&a1,&b1,&a2,&b2);
	p=a1+a2;//加法 
	q=b1+b2;
	e=a1*a2-b1*b2;//乘法 
	f=a1*b2+a2*b1;
	
	printf("相加得%d+%di\n",p,q);
	
	printf("相乘得%d+%di\n",e,f); 
	 




	return 0;
}

10、1、2、3、4可以组成多少不相同的三位数,无重复数字

#include<stdio.h>
#include<math.h>



int main() {
   


    int i,j,k;
	
	for(i=1;i<5;i++)
	  for(j=1;j<5;j++)
	    for(k=1;k<5;k++){
   
	    	if(i!=k&&i!=j&&k!=j){
   
	    		printf("%d%d%d\n",i,j,k); 
			} 
		} 


	return 0;
}

11、将x,y,z由小到大输出

#include<stdio.h>
#include<math.h>



int main() {
   


   int x,y,z,t;
   
   printf("请输入三个数字\n");
   scanf("%d%d%d",&x,&y,&z);
   
   if(x>y){
    //小的向前移动 
   	  t=x;
	  x=y;
	  y=t; 
   } 
   
   if(x>z){
   //将x设置为最小 
   	 t=x;
	 x=z;
	 z=t; 
   } 
   
   if(y>z){
    //找出次小 
   	 t=y;
	 y=z;
	 z=t; 
   } 
   
   printf("从小到大排序: %d %d %d",x,y,z); 


	return 0;
}

12、求出1到20阶乘之和1!+2!+…20!

#include<stdio.h>
#include<math.h>



int main() {
   


	int i;

	long sum,mix=1;

	for(int i=1; i<=20; i++) {
    
		mix=mix*i;
		sum+=mix;
	}

	printf("%ld\n",sum);


	return 0;
}

12、水仙花数 n=百位三次方+十位三次方+个位三次方

#include<stdio.h>
#include<math.h>



int main() {
   


	int hum,ten,ind,n;

	for(int n=100; n<1000; n++) {
   
		hum=n/100;
		ten=(n%100)/10;
		ind=n%10; 
		if(n==hum*hum*hum+ten*ten*ten+ind*ind*ind)printf("%d ",n); 
	}


	return 0;
}

13、将一个各个为提取出来,分别求出对应阶乘,求和

#include<stdio.h>
#include<math.h>








int main() {
   


  int n,sum;
  scanf("%d",&n);
  
  while(n)
  {
   
  	 int t=n%10;
  	 n/=10; 
	 int k=1; 
	 for(int i=1;i<=t;i++)k*=i;
	 sum+=k; 
   } 
   
   printf("%d",sum); 


	return 0;
}

14、a+aa+aaa+…+aaaaa…a a每次乘以10然后加上原来的a一共n个

#include<stdio.h>
#include<math.h>




int main() {
   


   int n,a;
   scanf("%d%d",&n,&a);// 3  2
   int sum=0; 
   int k=a; 
   for(int i=1;i<=n;i++)
   {
   
   	  sum+=k;
	  k*=10;
	  k+=a; 
   }
   printf("%d",sum); // 246


	
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值