C语言常见题目

简介: C语言常见题目

题目一


ascil码问题

#include "stdio.h"
int main()
{
    char a='H';
    a=(a>='A'&&a<='Z')?(a+32):a;
    printf("%c",a);    
}


总结:C语言唯一一个三目运算符,%c输出格式


题目二


宏定义问题

#include "stdio.h"
#define SUB(a) (a)-(a)
int main()
{
    int a=2,b=3,c=5,d;
    d=SUB(a+b)*c;
    printf("%d\n",d);
}


宏定义只是使用宏定义名字代替一个字符串,是一种机械的替换,所以宏替换后的语句为


d=SUB(a+b)*c; 为 d=(a+b)-(a+b)*c;


题目三


if问题

#include "stdio.h"
int main()
{
    int x;
    scanf("%d",&x);
    if(x<=3);
    else if(x!=10)
        printf("%d\n",x);
}


关键:if后面有一个;说明如果条件如果成立就直接退出了,else也不会执行。


题目四


关于函数指针变量问题

#include "stdio.h"
int add(int a,int b){
    return (a+b);
}
int main(){
    int k,(*f)(),a=5,b=10; //int (*f)()为一个函数指针变量,返回值为整数
    f=add;
    k=add(a,b);
    k=(*f)(a,b);
    k=f(a,b);
    k=*f(a,b;     //有问题
    printf("%d",k);
}


关键:int (*f)()为一个函数指针变量,返回值为整形,f为一个指针变量,指向一个已经定义好的函数,在调用该函数的时候需要把参数写在对应的小括号里面,所以k=*f(a,b)调用错误。


题目五

#include "stdio.h"
int main(){
    char a='5',b;
    a++;
    printf("%d,%d\n",a-'5'+255,b=a-'5');
}


关键:ascii码的转换结合%d输出


题目六


双重循环

#include "stdio.h"
int main()
{
    char a[4][4]={' '};
    int i,j;
    for(i=0;i<4;i++){
        a[i][0]=a[i][3]="#";
        for(j=1;j<3;j++){
            a[0][j]=a[3][j]='#';
            if((i!=0)&&(i!=3))
                a[i][j]='o';
        }
    }
    for(i=1;i<3;i++){
        for(j=0;j<4;j++)
            printf("%2c",a[i][j]);
        printf("\n");
    }
}

关键画图,画一个4*4的矩阵,一步一步的画;双重循环,当内部全部循环结束后,外部才循环一轮


题目七


若有定义

typedef int *T[10];
T a;


则以下选项与上述中a的类型完全相同的是()

int *a[10];

关键:题目确实有难度,有知道原因的小伙伴吗,麻烦在评论区留个言鸭


题目八


关于地址的运用


#include "stdio.h"
void sp(int* a)
{
    int b=2;
    a=&b;
    *a=*a*2;
    printf("%d,",*a);
}
int main(){
    int k=3,*p=&k;
    sp(p);
    printf("%d,%d\n",k,*p);
}


关键:在函数里面,函数a得到了b的地址,所以并没有改变k

答案:4,3,3


题目九


二级指针,有点烧脑,但是还是有逻辑关系,解析见注释

#include "stdio.h"
int k=7;
void f(int** s)
{   //传进来的r(i的地址的地址)
    int* t=&k;  //t为k的地址     *t=7
    *s=t;       //把k的地址赋给*s,即*s为k的地址,则**s等于7
    printf("%d,%d,%d,",k,*t,**s);  //k=7
}
int main(){
    int i=3,* p=&i,**r=&p;
    f(r);
    printf("%d,%d,%d\n",i,*p,**r);  //i=3,*r为7的地址,则**r等于7,p=*s,*s=t,*t=7
}


答案:7,7,7,3,7,7


题目十


行指针的运用


#include "stdio.h"
int main(){
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4]=a,i,j,k=0;
    for(i=0;i<3;i++)
        for(j=0;j<2;j++)
            k=k+*(*(p+i)+j);
    printf("%d\n",k);
}

关键:(*p)[4]表示一个能存放四个整形元素首地址的一维数组,所以累加的值是 1,3,9,11,17,19

相关文章
|
23天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
23天前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
21 1
|
6月前
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
51 1
|
6月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
36 1
|
1天前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
6 1
|
23天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
23天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
23天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
23天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
23天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)