zoukankan      html  css  js  c++  java
  • c编程练习(陕西科技大学mooc)

    1、投票计数

    有三个候选人:TOM,ROSE,KATE,有20人投票选取一人做组长,编程完成投票计数功能。输出人名和相应的得票数。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define N 32
     4 
     5 int main()
     6 {
     7     enum {TOM, ROSE, KATE};
     8     int tom=0, rose=0, kate=0;
     9     
    10     const char *s[3] = {"TOM", "ROSE", "KATE"};
    11     char ts[N] ="";
    12     
    13     int n=20;
    14     while(n--)
    15     {
    16         gets(ts);
    17         if(!strcmp(ts,s[TOM]))
    18             tom++;
    19         if(!strcmp(ts,s[ROSE]))
    20             rose++;
    21         if(!strcmp(ts,s[KATE]))
    22             kate++;
    23     }
    24     
    25     printf("TOM=%d,ROSE=%d,KATE=%d",tom,rose,kate);
    26     
    27     return 0;
    28 }

     2、拼音读数

    读入一个整数,范围是[-100000,100000],然后,用汉语拼音将这个整数的每一位输出出来。
    如输入1234,则输出:yi  er  san  si  注意,每个字的拼音之间有一个空格
    当遇到负数时,在输出的开头加上“fu”,如-2341输出为:fu  er  san  si  yi

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define N 100
     4 
     5 int main()
     6 {
     7     const char *s[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };        
     8     char t[N] = "";
     9     gets(t);
    10     char *p = t;
    11     if(*p=='-')
    12     {
    13         printf("fu ");
    14         p++;
    15     }
    16     while(*p)
    17     {
    18         printf("%s ", s[*p-'0']);
    19         p++;
    20     }    
    21     return 0;
    22 }

     3、输出魔方阵

    魔方阵就是一个奇数阶方阵,每行、每列和对角线上的数据之和相等。

     1 #include"stdio.h"
     2 #define N 100
     3 int main()
     4 {
     5     int a[N][N] = {0};            
     6     int n;
     7     
     8     while (scanf("%d",&n) && n)    //多组数据,输入0结束
     9     {
    10         int i = 0,j = n / 2 ;        //i j,分别表示数字的行和列
    11         for (int r = 1; r <= n*n; r++)
    12         {            
    13             if (a[i][j] == 0)        //如果等于0表示该位置没有数字
    14             {
    15                 a[i][j] = r;        
    16             }
    17             else //表示该位置已经有数字,于是填写在上一个数字的下方
    18             {
    19                 i = (i + 2) % n;    //%n以保证不会超出界限
    20                 j = j == 0 ? n - 1 : j - 1;    //定为到上一个数字的下方
    21                 a[i][j] = r;    //填写数字
    22             }
    23             i = i==0 ? n - 1 : i - 1;    //定为下一次的位置
    24             j = (j +1) % n;     //%n以保证不会超出界限
    25  
    26         }
    27         for (i = 0; i < n; i++)        //打印二维表
    28         {
    29             for (j = 0; j < n; j++)
    30             {
    31                 printf("%3d", a[i][j]);
    32                 a[i][j] = 0;    //赋值为0保证下一组数据的正确执行
    33             }
    34             printf("
    ");
    35         }
    36     }
    37     return 0;
    38 }

     4、删除字符串中的空格

    输入一个字符串,检查字符串的内容,如果有空格则删除空格,输出最终的字符串

     1 #include <stdio.h> 
     2 void delblank(char *s )
     3 { 
     4     char *p = s, *q = s;
     5     while(*p)
     6     {
     7         if(*p!=' ')
     8             *q++ = *p;
     9         p++;
    10     }
    11     *q = '';
    12 }
    13 
    14 int main()
    15 {  
    16     char str[20] ;
    17     printf("input:
    ");
    18     gets(str);
    19     printf("output:
    ");
    20     puts(str);
    21     delblank(str);
    22     puts(str);
    23     return 0;
    24 }

    5、字符串回文

    输入一个字符串,判断是否是“回文”

     1 #include <stdio.h> 
     2 int mirror(char *s )
     3 {
     4     /* 计算字符串长度
     5     没有传过来*/
     6     int i = 0;
     7     while(s[i]) i++;
     8     /* 判断是否是回文数 */
     9     char *p = s, *q = s+i-1;
    10     while(p<=q)
    11     {
    12         if(*p!=*q)
    13             return 0;
    14         p++, q--;
    15     }
    16     return 1;
    17 }
    18 
    19 int main()
    20 {  
    21     char str[20] ;
    22     printf("input:
    ");
    23     gets(str);
    24     printf("output:
    ");
    25     puts(str);
    26     if(mirror(str))  printf("yes");
    27     else  printf("no");
    28     return 0;
    29 }

    6、识别字符串单词

    识别输入的字符串,每个单词输出一行,例如:输入this is a book则输出:

    this
    is
    a
    book

     1 #include <stdio.h> 
     2 void word(char s[ ] )
     3 { 
     4     char *p = s;
     5     while(*p)
     6     {
     7         if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'){
     8             putchar(*p);
     9             if(!(*(p+1)>='a'&&*(p+1)<='z'||*(p+1)>='A'&&*(p+1)<='Z'))
    10                 putchar('
    ');
    11         }
    12         p++;    
    13     }
    14 }
    15 
    16 int main()
    17 {  
    18     char str[80];
    19     printf("input string:");
    20     gets(str);
    21     word(str);   
    22     return 0;
    23 }

    7、数组的最大最小值

    输入数组,最大的与最后一个元素交换,最小的与第一个元素交换,输出数组

     1 #include <stdio.h> 
     2 void max_min(int array[ ],int n )
     3 { 
     4     int max,min,maxi,mini;
     5     max = min = array[0];
     6     maxi = mini = 0; //下标
     7     for(int i=1; i<n; ++i)
     8     {
     9         if(array[i]>max){
    10             max = array[i];
    11             maxi = i;
    12         }
    13             
    14         if(array[i]<min){
    15             min = array[i];
    16             mini = i;
    17         }            
    18     }
    19     /* 交换 */
    20     int t = array[0];
    21     array[0] = array[mini]; 
    22     array[mini] = t; 
    23     
    24     t = array[n-1];
    25     array[n-1] = array[maxi];
    26     array[maxi] = t;
    27 }
    28 
    29 void output(int array[ ],int n )
    30 {
    31     int *p;
    32     for(p=array; p<array+n; ++p)  printf("%d ",*p);
    33 }
    34 void input(int array[ ],int n )
    35 {
    36     int *p;
    37     for(p=array; p<array+n; ++p)  scanf("%d",p);  
    38 }
    39 
    40 int main()
    41 {  
    42     int number[10];
    43     input(number,10);
    44     max_min(number,10);
    45     output(number,10);
    46     return 0;
    47 }

    8、统计大写字符个数

    统计给定字符串中大写字母的个数

     1 #include <stdio.h> 
     2 void fun ( char *s, int *n )
     3 {
     4     char *p = s;
     5     int i=0;
     6     while(*p)
     7     {
     8         if(*p>='A'&&*p<='Z') i++;
     9         p++;
    10     }
    11     *n = i;
    12 }
    13 int main()
    14 {  
    15     char s[100];   
    16     int upper = 0 ;
    17     printf( "
    Please a string :  " );    
    18     gets( s );
    19     fun( s, &upper);
    20     printf( "
     upper = %d 
    ", upper);
    21     return 0;
    22 }

    9、链表合并

    //结点结构
    struct data 
    { 
        int num; 
        struct data *next;
    };
    struct data *LA,*LB,*LC;

    有两个链表,结点结构如上所示,LA和LB分别保存两个链表的第一个结点的地址,链表中的数据从小到大存放,例如:
    LA中的数据依次是 1 5 7 9 15
    LB中的数据依次是 2 4 8 16

    请把两个链表合并为一个链表,保持数据从小到大存放的状态,LC保存新链表的第一个结点的地址,请编写函数完成相应功能,并设计主函数完成调用测试。

     

     1 #include <stdio.h> 
     2 #include <stdlib.h>
     3 
     4 struct data   
     5 { 
     6     int  num;  
     7     struct data  *next;
     8 };
     9 struct data *LA,*LB,*LC;
    10 typedef struct data *PDATA;
    11 /* makeNode */
    12 PDATA makeNode()
    13 {
    14     PDATA p = (PDATA)malloc(sizeof(struct data));
    15     scanf("%d",&p->num);
    16     p->next = NULL;
    17     return p;
    18 }
    19 /* create */
    20 PDATA creat(int m) 
    21 {
    22     PDATA p1,p2;
    23     p1 = p2 = makeNode();
    24     while(--m)
    25     {        
    26         p2->next = makeNode();//尾插    
    27         p2 = p2->next;    
    28     }
    29     return p1;
    30 }
    31 /* print */
    32 void printlist(PDATA p)
    33 {
    34     while(p){
    35         printf("%d ",p->num);
    36         p= p->next;
    37     }    
    38     printf("
    ");
    39 }
    40 /* mergelist */
    41 PDATA mergelist(PDATA LA,PDATA LB)
    42 {
    43     /* 定义新链表的头、尾指针 */
    44     PDATA head,rear;
    45     if( LA->num < LB->num ){
    46         head = rear = LA;
    47         LA = LA->next;
    48     }
    49     else{
    50         head = rear = LB;        
    51         LB = LB->next;
    52     }
    53     
    54     /* 逐个结点链接到新链表 */
    55     while(LA && LB)
    56     {
    57         if(rear->num <= LB->num && LB->num<=LA->num)
    58         {        
    59             rear->next = LB;//尾插结点
    60             LB = LB->next;
    61         }
    62         else if(rear->num <= LA->num && LA->num<=LB->num)
    63         {    
    64             rear->next = LA;//尾插结点
    65             LA = LA->next;    
    66         }
    67         rear = rear->next;//更新尾结点
    68     }
    69 
    70     if(LA)
    71         rear->next = LA;//尾插剩余结点
    72     if(LB)
    73         rear->next = LB; 
    74     return head;
    75 }
    76 int main()
    77 {
    78     /* 创建链表LA LB */
    79     printf("输入两个链表LA(5个结点)/LB(4个结点)的结点值
    ");
    80     LA =  creat(5);    
    81     LB =  creat(4);
    82     /* 输出链表LA LB */
    83     printf("打印两个链表LA LB
    ");
    84     printlist(LA);
    85     printlist(LB);
    86     /* 合并链表 */
    87     LC = mergelist(LA,LB);
    88     printf("打印合并后的链表 LC
    ");
    89     /* 输出链表LC */
    90     printlist(LC);
    91     return 0;
    92 }
  • 相关阅读:
    C#程序调用cmd执行命令(转)
    命名管道跨进程通信实例2(转)
    C#异步编程的实现方式——ThreadPool线程池
    命名管道跨进程通信实例1(转)
    No_16_0324 Java基础学习第二十三天
    mac osx加入全局启动terminal快捷键
    UVa 164
    Android OpenGL加入光照和材料属性
    51系列小型操作系统精髓 简单实现
    ubuntu下安装tomcat
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11666048.html
Copyright © 2011-2022 走看看