一.填空題(共2題,10.0分)
1
5.14 下面的程式會將產生的n個隨機3位數(100~999)構成一個動態存盤的環,然后將其中第m個數從環中洗掉,其中n,m均是從鍵盤輸入的整數,并大于等于1,m可以大于n,程式中有三個空缺請補齊,(不要有空格和不必要的圓括號)
原始碼
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int *s,n,m,i;
scanf("%d",&n);
s=malloc(n*sizeof(int));
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
s[i]=rand()%900+100;
printf("%d:%d ",i+1,s[i]);
}
printf("\n");
scan-1)%n;
for(i=m;i<nf("%d",&m);
m=(m-1;i++)
s[i]=s[i+1];
n=n-1;
for(i=0;i<n;i++)
printf("%d:%d ",i+1,s[i]);
free(s);
}
2
6.1 下面的程式用于求兩個分數之和,例如,,程式中有四個空缺請補齊,(不要添加空格和圓括號)
#include<stdio.h>
typedef struct
{
int num; //分子
int den; //分母
} Fraction;
//遞回求最大公約數,用于約分
int gcd(int m,int n)
{
if(m%n==0)
{
return n;
}
else
{
return gcd(n,m%n);
}
}
//分數相加函式
Fraction add(Fraction a,Fraction b)
{
int den,num,g;
Fraction r;
den=a.den*b.den; //求分母
num=a.num*b.den+a.den*b.num; //求分子
g=gcd(den,num); //求最大公約數
r.den=den/g; //結果的分母
r.num=num/g; //結果的分子
return r;
}
void main()
{
Fraction a = {1,10}, b = {3,4},c;
c=add(a,b);
printf("1/10+3/4=%d/%d",c.num,c.den);
}
二.簡答題(共1題,5.0分)
1
14-1 建立一種新的型別稱為Complex,包含real和imag兩個域,使用Complex型別定義兩個復數變數,從鍵盤輸入兩個變數的值,計算這兩個復數的和與乘積并一行以一個空格分隔顯示結果,(不要任何提示文字,結果后不用回車)
例如,分兩行輸入:3,3 與1,-2,在一行顯示:4+1j 9-3j,
/*
時間:2021-6-10
作者:童話
環境:Win 10 、 DEV C++
*/
#include<stdio.h>
typedef struct
{
int real; //實部
int imag; //虛部
} Complex;
void main()
{
Complex x,y;
int a,b,c,d;
scanf("%d,%d",&x.real,&x.imag);
scanf("%d,%d",&y.real,&y.imag);
a=x.real+y.real; //和的實部
b=x.imag+y.imag; //和的虛部
c=x.real*y.real - x.imag*y.imag; //積的實部
d=x.real*y.imag + x.imag*y.real; //積的虛部
printf("%d",a);
if(b>0)
printf("+%dj ",b);
else if(b<0)
printf("%dj ",b);
else
printf(" ");
printf("%d",c);
if(d>0)
printf("+%dj",d);
else if(d<0)
printf("%dj",d);
}
三.程式題(共2題,10.0分)
1
6.2 要編程排序一個班的學生學習成績,成績記錄型別Record和清單型別List設計如下:typedef struct {
char no[13];
int score;
} Record;
typedef Record List[10];
請編程,先1行輸入班級號和學生人數,以空格分隔,班級號就是學號的前9位,例如201925804 4
然后1行1個輸入每個學生的順序號和成績,以空格分隔,順序號就是學號的后3位,例如001 80
再將輸入的學生按成績從大到小排序后,將學生的完整學號和成績1行1個顯示,以1個空格分隔,例如201925804001 80,
/*
時間:2021-6-10
作者:童話
環境:Win 10 、 DEV C++
*/
#include<stdio.h>
#include<string.h>
typedef struct
{
char no[13];
int score;
} Record;
typedef Record List[10];
void main()
{
List stugrade;
int i,j,t,n;
char sameno[13],lastno[4],temp[13];
scanf("%s %d",sameno,&n);
//輸入
for(i=0;i<n;i++)
{
strcpy(stugrade[i].no,sameno);
scanf("%s %d",lastno,&stugrade[i].score);
strcat(stugrade[i].no,lastno);
}
//冒泡排序
for(i=0; i<n-1; i++) //比較n-1輪
{
for(j=0; j<n-1-i; j++) //每輪比較n-1-i次,
{
if(stugrade[j].score < stugrade[j+1].score)
{
t = stugrade[j].score;
strcpy(temp,stugrade[j].no);
stugrade[j].score = stugrade[j+1].score;
strcpy(stugrade[j].no,stugrade[j+1].no);
stugrade[j+1].score = t;
strcpy(stugrade[j+1].no,temp);
}
}
}
//輸出
for(i=0;i<n;i++)
{
printf("%s %d",stugrade[i].no,stugrade[i].score);
if(i<n-1)
{
printf("\n");
}
}
}
2
6.4 請撰寫程式輸入n個1~3位十六進制數(n由鍵盤輸入,n<=10),保存到List型別的變數中(List型別定義下面已提供),然后將這些十六進制數轉換為十進制數仍然保存到該變數中,求這些數的和并顯示結果,(顯示結果不用提示文字、不回車)typedef union {
char strcj[4];int intcj;
} List[10];
例如:輸入4
a
b
c
d
顯示結果
10+11+12+13=46
有大問題!
/*
時間:2021-6-10
作者:童話
環境:Win 10 、 DEV C++
*/
#include<stdio.h>
#include<string.h>
typedef union
{
char strcj[4];
int intcj;
} List[10];
int HextoDec(char hex[])
{
int i,dec=0;
int n = 0;
char ch;
while(hex[n]!=0)
{
n++;
}
for(i=0;i<n;i++)
{
printf("~~%c~~\n",hex[i]);
ch = hex[i];
if(ch>='0'&&ch<='9')
dec+=((int)((ch-'0')) * (n-i-1) * 16);
else if(ch>='a'&&ch<='f')
dec+=((int)((ch-'a')) * (n-i-1) * 16);
else if(ch>='A'&&ch<='F')
dec+=((int)((ch-'A')) * (n-i-1) * 16);
printf("~~%d~~\n",dec);
}
return dec;
}
void main()
{
List hextodec;
int n,i,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",hextodec[i].strcj);//輸入
}
for(i=0;i<n;i++)
{
hextodec[i].intcj = HextoDec(hextodec[i].strcj);//轉換
}
for(i=0;i<n;i++)
{
printf("%d",hextodec[i].strcj);
if(i<n-1)
{
printf("+");
}
else
{
printf("=");
}
sum += hextodec[i].strcj;
}
printf("%d",hextodec[i].strcj);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287152.html
標籤:其他
下一篇:藍橋杯單片機
