南京师范大学 计电院 C语言程序设计期末练习题

前言:仅作为给大一同学的期末复习使用,祝愿大家都能取得好成绩。同时也分享一些往年试卷,祝福各位,也希望多多点赞,一起向未来!


一、读程序,写结果。

1.

void func1(int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;

}

void func2(int* px, int* py)

{

int* ptemp;

ptemp = px;

px = py;

py = ptemp;

}

int main()

{

int a = 2, b = 5;

func1(a, b);

printf("%d %d\n", a, b);

a = 2; b = 5;

func2(&a, &b);

printf("%d %d\n", a, b);

return 0;

}

2 5

5 2

2.

int main()

{

int a=21, b=49;

a=a-b;

b=a+b;

a=b-a;

printf("a=%d, b=%d\n", a, b);

a=a-a%b;

b=a/b;

printf("a=%d, b=%d\n", a, b);

a=a*(b+1);

b=a+b;

printf("a=%d, b=%d\n", a, b);

return 0;

}

a=49, b=21

a=42, b=2

a=126, b=128

3.

int main()

{

int a=201911, b=0;

while(a>100)

{

b=b+a%100;

a=a/100;

       printf("a=%d, b=%d\n", a, b);

}

return 0;

}

a=2019,b=11

a=20,b=30

4.

int f(int x)

{

if(x<=3) return 1;

int y1=f(x-1);

int y2=f(x-2);

int y3=f(x-3);

return (y1+y3)*2+y2;

}

void main()

{

printf("%d,%d,%d\n", f(3), f(4), f(5));

}

1,5,13

5.

#define DOUBLE(i) i+i

int main()

{

printf("%d", DOUBLE(3) * DOUBLE(4));

return 0;

}

19

6.

//请写出结构体数组的大小

struct sample1

{

int a;

short b;

short c;

double d;

};

struct sample1 test1[10];

160

7.

void f(int a[],int n)

{

for(int i=0; i<2; i++)

{

for(int j=n-1; j>i; j--)

if(a[j-1]>a[j])

{

int tmp=a[j];  a[j]=a[j-1]; a[j-1]=tmp;

}

}

}

int main()

{

int a[10]={5,6,2,1,7,8,3,4};  

f(a,  8);

for(int k=0; k<8; k++)

printf("%d ", a[k]);

printf("\n");

return 0;

}

1 2 5 6 3 4 7 8

8.

void f(char *p)

{

for(; *p!=0 && *p==' '; p++)

;

for(; *p!=0 && *p!=' '; p++)

    putchar(*p);

putchar('\n');

}

void main()

{

char s[20]="We   Like VS!";

f(s);   

f(s+2);

}

We

Like

9.

void main()

{

int a=16, b=9, c=5, d=0;

int k=0;

while( 1 )

{

switch(k)

{

case 0: d=d*100+a; break;

case 1: d=d*100+b; break;

case 2: d=d*100+c; break;

}

if(k>3)

break;

k++;

}

printf("k=%d, d=%d\n", k, d);

}

k=4, d=160905

10.

int f(int x)

{

int y=0;

while(x>0)

{

y=y+x%2;

x=x/2;

}

return y;

}

void main()

{

printf("%d\n", f(10));

printf("%d\n", f(15));

}

2

4

11.

void main()

{

int a=0, b=0;

while(a<10)

{

if(a%2==0 || a%3==0)

b++;

a=a+1;

}

printf("a=%d, b=%d\n", a, b);

}

a=10, b=7

12.

int f(int a,int b)

{

int c=a;

a=b;

b=c;

return a+b;

}

void main()

{

int a=3,b=5,c;

c=f(a,b);

printf("a=%d,b=%d,c=%d\n", a,b,c);

c=f(a+10,b+20);

printf("a=%d,b=%d,c=%d\n", a,b,c);

}

a=3,b=5,c=8

a=3,b=5,c=38

13.

int f(int x)

{

int n=0;

while(x!=1)

{

if(x%2==1)

x=3*x+1;

else

x=x/2;

n++;

}

return n;

}

void main()

{

printf("%d\n", f(20));

printf("%d\n", f(80));

}

7

9

14.

int f(int a, int b)

{

if(a>b)

return a-b;

else

return b-a;

}

void main()

{

int a=12,b=14,c=16;

printf("%d\n", f(f(a,b), c));

printf("%d\n", f(a, f(b,c)));

}

14

10

15.

void main()

{

int a=70,b=2;

while(b<=a)

{

if(a%b==0)

{

printf("%d ", b);

a=a/b;

}

else

b++;

}

}

2 5 7

16.

void main()

{

int a=20211217, b=0;

while(a>100)

{

b=b+a%100;

a=a/100;

       printf("a=%d, b=%d\n", a, b);

}

}

a=202112, b=17

a=2021, b=29

a=20, b=50

17.

#include <stdio.h>

int main()

{

    char str[] = "TCPL";

    char* p = str + 1;

    printf("%c\n", ++*p);

    printf("%c\n", *(p+1));

    return 0;

}

D

P

18.

int func(int arr[], int size, int q)

{

    int l = 0, r = size - 1;

    int m;

    while (l <= r)

    {

        m = (l + r) / 2;

        printf("%d %d %d\n", l, r, m);

        if (arr[m] == q)

            return m;

        else if (arr[m] < q)

            l = m + 1;

        else

            r = m - 1;

    }

    return -1;

}

int main()

{

    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16};

    int p = func(arr, 8, 6);

    printf("%d\n", p);

    return 0;

}

0 7 3

0 2 1

2 2 2

2

19. 

int x=66, y=1028;

printf("%X, %X\n", x, y);  

printf("%d, %d\n", sizeof(x), sizeof(x+y));  

printf("%d, %d, %d\n", sizeof(char), sizeof(float), sizeof(double));  

42, 404

4, 4

1, 4, 8

20.

假设整数存储占用2个字节,请写出以下输出语句的结果。

char c='a'; int x=-8;

printf("%d,%X\n", c, c);  

printf("%d,%X\n", x, x);  

97, 61

-8, FFFF FFF8

21.

写出p的意义,以及sizeof(p)和sizeof(*p)的值(假设整型变量占4个字节)

  1. double *p;

指向double类型的指针 4 8

  1. double (*p)[5];

指向double类型数组的指针 4 40

  1. double* p[5];

指向double类型的指针数组 20 4

  1. double **p;

指向(指向double类型的)指针的指针 4 4

  1. double(*p)();

函数指针 4 无

二、编程序

1. 编写函数实现判断回文数的功能;编写main()函数,调用该函数,打印100-200之间的回文数的个数。

int isHW(int x)

{   

int xx=x,y=0;

    while(xx>0)

{

y=y*10+xx%10;

xx=xx/10;

}

if(x==y) return 1;

else return 0;

}

int main()

{

for(int x=101; x<200; x++)

if(isHW(x)==1)

printf("%4d", x);

return 0;

}

2. 写一个函数,函数声明如下: int is_prime(int n); 该函数接受任意(int 型)整数 n,判断 n 是否为素数。若是,返回 0;否则,返回-1。在主 函数中使用该函数,打印出第 100 至第 1000 个素数(第一个素数为 2)。

#include <stdio.h>

int is_prime(int n);

int main(){

int cnt = 0;

int n = 1;

for (n = 1;cnt < 1000;n++){

if (!is_prime(n)) cnt++;

if (cnt >= 100&&is_prime(n) == 0) printf("%d\t",n);

}

return 0;

}

int is_prime(int n){

int i = 2;

int judge = 0;

for (i = 2;i < n;i++){

if (n % i == 0&&n > 2){

judge = -1;

break;

}

}

if (n == 1) judge = -1;

return judge;

}

3. 写一个函数,函数声明如下: int fac_bit_count(int n); 该函数接受任意(int 型)整数 n,返回 n!的位数。如,若 n 为 10,则 10! = 3628800,共 7 位,该函数返回 7(注:32 位的 int 型数据可表示的最大整数为 2^31 - 1 = 2147483647)。

#include <stdio.h>

#define MAX 50000

int a[MAX];

int fac_bit_count(int n);

int main(){

int n;

scanf("%d",&n);

printf("%d",fac_bit_count(n));

return 0;

}

int fac_bit_count(int n){

int i = 1;

for (i = 0;i < 50000;i++) a[i] = 0;

int j = 0;

int res,digit;

a[0] = 1;

for (i = 1;i <= n;i++){

digit = 0;

for (j = 0;j < 50000;j++){

res = a[j] * i + digit;

a[j] = res % 10;

digit = res / 10;

}

}

for (j = MAX - 1;j >= 0;j--){

if (a[j]) break;

}

return ++j;

}

4. 欧几里得辗转相除法求最大公约数。给出循环实现。

int GCD_iterative(int m, int n);

#include <stdio.h>

int GCD_iterative(int m, int n){

int mod, i;

while(1){

mod = m % n;

if (!mod) break;

m = n;

n = mod;

}

return n;

}

int main(){

int m, n;

scanf("%d %d",&m, &n);

printf("最大公约数为%d",GCD_iterative(m, n));

return 0;

}

5. 欧几里得辗转相除法求最大公约数。给出递归实现。

int GCD_recursive(int m, int n);

#include <stdio.h>

int GCD_recursive(int m, int n){

if(n==0) return m;

else return GCD_recursive(n,m % n);

}

int main(){

int m, n;

scanf("%d %d",&m, &n);

printf("最大公约数为%d",GCD_recursive(m, n));

return 0;

}

6. 基于最大公约数,求最小公倍数。

int LCM(int m, int n);

#include <stdio.h>

int LCM(int m, int n){

return m*n/GCD_iterative(m,n);

}

int GCD_iterative(int m, int n){

if(n==0) return m;

else return GCD_iterative(n,m % n);

}

int main(){

int m, n;

scanf("%d %d",&m, &n);

printf("最小公倍数为%d",LCM(m, n));

return 0;

}

7. 回文串的判断。 int is_str_pal(const char* str); 接受一个字符串,若该串回文,返回 0;否则,返回-1。

#include <stdio.h>

#include <string.h>

#define MAX 100

int is_str_pal(const char* str){

int judge = 0;

int i;

int len = strlen(str);

for (i = 0;i < len;i++){

if (str[i] != str[len - i - 1]){

judge = -1;

break;

}

}

return judge;

}

int main(){

char str[100];

scanf("%s",str);

printf("%d",is_str_pal(str));

return 0;

}

8. 回文数的判断。 int is_int_pal(int n); 接受一个整数,若该数回文,返回 0;否则,返回-1。 

#include <stdio.h>

int is_int_pal(int n){

int tmp = 0;

int sum = 0;

int judge = 0;

int i;

for (i = n;i;i /= 10) {

tmp = i % 10;

sum = sum* 10 + tmp;

}

if (sum != n) {

judge = -1;

}

return judge;

}

int main(){

int n;

scanf("%d",&n);

printf("%d",is_int_pal(n));

return 0;

}

9. 2 的幂次方判断。 int is_pow2(int n); 接受一个整数,若该数为 2 的幂次方(1,2,4,8..),返回 0;否则,返回-1(提示: 使用位运算)。

#include <stdio.h>

int is_pow2(int n){

int judge = -1;

if ((n&n - 1)== 0) judge = 0;

return judge;

}

 int main(){

  int n;

  scanf("%d",&n);

  printf("%d",is_pow2(n));

  return 0;

 }

10. 反转字符串。 void reverse(char* str); 接受一个字符串,将此串反转(如:”Homework”的反转为”krowemoH”)。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void reverse(char* str){

int n = get_len(str);

char str_cpy[n+1];

int i;

for(i = 0;i < n + 1;i++){

str_cpy[n - i - 1] = str[i];

}

str_cpy[n] = '\0';

strcpy(str,str_cpy);

}

int get_len(char* str){

int n = strlen(str);

return n;

}

int main(){

char* str = (char*)malloc(sizeof(char)*100);

scanf("%s",str);

int n = get_len(str);

char str_cp[n+1];

strncpy(str_cp,str,n+1);

reverse(str_cp);

printf("%s",str_cp);

return 0;

}

11. 二进制中 1 的个数。 int count1_in_bin(int n); 接受一个整数,返回该数的二进制表示中 1 的个数。

#include <stdio.h>

int count1_in_bin(int n){

int digit = 0;

int count = 0;

while (n > 0){

digit = (n&0x01);

n >>= 1;

if (digit) count++;

}

return count;

}

int main(){

int n;

scanf("%d",&n);

printf("%d",count1_in_bin(n));

return 0;

}

12. 编写函数int gcd(int a,int b),返回a和b的最大公约数;编写main()函数,读取文件data.txt中的10个整数,计算这10个整数的最大公约数,并输出之。

int gcd(int a,int b)

{

int nextdiv,nextnum;

nextdiv=a%b;

nextnum=b;

int temp=b;

while(nextdiv)

{

temp=nextdiv;

nextdiv=nextnum%nextdiv;

nextnum = temp;

}

return temp;

}

int main()

{

FILE *fp;

fp=fopen("data.txt","r");

int arr[10];

for(int i=0;i<10;++i)

{

fscanf(fp,"%d",&arr[i]);

}

int res=gcd(arr[0],arr[1]);

for(int i=2;i<10;++i)

{

res=gcd(res,arr[i]);

}

printf("%d\n",res);

return 0;

}

13. 编写main函数,输入正整数x(不超过int范围),数码d(0<=d<=9),计算x中d的出现次数,并输出之。例如12131415中,1的出现次数是4,6的出现次数是0。

int main()

{

int a,b;

scanf("%d%d",&a,&b);

int count[10];

for(int i=0;i<10;++i)

count[i]=0;

while(a/10)

{

count[a%10]++;

a/=10;

}

count[a % 10]++;

printf("%d\n",count[b]);

return 0;

}(方法不唯一)

14. 请写出成绩/图书管理程序中的类型定义,以及打印、查找、删除、插入、排序函数的声明语句。

Struct Student{int id; char name[8]; double score; };

void Print(Student SS[],int n);

int Search(Student SS[],int n,int id);

int Delete(Student SS[],int n,int id);

int Insert(Student SS[],int n, Student s);

void Sort(Student SS[],int n);

15. 卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

https://pintia.cn/problem-sets/994805260223102976/problems/994805325918486528

输入样例:

3

输出样例:

5

#include <stdio.h>

int main()

{

int n,count=0;

scanf("%d",&n);

while (n!=1){

if (n%2==0){

n/=2;

count++;

}else{

n=3*n+1;

            n/=2;

count++;

}

}

printf("%d",count);

return 0;

 }

16. 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384

#include <stdio.h>

#include <string.h>

int main() {

const char pinyin[10][5] = {"ling", "yi", "er", "san", "si",

"wu", "liu", "qi", "ba", "jiu"};

int num, sum = 0;

while(scanf("%1d", &num) != EOF)

sum += num;

char ans[4]; //给出的数 < 10^100,故各位数字之和最多为900  

sprintf(ans, "%d", sum);

for(int i = 0; i < strlen(ans); i++) {

if(i != 0)

printf(" ");

printf("%s", pinyin[ans[i] - '0']);

}

    return 0;

}

17. 卡拉兹(Callatz)猜想已经在15中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:

每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。

输出格式:

每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

6

3 5 6 7 8 11

输出样例:

7 6

https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776

#include <stdio.h>

int main(){

int m=0;

scanf("%d",&m);

int a[m];

int i=0,max=0;

for (i=0;i<m;i++){

scanf("%d",&a[i]);

}

max=a[m-1];

int b[max];

for (i=0;i<max;i++){

b[i]=1;

}

for (i=0;i<m;i++){

int n=a[i];

if (n%2==0){

n/=2;

if (n<=max){

b[n-1]=0;

}

}else{

n=3*n+1;

            n/=2;

            if (n<=max){

b[n-1]=0;

}

}

}

int cnt=0;

for (i=m-1;i>=0;i--){

int n=a[i];

if (b[n-1]){

if (cnt>0){

printf(" ");

}

printf("%d",n);

cnt++;

}

}

return 0;

}

18. 让我们定义dn为:dn=pn+1pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744

#include<stdio.h>

#include<math.h>

int main()

{

    int n;

    scanf("%d",&n);

    int temp=2,count=0;

    int i,j;

    if(n<2)

    {

        printf("0");

        return 0;

    }

    for(i=2;i<=n;i++)

    {

        for(j=2;j<=sqrt(i);j++)

        {

            if(i%j==0)

                break;

        }

        if(j>sqrt(i))

        {

            if(i-temp==2)

             count++;

            temp=i;

        }

    }

    printf("%d",count);

     return 0;

}

19. 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1AN1)变换为(ANMAN1A0A1ANM1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808

#include <stdio.h>

void reverse(int a[], int start, int end){

for(int i=start; i<=(start+end)/2; i++){

int tmp = a[i];

a[i] = a[start+end-i];

a[start+end-i] = tmp;

}

}

int main(){

int n, m;

scanf("%d %d", &n, &m);

m %= n;

int a[n];

for(int i=0; i<n; i++){

scanf("%d", &a[i]);

}

reverse(a, 0, n-m-1);

reverse(a, n-m, n-1);

reverse(a, 0, n-1);

printf("%d", a[0]);

for(int i=1; i<n; i++){

printf(" %d", a[i]);

}

printf("\n");

return 0;

}

20. 给定区间 [231,2^31] 内的 3 个整数 AB 和 C,请判断 A+B 是否大于 C

输入格式:

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 AB 和 C。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952

#include <stdio.h>

int judge(){

long a,b,c;

scanf("%ld %ld %ld",&a,&b,&c);

if ((a + b)>c) return 1;

else return 0;

}

int main(){

int n;

scanf("%d",&n);

int i = 0;

for (i = 1;i <= n;i++){

if (!judge()) printf("Case #%d: false\n",i);

else printf("Case #%d: true\n",i);

}

return 0;

}

21. 令 Pi 表示第 i 个素数。现任给两个正整数 MN≤104,请输出 PM 到 PN 的所有素数。

输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112

#include<stdio.h>

#include<math.h>

int IsPrime(int b);    //判断是否为素数

int main()

{

    int M, N, a = 0, b = 2, count = 0;

    scanf("%d %d", &M, &N);

    while(a < N){

        if(IsPrime(b)){

            a++;    //a用来记录现在是第几个素数

            if(a >= M){

                printf("%d", b);

                count++;    //count用来记录已经输出多少个素数

                if(count % 10 == 0){

                    printf("\n");

                }

                else if(a != N){

                    printf(" ");

                }

            }

        }

        b++;

    }

}

int IsPrime(int b){

    int flag = 1;

    for(int i = 2; i <= sqrt(b); i++){

        if(b % i == 0){

            flag = 0;

            break;

        }

    }

    return flag;

}

22. 正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。

现给定 ADABDB,请编写程序计算 PA+PB

输入格式:

输入在一行中依次给出 ADABDB,中间以空格分隔,其中 0<A,B<109。

输出格式:

在一行中输出 PA+PB 的值。

输入样例 1:

3862767 6 13530293 3

输出样例 1:

399

输入样例 2:

3862767 1 13530293 8

输出样例 2:

0

https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328

#include <stdio.h>

int main(){

    int a,da,b,db,pa=0,pb=0;

    scanf("%d %d %d %d",&a,&da,&b,&db);

    while(a!=0){

        if(a%10==da){

            pa=da+pa*10;

        }

        a=a/10;

    }

    while(b!=0){

        if(b%10==db){

            pb=db+pb*10;

        }

        b=b/10;

    }

    printf("%d",pa+pb);

    return 0;

}

23. 输入两个非负 10 进制整数 A 和 B (≤2301),输出 A+B 的 D (1<D≤10)进制数。

输入格式:

输入在一行中依次给出 3 个整数 AB 和 D

输出格式:

输出 A+B 的 D 进制数。

https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344

#include <stdio.h>

int main(){

int a,b,d,n;

scanf("%d %d %d",&a,&b,&d);

    n = a+b;

    if (n==0){

        printf("0");

        return 0;

    }

int sav_n = n;

int i = 0;

int cnt = 0;

for (i = 0;n > 0;i++){

n /= d;

cnt++;

}

int res[cnt];

// printf("%d\n",cnt);

n = sav_n;

for (i = 0;i < cnt;i++){

res[i] = n % d;

n /= d;

}

for (i = cnt - 1;i >= 0;i--){

printf("%d",res[i]);

}

return 0;

}

24. 请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

输入格式:

输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。

输出格式:

在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

https://pintia.cn/problem-sets/994805260223102976/problems/994805280817135616

#include <stdio.h>

int main()

{

char str[1001],s;         

int a[26]={0};                         

gets(str);

int i=0,max=0;

for(i=0;str[i]!='\0';i++){

if(str[i]>='a'&&str[i]<='z'){

a[str[i]-'a']++;

}                            

if(str[i]>='A'&&str[i]<='Z'){

a[str[i]-'A']++;

}                                 

}

for(i=0;i<26;i++)

{

if(a[i]>max)

{

max=a[i];

s='a'+i;

}

}

printf("%c %d\n",s,max);

    return 0;

}

25. 读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

第 1 行:正整数 n

第 2 行:第 1 个学生的姓名 学号 成绩

第 3 行:第 2 个学生的姓名 学号 成绩

  ... ... ...

第 n+1 行:第 n 个学生的姓名 学号 成绩

其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

3

Joe Math990112 89

Mike CS991301 100

Mary EE990830 95

结尾无空行

输出样例:

Mike CS991301

Joe Math990112

https://pintia.cn/problem-sets/994805260223102976/problems/994805321640296448

# include <stdio.h>

typedef struct sheet_grade{

char name[11];

char num[11];

int grade;

}SHEET;

int main(){

int n=0;

scanf("%d",&n);

SHEET library[n];

int i=0;

for (i=0;i<n;i++){

scanf("%s",&library[i].name);

scanf("%s",&library[i].num);

scanf("%d",&library[i].grade);

}

int max=library[0].grade,min=library[0].grade;

int rec_max=0,rec_min=0;

for (i=1;i<n;i++){

if (max<library[i].grade){

rec_max=i;

max=library[i].grade;

}

if (min>library[i].grade){

rec_min=i;

min=library[i].grade;

}

}

printf("%s %s\n",&library[rec_max].name,&library[rec_max].num);

printf("%s %s\n",&library[rec_min].name,&library[rec_min].num);

}


后记:期末考试题型以22级为例,有选择,填空(读程序写结果),程序题(补程序与设计程序),从数组开始的后面内容为重点,复习时建议侧重后面部分,数组与指针为核心要点。做一点前几年的试卷,放宽心,一切都会好的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值