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