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

写文不易,给小编一个点个关注吧~!
C语言常见题目_第1张图片

你可能感兴趣的:(C语言编程,c语言,指针,循环,结构体,宏定义)